Для начала давайте вспомним, что протоколы обмена даннымиэто некоторые стандарты, определяющие, каким образом компьютеры должны воспринимать и преобразовывать числа, представляющие собой передаваемые данные. Например, в определении протокола описано, какие части принятого (или переданного) пакета данных являются служебной информацией, а какие собственно полезными данными. Для успешного обмена информацией между собой компьютеры должны использовать совместимые протоколы, если сильно упростить ситуацию, то можно сказать, что компьютеры должны использовать один и тот же протокол.
Уместна аналогия с языками общения людей. Два человека лучше понимают друг друга в разговоре если используют язык, известный им обоим. Занятно, что это не обязательно один язык. Протоколы обмена данными имеют некоторые заметные отличия от живых языков, например, в них не всегда встречаются глаголы, но представление о протоколе передачи данных как о языке вполне информативно.
Протокол IP, входящий в состав группы TCP/IP, определяет адресацию сетевых узлов в Интернете и задает правила доставки пакетов данных от узла к узлу. Часть, обозначаемая TCP, отвечает за установление и работу сеанса связи, то есть некоторого «разговора», в рамках которого может быть передано и, что важно, получено большое количество пакетов. Числа, составляющие IP-адрес, определяют не только узел Интернета, но и сеть, к которой тот принадлежит (ведь Интернетэто сеть сетей).
По мере роста количества пользователей компьютерных сетей выяснилось, что числа вообще привычны лишь небольшой части этих пользователей. Поэтому неудивительно, что чисто человеческие трудности с практическим использованием чисел, определяющих адреса в Интернете, возникли довольно давноеще в начале 80-х годов XX века.
Числа весьма отличаются от привычных нам слов того или иного языка. Разница особенно заметна в случае представления и обработки данных компьютером. Конечно, и числа могут быть записаны словами, и словачислами. Однако слова человеческого языка обозначают многогранные понятия, существующие в памяти человека. Именно из-за связи с речью словесные обозначения лучше запоминаются.
Первопричиной прихода буквенных, точнее, алфавитно-цифровых обозначений в систему адресации Интернета стала электронная почта. Оказалось, что для людей гораздо удобнее представлять адреса электронной почты в формате, сходном с адресами для почты обычной. Понятно, что удобство записи и запоминания адресов человеком способствует росту эффективности использования электронной почты. Поэтому вместо сложных комбинаций чисел сейчас применяются адреса вида alex.ivanov@test.ru.
Конечно, системы, преобразующие числовые адреса в символьные строки, в компьютерных сетях были известны и ранее, до появления электронной почты. Более того, некоторые из таких систем использовались задолго до появления TCP/IP. Тем не менее именно межсетевое распространение электронной почты подтолкнуло инженеров к идее введения общей системы «символьной адресации» в Интернете. Так в 1983 году появиласьсперва в качестве научного лабораторного проектасистема доменных имен Интернета. Сокращенное название DNS обозначает одновременно и Domain Name System (систему имен), и Domain Name Service (сервис по преобразованию адресов). Эквивалентное русскоязычное названиедоменная система имен.
DNS представляет собой сложный распределенный технологический механизм, позволяющий, помимо прочего, сопоставить символьному имени домена (строке символов) один или несколько числовых IP-адресов, определяющих соответствующий узел Интернета. Например, доменному имени test.ru соответствует адрес 192.168.17.101.
Заметьте, что это далеко не единственная задача, которую решает DNS. Система гораздо гибче и универсальнее. DNSраспределенная база данных, ориентированная на хранение и поиск записей, представляющих собой пары значений. Пара «доменIP-адрес»только одна из возможных. При помощи DNS выполняют и обратное преобразование, позволяющее найти символьное имя, соответствующее IP-адресу. В этой книге основное внимание уделено функциям DNS, используемым для работы с IP-адресами применительно к символьным адресам ресурсов. Это один из самых востребованных классов функций DNS.
Домены для Интернета придумал Пол Мокапетрис (Paul Mockapetris), ученый из США. Именно он разработал основополагающие для DNS документыRFC 882 и RFC 883.
Аббревиатура RFC уже не первый раз встречается в тексте. Что она обозначает? RFC (Request for Comments) это достаточно свободная форма определения тех или иных стандартов и протоколов работы Глобальной сети, сложившаяся в результате исторического развития интернет-сообщества. Можно сказать, что большая часть документов RFC, касающихся Интернета, это описания новых технологий, добровольно принимаемые ко вниманию и исполнению всеми заинтересованными разработчиками.
В современном Интернете документы RFC 882 и RFC 883 (их тексты опубликованы на специальном сайте по адресам http://tools.ietf.org/html/rfc882 и http://tools.ietf. org/html/rfc883) не действуютсейчас их заменили более новые версии. Однако по фундаментальным принципам работы нынешняя система DNS Сети не отличается от системы, предложенной более четверти века назад.
Современный Интернет все больше ассоциируется с вебом и веб-сайтами. Большинство новых пользователей вообще не слышали о других технологиях Интернета, для них понятия «веб» и «Интернет» эквивалентны. Но если старые технологии типа Gopher давно умерщвлены всемогущим вебом, то DNS только окрепла, ведь именно символьные имена позволяют вебу виртуализировать понятия реального мира, отражая их в именах доменов.
Современные пользователи Интернета давно привыкли к символьным именам. Подавляющему их большинству даже не придет в голову набирать в адресной строке браузера загадочную цепочку чисел вместо привычного www.nic.ru. Текстовые имена проще воспринимаются в рекламе. Адреса, заданные в виде доменных имен, могут быть привязаны не только к названию бренда (что необходимо для корпоративных сайтов), но и к той отрасли, к тому сектору рынка, с которым относится сайт. Примером подобного «говорящего» имени могут быть auto.ru и gramota.ru.
То есть без символьного именования сайтов никакого интернет-бума быть не моглони первого, ни второго. Скорее всего, после очередного «схлопывания инвестиционного пузыря» (а оно неминуемо наступит) в выигрыше опять останутся держатели доменного пространства как единственной технологии, позволяющей через языковые конструкции мертвым узлом привязать виртуальный мир к реальному.
Глава 2Обнаружение адреса
DNS преобразует строки символов в IP-адреса. Часто неспециалистам, оперирующим «банальной эрудицией», этот процесс кажется тривиальным. Действительно, возьмите простую таблицу соответствий «доменадрес» и работайте по нейтак они предлагают. Первые системы прото-DNS были устроены подобным образом. Но в масштабах глобальной сети это простое решение вполне предсказуемо оказывается неверным.
Например, соответствие IP-адресов и имен доменов изменяется. Для этого есть целый ряд причин: скажем, домен может сменить владельца, и новый администратор захочет настроить соответствие имен и адресов таким образом, чтобы домен указывал на его сетевой узел, а не на узел прежнего владельца домена. В маленькой локальной сети из десяти машин, содержащей два собственных домена, наверное, нет никаких проблем с тем, чтобы разослать измененную «таблицу соответствия» всем компьютерам. Но когда речь идет о сотнях миллионов доменов, помноженных на сотни миллионов компьютеров, разбросанных по всему земному шару, идея с рассылкой общей таблицы имен доменов оказывается, мягко говоря, абсурдной. А ведь нужно учитывать постоянный бурный рост Интернета. Так что реально работающая система DNS устроена не так просто.
Можно сказать, что IP-адресация формирует из множества узлов Интернета одноуровневую структуру. Узлы в ней соединяют разным образом проложенные линии связи.
По-научному только что упомянутая «плоская структура» Интернета со связями между узлами называется графом. Сами методы успешной и эффективной передачи данных между узлами глобальной Сети помогает разработать в том числе и такая математическая дисциплина, как теория графов. Графы как математическое понятие придумали задолго до появления Интернетаони служили удобным инструментом для исследования сетей электроснабжения.
DNS представляет собой иерархическую древовидную структуру, разбивающую одноуровневое множество узлов (или серверов) Интернета на отдельные районыкластеры. Каждый такой кластер может состоять из многих тысяч серверов или включать в себя только один сервер. Кластеры способны пересекаться, то есть один и тот же узел-сервер может входить в несколько кластеров.
Как несложно догадаться, с каждым доменом связан единственный узел древовидной структуры DNS. В свою очередь, те серверы Интернета, которые попали в соответствующий узлу кластер, оказываются внутри данного домена. То есть в древовидной структуре DNS каждому узлу дерева соответствует один кластер узлов Интернетаэто так называемая зона DNS. Можно сказать, что дерево DNS как бы добавляет адресной системе Интернета еще одно измерение. Ведь в иерархии доменных имен кластеры вкладываются друг в друга, образуя несколько уровней.
Деление дерева DNS по уровням (первый, второй, третий и т. д.) важнейшая особенность всех отношений, возникающих вокруг доменов. Система доменных имен, как и всякое дерево, начинается с единственного корневого домена (это нулевой уровень). Правда, современная реализация работы с DNS на компьютерах пользователей позволяет не указывать корневой домен в адресной строке.
Благодаря этому про существование корневого домена сейчас помнят только специалисты. Адреса сайтов с использованием DNS записываются в виде последовательности, отражающей данную иерархию имен. Чем выше уровень домена, тем правее он записывается в строке адреса. Разделяются домены точками. Разберем, например, строку www.info.nic.ru. Здесь домен wwwэто домен четвертого уровня, а другие упомянутые в адресной строке домены расположены в домене первого уровня RU. Например, info.nic.ruэто домен третьего уровня. Очень важно понимать, что привычный адрес сайта, скажем, www.test.ru, обозначает домен третьего уровня (www), расположенный внутри домена второго уровня test.ru.
Адресная строка с указанием корневого домена выглядит, например, так: site.test.ru. здесь корневой домен (он не обозначен никакими буквами) отделен последней, крайней справа точкой.
Работу DNS в масштабах всего Интернета обеспечивает распределенная система из многих серверов, образующих собственную иерархию. Каждый такой сервер имеет свою зону ответственности, то есть за ним закреплен некоторый участок адресного пространства DNS, где он определяет соответствие IP-адресов и доменных имен, а также другие параметры систем адресации и работы сервисов, находящихся в этой доменной зоне. Например, ответственный сервер (специалисты называют его авторитативным) определяет, на какой сервер приходит электронная почта, предназначенная для адресов в домене.
Основываясь на специальных правилах «доверия» и используя особые протоколы, серверы глобальной DNS обмениваются между собой информацией об изменениях в адресации. При этом изменения, конечно, не отражаются на всех участвующих в процессе серверах моментальнонапротив, для распространения информации об изменениях в адресации для того или иного домена по всему Интернету может потребоваться несколько суток. Это одна из ключевых особенностей системы, которую постоянно приходится учитывать инженерам, обеспечивающим работу информационных ресурсов в Глобальной сети. Так, если настройки адресации в доменной зоне изменились, это не означает, что все пользователи сразу станут работать с новыми настройками. Напротив, некоторое время в глобальной системе будут действовать и новые, и старые настройки. Если изменился IP-адрес сайта, то пользователи будут некоторое время попадать на узел, размещенный под старым адресом.
Среди всех разнообразных серверов DNS есть самые важныеэто корневые серверы системы, обеспечивающие работу DNS в целом. Таких серверов 13, данные адресации на этих серверах контролируются техническим центром, входящим в структуру корпорации ICANN, управляющей адресным пространством Интернета (подробнее об ICANN и о ее регулирующей роли рассказано в отдельной главе книги).
Работа корневых серверов имен DNSключевой аспект современного Интернета. Если вдруг корневые серверы разом остановятся, то через некоторое время для рядового пользователя весь Интернет просто «погаснет»: ведь обыватель не умеет работать с ресурсами Сети без использования доменных имен. Не станет привычного веба, не будет электронной почтыто есть случится катастрофа.
Как нетрудно догадаться, корневые серверы распространяют сведения об адресации, заданной для корневой доменной зоны (корневого домена). Благодаря древовидной структуре доменной системы имен сведения из корневой зоны определяют вид всего дерева. То есть в конечном итоге от этой зоны зависит доступность любого домена глобальной DNS.
Итак, корневых серверов 13. Существует весьма неплохое объяснение тому, почему выбрано именно это популярное и многозначительное число. Дело в том, что некоторые технические ограничения протокола, используемого для передачи ответов системы доменных имен, требуют, чтобы пакет данных с информацией об адресах всех корневых серверов умещался в 512 байтов (ремарка для тех, кто хочет изучить вопрос подробнее: речь идет об одном UDP-пакете). В эти байты удается поместить данные лишь о 13 серверах.
Когда говорят о 13 серверах, то имеют в виду логические серверы c именами следующего вида: a.root-servers.net,
b. root-servers.net и т. д. вплоть до m.root-servers.net (и, например, такие IPv4-адреса: 198.41.0.4, 192.228.79.201, 202.12.27.33 и др.). На деле за каждым из этих имен и адресов скрывается довольно сложная компьютерная система, включающая в себя не один физический компьютер. Более того, используя специальную технологию, люди научились распределять по всему миру узлы корневых серверов, оптимизируя таким образом работу с ними для пользователей из самых разных уголков Земли.
Таблица 1. Корневые серверы, административная и технологическая структуры по состоянию на 18 января 2014 года (http://root-servers.org/)
Примечание. Изучая таблицу, обратите внимание на то, что серверы имеют один или два адреса (при этом второй адресIPv6), а еще на то, что некоторые из них включают в себя несколько десятков узлов. Как же так? Ответ кроется в технологии Anycast, которая позволяет распределять трафик, адресованный конкретному IP-адресу, по многим физическим компьютерам, находящимся в разных сетях. Использование Anycast требует специальных настроек на уровне интернет-провайдеров и точек обмена трафиком, поэтому применяется только в особых случаях. Рис. 1. Скриншот карты Google с отмеченными корневыми серверами DNS
Рис. 1. На карте показано географическое размещение корневых серверов. Источник: http://www.root-servers.net
Таким образом, технически корневая зона глобальной DNS обслуживается децентрализованной системой из множества физических серверов, расположенных в различных странах мира и физически управляемых различными организациями. Такая система сложилась исторически в результате заключения соглашений между многими заинтересованными сторонами. Очевидно, тут есть масса преимуществ: децентрализованная (в плане компьютерного обеспечения), распределенная по земному шару система надежнее и гибче, она масштабируется с меньшими сложностями, она лучше реагирует на изменения нагрузки. Кроме того, считается, что децентрализованный подход делает Интернет более демократичным.
Однако не стоит спешить с выводами о том, что корневая зона DNSэто децентрализованная система, не имеющая центрального управления. На первый взгляд такое замечание кажется парадоксальным: ведь только что мы выяснили, что корневых серверов множество и они не только принадлежат разным компаниями, но и находятся в разных странах мира. Вся хитрость в том, что одно делосерверы, физические компьютеры, и совсем другоеданные, которые на этих компьютерах находятся.
Для сохранения целостности системы имен корневые серверы должны содержать одинаковую информацию о корневой зоне. Это очень важный момент, политическая составляющая которого никак не меньше технической. Поэтому вся распределенная система корневых серверов DNS получает сведения о корневой зоне из единственного источника. Этим источником является специальный защищенный скрытый сервер, находящийся под управлением компании из США VeriSign. Все корневые серверы по расписанию копируют сведения об адресации со скрытого сервера-источника и без изменений (это строго оговорено) передают данную информацию ее потребителям в Интернете.