No último post eu dizia que o DNS é um dos motores da internet, um dos serviços mais importantes no desenvolvimento dessa rede incrível que conecta o mundo inteiro.
Isso por que o DNS é o serviço capaz de traduzir nome em endereço IP (que é a identificação dos equipamentos conectados a internet).
Imagine que difícil seria acessar a internet se tivéssemos que acessar tudo por um endereço numérico, ou ainda quão pequena seria a disponibilidade de sites e sistemas, considerando que cada IP poderia responder por apenas um serviço.
DNS é a sigla para Domain Name System ou, traduzindo, Sistema de Nome de Domínio, e antes de sua existência a tradução dos nomes era feita em arquivos localizados em cada computador. Imagina a vida de um administrador de redes antes do DNS, cada vez que um novo nome era adicionado a rede ele precisava atualizar todos os computadores da rede para que fossem capaz de traduzi-los. E acreditem, o anúncio de novos nomes era feito através de jornais ou comunicados internos.
Claro que estamos falando de um período onde o acesso era muito restrito, basicamente estamos falando da arpanet que ligava as universidades e as forças armadas americanas, uma vez que o DNS só foi criado em 1983 e que o registro público de domínios só começou depois 1986.
A estrutura do DNS
O DNS é um grande banco de dados descentralizado, hierárquico e distribuído. Existem 13 servidores principais, distribuídos entre estados unidos, europa e japão, mas atualmente eles são espelhados, totalizando 1402 instâncias entre 12 operadores independentes.
São eles: a.root-servers.net | 198.41.0.4, 2001:503:ba3e::2:30 | Verisign, Inc. |
b.root-servers.net | 199.9.14.201, 2001:500:200::b | University of Southern California, Information Sciences Institute |
c.root-servers.net | 192.33.4.12, 2001:500:2::c | Cogent Communications |
d.root-servers.net | 199.7.91.13, 2001:500:2d::d | University of Maryland |
e.root-servers.net | 192.203.230.10, 2001:500:a8::e | NASA (Ames Research Center) |
f.root-servers.net | 192.5.5.241, 2001:500:2f::f | Internet Systems Consortium, Inc. |
g.root-servers.net | 192.112.36.4, 2001:500:12::d0d | US Department of Defense (NIC) |
h.root-servers.net | 198.97.190.53, 2001:500:1::53 | US Army (Research Lab) |
i.root-servers.net | 192.36.148.17, 2001:7fe::53 | Netnod |
j.root-servers.net | 192.58.128.30, 2001:503:c27::2:30 | Verisign, Inc. |
k.root-servers.net | 193.0.14.129, 2001:7fd::1 | RIPE NCC |
l.root-servers.net | 199.7.83.42, 2001:500:9f::42 | ICANN |
m.root-servers.net | 202.12.27.33, 2001:dc3::35 | WIDE Project |
Para separar tudo isso existem os TLDs (Top Level Domains, ou Domínios de topo) que são os .com, .br, .org, .net, e etc (a lista é gigantesca). Você pode conhecer um pouco mais deles em https://en.wikipedia.org/wiki/List_of_Internet_top-level_domains. Depois dos TLDs existem os nomes de domínio propriamente ditos. Estes não podem se repetir, são únicos e exclusivos.
Por exemplo, o meu domínio é langoni.net, logo meu tld é .net e meu domínio é langoni. Ele foi registrado em 13/05/2004.
Quais os papéis de cada parte neste processo?
Para entender o funcionamento temos que compreender que existem:
- Client DNS (ou cliente DNS): aquele que solicita a tradução de um determinado nome e consome o resultado da pesquisa (navegadores de internet, programas de email, sistemas em geral, etc). O processo, na maioria das vezes, é transparente para o usuário, que mal sabe que está utilizando o serviço.
- DNS Recursivo: É o serviço que é consultado pelo cliente, quando um serviço de DNS desempenha o papel de recursivo ele é capaz de se comunicar com outros servidores de internet para encontrar a resposta da solicitação.
- DNS Autoritativa: É o serviço que hospeda os dados de um determinado domínio. Estes são consultados pelos recursivos para encontrar as respostas.
E como tudo isso funciona?
De forma superficial quando um cliente solicita uma tradução para um DNS recursivo, ele questiona a algum root-server quem é o responsável pelo TLD em questão, o root-server indica um outro servidor de DNS que responderá pelo TLD e o recursivo questiona a ele sobre o domínio pesquisado. Como resposta ele receberá um outro servidor de DNS que responderá ou o endereço traduzido ou um outro servidor DNS que deverá ser consultado e por aí vai.
Para dar um exemplo real. Se você solicitar a tradução do nome kadu.langoni.net a seguinte sequencia deverá acontecer:
- O recursivo em uso pergunta para algum servidor em root-servers.net que é o DNS responsável por .net
- Vai receber como resposta uma lista de servidores de DNS no domínio gtld-servers.net
- Pergunta para um desses servidores quem é langoni.net
- Vai receber como resposta que langoni.net deve ser consultado em ns-1.nipcable.com.br ou ns-2.nipcable.com.br
- Pergunta para um desses dois quem é kadu.langoni.net
- Vai receber como resposta que deve procurar no servidor de DNS kadu.langoni.net
- Pergunta para este novo servidor quem é o IP de kadu.langoni.net e receberá como resposta o IP 189.127.7.230
Tudo isso acontece em uma fração de segundo. No teste que fiz enquanto escrevo este post tudo aconteceu em 160 milisegundos.
Claro que as respostas são um pouco mais complexas que isso e envolve a indicação dos IPs de cada servidor de DNS consultado, mas acho que ficou claro a ideia.
Uma vez que o recursivo consegue a resposta ele entrega para o cliente e guarda a resposta na memória para não ter que passar por tudo isso na próxima consulta.
O tempo que a informação vai ficar registrada depende das configurações do DNS autoritativo e é conhecido por TTL – Time To Live ou tempo de vida (tradução livre).
Então, com o que temos até aqui, entendemos por que ele é descentralizado (vejam quantos servidores foram consultados), hierarquíco (existe uma sequencia de consulta, da direita pra esquerda no nome desejado) e distribuído (cada servidor consultado pode estar em uma região geográfica diferente).
Também entendemos que o servidor autoritativo é quem armazena as informações do domínio, enquanto o recursivo faz as consultas solicitadas pelos clientes.
Com tudo o que vimos até agora, acho que deu pra perceber quão fundamental é o DNS para o desenvolvimento da internet.
Também podemos perceber que o DNS recursivo que utilizamos consegue “rastrear” toda nossa navegação na internet, mas por que estou dizendo isso.
Informação que vale “ouro”
Existem vários serviços de DNS públicos gratuitos como google, opendns, cloudflare, etc. E eles não são gratuitos a toa.
Sempre que você configura em seu roteador ou computador, por exemplo, um DNS como 8.8.8.8 você está fornecendo ao google (dono deste serviço de DNS) todo seu histórico de navegação, pelo menos em quais sites você entrou. E não se engane essa informação é preciosa para alimentar um monte de algoritmos que vão fornecer propagandas e produtos pra você. Pode até ser que sua conexão fique mais rápida (devido a velocidade de tradução), mas na minha experiência isso só acontece se o DNS do seu provedor de internet for muito ruim. Fora isso a maior parte da melhora vai ser psicológica, mas os dados coletados não.
Vamos parando por aqui, por que acho que já tem informação demais pra ser digerida. No próximo post vou apresentar o que eu fiz relacionado a DNS no cluster de raspberry pi e em breve termos alguns tutoriais e cursos relacionados a este assunto, onde poderemos nos aprofundar mais na parte técnica.
Por hora é isso!
Se ficou alguma dúvida deixa uma pergunta nos comentários que será um prazer responder.
Meu muito obrigado a quem teve a paciência de chegar até aqui, nos vemos na próxima!
Bela explicação do DNS, valeu kadu
Vixe…..Bela descrição do serviço.
Bem explicado e sem termos técnicos complicados…. Parabéns!