Читаем Linux API. Исчерпывающее руководство полностью

Функция gethostbyname() (предшественница getaddrinfo()) получала IP-адрес на основе этого файла, находя совпадение для либо канонического имени узла (то есть официального и первичного имени компьютера), либо одного из псевдонимов (которые опционально могут быть перечислены через пробел).

Однако такой подход плохо масштабируется и является непригодным, если в сети большое количество узлов (как в Интернете с его миллиардами компьютеров).

Для решения данной проблемы была разработана служба DNS. Ее ключевые идеи заключаются в следующем.

• Имена сетевых узлов организованы иерархически (рис. 55.2). Каждый узел в этой иерархии имеет метку (имя), длина которой может достигать 63 символов. На вершине иерархии находится безымянный узел — «анонимный корневой сервер».

Доменное имя узла состоит из совокупности всех имен на пути от данного узла к корневому серверу, разделенных точками. Например, google.com — доменное имя узла google.

Полностью определенное имя домена (англ. fully qualified domain name, FQDN), такое как www.kernel.org., задает место узла в иерархии. Подобные имена заканчиваются точкой, хотя во многих случаях она опускается.

• Ни одна организация или система не управляет всей иерархией целиком. Вместо этого существует иерархия DNS-серверов, каждый из которых отвечает за какую-то ее часть (зону). Обычно каждая зона имеет первичный DNS-сервер и один или несколько вторичных. Последние нужны на случай, если первичный выйдет из строя. Зоны, в свою очередь, тоже могут быть поделены на более мелкие участки. Когда в зоне появляется новый узел или изменяется привязка имени узла к адресу, администратор должен обновить базу данных на соответствующем локальном DNS-сервере (остальные серверы в иерархии не нуждаются в ручном обновлении баз данных).

Рис. 55.2. Часть иерархии DNS

Реализация DNS-сервера named(8), которая используется в Linux, основана на проекте BIND (Berkeley Internet Name Domain) и поддерживается организацией Internet Systems Consortium (http://www.isc.org/). Управление этим демоном осуществляется из файла /etc/named.conf (см. страницу named.conf(5) руководства). Основным источником информации о DNS и BIND можно считать книгу [Albitz & Liu, 2006]. Сведения о DNS также можно найти в главе 14 [Stevens, 1994], главе 11 [Stevens et al., 2004] и главе 24 [Comer, 2000].

• Функция getaddrinfo(), которую вызывают для получения IP-адреса для доменного имени, использует набор библиотечных функций, взаимодействующих с локальным DNS-сервером. Если этот сервер не может предоставить необходимую информацию, то getaddrinfo() обращается к другим DNS-серверам в рамках той же иерархии. Иногда данный процесс может длиться довольного долго, поэтому DNS-серверы применяют кэширование, чтобы избежать лишнего сетевого взаимодействия в случае с часто запрашиваемыми доменными именами.

Применение подхода, описанного выше, позволяет службе DNS оперировать огромными пространствами имен, для управления которыми не требуется централизованный механизм.

Рекурсивные и итеративные запросы

DNS-запросы делятся на две категории: рекурсивные и итеративные. При рекурсивном запросе сервер должен выполнить всю работу целиком, включая взаимодействие с другими DNS-серверами, если того требует ситуация. Функция getaddrinfo(), которая вызывается приложением в локальной системе, выполняет рекурсивный запрос к локальному DNS-серверу, а тот уже совершает процедуру разрешения доменного имени итеративно, если у него нет информации, необходимой для получения IP-адреса.

Для того чтобы объяснить принцип работы итеративного запроса, рассмотрим пример. Допустим, локальному DNS-серверу поступил запрос на разрешение имени www.otago.ac.nz. Тот первым делом свяжется с одним из немногочисленных корневых серверов, о которых (как и любой другой DNS-сервер) обязан знать. (Список этих серверов можно получить с помощью команды dig. NS или на веб-странице www.root-servers.org.) В случае с именем www.otago.ac.nz корневой сервер обратится к одному из локальных DNS-серверов в зоне nz, а тот уже попытается найти сервер с именем www.otago.ac.nz. Он будет направлен к серверу ac.nz. Затем локальный сервер выполнит запрос к ac.nz и будет направлен к серверу otago.ac.nz, который, наконец, вернет IP-адрес, связанный с именем www.otago.ac.nz.

При передаче функции gethostbyname() неполного доменного имени она сначала попытается его дополнить. Правила дополнения определяются в файле /etc/resolv.conf (см. страницу resolv.conf(5) руководства). По умолчанию gethostbyname() попытается как минимум использовать доменное имя локальной системы. Например, если ввести команду ssh octavo в системе с именем oghma.otago.ac.nz, итоговый DNS-запрос будет выполнен для имени octavo.otago.ac.nz.

Домены верхнего уровня

Перейти на страницу:

Похожие книги

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

Финансы / Программирование, программы, базы данных