O sistema partilhado

Servidores fazem duas coisas o tempo todo:
  • Aceitam solicitações de programas para converter nomes de domínios em endereços de IP.
  • Aceitam solicitações de outros servidores para converter nomes de domínios em endereços de IP.
Quando uma solicitação chega, o servidor pode exercer uma das quatro opções:
  • Pode responder diretamente com um endereço de IP, por já conhecer previamente este endereço do domínio.
  • Pode contatar outros servidores e tentar encontrar o endereço de IP para que foi solicitado, um processo que pode ser repetido várias vezes.
  • Pode dizer: “eu não sei o endereço de IP para o domínio solicitado, mas aqui está o endereço de IP de um servidor que sabe mais do que eu.”
  • Pode retornar uma mensagem de erro, pois o domínio solicitado é inválido ou inexistente.
Ao digitar uma URL em seu browser, o primeiro passo que este faz é converter o nome do domínio e da hospedagem em um endereço de IP, para que o browser solicite uma página da web à máquina deste endereço de IP (veja Como funcionam os servidores da web para mais detalhes deste processo). Para fazer esta conversão, o browser se comunica com um servidor.

Ao configurar seu computador para se conectar à internet, você (ou o software instalado para se conectar ao seu provedor) precisa informar ao computador qual o servidor que deve ser usado para a conversão de nomes de domínios em endereços de IP. Em alguns sistemas, o DNS é mantido na máquina quando se conecta ao provedor; em outros, é um processo um pouco mais complicado. Se estiver trabalhando com o sistema Windows 95/98/ME, você pode visualizar o endereço de seu servidor atual com o comando WINIPCFG.EXE (IPCONFIG para Windows 2000/XP). Em um computador com sistema UNIX, digite nslookup e o nome de sua máquina. Qualquer programa que necessite se conectar a um servidor para informar um nome de domínio sabe com qual servidor esta conexão deve ser feita, pois o endereço de IP está presente no sistema operacional.

O browser, então, contata o servidor e informa: “Eu preciso que você converta o nome de um domínio em um endereço de IP para mim.” Se você digitar em seu browser, "www.hsw.com.br", por exemplo, ele converte esta URL em um endereço de IP. O browser entregará "www.hsw.com.br" ao seu servidor padrão e pedirá para que este a converta.

O servidor talvez já conheça o endereço de IP para www.hsw.com.br. Este será o caso quando uma consulta recente a este mesmo site tiver acontecido (servidores utilizam o cache de endereços de IP para acelerar o processo). Neste caso, o servidor retorna o endereço de IP imediatamente.

Vamos supor que o servidor precisa começar o processo do início. O servidor iniciará uma busca pelo endereço de IP contatando um dos servidores raiz, que reconhecem os endereços de IP de todos os servidores que manejam os domínios principais. Seu servidor perguntará ao raiz sobre o www.hsw.com.br e este irá dizer (presumindo nenhum cache): “desconheço o endereço de IP para este domínio, mas aqui está um endereço de IP para os servidores COM.” Obviamente, estes servidores de raiz são vitais para todo o processo, então:

  • Existem diversos deles distribuídos por todo o planeta.
  • Todo servidor possui uma lista de todos os servidores raiz conhecidos. Ele contata o primeiro da lista e, caso não obtenha resposta, parte para o próximo.
