Foi descrito nos capítulos passados que a cada computador é designado um Endereço do Protocolo de Internet que aparece em cada datagrama IP enviado pelo computador. Embora Endereços IP sejam fundamentais para a pilha TCP/IP, qualquer pessoa que tenha utilizado a Internet sabe que usuários não precisam lembrar ou entrar endereços IP. Ao invés disso, aos computadores são também designados nomes simbólicos; softwares de aplicação permitem ao usuário entrar um dos nomes simbólicos quando estiver especificando certo computador. Por exemplo, quando for especificar um destino para uma mensagem de correio eletrônico, o usuário entra um texto que identifica o receptor para o qual a mensagem deveria ser entregue e o nome do computador do mesmo. Parecido a isso, o nome de um computador é embutido em um texto que o usuário entra para especificar um site na World Wild Web.
Embora nomes simbólicos sejam convenientes aos homens, eles são inconvenientes para os computadores. Devido à forma binária de um endereço IP ser mais compacta que os nomes simbólicos, ela requer menos computação para ser manipulada (por exemplo, ser comparada). Além disso, um endereço IP ocupa menos espaço na memória e requer menos tempo para ser transmitido através da rede do que um nome. Assim, embora softwares de aplicação permitam que os usuários entrem nomes simbólicos, os protocolos da camada de rede precisam de endereços – uma aplicação deve traduzir cada nome em um endereço IP equivalente antes de usá-lo para a comunicação. Na maioria dos casos, a tradução é feita automaticamente e os resultados não são revelados ao usuário – o endereço IP é mantido na memória e só é utilizado para enviar ou receber datagramas.
O software que traduz os nomes dos computadores em endereços de Internet equivalentes provê um exemplo interessante de interação Cliente-Servidor. O banco de dados de nomes não é mantido em um só computador. Ao invés disso, as informações sobre os nomes são distribuídas ao longo de um grande conjunto de potenciais servidores localizados por toda a Internet. Sempre que um programa de aplicação precisa traduzir um nome, a aplicação se torna cliente do sistema de nomenclatura. O cliente envia uma mensagem de pedido para o servidor de nomes, o qual encontra o endereço correspondente e envia uma mensagem de resposta. Se ele não puder responder a um pedido, o servidor de nomes se torna temporariamente cliente de outro servidor de nomes, até que um servidor seja encontrado e responda ao pedido.
Esse capítulo descreve a hierarquia de nomeação, a organização dos servidores de nomes e os detalhes da interação Cliente-Servidor entre eles. O capítulo também explica como o caching melhora a eficiência do sistema de nomenclatura e torna possível o funcionamento de um sistema distribuído de larga escala.
21.2 Estrutura de Nomes de Computadores
O esquema de nomenclatura usado na Internet é chamado de Domain Name System (DNS). Resumidamente, cada nome de computador consiste em uma seqüência de segmentos alfas-numéricos separados por pontos. Por exemplo, um computador em um departamento de Ciências da Computação na Universidade de Purdue tem o nome de domínio:
mordred.cs.purdue.edu
e um computador no Colégio de Engenharia na Universidade de Bucknell tem o nome de domínio:
Nomes de domínio são hierárquicos, com a parte mais significante do nome à direita. O segmento mais a esquerda do nome (mordred e www nos exemplo dados) é o nome de um computador individual. Os outros segmentos em um nome de domínio identificam o grupo ao qual pertence aquele nome. Por exemplo, o segmento purdue e bucknell cada um fornece o nome de uma universidade.
Quantos segmentos um nome tem e como eles são designados? A resposta é que além de especificar como os segmentos mais importantes são escolhidos, o DNS não especifica um número exato de segmentos em cada nome ou o que cada um desses segmentos representa. Ao invés disso, cada organização pode escolher quantos segmentos usar para computadores dentro dela e o que aqueles segmentos representam.
O DNS não especifica valores para o segmento mais significativo, o qual é chamado de
Nível Máximo do DNS. A tabela abaixo lista os domínios Nível Máximo: Nome de Domínio Designado para
Com Organizações Comerciais
Edu Instituições Educacionais
Gov Organizações Governamentais
Mil Grupos Militares
Net Major Network Support Center Org Organizações outras que não as acima Arpa Domínio ARPA temporário (ainda usado)
Int Organizações Internacionais
Código do país Um país
Mais sete domínios Nível Máximo foram propostos em 1997 para posteriormente dividir o espaço do nome e eliminar o excesso de nomes que tem o domínio comercial. Os nomes propostos foram firm, store, web, arts, rec, info e nom. Arts e Rec seriam propostos para acomodar organizações como museus de arte e web sites de recreação; Nom foi proposto para permitir que pessoas registrassem seus próprios nomes. Por muitas outras razões, entretanto, os novos nomes não receberam aprovação oficial.
Quando uma organização quer participar do DNS, a organização deve registrar um nome dentro de um domínio de Nível Máximo. A maioria das organizações escolhe registrar-se sob o domínio com. Por exemplo, a corporação nomeada Foobar poderia pedir para designar o domínio footbar sob o domínio de Nível Máximo com. Se o pedido fosse aprovado, a autoridade da Internet responsável pelos nomes de domínio designaria à Corporação Foobar o domínio:
foobar.com
Uma vez que um domínio tenha sido designado a uma organização, o sufixo é reservado à organização – nenhuma outra organização designará esse mesmo sufixo para seu nome. Por exemplo, uma vez que foobar.com tenha sido designado, outra organização chamada Foobar poderia solicitar por foobar.edu ou foobar.org, mas não por foobar.com.
21.3 Estrutura Geográfica
Além da estrutura organizacional habitual, o DNS permite que organizações usem um registro geográfico. Por exemplo, a Corporation For National Research Initiatives registrou o domínio:
cnri.reston.va.us
porque a corporação está localizada na cidade de Reston, Virginia nos Estados Unidos. Por isso, nomes de computadores na corporação terminam em .us ao invés de .com.
Alguns países adotaram uma combinação de nomes de domínios geográficos e organizacionais. Por exemplo, universidades no Reino Unido registram-se sob o domínio:
ac.uk
onde ac é uma abreviação para Acadêmico, e uk é o código oficial de países para o Reino Unido.
21.4 Nomes de Domínios dentro de uma Organização
Uma vez que uma organização tenha um domínio particular, a organização pode decidir como introduzir estruturas hierárquicas adicionais. Uma organização pequena não pode escolher hierarquias adicionais, enquanto que grandes organizações podem escolher vários níveis. Por exemplo, se a corporação Foobar for pequena, ela pode decidir que todos os nomes tenham a forma:
computador.foobar.com
onde computador denota o nome designado a cada computador. Entretanto, se Foobar é grande o suficiente para ter várias localizações, um nível da hierarquia de domínio pode ser usada para denotar a localização, resultando em nomes de domínio da forma:
computador.localização.foobar.com
Finalmente, se a Foobar tiver várias divisões em cada localização, um nível da hierarquia de nomes de domínio pode ser usada para distinguir essas várias divisões, resultando em nomes da forma:
computador.divisão.localização.foobar.com
Devido aos nomes de domínio serem conceitos lógicos, eles não precisam se adequar às localizações físicas. Por exemplo, Foobar pode possuir plantas em 5 localizações, com cada uma delas contendo computadores de duas divisões. A empresa poderia designar seus nomes de domínio por divisão ao invés de designar por localização. Como resultado, o nome não conterá a localização do computador:
computador.divisão.foobar.com
A liberdade da escolha da hierarquia da nomenclatura se estende aos grupos dentro da organização. Conseqüentemente, dois computadores em uma dada organização podem ter um número diferente de segmentos em seu nome de domínio. Por exemplo, suponha que uma grande divisão da Corporação Foobar faça doces, enquanto que uma pequena divisão faça sopas. Devido a última ser pequena, seu nomes de domínio podem ser da forma:
computador.soap.foobar.com
A divisão de doces pode adicionar mais um nível à hierarquia do domínio para distinguir as suas várias subdivisões que fazem cada tipo de doce:
computador.subdivisão.doces.foobar.com
Uma das principais características do DNS é sua autonomia – o sistema foi projetado de modo a permitir que cada organização designe nomes aos seus computadores ou mude tais nomes sem se reportar a uma autoridade central. A hierarquia da nomenclatura ajuda a alcançar essa autonomia permitindo às organizações controlar todos os nomes com um sufixo particular. Devido a isso, a Universidade de Purdue é livre para criar ou mudar qualquer nome que termine com purdue.edu, enquanto que a IBM é livre para criar ou mudar nomes que terminem com
ibm.com.
Além da hierarquia de nomenclatura, o DNS usa as interações Cliente-Servidor para dar assistência à autonomia. Na essência, o sistema inteiro de nomenclatura opera como um banco de dados grande e distribuído. A maioria das organizações que tem uma conexão com a Internet roda um servidor de nomes de domínio. Cada servidor contém informações que conecta ele a outros servidores de nomes de domínio; o grande conjunto de servidores resultante funciona como um banco de dados de nomes grande e coordenado.
Sempre que uma aplicação precisa traduzir um nome em um endereço IP, a aplicação se torna cliente do sistema de nomenclatura. O cliente coloca o nome a ser traduzido em uma mensagem de pedido DNS e a envia ao servidor DNS. O servidor extrai o nome do pedido, o traduz para um endereço IP equivalente e retorna o endereço resultante à aplicação em uma mensagem de resposta.
21.6 A Hierarquia de Servidores DNS
Os servidores DNS são organizados em uma hierarquia que é compatível à hierarquia de nomenclatura, com cada um sendo a autoridade por parte da hierarquia de nomenclatura. Um
Servidor Raiz ocupa o topo da hierarquia e é uma autoridade para os domínios de Nível Máximo (por exemplo, .com). Embora ele não contenha todos os nomes de domínio possíveis, um servidor raiz contém informação sobre como alcançar outros servidores. Por exemplo, embora ele não conheça os nomes dos computadores da Corporação IBM, um servidor raiz sabe como alcançar um servidor que lide com pedidos para ibm.com. Similarmente, um servidor raiz sabe como alcançar o servidor que lide com os pedidos para purdue.edu.
Embora a hierarquia dos servidores DNS siga a hierarquia de nomenclatura, a estrutura não é idêntica. Uma corporação pode escolher entre colocar todos os seus nomes de domínio em um só servidor ou pode rodar vários servidores. Por exemplo, a corporação Foobar poderia alocar sua hierarquia de nomenclatura em dois servidores, sendo um para a linha de doces e outro para a linha de sopas.
Como pôde ser percebido no exemplo, os servidores não estão restritos a lidar com apenas um nível na hierarquia dos nomes de domínio, nem mesmo solicitados a conter vários níveis.
21.7 Arquiteturas de Servidores
Como uma arquitetura de um Servidor de Nomes de Domínio deveria ser escolhida? Em particular, quando que uma organização precisa de mais de um servidor? Em geral, a arquitetura na qual uma organização utiliza apenas um servidor é simples – uma organização pequena pode minimizar os custos colocando toda a sua informação sobre nomes de domínio em um só servidor.
Organizações maiores usualmente acham que apenas um servidor central não é suficiente por duas razões. Primeira, um único servidor e o computador no qual ele roda não podem lidar com pedidos arbitrários em alta velocidade. Segunda, grandes organizações freqüentemente encontram dificuldade em administrar um banco de dados central. O problema é especialmente grave porque a maioria dos softwares de DNS não provê atualizações automáticas – um humano deve entrar as mudanças e adições ao banco de dados manualmente. Devido a isso, o grupo de pessoas que é responsável por administrar o servidor central da organização deve ser coordenado para assegurar que apenas um administrador faça mudanças em um dado tempo. Se a organização rodar vários servidores, cada grupo pode administrar o
servidor que é a autoridade dos seus computadores. Mais importante ainda, cada grupo pode fazer mudanças no seu servidor de banco de dados sem uma coordenação centralizada.
21.8 Localidade de Referência e Múltiplos Servidores
O princípio da Localidade de Referência discutido no capítulo 7 aplica-se ao DNS e ajuda a explicar como vários servidores funcionam bem. O DNS segue o princípio da localidade de referência de duas maneiras. Primeiro, os usuários tendem a procurar os nomes de computadores locais mais freqüentemente que nomes de computadores remotos. Segundo, um usuário tende a procurar pelo mesmo grupo de nomes de domínio repetidamente.
Ter vários servidores dentro de uma organização funciona vem porque um servidor pode ser colocado dentro de cada grupo. O servidor local é a autoridade para os nomes dos computadores de dentro daquele grupo. Devido ao DNS obedecer ao princípio da localidade, o servidor local pode lidar com a maioria dos pedidos. Por isso, em adição à facilidade de administrar, múltiplos servidores ajudam a balancear o tráfego, reduzindo assim os problemas de contenção que um servidor central pode causar.
21.9 Links entre Servidores
Embora o DNS permita o uso de vários servidores, uma hierarquia de domínios não pode ser dividida em servidores de forma arbitrária. A regra é: um servidor deve ser responsável que tem um dado sufixo.
Servidores no DNS estão ligados, tornando possível a um cliente encontrar o servidor correto apenas seguindo os links. Em particular, cada servidor é configurado para saber a localização dos servidores das subpartes da hierarquia. Por exemplo, o servidor para .com deve saber a localização do servidor para foobar.com e assim por diante.
21.10 Decidindo um Nome
A tradução de um nome de domínio em um endereço IP equivalente é chamada
Resolução de Nomes, e se diz que um nome foi resolvido para um endereço. Softwares que fazem tal tradução são chamados de Softwares Solucionadores de Nomes (ou apenas
Solucionadores).
Muitos sistemas operacionais provêem softwares solucionadores de nomes como uma biblioteca de rotinas que uma aplicação pode chamar.
Como os softwares solucionadores funcionam? Cada solucionador é configurado com o endereço de um servidor de nomes de domínios. Para se tornar um cliente do servidor DNS, o solucionador coloca o nome em uma mensagem de Pedido DNS e a envia ao servidor local. O solucionador então aguarda a mensagem de Resposta DNS do servidor que conterá a resposta. Embora um cliente possa escolher entre UDP ou TCP, quando estiver se comunicando com um servidor DNS, a maioria dos solucionadores são configurados para utilizar UDP porque ele requer menos cabeçalhos para um único pedido.
Quando um pedido especifica um nome do qual o servidor é responsável, ele responde ao pedido diretamente. Isto é, o servidor procura o nome em sua base de dados local e envia a resposta ao solucionador. Entretanto, quando um pedido chega com um nome fora do conjunto do qual aquele servidor é responsável, existiram mais interações cliente-servidor. O servidor temporariamente se torna cliente de outro servidor de nomes. Quando um segundo servidor retorna a resposta, o servidor original envia uma cópia da mesma de volta ao solucionador que enviou o pedido.
Como que um servidor DNS sabe qual outro servidor DNS é responsável por um dado nome? Ele não sabe. Entretanto, cada servidor sabe o endereço de um servidor raiz. Saber a localização de um servidor raiz é suficiente porque o nome pode ser traduzido a partir daí. Por
exemplo, suponha que um site remoto (por exemplo, de uma universidade) envie um pedido para o seu servidor local, L, com o nome:
venus.walnut.candy.foobar.com
O servidor L não é responsável por esse nome, então ele atua como cliente de outros servidores. Em um primeiro passo, o servidor L envia um pedido ao servidor raiz. O servidor raiz não é responsável por esse nome, mas a resposta dele fornece a localização do servidor responsável pela foobar.com.
Quando o servidor L recebe a resposta do servidor raiz, ele contata o servidor da
foobar.com. Embora ele não seja responsável pelos nomes da subdivisão walnut, esse servidor principal da Foobar sabe a localização do servidor para tal subdivisão. Por isso, ele retorna uma resposta para informar o servidor L. Finalmente, o servidor L contata o servidor que é responsável pelos nomes com a forma:
computador.walnut.candy.foobar.com.
O servidor responsável envia uma resposta (chamada Authoritative Answer) ao servidor
L, com o endereço IP para aquele nome ou com a indicação que aquele nome não existe.
Esse processo de procura através da hierarquia dos servidores a fim de encontrar o servidor que é responsável por um nome é chamado de Pesquisa de Resolução Repetitiva e é utilizada somente quando um servidor precisa traduzir um nome. Os solucionadores, os quais as aplicações chamam, sempre requerem uma Pesquisa de Resolução Recursiva. Isto é, ele requer a tradução completa – a resposta para um pedido recursivo é o endereço IP procurado ou uma instrução do servidor responsável que tal nome não existe.
21.11 Otimização do Desempenho do DNS
Medições mostram que o DNS como descrito acima é infelizmente ineficiente. Sem otimizações, o tráfego em um servidor raiz seria intolerável porque os servidores raiz receberiam um pedido toda vez que alguém mencionasse o nome de um computador remoto. Além disso, o princípio de localização sugere que um dado computador emitirá o mesmo pedido repetidamente – se um usuário entrar o nome de um computador remoto, é provável que o usuário procure por ele mais vezes.
Existem duas otimizações primárias usadas em no DNS: Réplicas e Caching. Cada servidor raiz deve ser replicado; muitas cópias do servidor existem ao redor do mundo. Quando um novo site se junta a Internet, ele configura seu servidor DNS local com uma lista de servidores raiz. O servidor do site utiliza o servidor que está respondendo mais rapidamente. Na prática, o servidor geograficamente mais próximo responde melhor.
O Caching do DNS é mais importante do que as réplicas de um servidor porque afeta mais o sistema. Cada servidor mantém um cache de nomes. Sempre que ele procura por um nome novo, o servidor copia o link do mesmo em seu cache. Antes de contatar outro servidor para pedir a localização de um nome, o servidor checa o seu cache. Se o cache contiver a resposta, o servidor a utiliza para gerar uma resposta.
O Caching funciona bem porque a tradução de nomes mostra uma forte tendência em direção da localidade de referência temporal. Isto é, em um dado dia, um usuário provavelmente procurará o mesmo nome repetidamente. Por exemplo, se um usuário manda um e-mail para um endereço, o usuário provavelmente receberá uma resposta do mesmo endereço e assim por diante. Quando uma aplicação procura por um nome pela primeira vez, o servidor DNS local guarda o link do mesmo em seu cache. O servidor pode então responder a pedidos subseqüentes, retornando o link do seu cache, ao invés de contatar o servidor responsável novamente.
Cada entrada em um banco de dados DNS consiste em três itens: o nome de domínio, o tipo de registro e um valor. O tipo de registro especifica como o valor deve ser interpretado. Mais importante ainda, um pedido enviado para um servidor DNS especifica o nome de domínio e o tipo; o servidor só retorna um link que seja compatível com tipo enviado no pedido.
Discutimos o tipo usado para a ligação entre um nome de domínio e um endereço IP equivalente. O DNS classifica essa ligação de tipo A (o A vem de address). Ligações tipo A são comuns porque elas são utilizadas na maioria das aplicações. Por exemplo, quando um usuário