DNS
Автор: SHARK в D, Основные сетевые протоколы | Блог Связиста | Четверг 19 ноября 2009Служба имен доменов DNS
Хотя программы теоретически могут обращаться к хостам, почтовым ящикам и другим ресурсам по их сетевым адресам (например, IP), пользователям запоминать их тяжело. Кроме того, отправка электронной почты на адрес Tanya® 128.111.24.41 будет означать, что в случае переезда сервера таниного провайдера или организации на новое место с новым IP-адресом придется изменить ее адрес e-mail. Для отделения имен машин от их адресов было решено использовать текстовые ASCII-имена. Поэтому танин адрес более привычно выглядит в таком виде: Tanya@art.ucsb.edu. Тем не менее, сеть сама по себе понимает только численные адреса, поэтому нужен механизм преобразования ASCII-строк в сетевые адреса. В следующих разделах мы изучим, как производится это отображение в Интернете.
Когда-то давно в сети ARPANET соответствие между текстовыми и двоичными адресами просто записывалось в файле hosts.txt , в котором перечислялись все хосты и их IP-адреса. Каждую ночь все хосты получали этот файл с сайта, на котором он хранился. В сети, состоящей из нескольких сотен больших машин, работающих под управлением системы с разделением времени, такой подход работал вполне приемлемо.
Но когда к сети подключились тысячи рабочих станций, всем стало ясно, что этот способ не сможет работать вечно. Во-первых, размер файла рано или поздно стал бы слишком большим. Однако, что еще важнее, если управление именами хостов не осуществлять централизованно, неизбежно возникновение конфликтов имен. В то же время, представить себе централизованное управление именами всех хостов гигантской международной сети довольно сложно. Для разрешения всех этих проблем и была разработана служба имен доменов (DNS, Domain Name System).
Суть системы DNS заключается в иерархической схеме имен, основанной на доменах, и распределенной базе данных, реализующей эту схему имен. В первую очередь эта система используется для преобразования имен хостов и пунктов назначения электронной почты в IP-адреса, но также может использоваться и в других целях. Определение системы DNS дано в RFC 1034 и 1035.
В общих чертах система DNS применяется следующим образом. Для преобразования имени в IP-адрес прикладная программа обращается к библиотечной процедуре, называющейся распознавателем, передавая ей имя в качестве параметра. Распознаватель посылает UDP-пакет локальному DNS-серверу, который ищет имя в базе данных и возвращает соответствующий IP-адрес распознавателю, который, в свою очередь, передает этот адрес вызвавшей его прикладной программе. Имея IP-адрес, программа может установить TCP-соединение с адресатом или послать ему UDP-пакеты.
Пространство имен DNS
Управление большим и постоянно изменяющимся набором имен представляет собой нетривиальную задачу. В почтовой системе на письмах требуется указывать (явно или неявно) страну, штат или область, город, улицу, номер дома, квартиру и фамилию получателя. Благодаря использованию такой иерархической схемы не возникает путаницы между Марвином Андерсоном, живущим на Мейн-стрит в Уайт Плейнс, штат Нью-Йорк, и Марвином Андерсоном с Мейн-стрит в Остине, штат Техас. Система DNS работает аналогично.
Интернет концептуально разделен на 200 доменов верхнего уровня. Доменами называют в Интернете множество хостов, объединенное в логическую группу. Каждый домен верхнего уровня подразделяется на поддомены, которые, в свою очередь, также могут состоять из других доменов, и т. д. Все эти домены можно рассматривать в виде дерева. Листьями дерева являются домены, не разделяющиеся на поддомены (но состоящие из хостов, конечно). Такой конечный домен может состоять из одного хоста или может представлять компанию и содержать в себе тысячи хостов.
Домены верхнего уровня разделяются на две группы: родовые домены и домены государств. К родовым относятся домены com (commercial - коммерческие организации), edu (educational - учебные заведения), gov (government - федеральное правительство США), int (international - определенные международные организации), mil (military - вооруженные силы США), net (network - сетевые операторы связи) и org (некоммерческие организации). За каждым государством в соответствии с международным стандартом ISO 3166 закреплен один домен государства.
В ноябре 2000 года ICANN было утверждено 4 новых родовых имени доменов верхнего уровня, а именно: biz (бизнес), info (информация), пате (имена людей) и pro (специалисты, такие как доктора и адвокаты). Кроме того, по просьбе соответствующих отраслевых организаций были введены еще три специализированных имени доменов верхнего уровня: aero (аэрокосмическая промышленность), coop (кооперативы) и museum (музеи). В будущем появятся и другие домены верхнего уровня.
Между прочим, по мере коммерциализации Интернета появляется все больше спорных вопросов. Взять хотя бы домен pro. Он предназначен для сертифицированных специалистов. Но кто является специалистом, а кто нет? Кем должны быть эти специалисты сертифицированы? Понятно, что доктора и адвокаты -это профессионалы, спору нет. А что делать со свободными художниками, учителями музыки, заклинателями, водопроводчиками, парикмахерами, мусорщиками, рисователями татуировок, наемниками и проститутками? Имеют ли право квалифицированные представители всех этих и многих других профессий получать домены pro? Если да, то кто выдаст сертификат каждому из этих специалистов?
В принципе, получить домен второго уровня типа name-of-company.com несложно. Надо лишь проверить, не занято ли желаемое имя домена кем-то другим и не является ли оно чьей-нибудь торговой маркой. Для этого надо зайти на сайт регистрационного бюро верхнего уровня (в данном случае сот). Если все в порядке, заказчик регистрируется и за небольшую ежегодную абонентскую плату получает домен второго уровня. На сегодняшний день в качестве имен поддоменов сот уже используются практически все общеупотребительные английские слова. Попробуйте набрать какое-нибудь слово, касающееся домашнего хозяйства, животных, растений, частей тела и т. д. Вряд ли ошибетесь.
Имя каждого домена, подобно полному пути к файлу в файловой системе, состоит из пути от этого домена до (безымянной) вершины дерева. Компоненты пути разделяются точками. Так, домен технического отдела корпорации Sun Microsystems может выглядеть как eng.sun.com ,а не так, как это принято в стиле UNIX (/com/sun/eng). Следует отметить, что eng.sun.com не конфликтует с потенциальным использованием имени eng в домене eng.yale.edu, где он может обозначать факультет английского языка Йельского университета.
Имена доменов могут быть абсолютными и относительными. Абсолютное имя домена всегда оканчивается точкой (например, eng.sun.com), тогда как относительное имя – нет. Для того чтобы можно было единственным образом определить истинные значения относительных имен, они должны интерпретироваться в некотором контексте. В любом случае именованный домен означает определенный узел дерева и все узлы под ним.
Имена доменов нечувствительны к изменению регистра символов. Так, например, edu и EDU означают одно и то же. Длина имен компонентов может достигать 63 символов, а длина полного пути не должна превосходить 255 символов.
В принципе, новые домены могут добавляться в дерево двумя разными путями. Например, cs.yale.edu можно без проблем поместить в домен us под именем cs.yale.ct.us .На практике, однако, почти все организации в США помещаются под родовыми доменами, тогда как почти все организации за пределами Соединенных Штатов располагаются под доменами их государств. Не существует каких-либо правил, запрещающих регистрацию под двумя доменами верхнего уровня, однако использует эту возможность лишь небольшое число организаций (за исключением интернациональных, например, sony.com и sony.nl .
Каждый домен управляет доступом к доменам, расположенным под ним. Например, в Японии домены ac.jp и co.jp соответствуют американским доменам edu и сот. В Голландии подобное различие не используется, и все домены организаций помещаются прямо под доменом nl.
Структура доменов отражает не физическое строение сети, а логическое разделение между организациями и их внутренними подразделениями. Так, если факультеты компьютерных наук и электротехники располагаются в одном здании и пользуются одной общей локальной сетью, они, тем не менее, могут иметь различные домены. И наоборот, если, скажем, факультет компьютерных наук располагается в двух различных корпусах университета с различными локальными сетями, логически все хосты обоих зданий обычно принадлежат к одному и тому же домену.
Записи ресурсов
У каждого домена, независимо от того, является ли он одиноким хостом или доменом верхнего уровня, может быть набор ассоциированных с ним записей ресурсов. Для одинокого хоста запись ресурсов чаще всего представляет собой просто его IP-адрес, но существует также много других записей ресурсов. Когда распознаватель передает имя домена DNS-серверу, то, что он получает обратно, представляет собой записи ресурсов, ассоциированные с его именем. Таким образом, истинное назначение системы DNS заключается в преобразовании доменных имен в записи ресурсов.
Запись ресурса состоит из пяти частей. Хотя для эффективности они часто перекодируются в двоичную форму, в большинстве описаний записи представляются в виде ASCII-текста, по одной строке на запись ресурса. Мы будем использовать следующий формат:
Domain_name Time_to_live Class Type Value
Поле Domain_name (имя домена) обозначает домен, к которому относится текущая запись. Обычно для каждого домена существует несколько записей ресурсов, и каждая копия базы данных хранит информацию о нескольких доменах. Поле имени домена является первичным ключом поиска, используемым для выполнения запросов. Порядок записей в базе данных значения не имеет. В ответ на запрос о домене возвращаются все удовлетворяющие запросу записи требуемого класса.
Поле Time_to_live (время жизни) указывает, насколько стабильно состояние записи. Редко меняющимся данным присваивается высокое значение этого поля, например, 86 400 (число секунд в сутках). Непостоянная информация помечается небольшим значением, например, 60 (1 минута).
Третьим полем каждой записи является поле Class (класс). Для информации Интернета значение этого поля всегда равно IN. Для прочей информации применяются другие коды, однако на практике они встречаются редко.
Поле Туре (тип) означает тип записи. Наиболее важные типы записей перечислены в табл.
| Тип | Смысл | Значение |
| SOA | Начальная запись зоны | Параметры для этой зоны |
| А | IP-адрес хоста | 32-разрядное целое число |
| MX | Обмен почтой | Приоритет, с которым домен желает принимать электронную почту |
| NS | Сервер имен | Имя сервера для этого домена |
| CNAME | Каноническое имя | Имя домена |
| PTR | Указатель | Псевдоним IP-адреса |
| HINFO | Описание хоста | Описание центрального процессора и ОС в виде ASCII-текста |
| тхт | Текст | Не интерпретируемый ASCII-текст |
Запись SOA (Start Of Authority – начальная точка полномочий) сообщает имя первичного источника информации о зоне сервера имен (описанного ниже), адрес электронной почты его администратора, уникальный порядковый номер, различные флаги и тайм-ауты.
Самой важной является запись A (Address - адрес). Она содержит 32-разрядный IP-адрес хоста. У каждого хоста в Интернете должен быть по меньшей мере один IP-адрес, чтобы другие машины могли с ним общаться. На некоторых хостах может быть одновременно установлено несколько сетевых соединений. В этом случае им требуется по одной записи типа А для каждого сетевого соединения (для каждого IP-адреса). DNS можно настроить на циклический перебор этих записей, чтобы в ответ на первый запрос возвращалась первая запись, в ответ на второй запрос – вторая запись, и т. д.
Следующей по важности является запись MX. В ней указывается имя хоста, готового принимать почту для указанного домена. Дело в том, что не каждая машина может заниматься приемом почты. Если кто-нибудь хочет послать письмо на адрес, например,bl@microsoft.com, то отправляющему хосту нужно будет вначале найти почтовый сервер на microsoft.com. Запись MX может помочь в этих поисках.
Записи NS содержат информацию о серверах имен. Например, в каждой базе данных DNS содержится NS-запись для каждого домена верхнего уровня, что позволяет пересылать электронную почту на удаленные участки дерева имен.
Записи CNAME позволяют создавать псевдонимы. Представим себе, что человек, знакомый в общих чертах с формированием имен в Интернете, хочет послать сообщение человеку с регистрационным именем paul на отделении компьютерных наук Массачусетского технологического института (M.I.T.). Он может попытаться угадать нужный ему адрес, составив строку paul@cs.mit.edu. Однако этот адрес работать не будет, так как домен отделения компьютерных наук Массачусетского технологического института на самом деле называется ks.mit.edu. Таким образом, для удобства тех, кто этого не знает, M.I.T. может создать запись CNAME, позволяющую обращаться к нужному домену по обоим именам. Такая запись будет иметь следующий вид: cs.mit.edu 86400 IN CNME 1cs.mit.edu
Как и CNAME, запись PTR указывает на другое имя. Однако в отличие от записи CNAME, являющейся, по сути, макроопределением, PTR представляет собой регулярный тип данных DNS, интерпретация которого зависит от контекста. На практике запись PTR почти всегда используется для ассоциации имени с IP-адресом, что позволяет по IP-адресу находить имя соответствующей машины. Это называется обратным поиском.
Запись HINFO позволяет определять тип машины и операционной системы, которой соответствует домен. Наконец, TXT-записи позволяют доменам идентифицировать себя произвольным образом. Оба эти типа записей разработаны для удобства пользователей. Ни один из них не является обязательным, поэтому рассчитывать на их наличие не следует, особенно при обработке записей программами (тем более что программы практически невозможно научить обрабатывать эти текстовые данные).
Наконец, последнее поле записи ресурса – это поле Value (значение). Это поле может быть числом, именем домена или текстовой ASCII-строкой. Смысл поля зависит от типа записи.