A resolução de DNS pode ficar bastante complicada quando você começa a considerar coisas como cache e anycast, mas vamos simplificar por enquanto.
Aqui estão os snippets de escavações ao lado de snippets de tcpdumps de uma consulta de www.google.com para um servidor de nomes recém-iniciado, portanto, não há cache em uso. Eu aparentei alguns dos timestamps para legibilidade.
Primeiro, o servidor de nomes local (aqui 192.168.10.10) pergunta a um dos servidores raiz (neste caso, h.root-servers.net, 128.63.2.53) a consulta "qual é o registro A para www.google.com " O h.root-servers.net não é autoritativo para o www.google.com, mas ele tem uma delegação para .com, então ele retorna isso.
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.
Em segundo lugar, o servidor de nomes local escolhe um dos servidores de nomes da lista retornada por h.root-servers.net e envia a mesma consulta: "qual é o registro A para www.google.com?" Neste caso, o servidor de nomes consultado foi f.gtld-servers.net (192.35.51.30). f.gtld-servers.net, que é autoritativo para .com, respondeu com as delegações do servidor de nomes para a zona 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.
Chegando mais perto! Agora, o servidor de nomes local escolhe um dos servidores de nomes na última resposta e faz a mesma pergunta. Nesse caso, ele solicita o ns2.google.com (216.239.34.10). O ns2.google.com responde que www.google.com é realmente um registro CNAME (nome canônico) para 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.
Muito perto! Agora só precisamos do endereço de www.l.google.com. Agora, como já conhecemos os servidores de nomes do google.com, perguntamos apenas a um deles. Nesse caso, pedimos a ns3.google.com (216.239.36.10) "qual é o registro A de www.l.google.com.?" Ele responde com o endereço e temos nossa resposta:
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
Huzzah!
Enfim, espero que seja o suficiente para começar. Existem muitos recursos excelentes por aí. O livro "DNS e BIND" da O'Reilly é muito útil.
Eu altamente recomendo instalar escavação para usar para ver como as consultas DNS vão. Por exemplo, você pode usar o dig + trace para ver facilmente o caminho de delegação para um host:
; <<>> 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
Observe como é semelhante ao rastreio da consulta anterior? Espero que ajude.