O DNS funciona muito bem como uma agenda telefônica - você procura o número antes da chamada; da mesma forma, o SO procura endereços para google.com
antes de enviar qualquer pacote, e no momento em que um pacote IP é "emitido" e alcança o primeiro roteador, ele já tem endereços IP brutos em seu cabeçalho.
Dessa forma, os roteadores não precisam lidar com nomes de domínio - o roteamento permanece completamente separado dos "nomes de domínio", e um deles pode ser melhorado ou substituído sem afetar o outro.
As consultas DNS elas mesmas também são pacotes IP regulares (porta UDP 53, especificamente) e estão sujeitos ao mesmo roteamento IP. Todo o processo se parece com o seguinte:
- O programa deseja se conectar a
www.google.com:80
via TCP. - O programa solicita que a biblioteca de DNS do sistema operacional resolva
www.google.com
para uma lista de endereços IP. - A biblioteca DNS usa as funções do sistema operacional para enviar um pacote de "consulta DNS" UDP para o servidor DNS pré-configurado.
- O pacote de consulta DNS é roteado como em suas etapas de 2 a 6.
- A biblioteca DNS recebe um pacote de resposta.
- O programa recebe uma lista de endereços IP.
- O programa usa as funções do sistema operacional para estabelecer uma conexão TCP com um dos endereços recebidos.
- Os pacotes TCP também são roteados como em suas etapas de 2 a 6.
Sobre como o endereço do servidor DNS inicial (para uso na etapa 3) é obtido:
-
O resolvedor "stub" interno do seu sistema operacional usa apenas um servidor (por exemplo, seu ISP ou um público como o "8.8.8.8" do Google) e faz todo o trabalho - esse endereço do servidor pode ser configurado manualmente, ou recebido via DHCP do roteador. No Windows, a mesma tela "Configuração de IP" possui um campo para os servidores DNS. No Linux, é
/etc/resolv.conf
. -
Os resolvedores "recursivos" do seu provedor realizam o processo de pesquisa completo, então eles começam com a lista interna de servidores de nomes de raiz e perseguir as delegações (root → com → google.com).