como funciona uma consulta dns [fechada]

7

quando eu digito www.google.com como funciona a pesquisa do DNS. Segundo o meu conhecimento, primeiro vai para o servidor raiz e descobre onde está o servidor .com dns. Em seguida, ele retorna o endereço IP desse servidor. A partir daí, descobre-se onde está o servidor do google. Agora, ele retorna um endereço IP e esse seria o lugar onde www.google.com é encontrado.

Então, para resolver esses dois dns, são necessárias pesquisas. Corrija-me se eu estivesse errado.

    
por user68350 26.01.2011 / 19:17

6 respostas

6

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.

    
por 26.01.2011 / 21:37
4

É um pouco mais complicado, pois o DNS é bastante armazenado em cache. Sua máquina local pode até ter os dados armazenados em cache e a pesquisa não vai além disso.

O seu computador consultará seu próprio cache e, se ele falhar, consultará o servidor DNS primário do qual foi informado. Isso pode ser um servidor DNS em cache e o meu tem o resultado em cache, caso em que o registro é retornado para você e a pesquisa é encerrada. Também é mais provável que seja um servidor DNS recursivo e agora fará o trabalho de perna da sua máquina.

Se o servidor DNS primário não tiver as informações, ele consultará os servidores de nomes raiz e responderá (no seu exemplo) aos servidores de nomes de TLDs para .com

Será enviada uma consulta para os servidores do TLD .com que responderão com o endereço do servidor de nomes autoritativo para google.com

Uma consulta será enviada ao servidor de nomes autoritativo para google.com solicitando o registro de www.google.com. Isso será encontrado e retornado ao servidor DNS primário, que armazenará em cache e retornará o registro para você.

    
por 26.01.2011 / 19:46
3

O DNS é hierárquico e, como disse, muito armazenado em cache. Talvez, um exemplo mais complicado possa ajudar você.

Suponha que você tenha uma máquina que pertença a uma empresa com várias unidades de negócios, refletidas na estrutura do domínio. Sua máquina tem o nome machine.businessunit1.company.com, i. e. pertence a businessunit1.company.com, que é seu sufixo DNS principal.

A unidade de negócios é muito grande e opera vários servidores DNS (dns1.businessunit1.company.com, dns2.businessunit1.company.com) e também e. g. um servidor chamado www.businessunit1.company.com.

Se o seu aparelho agora quiser resolver www.businessunit1.company.com, ele procurará primeiro o cache DNS local. Eu e. sua própria máquina lembra as entradas de DNS que você consultou recentemente, porque é muito provável que você precise dos resultados novamente, e. g. quando você clica em um link em um site. Não sei se você pode ver o que sua máquina armazenou em cache, mas há um comando para excluir tudo o que sua máquina lembrou (no Windows): ipconfig /flushdns

Se a sua máquina não se lembrar da resposta, ela perguntará - como comentei anteriormente - o (s) servidor (es) DNS configurado (s) para o seu adaptador de rede. Provavelmente, seus administradores terão configurado dns1.businessunit1.company.com e dns2.businessunit.company.com. A razão para isso é que você deseja que sua consulta DNS seja respondida rapidamente sem muito tráfego. Se dns1.businessunit1.company.com receber sua consulta por www, ele responderá, porque é autoritativo para a zona * .businessunit1.company.com. Autoritário significa que este servidor sabe a única resposta correta para todos os nomes DNS que terminam "businessunit1.company.com".

Agora, suponha que você tenha dúvidas www.businessunit2.company.com. A sua máquina, se não se lembrar da resposta em si, pedirá novamente ao dns1.businessunit1.company.com. Agora, há muitas possibilidades: primeiro, seus administradores podem ser espertos, e eles previram que é muito provável que pessoas da businessunit1 também queiram acessar máquinas na businessunit2 com frequência. Portanto, eles configuraram o dns1.businessunit1.company.com para manter uma cópia dos dados de dns1.businessunit2.company.com. O dns1.businessunit1.company.com pode usar esta cópia para responder à sua pergunta. Segundo, seus administradores certamente terão dito ao dns1.businessunit1.company.com o que fazer quando não souber a resposta à sua pergunta: perguntar a outro servidor DNS. Provavelmente, este é o dns1.company.com, mas também pode ser qualquer outro servidor DNS, incluindo os servidores raiz.

Como lain disse, o dns1.businessunit1.company.com é livre para lembrar qualquer resposta que tenha obtido de outros servidores DNS. Eu e. Se você solicitar www.google.com, talvez seja necessário perguntar a outro servidor, mas, se perguntar pela segunda vez, ele lembra a resposta e informa diretamente a você.

Você basicamente pode ver de onde vem sua resposta de DNS quando digita e. g. %código%. A saída informará o servidor e se é uma resposta autoritativa ou não. Provavelmente, não será autoritativo, porque não é respondido pelos servidores DNS do Google, que são responsáveis por todos os nomes DNS que terminam "google.com".

    
por 26.01.2011 / 20:53
1

Na verdade, tudo é muito complicado e depende do servidor DNS. Não consolidado, 66 .

    
por 26.01.2011 / 19:37
0
por 26.01.2011 / 19:25
0

Isso está correto. E talvez mais 1 procure o subdomínio "www".

    
por 26.01.2011 / 19:27