Разрешение DNS может стать довольно волосатым, когда Вы начинаете рассматривать вещи как кэширование и передавать одному из узлов, но давайте сохраним его простым на данный момент.
Вот отрывки, роет рядом с отрывками tcpdumps запроса для www.google.com к недавно запущенному серверу имен, таким образом, никакое кэширование не используется. Я обрезал некоторые метки времени для четкости.
Во-первых, локальный сервер имен (здесь 192.168.10.10) спрашивает один из корневых серверов (в этом случае h.root-servers.net, 128.63.2.53) запрос, "что запись для www.google.com?" h.root-servers.net не является авторитетным для www.google.com, но это действительно имеет делегацию к .com, таким образом, это возвращает это.
192.168.10.10.17203 > 128.63.2.53.53: 29969 [1au] A? www.google.com. (43)
128.63.2.53.53 > 192.168.10.10.17203: 29969- 0/15/16 (719)
;; QUESTION SECTION:
;www.google.com. IN A
;; AUTHORITY SECTION:
com. 172800 IN NS a.gtld-servers.net.
com. 172800 IN NS b.gtld-servers.net.
com. 172800 IN NS c.gtld-servers.net.
com. 172800 IN NS d.gtld-servers.net.
com. 172800 IN NS e.gtld-servers.net.
com. 172800 IN NS f.gtld-servers.net.
com. 172800 IN NS g.gtld-servers.net.
com. 172800 IN NS h.gtld-servers.net.
com. 172800 IN NS i.gtld-servers.net.
com. 172800 IN NS j.gtld-servers.net.
com. 172800 IN NS k.gtld-servers.net.
com. 172800 IN NS l.gtld-servers.net.
com. 172800 IN NS m.gtld-servers.net.
Во-вторых, локальный сервер имен затем выбирает один из серверов имен из списка, возвращенного h.root-servers.net, и отправляет тот же запрос: "что запись для www.google.com?" В этом случае запрошенным сервером имен был f.gtld-servers.net (192.35.51.30). f.gtld-servers.net, который является авторитетным для .com, ответил делегациями сервера имен к зоне google.com
192.168.10.10.65182 > 192.35.51.30.53: 58632 [1au] A? www.google.com. (43)
192.35.51.30.53 > 192.168.10.10.65182: 58632- 0/4/5 (179)
;; QUESTION SECTION:
;www.google.com. IN A
;; AUTHORITY SECTION:
google.com. 172800 IN NS ns2.google.com.
google.com. 172800 IN NS ns1.google.com.
google.com. 172800 IN NS ns3.google.com.
google.com. 172800 IN NS ns4.google.com.
Получение ближе! Теперь локальный сервер имен выбирает один из серверов имен в последнем ответе и спрашивает это тот же вопрос. В этом случае это спрашивает ns2.google.com (216.239.34.10). ns2.google.com отвечает, что www.google.com является на самом деле CNAME (каноническое имя) запись для www.l.google.com
192.168.10.10.4767 > 216.239.34.10.53: 15830 [1au] A? www.google.com. (43)
216.239.34.10.53 > 192.168.10.10.4767: 15830*- 6/0/0 CNAME[|domain]
;; QUESTION SECTION:
;www.google.com. IN A
;; ANSWER SECTION:
www.google.com. 604800 IN CNAME www.l.google.com.
Очень близко! Теперь нам просто нужен адрес www.l.google.com. Теперь, потому что мы уже знаем серверы имен для google.com, мы просто спрашиваем одного из них. В этом случае мы спрашиваем ns3.google.com (216.239.36.10), "что запись для www.l.google.com.?" Это отвечает адресом, и у нас есть наш ответ:
192.168.10.10.63657 > 216.239.36.10.53: 62511 [1au] A? www.l.google.com. (45)
216.239.36.10.53 > 192.168.10.10.63657: 62511*- 5/0/0 A[|domain]
;; QUESTION SECTION:
;www.l.google.com. IN A
;; ANSWER SECTION:
www.l.google.com. 300 IN A 74.125.232.116
www.l.google.com. 300 IN A 74.125.232.112
www.l.google.com. 300 IN A 74.125.232.115
www.l.google.com. 300 IN A 74.125.232.113
www.l.google.com. 300 IN A 74.125.232.114
Ура!
Так или иначе я надеюсь, что этого достаточно для получения запущенного. Существует много больших ресурсов там. Книга O'Reilly "DNS и BIND" очень полезна.
Я высоко высоко настоятельно рекомендую, чтобы установка вырыла для использования для наблюдения, как запросы DNS идут. Например, можно использовать, роют +trace для легкого наблюдения пути делегации к хосту:
; <<>> DiG 9.7.0-P1 <<>> +trace www.google.com
;; global options: +cmd
. 516930 IN NS k.root-servers.net.
. 516930 IN NS g.root-servers.net.
. 516930 IN NS h.root-servers.net.
. 516930 IN NS j.root-servers.net.
. 516930 IN NS a.root-servers.net.
. 516930 IN NS m.root-servers.net.
. 516930 IN NS b.root-servers.net.
. 516930 IN NS f.root-servers.net.
. 516930 IN NS d.root-servers.net.
. 516930 IN NS c.root-servers.net.
. 516930 IN NS l.root-servers.net.
. 516930 IN NS i.root-servers.net.
. 516930 IN NS e.root-servers.net.
;; Received 244 bytes from 127.0.0.1#53(127.0.0.1) in 1 ms
com. 172800 IN NS i.gtld-servers.net.
com. 172800 IN NS j.gtld-servers.net.
com. 172800 IN NS c.gtld-servers.net.
com. 172800 IN NS l.gtld-servers.net.
com. 172800 IN NS d.gtld-servers.net.
com. 172800 IN NS h.gtld-servers.net.
com. 172800 IN NS a.gtld-servers.net.
com. 172800 IN NS e.gtld-servers.net.
com. 172800 IN NS b.gtld-servers.net.
com. 172800 IN NS g.gtld-servers.net.
com. 172800 IN NS f.gtld-servers.net.
com. 172800 IN NS k.gtld-servers.net.
com. 172800 IN NS m.gtld-servers.net.
;; Received 492 bytes from 202.12.27.33#53(m.root-servers.net) in 45 ms
google.com. 172800 IN NS ns2.google.com.
google.com. 172800 IN NS ns1.google.com.
google.com. 172800 IN NS ns3.google.com.
google.com. 172800 IN NS ns4.google.com.
;; Received 168 bytes from 192.33.14.30#53(b.gtld-servers.net) in 42 ms
www.google.com. 604800 IN CNAME www.l.google.com.
www.l.google.com. 300 IN A 74.125.232.115
www.l.google.com. 300 IN A 74.125.232.113
www.l.google.com. 300 IN A 74.125.232.116
www.l.google.com. 300 IN A 74.125.232.114
www.l.google.com. 300 IN A 74.125.232.112
;; Received 132 bytes from 216.239.34.10#53(ns2.google.com) in 131 ms
Заметьте, насколько подобный это к трассировке запроса ранее? Надежда, которая помогает.