7.1. Служба имен доменов DNS
Хотя программы теоретически могут обращаться к веб-страницам, почтовым ящикам и другим ресурсам по сетевым адресам компьютеров (например, IP), на которых хранится данная информация, пользователям тяжело запоминать такие адреса. Кроме того, размещение веб-страницы компании по адресу 128.111.24.41 будет означать, что в случае переезда сервера компании на новую машину новый IP будет необходимо сообщить всем заинтересованным лицам. Для отделения имен машин от их адресов было решено использовать понятные имена высокого уровня. Поэтому обратиться к веб-серверу компании можно по адресу www.cs.washington.edu. Тем не менее, так как сеть сама по себе понимает только числовые адреса, нужен механизм преобразования имен в сетевые адреса. В следующих разделах мы изучим, как производится это отображение в Интернете.
Когда-то давно во времена сети ARPANET соответствие между текстовыми и числовыми адресами просто записывалось в файле hosts.txt, в котором перечислялись все имена компьютеров и их IP-адреса. Каждую ночь все хосты получали этот файл с сайта, на котором он хранился. В сети, состоящей из нескольких сотен больших машин, работающих под управлением системы с разделением времени, такой подход оправдывал себя.
Однако еще за долго до того, как к сети были подключены миллионы компьютеров, всем стало ясно, что этот способ не сможет работать вечно. Во-первых, размер файла рано или поздно стал бы слишком большим. Однако, что еще важнее, если управление именами хостов не осуществлять централизованно, неизбежно возникновение конфликтов имен. В то же время представить себе централизованное управление именами всех хостов гигантской международной сети довольно сложно. Для разрешения всех этих проблем в 1983 году и была разработана служба имен доменов (DNS, Domain Name System). С тех пор она стала важнейшей частью Интернета.
Суть системы DNS заключается в иерархической схеме имен, основанной на доменах, и распределенной базе данных, реализующей эту схему имен. В первую очередь эта система используется для преобразования имен хостов в IP-адреса, но также может использоваться и в иных целях. Определение системы DNS дано в RFC 1034, 1035, 2181 и далее разработано во многих других.
В общих чертах система DNS применяется следующим образом. Для преобразования имени в IP-адрес прикладная программа обращается к библиотечной процедуре, называющейся распознавателем (resolver), передавая ей имя в качестве параметра. Мы видели пример распознавателя gethostbyname в листинге 6.1. Распознаватель посылает запрос, содержащий имя, локальному DNS-серверу, который ищет имя и возвращает соответствующий IP-адрес распознавателю, который, в свою очередь, передает этот адрес вызвавшей его прикладной программе. Запрос и ответ передаются как UDP-пакеты. Имея IP-адрес, программа может установить TCP-соединение с адресатом или послать ему UDP-пакеты.
7.1.1. Пространство имен DNS
Управление большим и постоянно изменяющимся набором имен представляет собой нетривиальную задачу. В почтовой системе на письмах требуется указывать (явно или неявно) страну, штат или область, город, улицу, номер дома, квартиру и фамилию получателя. Благодаря использованию такой иерархической схемы не возникает путаницы между Марвином Андерсоном, живущим на Мейн-стрит в Уайт-Плейнс, штат Нью-Йорк, и Марвином Андерсоном с Мейн-стрит в Остине, штат Техас. Система DNS работает аналогично.
Для Интернета основа иерархии именования разработана организацией под названием ICANN (Internet Corporation for Assigned Names and Numbers — интернет-корпорация по присвоению имен и адресов). ICANN была создана для этих целей в 1998 году, так как Интернет развился во всемирный экономический концерн. Интернет концептуально разделен на более чем 250 доменов верхнего уровня (top-level domains). Доменами называют в Интернете множество хостов, объединенных в логическую группу. Каждый домен верхнего уровня подразделяется на поддомены (subdomains), которые, в свою очередь, также могут состоять из других доменов и т. д. Все эти домены можно рассматривать в виде дерева, показанного на рис. 7.1. Листьями дерева являются домены, не разделяющиеся на поддомены (но состоящие из хостов, конечно). Такой конечный домен может состоять из одного хоста или может представлять компанию и содержать в себе тысячи хостов.
Рис. 7.1. Часть доменного пространства имен Интернета
Домены верхнего уровня разделяются на две группы: родовые домены и домены государств. К родовым относятся домены, перечисленные в табл 7.1, включая оригинальные домены, созданные 1980-х годах, и новые, введенные ICANN. В будущем будут добавляться новые базовые домены высшего уровня.
Таблица 7.1. Родовые домены верхнего уровня
Домен
Использование
Дата основания
Ограниченный?
com
Коммерческие цели
1985
Нет
edu
Образовательные учреждения
1985
Да
gov
Правительство
1985
Да
int
Международные организации
1985
Да
mil
Военные
1985
Да
net
Сетевые провайдеры
1985
Нет
org
Некоммерческие организации
1985
Нет
aero
Авиатранспорт
2001
Да
biz
Бизнес
2001
Нет
coop
Кооперативы
2001
Да
info
Информация
2002
Нет
museum
Музеи
2002
Да
name
Люди
2002
Нет
pro
Профессионалы
2002
Да
cat
Каталония
2005
Да
jobs
Занятость
2005
Да
mobi
Мобильные устройства
2005
Да
tel
Контактная информация
2005
Да
travel
Индустрия путешествий
2005
Да
xxx
Секс-индустрия
2010
Нет
За каждым государством в соответствии с международным стандартом ISO 3166 закреплен один домен государства. Интернационализированные доменные имена стран, в которых используется алфавит, отличный от латинского, были введены в 2010 году. Эти домены позволяют именовать хосты, используя арабские, кириллические, китайские и другие письменности.
Зарезервировать домен второго уровня, такой как имя_компании.сот, просто. Домены высшего уровня управляются регистраторами (registrars), назначенными ICANN. Для того чтобы получить имя, нужно просто обратиться к соответствующему регистратору (в данном случае com) и проверить, доступно ли желаемое имя и не является ли оно чьей-либо торговой маркой. Если все в порядке, заказчик регистрируется и за небольшую ежегодную абонентскую плату получает домен второго уровня.
Однако по мере коммерциализации и интернационализации Интернета появляется все больше спорных вопросов, особенно в отношении именования доменов. Эти споры захватывают и саму ICANN. Так, например, создание домена ххх заняло несколько лет и повлекло несколько судебных разбирательств. Размещение порно-контента на отдельном домене — это хорошо или плохо? (Некоторые и вовсе не хотели бы видеть в Интернете сайты с порнографическим содержанием, другие хотели бы разместить их все на один домен, чтобы было легче заблокировать их при помощи программ родительского контроля.) Некоторые домены являются самоорганизующимися, на других существуют ограничения и не всякий может получить имя (как показано в табл. 7.1). Но какие ограничения уместны? Взять хотя бы домен pro. Он предназначен для квалифицированных специалистов. Но кто является специалистом, а кто нет? Понятно, что доктора и адвокаты — это профессионалы, спору нет. А что делать со свободными фотографами, учителями музыки, заклинателями, водопроводчиками, парикмахерами, мусорщиками, татуировщиками, наемниками и проститутками? Имеют ли право квалифицированные представители всех этих и многих других профессий получать домены pro? Кто должен это определять?