Aqui está uma lista de servidores raiz mantida por um servidor característico:
; This file holds the information on root name servers
; needed to initialize cache of Internet domain name
; servers (e.g. reference this file in the
; "cache  .  " configuration file of BIND domain
: name servers).
;
; This file is made available by InterNIC registration
; services under anonymous FTP as
;     file             /domain/named.root
;     on server        FTP.RS.INTERNIC.NET
; -OR- under Gopher at RS.INTERNIC.NET
;     under menu     InterNIC Registration Services (NSI)
;        submenu     InterNIC Registration Archives
;     file           named.root
;
; last update:    Aug 22, 1997
; related version of root zone:   1997082200
;
;
; formerly NS.INTERNIC.NET
;
.                     3600000 IN  NS  A.ROOT-SERVERS.NET.
A.ROOT-SERVERS.NET.   3600000     A   198.41.0.4
;
; formerly NS1.ISI.EDU
;
.                     3600000     NS  B.ROOT-SERVERS.NET.
B.ROOT-SERVERS.NET.   3600000     A   128.9.0.107
;
; formerly C.PSI.NET
;
.                     3600000     NS  C.ROOT-SERVERS.NET.
C.ROOT-SERVERS.NET.   3600000     A   192.33.4.12
;
; formerly TERP.UMD.EDU
;
.                     3600000     NS  D.ROOT-SERVERS.NET.
D.ROOT-SERVERS.NET.   3600000     A   128.8.10.90
;
; formerly NS.NASA.GOV
;
.                     3600000     NS  E.ROOT-SERVERS.NET.
E.ROOT-SERVERS.NET.   3600000     A   192.203.230.10
;
; formerly NS.ISC.ORG
;
.                     3600000     NS  F.ROOT-SERVERS.NET.
F.ROOT-SERVERS.NET.   3600000     A   192.5.5.241
;
; formerly NS.NIC.DDN.MIL
;
.                     3600000     NS  G.ROOT-SERVERS.NET.
G.ROOT-SERVERS.NET.   3600000     A   192.112.36.4
;
; formerly AOS.ARL.ARMY.MIL
;
.                     3600000     NS  H.ROOT-SERVERS.NET.
H.ROOT-SERVERS.NET.   3600000     A   128.63.2.53
;
; formerly NIC.NORDU.NET
;
.                     3600000     NS  I.ROOT-SERVERS.NET.
I.ROOT-SERVERS.NET.   3600000     A   192.36.148.17
;
; temporarily housed at NSI (InterNIC)
;
.                     3600000     NS  J.ROOT-SERVERS.NET.
J.ROOT-SERVERS.NET.   3600000     A   198.41.0.10
;
; housed in LINX, operated by RIPE NCC
;
.                     3600000     NS  K.ROOT-SERVERS.NET.
K.ROOT-SERVERS.NET.   3600000     A   193.0.14.129
;
; temporarily housed at ISI (IANA)
;
.                     3600000     NS  L.ROOT-SERVERS.NET.
L.ROOT-SERVERS.NET.   3600000     A   198.32.64.12
;
; housed in Japan, operated by WIDE
;
.                     3600000     NS  M.ROOT-SERVERS.NET.
M.ROOT-SERVERS.NET.   3600000     A   202.12.27.33
; End of File
O formato é um pouco estranho, mas basicamente mostra que a lista possui endereços de IP de 13 diferentes servidores raiz.
  

  

O servidor raiz sabe os endereços de IP de milhares de servidores,responsáveis pelos principais domínios. Ele retorna ao seu servidor o endereço de IP de um servidor do domínio COM. O seu servidor, então, envia ao servidor COM uma requisição pelo endereço de IP dos servidores que executam o domínio HOWSTUFFWORKS.COM. Ao receber esta informação, o seu servidor entra em contato com os servidores do HOWSTUFFWORKS.COM e requisita o endereço de IP para o site www.hsw.com.br. Ao encontrar, este endereço de IP retorna ao seu servidor, que o repassa ao seu browser e visualiza a página da web.

Um dos principais fatores para fazer isto funcionar é a redundância. Existem vários servidores em todos os níveis: se um deles falhar, outros podem assumir as requisições. Há, por exemplo, três diferentes máquinas responsáveis por requisições aos servidores do HOWSTUFFWORKS.COM. As três máquinas precisariam falhar para ocorrer um problema.

Outro fator importante é a execução do cache. Quando um servidor executa uma requisição, ele cria um cache de todos os endereços de IP que recebe. Após ter feito a requisição a um servidor raiz para qualquer domínio COM, ele sabe o endereço de IP do servidor responsável por este domínio, então não precisa mais incomodar os servidores raiz para adquirir esta informação. Os servidores podem fazer isto em todas as requisições, o que mantém as coisas menos confusas.

No entanto, os servidores não armazenam estas informações para sempre. Esta ordenação possui um componente chamado Tempo de Vida (TTL - Time To Live), que controla o tempo que um servidor armazenará essa informação. Ao receber um endereço de IP, o servidor também recebe o TTL. O servidor armazena este endereço de IP neste período de tempo (varia de minutos até dias) e então descarta a informação. O TTL permite que as mudanças nos servidores se propaguem, mas nem todos os servidores respeitam o TTL que recebem. Quando o HowStuffWorks migrou para novos servidores, foi preciso três semanas para a transição difundir-se pela rede. Colocamos um pequeno aviso que dizia “novo servidor” no canto superior esquerdo de nossa página, para que as pessoas soubessem se estavam visualizando o novo ou o antigo servidor durante a transição.