É importante saber um pouco da história da ARPANET para entender o Sistema de Nomes de Domínio (ou Domain Name System). O DNS foi desenvolvido para resolver problemas em particular na ARPANET, e a Internet - uma descendente da ARPANET - que continua sendo sua principal usuária.
2.1 Uma Breve História da Internet
No final da década de 1960, a Agência de Projetos de Pesquisas Avançadas do Departamento de Defesa dos Estados Unidos da América - ARPA (Department of Defense's Advanced Reserch Projects Agency) mais tarde chamada de DARPA - começou a consolidar uma rede experimental de computadores de longa distância, chamada de ARPANET, que espalhou-se pelos Estados Unidos. O objetivo original da ARPANET era permitir aos fornecedores do governo compartilhar caros e também escassos recursos computacionais. Desde o início, entretanto, usuários da ARPANET também usavam a rede para colaboração. Essa colaboração abrangia desde compartilhamento de arquivos e programas e troca de mensagens correio eletrônico (e-mail) até desenvolvimento conjunto e pesquisas usando computadores remotos compartilhados.
O conjunto de protocolos TCP/IP (Transmission Control Protocol / Internet Protocol) foi desenvolvido no início da década de 1980, e rapidamente torno-se o protocolo padrão de rede na ARPANET. A inclusão do conjunto de protocolos sobre o popular sistema operacional BSD UNIX de Berkeley na Universidade da Califórnia foi instrumento de democratização entre as redes. O BSD UNIX era gratuito para universidades. Isto significava que conectar-se a rede ficou repentinamente disponível a um baixo custo para muito mais organizações do que já estavam conectadas a ARPANET. Muitos dos computadores que estavam sendo conectados a ARPANET, estavam também conectados a redes locais também, e muito brevemente os outros computadores das redes locais estavam se comunicando via a ARPANET através deles. A rede cresceu de um punhado de computadores para uma rede de dezenas de milhares de computadores. A ARPANET original tornou-se o backbone (espinha dorsal) de uma confederação de redes locais e regionais baseados em TCP/IP, chamada de Internet.
Em 1988, entretanto, o DARPA decidiu que o experimento estava terminado. O Departamento de Defesa começou a desmantelar a ARPANET. Uma outra rede, fundada pela Fundação Nacional de Ciência (National Science Foundation) e chamada de NSFNET, substituiu a ARPANET como backbone da Internet.
Mesmo mais recentemente, no primeiro semestre de 1995, a Internet sofreu uma transição do uso da NSFNET como backbone para usar múltiplos backbones comerciais, correndo sobre linhas de longa distância como MCI e Sprint, e antigas redes comerciais como PSINet e Alternet.
Hoje, a Internet conecta milhões de computadores em todo o mundo. De fato, uma significativa proporção dos computadores tirando-se os PC's do mundo estão conectados a Internet. Os novos backbones comerciais pode carregar, com folga, um volume de 45 megabits por segundo, quase mil vezes mais a largura de banda da ARPANET original. Dezenas de milhões de pessoas usam a Internet para comunicação e colaboração diariamente.
2.2 Sobre A Internet e as internets
Uma explicação sobre "A Internet" e as "internets" em geral, torna-se necessária. A diferença impressa entre as duas é bastante sutil: a primeira letra maiúscula. A distinção entre seus significados, entretanto, é significante. A Internet, com o "I" maiúsculo, refere-se a rede que começou sua vida como a ARPANET e continua hoje como, grosseiramente falando, a confederação de todas redes TCP/IP interligadas, direta ou indiretamente, a backbones comerciais norte-americanos. XXXX?, xxx - backbones TCP/IP comerciais, redes TCP/IP regionais, redes TCP/IP de corporações e do governo dos Estados Unidos, e redes TCP/IP em outros países - interconectados por circuitos digitais de alta velocidade.
A internet com inicial minúscula, por outro lado, é simplesmente qualquer rede feita por múltiplas redes menores usando o mesmo protocolo de comunicação. Uma internet não precisa obrigatoriamente estar conectada a Internet, nem necessita usar o TCP/IP como protocolo de comunicação. Existem internets isoladas de corporações, e existem internets baseadas em XNS da Xerox e internets baseadas em DECnet.
O novo termo "intranet" é somente mais um termo de marketing para uma internet baseada em TCP/IP, usado para enfatizar o uso de tecnologias desenvolvidas e introduzidas na Internet, dentro de uma rede corporativa interna de uma empresa.
2.3 A História do DNS
Durante a década de 1970, a ARPANET era uma comunidade pequena, amigável de alguns poucos hosts. Um simples arquivo, HOSTS.TXT, continha todas as informações necessárias sobre estes computadores: um mapeamento nome-para-endereço para cada host conectado à ARPANET. A conhecida e familiar tabela de hosts do UNIX, /etc/hosts, era simplesmente copiado do HOSTS.TXT (tirando-se as informações/campos que o UNIX não usava).
O arquivo era mantido pelo Centro de Informações da Rede do SRI (conhecido como NIC - Network Information Center), e distribuído a partir de uma única máquina, SRI-NIC. Os administradores da ARPANET repetidamente enviavam e-mail's com suas mudanças para o NIC, e periodicamente buscavam HOSTS.TXT, via ftp de SRI-NIC. Todas mudanças eram compiladas em um novo HOSTS.TXT, uma ou duas vezes por semana. Como a ARPANET cresceu, todavia, este método tornou-se impraticável. O tamanho do HOSTS.TXT cresceu em proporção ao crescimento do número de computadores na ARPANET. Além disso, o tráfico gerado pelo processo de atualização cresceu cada vez mais: cada host adicional significava mais do que uma linha a mais em HOSTS.TXT, mas também mais uma atualização em potencial.
Então, quando a ARPANET mudou para os protocolos TCP/IP, a população da rede explodiu. E neste momento surgiram uma porção de problemas com HOSTS.TXT:
O problema essencial era que o mecanismo do HOSTS.TXT não expandia-se bem. Ironicamente, o sucesso da ARPANET como experimento conduziu ao fracasso e obsolência do HOSTS.TXT.
Os controladores da ARPANET iniciaram uma procura por um sucessor para o HOSTS.TXT. Seu objetivo era criar um sistema que resolvesse os problemas inerentes a um sistema de tabela de hosts unificado. O novo sistema deveria permitir administração local dos dados, mas permitindo acesso global. A descentralização da administração deveria eliminar o gargalo de máquinas únicas e aliviar o problema do tráfego. Conseqüentemente, um gerenciamento local iria facilitar a tarefa de manter os dados sempre atualizados. E deveria usar um contexto de nomes hierárquicos para os nomes das máquinas. Isto deveria garantir nomes únicos.
Foi Paul Mockapetris, da Instituto de Ciência da Informação da USC - Estados Unidos, o responsável por desenhar a arquitetura do novo sistema. Em 1984, ele lançou as RFCs 882 e 883, que descreviam o "Domain Name System" ou DNS. Estas RFCs foram atualizadas, mais tarde, pelas RFCs 1034 e 1035, as atuais especificações vigentes. As RFCs 1034 e 1035 agora foram acrescidas pelas RFCs 1535, 1536 e 1537, que descrevem potenciais problemas de segurança do DNS, problemas de implementação, e truques de administração, respectivamente.
O Domain Name System é uma base de dados distribuída. Isto permite o controle local de segmentos da base completa. Todavia dados em cada segmento são disponíveis através de toda a rede por intermédio de um modelo cliente-servidor. Robustez e performance adequada são conseguidas através de um esquema de replicação e cache.
Programas chamados de servidores de nomes constituem a metade servidora do modelo cliente-servidor do DNS. Servidores de Nomes (ou name servers), contêm informações sobre alguns segmentos da base de dados, e a disponibilizam para os clientes, chamados de resolvedores (ou resolvers). Os resolvers são, muitas vezes, somente rotinas de bibliotecas de funções programação, que buscam informações em servidores de nomes através da rede.
A estrutura da base de dados do DNS, mostrada na figura abaixo, é muito parecida com a do sistema de arquivos do UNIX (ou do DOS, se preferir). A base como um todo (e o sistema de arquivos) é mostrada como uma árvore invertida, com a raiz (ou root) no topo. No UNIX, a raiz é denotada por uma barra ("/"). No DNS, o nome da raiz é um nome nulo (''), mas é escrito como um ponto ("."), para simplificar.
Cada nodo da árvore representa um parte de toda o banco de dados - um diretório no sistema de arquivos UNIX, ou um domínio no Domain Name System. Cada domínio ou diretório pode ser sempre dividido em outras partes, chamadas de sub-domínios no DNS, assim como os sub-diretórios do sistema de arquivos. Sub-domínios, como sub-diretórios, são desenhados como filhos dos seus nodos pais.
Cada domínio tem um nome, assim como cada diretório. Esse nome, é o que o identifica em relação ao seu domínio pai. Isso é equivalente ao caminho relativo de um diretório. E assim como um caminho absoluto no sistema de arquivos, um nome de domínio completo (ou domain name) é o que identifica a sua posição na árvore. No DNS um nome de domínio completo é a seqüência de todos os nomes desde o domínio raiz, separados por ".". No sistema de arquivos do UNIX, um caminho absoluto é a lista de todos os nomes relativos lidos desde a raiz até a folha (na direção inversa a do DNS, como mostra a figura a seguir), usando uma barra para separar os nomes.
No DNS, cada domínio pode ser administrado por uma organização diferente. Cada organização pode então quebrar o seu domínio em vários sub-domínios e distribuir a responsabilidade para esses sub-domínios para outras organizações. Por exemplo, o NIC controla o domínio "edu" (educational), mas atribui a autoridade sobre o domínio "berkeley.edu" para a Universidade de Berkeley (figura 2.3). Isto também é semelhante a montar um sistema de arquivos com NFS (Network File System): certos diretórios podem ser, na verdade, diretórios de outros hosts, montados remotamente via NFS. O administrador do host "tucano", por exemplo (figura 2.3, parte inferior), é responsável pelo sistema de arquivos que aparece na máquina local como "/home/tucano".
Em um sistema de arquivos, diretórios contém arquivos e também podem conter sub-diretórios. Da mesma forma, domínios podem conter tanto máquinas como outros domínios: seus sub-domínios. Nomes de domínio são usados como índices para a base de dados DNS. Você pode pensar em um dado como associado a um nome de domínio.
Cada máquina em uma rede tem um domínio, o qual aponta informação sobre esta máquina (veja figura 2.4). Esta informação pode incluir endereços IP, informações sobre roteamento de mail, etc. Os computadores podem também ter um ou mais "alias" (apelidos) de nome de domínio, que são simplesmente ponteiros de um nome de domínio para outro (o nome de domínio oficial, ou "canonical"). Na figura, "zaffari.com.br" é um "alias" para o nome oficial "arvoredo.interop.com.br".
Por que toda essa complicada estrutura? A razão é resolver os problemas que HOSTS.TXT tinha. Por exemplo, fazendo os nomes hierárquicos eliminam-se as armadilhas das colisões de nomes.
Os domínios têm nomes de domínio únicos, portanto as organizações são livres para escolher dentro de seus domínios. Qualquer nome que eles escolham, ele não conflitará com outros nomes de domínios, uma vez que ele possui seu domínio único no final do nome. Podem existir dois sub-domínios com nomes iguais (como mostrado na figura 2.5), já que eles têm diferentes domínios pais.
A primeira implementação do DNS chamava-se JEEVES, escrita pelo próprio Paul Mockapetris. Uma implementação posterior era o BIND, escrita para o sistema operacional BSD UNIX 4.3 por Kevin Dunlap. O BIND atualmente é mantido por Paul Vixie sob o patrocínio do ISC (Internet Software Consortium).
BIND, que é a sigla para Berkeley Internet Name Domain, é uma implementação bem concentrada do padrão DNS. E é de longe a implementação de DNS mais usada e popular que existe, e quase se confunde com a definição.