O DNS é uma peça fundamental para o funcionamento da internet, um serviço do qual todos dependemos e sem o qual a internet simplesmente não poderia existir. Para ter uma ideia da sua importância, basta lembrar do incidente que aconteceu em outubro de 2021, quando os serviços do então Facebook ficaram indisponíveis por causa de uma configuração equivocada nos servidores de DNS da empresa. Por causa disso, parte dos serviços da companhia, incluindo whatsapp e instagram, simplesmente desapareceram da internet por algumas horas.
Mas o que é, então, o DNS e por que ele é tão importante?
O DNS se refere a duas coisas:
- Serviço distribuído da Internet que traduz domínios em endereços IP;
- Protocolo de comunicação usado por esse serviço.
Num exemplo simples, quando você digita e requisita a página google.com
no seu navegador, a primeira coisa que ele faz é consultar o serviço do DNS para traduzir o domínio inserido em um endereço IP. Esse endereço é então utilizado para estabelecer uma conexão TCP com os servidores da empresa para que aí seja possível fazer uma requisição HTTP para a página em questão.
Mas a grande questão que fica é a seguinte: quem é que o navegador consulta para fazer essa tradução? Quem é ou quem são os responsáveis por prover os serviços do DNS? Em outras palavras, como funciona?
Infraestrutura
Em primeiro lugar, é importante saber que DNS é um serviço distribuído. Isso quer dizer que não existe um lugar central onde são feitas todas as consultas. Ao contrário, existe um conjunto de servidores ao redor do mundo que são coletivamente responsáveis pelo serviço.
Além disso, DNS é um serviço hierárquico, em que existem de forma simplificada três níveis de servidores DNS. Os servidores raíz, que são apenas 13 no mundo, têm, em seus registros, os endereços de servidores de domínio de nível superior. Esses são os responsáveis pelos domínios como .com
, .org
, .edu
, etc. Por sua vez, estes contém os registros dos servidores autoritativos, que são aqueles que mapeiam finalmente um domínio como exemplo.com a um endereço IP.
De forma prática, portanto, quando se deseja traduzir felipebarbosa.dev
, por exemplo, em um endereço IP, em primeiro lugar os servidores raiz são consultados. Esses vêem que o domínio em questão é um domínio .dev
, e retornam o endereço IP dos servidores de nível superior para os domínios .dev
. Uma segunda consulta é feita agora para esses servidores, que respondem informando quem são os servidores autoritativos responsáveis pelo o domínio felipebarbosa
. Como esse domínio em específico é registrado pelo Google Domains, os servidores de nível superior retornam o endereço dos servidores deste serviço. Por fim, uma terceira consulta é feita aos servidores do Google Domains para que assim, finalmente, seja obtido o endereço IP.
Essa é a visão geral por trás da infraestrutura do sistema de DNS, mas uma pergunta ainda fica em aberto: com quem é que o seu navegador, por exemplo, efetivamente interage para fazer uso desse serviço? Seria ele, o navegador ou outra aplicação cliente qualquer, o responsável por percorrer toda essa cadeia de serviços? Será que os dispositivos que desejam utilizar os serviços da internet armazenam localmente uma lista dos servidores raiz para fazerem as consultas de DNS diretamente?
A resposta é que o navegador interage com um servidor DNS local, que é disponibilizado pelo seu provedor de internet. Sim, um dos serviços que seu provedor é responsável é exatamente esse: disponibilizar um servidor de DNS que realiza todas as consultas feitas pela sua rede e pela rede dos demais clientes conectados a esse provedor. É ele que percorre de forma iterativa toda a cadeia hierárquica para fazer as traduções de domínio. O endereço IP desse servidor é automaticamente definido quando você se conecta à rede. Inclusive, é fácil verificar o endereço desse servidor. Se você abrir suas configurações de rede, em algum lugar você deve encontrar o endereço IP dos servidores DNS locais.
Cache
A essa altura dá para perceber que essas consultas podem ser bem onerosas em termos de latência. Felizmente, todo o sistema DNS faz uso extensivo de cache, em todos os níveis. O mecanismo de cache é viabilizado pelos registros DNS, que são o tipo de dado que é armazenado pelos servidores. Nesses registros estão as informações de mapeamento de domínio e, importantemente, uma informação chamada TTL (Time to Live) ou tempo de vida, que especifica justamente por quanto tempo aquele registro pode ser armazenado em cache.
Registros
Sobre os registros, é importante saber que existem mais de um tipo, cada qual com um propósito diferente. O tipo mais familiar é o conhecido como tipo A, que tem a função básica de tradução direta de domínio para endereço IP. Com ele, é possível especificar no seu registrador de domínio o endereço do servidor onde seu site está hospedado, por exemplo.
Outro tipo importante é o tipo NS, que serve para mapear domínios a outros domínios, a fim de direcionar a consulta para outros servidores dentro da cadeia. Por exemplo, eu mencionei que o domínio felipebarbosa.dev
foi registrado no Google Domains. Portanto, as consultas serão direcionadas aos servidores autoritativos desse serviço. Entretanto, a aplicação está hospedada na Vercel, que é uma opção popular para hospedagem de aplicações feitas com o framework Next.js. Dessa forma, eu posso ao invés de especificar no Google Domains um endereço IP fixo, isto é, um mapeamento direto, especificar os servidores autoritativos da Vercel (através de um registro NS) para que um endereço IP seja obtido lá.
Conclusão
E com isso encerramos essa visão geral e simplificada do DNS. Na verdade, o sistema é bastante complexo e elaborado, mas espero que esse tenha sido um bom ponto de partida para entender esse serviço essencial.
Vejo vocês na próxima!