DNS Domain Name System
Определение DNS (англ. Domain Name System — система доменных имён) — компьютерная распределённая система для получения информации о доменах. Чаще всего используется для получения IP-адреса по имени хоста (компьютера или устройства), получения информации о маршрутизации почты, обслуживающих узлах для протоколов в домене (SRV-запись).
Основы DNS Пространство имен DNS имеет иерархическую структуру, которая внешне напоминает файловую систему Unix. На рисунке 14. 1 показана иерархическая организация DNS. Каждый узел (кружочки на рисунке 14. 1) имеет метку длиной до 63 символов. Корень дерева это специальный узел без метки. Метки могут содержать заглавные буквы или маленькие. Имя домена (domain name) для любого узла в дереве - это последовательность меток, которая начинается с узла выступающего в роли корня, при этом метки разделяются точками. (Здесь видно отличие от файловой системы Unix, где полный путь всегда начинается с вершины (корня) и опускается вниз по дереву. ) Каждый узел дерева должен иметь уникальное имя домена, однако одинаковые метки могут быть использованы в различных точках дерева. Имя домена, которое заканчивается точкой, называется абсолютным именем домена (absolute domain name) или полным именем домена (FQDN - fully qualified domain name). Например, sun. tuc. noao. edu. . Если имя домена не заканчивается на точку, подразумевается, что имя должно быть завершено. Как будет закончено имя, зависит от используемого программного обеспечения DNS. Если незаконченное имя состоит из двух или более меток, его можно воспринимать как законченное или полное; иначе справа от имени должен быть добавлен локальный суффикс. Например, имя sun может быть завершено локальным суффиксом. tuc. noao. edu. . Домены верхнего уровня поделены на три зоны: arpa это специальный домен, используемый для сопоставления адрес - имя (раздел "Запросы указателя" этой главы). Семь 3 -символьных доменов называются общими (generic) доменами. В некоторых публикациях они называются организационными (organizational) доменами. Все 2 -символьные домены, основанные на кодах стран, можно найти в ISO 3166. Они называются доменами стран (country), или географическими (geographical) доменами.
Формат сообщения DNS Для DNS запроса и для DNS отклика используется одинаковый формат. На рисунке 14. 3 показан общий формат DNS сообщения. Сообщение содержит фиксированный 12 -байтный заголовок, за которым следуют четыре поля переменной длины. Значение в поле идентификации (identification) устанавливается клиентом и возвращается сервером. Это поле позволяет клиенту определить, на какой запрос пришел отклик. 16 -битовое поле флагов (flags) поделено на несколько частей, как показано на рисунке 14. 4. Рисунок 14. 4 Поле флагов (flags) в заголовке DNS. Описание каждого поля мы начнем с крайне левых битов. QR (тип сообщения), 1 -битовое поле: 0 обозначает - запрос, 1 обозначает - отклик. opcode (код операции), 4 -битовое поле. Обычное значение 0 (стандартный запрос). Другие значения - это 1 (инверсный запрос) и 2 (запрос статуса сервера). AA - 1 -битовый флаг, который означает "авторитетный ответ" (authoritative answer). Сервер DNS имеет полномочия для этого домена в разделе вопросов. TC - 1 -битовое поле, которое означает "обрезано" (truncated). В случае UDP это означает, что полный размер отклика превысил 512 байт, однако были возвращены только первые 512 байт отклика. RD - 1 -битовое поле, которое означает "требуется рекурсия" (recursion desired). Бит может быть установлен в запросе и затем возвращен в отклике. Этот флаг требует от DNS сервера обработать этот запрос самому (т. е. сервер должен сам определить требуемый IP адрес, а не возвращать адрес другого DNS сервера), что называется рекурсивным запросом (recursive query). Если этот бит не установлен и запрашиваемый сервер DNS не имеет авторитетного ответа, запрашиваемый сервер возвратит список других серверов DNS, к которым необходимо обратиться, чтобы получить ответ. Это называется повторяющимся запросом (iterative query). Мы рассмотрим примеры обоих типов запросов в следующих примерах. RA - 1 -битовое поле, которое означает "рекурсия возможна" (recursion available). Этот бит устанавливается в 1 в отклике, если сервер поддерживает рекурсию. Мы увидим в наших примерах, что большинство серверов DNS поддерживают рекурсию, за исключением нескольких корневых серверов (коневые сервера не в состоянии обрабатывать рекурсивные запросы из-за своей загруженности). Это 3 -битовое поле должно быть равно 0. rcode это 4 -битовое поле кода возврата. Обычные значения: 0 (нет ошибок) и 3 (ошибка имени). Ошибка имени возвращается только от полномочного сервера DNS и означает, что имя домена, указанного в запросе, не существует. Следующие четыре 16 -битных поля указывают на количество пунктов в четырех полях переменной длины, которые завершают запись. В запросе количество вопросов (number of questions) обычно равно 1, а остальные три счетчика равны 0. В отклике количество ответов (number of answers) по меньшей мере равно 1, а оставшиеся два счетчика могут быть как нулевыми, так и ненулевыми.
Давайте рассмотрим один пример, который описывает несколько функций DNS, о которых мы рассказали раньше. Мы запустили клиента Rlogin, подсоединившись к Rlogin серверу в каком-то удаленном домене. На рисунке 14. 16 показан обмен пакетами. Рисунок 14. 16 Обмен пакетами при старте Rlogin клиента и сервера. Было осуществлено 11 шагов, при этом заранее никакой информации на клиенте или сервере кэшировано не было: Клиент стартует и вызывает свою функцию разборщика, чтобы конвертировать имя хоста, которое мы ввели вместо IP адреса. Запрос типа A отправляется на корневой сервер. Ответ от корневого сервера содержит DNS сервера для домена в котором находится Rlogin сервер. Разборщик клиента повторно отправляет запрос типа A на DNS сервер. Этот запрос обычно имеет установленный флаг "рекурсия необходима". Приходит отклик с IP адресом хоста. Клиент Rlogin устанавливает TCP соединение с сервером Rlogin. (В главе 18 этот процесс описывается более подробно. ) TCP модули клиента и сервера обмениваются друг с другом тремя пакетами. Сервер Rlogin принимает соединение от клиента и вызывает свой разборщик, чтобы получить имя хоста клиента по IP адресу, который сервер получил от своего TCP. Это PTR запрос, выданный на корневой DNS сервер. Может быть, это не тот корневой сервер, к которому обратился клиент в шаге 1. Отклик корневого сервера содержит имя DNS сервера домена in-addr. arpa клиента. Разборщик сервера повторно отправляет PTR запрос к DNS серверу клиента. PTR отклик содержит FQDN хоста клиента. Разборщик сервера отправляет запрос типа A к DNS серверу клиента, спрашивая IP адрес, соответствующий имени, возвращенному в предыдущем шаге. Это может быть сделано автоматически с использованием функции сервера gethostbyaddr, как мы описали в разделе "Запросы указателя" этой главы, или сервер Rlogin осуществляет этот шаг самостоятельно. Также, DNS сервер клиента часто тот же самый, что и DNS сервер клиента in-addr. arpa, однако это необязательно. Отклик от DNS сервера клиента содержит запись A для хоста клиента. Сервер Rlogin сравнивает запись A с IP адресом клиента, потребовавшего открыть TCP соединение. Кэширование может уменьшить количество пакетов, которыми произошел обмен в этом примере.
DNS обладает следующими характеристиками: Распределённость администрирования. Ответственность за разные части иерархической структуры несут разные люди или организации. Распределённость хранения информации. Каждый узел сети в обязательном порядке должен хранить только те данные, которые входят в его зону ответственности и (возможно) адреса корневых DNSсерверов. Кеширование информации. Узел может хранить некоторое количество данных не из своей зоны ответственности для уменьшения нагрузки на сеть. Иерархическая структура, в которой все узлы объединены в дерево, и каждый узел может или самостоятельно определять работу нижестоящих узлов, или делегировать (передавать) их другим узлам. Резервирование. За хранение и обслуживание своих узлов (зон) отвечают (обычно) несколько серверов, разделённые как физически, так и логически, что обеспечивает сохранность данных и продолжение работы даже в случае сбоя одного из узлов. DNS важна для работы Интернета, так как для соединения с узлом необходима информация о его IPадресе, а для людей проще запоминать буквенные (обычно осмысленные) адреса, чем последовательность цифр IP-адреса. В некоторых случаях это позволяет использовать виртуальные серверы, например, HTTP-серверы, различая их по имени запроса. Первоначально преобразование между доменными и IP-адресами производилось с использованием специального текстового файла hosts, который составлялся централизованно и автоматически рассылался на каждую из машин в своей локальной сети. С ростом Сети возникла необходимость в эффективном, автоматизированном механизме, которым и стала DNS была разработана Полом Мокапетрисом в 1983 году; оригинальное описание механизмов работы содержится в RFC 882 и RFC 883. В 1987 публикация RFC 1034 и RFC 1035 изменила спецификацию DNS и отменила RFC 882, RFC 883 и RFC 973 как устаревшие.
Издание "Business Insider" в сотрудничестве с "DN Journal" провели собственное исследование и опубликовали рейтинг самых дорогостоящих доменных имен в мире, проданных за всю историю существования сети Интернет. В рейтинг вошли только официальные сделки, заключенные с 2003 года, а два доменных имени (Hotels. com и Business. com) вошли туда бонусом. Основной целью приобретения таких доменных имен стало привлечение сверхтрафика, поэтому самыми дорогостоящими стали имена из области интима и азартных игр: Sex. com - продан в 2010 году за 13 млн. долларов; Hotels. com - продан в 2001 году за 11 млн. долларов; Fund. com - продан в 2008 году за 9, 99 млн. долларов; Porn. com - продан в 2007 году за 9, 5 млн. долларов; Diamond. com - продан в 2006 году за 7, 5 млн. долларов; Business. com - продан в 1999 году за 7, 5 млн. долларов; Slots. com - продан в 2010 году за 5, 5 млн. долларов; Toys. com - продан в 2009 году за 5, 1 млн. долларов; Clothes. com - продан в 2008 году за 4, 9 млн. долларов; Vodka. com - продан в 2006 году за 3 млн. долларов; Candy. com - продан в 2009 году за 3 млн. долларов; Shopping. de - продан в 2008 году за 2, 85 млн. долларов; Credit. Cards. com - продан в 2004 году за 2, 75 млн. долларов; Social. com - продан в 2011 году за 2, 6 млн. долларов; Investing. com - продан в 2012 году за 2, 45 млн. долларов; Computer. com - продан в 2007 году за 2, 1 млн. долларов; Seniors. com - продан в 2007 году за 1, 8 млн. долларов; Fly. com - продан в 2009 году за 1, 76 млн. долларов; Dating. com - продан в 2010 году за 1, 75 млн. долларов; Auction. com - продан в 2009 году за 1, 7 млн. долларов; Data. Recovery. com - продан в 2008 году за 1, 659 млн. долларов; Ticket. com - продан в 2009 году за 1, 525 млн. долларов; Tandberg. com - продан в 2006 году за 1, 5 млн. долларов; Russia. com - продан в 2009 году за 1, 5 млн. долларов; Cameras. com - в 2006 году за 1, 5 млн. долларов.