Большинство основных серверов имен являются открытыми, поэтому вы можете изучить их источники:
- привязывать
- НРД
- узел
- yadifa
- geodns
Но это, конечно, намного сложнее, чем просто "карта".
Даже если вы начнете с очень старых документов, таких как RFC 1035 , в которых определен протокол, они, как и ожидалось, содержат немного подробностей о реализации.
Хотя реализации сервера имен могут использовать любые внутренние данные
структуры, которые они выбирают, предлагаемая структура состоит из трех основных
частей:
Структура данных каталога, в которой перечислены зоны, доступные для
этот сервер и «указатель» на структуру данных зоны.
Основное назначение этой структуры - найти ближайшего предка
зона, если таковая имеется, для поступающих стандартных запросов.
Отдельные структуры данных для каждой из зон, удерживаемых
сервер имен.
Структура данных для кэшированных данных. (или, возможно, отдельные тайники
для разных классов)
(и прочитайте следующие предложения о различных оптимизациях)
Во-первых, задание отличается для авторитетного или рекурсивного сервера имен.
Некоторые авторитетные, например, позволяют вам «скомпилировать» зону в какой-то формат перед загрузкой. См. zonec
в nsd
, например
Вам также нужно помнить, что эти данные являются динамическими: они могут удаленно обновляться с помощью сообщений ОБНОВЛЕНИЯ DNS, а при наличии DNSSEC RRSIG могут вычисляться динамически или, по крайней мере, время от времени должны меняться.
Следовательно, простого ключа, хранилища значений, вероятно, недостаточно для всех этих нужд. Но обратите внимание, что несколько серверов имен допускают разные «бэкэнды», так что данные могут быть получены из других источников, с некоторыми ограничениями или нет, например, база данных SQL или даже программа, создающая ответ DNS, когда приходит запрос DNS.
Например, из памяти, bind внутренне использует «красное двоичное дерево на обратной стороне». См. Объяснение Википедии на https://en.wikipedia.org/wiki/Red%E2%80%93black_tree,, вкратце:
Красно-черное дерево - это разновидность самобалансирующегося бинарного дерева поиска в информатике. Каждый узел двоичного дерева имеет дополнительный бит, и этот бит часто интерпретируется как цвет (красный или черный) узла. Эти биты цвета используются для обеспечения того, чтобы дерево оставалось приблизительно сбалансированным во время вставок и удалений.
Дополнительное замечание о «необходимости иметь карту, которая выдает IP-адрес сервера имен», которая не является точной на 100%: авторитетные серверы имен реестра будут иметь в основном NS
записей, связывающих доменные имена с другими авторитетными серверами имен ( делегирование) и в этом случае будет иметь некоторые записи A
и AAAA
, называемые клеями.
Некоторые запросы к ним могут вообще не дать вам никаких IP-адресов, см .:
$ dig @a.gtld-servers.com NS afnic.com +noall +ans +auth
; <<>> DiG 9.12.0 <<>> @a.gtld-servers.com NS afnic.com +noall +ans +auth
; (1 server found)
;; global options: +cmd
afnic.com. 172800 IN NS ns1.nic.fr.
afnic.com. 172800 IN NS ns3.nic.fr.
afnic.com. 172800 IN NS ns2.nic.fr.
(никаких IP-адресов вообще, потому что все серверы имен находятся вне зоны, то есть «вне разрешения» для настоящего технического термина)