A Aldeia Numaboa ancestral ainda está disponível para visitação. É a versão mais antiga da Aldeia que eu não quis simplesmente descartar depois de mais de 10 milhões de pageviews. Como diz a Sirley, nossa cozinheira e filósofa de plantão: "Misericórdia, ai que dó!"

Se você tiver curiosidade, o endereço é numaboa.net.br.

Leia mais...

Informática Numaboa - Linux

Redes Linux

Qua

11

Abr

2007


20:22

(8 votos, média 3.88 de 5) 


Nomes de máquinas e endereços IP

Cada interface de rede em cada um dos nós possui um endereço IP. Acontece que, como é muito mais fácil se lembrar de nomes do que de números, resolveu-se criar um sistema de tradução de nomes para números e vice-versa. Este sistema é conhecido como DNS (Domain Name System - Sistema de Nomes de Domínios) e é o responsável pela tradução de, por exemplo, "www.numaboa.com" em 200.195.184.106.

Existem milhares de computadores na Internet que oferecem este serviço, todos trabalhando em conjunto - quando um não pode fazer a tradução, aciona um outro servidor que talvez tenha a resposta; se o segundo também não puder, aciona um terceiro e assim sucessivamente até que se obtenha a resposta desejada.

Para que se possa utilizar este sistema de tradução, a máquina precisa indicar pelo menos um "servidor de nomes" - a lista deles costuma estar no arquivo /etc/resolv.conf.

Como as solicitações e as respostas DNS são bastante pequenas (1 pacote para cada uma), usar o protocolo TCP é um exagero porque a retransmissão automática, o ordenamento e a confiabilidade oferecidas por este protocolo têm um preço - geram pacotes extras. O protocolo utilizado pelo DNS é o UDP (User Datagram Protocol), despojado mas muito eficiente.

Serviços diferentes: Email, Web, FTP, Servidor de Nomes

No exemplo anterior foi mostrado um navegador enviando uma solicitação TCP para um servidor web num outro nó. Agora imagine que este nó que tem um servidor web também atue como servidor de email, servidor FTP e como servidor de nomes. Como é que ele sabe qual servidor deve responder à conexão TCP?

É aqui que entram as "portas" do TCP e do UDP. Cada pacote possui um espaço para a "porta de destino", o qual informa o serviço desejado. Por exemplo, a porta 25 do TCP é para o servidor de email, a porta 80 para o servidor web. A lista de portas pode ser encontrada em /etc/services.

Existe também o problema inverso: se duas janela do mesmo navegador estiverem recebendo partes diferentes de um site, como é que o Linux sabe para qual janela se destina cada pacote recebido? Através das "portas de origem". Cada uma das conexões TCP recebe uma porta de origem diferente, mesmo que a conexão seja para o mesmo endereço IP e para a mesma porta de destino. Geralmente a primeira porta de origem é a 1024 e o número de identificação vai aumentando com o número de conexões realizadas.

O jeitão dos pacotes

Os super-curiosos, com certeza querem saber como são os tais dos pacotes. Existem várias ferramentas que ficam rastreando os pacotes que passam pelo Linux. A mais comum é o "tcpdump", mas o "ethereal" é mais legal. Estes programas são conhecidos como "packet sniffers" ou "farejadores de pacotes".

O início de cada pacote informa seu destino, de onde ele foi enviado, o tipo de pacote e outros detalhes administrativos. Esta parte é chamada de "cabeçalho do pacote". O resto do pacote, que contém os dados que estão sendo transmitidos, é conhecido como "packet body" - "corpo do pacote".

O cabeçalho possui pelo menos 20 bytes e, de acordo com a RFC 791, tem a seguinte estrutura:

.-------+-------+---------------+-------------------------------.
|Versão |  IHL  |Tipo of Serviço|     Comprimento Total         |
|-------+-------+---------------+-------------------------------|
|         Identificação         |Flags|     Fragmento Offset    |
|---------------+---------------+-------------------------------|
|  Time to Live |    Protocolo  |    Checksum do Cabeçalho      |
|---------------+---------------+-------------------------------|
|                    Endereço da Origem                         |
|---------------------------------------------------------------|
|                    Endereço do Destino                        |
`---------------------------------------------------------------'

Os campos importantes são o Protocolo, que indica se se trata de um pacote TCP (número 6), UDP (número 17) ou algum outro, o endereço IP de origem e o endereço IP do destino.

Se o campo do protocolo informar que se trata de um pacote TCP, então segue imediatamente um cabeçalho TCP, também com, no mínimo, 20 bytes:

.-------------------------------+-------------------------------.
|      Porta de Origem          |       Porta de Destino        |
|-------------------------------+-------------------------------|
|                      Número da Sequência                      |
|---------------------------------------------------------------|
|                    Número de Reconhecimento                   |
|-------------------+-+-+-+-+-+-+-------------------------------|
|  Data |           |U|A|P|R|S|F|                               |
| Offset| Reservado |R|C|S|S|Y|I|            Janela             |
|       |           |G|K|H|T|N|N|                               |
|-------+-----------+-+-+-+-+-+-+-------------------------------|
|           Checksum            |         Urgent Pointer        |
`---------------------------------------------------------------'

Os campos mais importantes são a porta de origem e a porta de destino, as quais indicam quais são os serviços para os quais o pacote se destina (ou se origina, no caso dos pacotes de resposta). Os números da sequência e de reconhecimento são usados para ordenar os pacotes e informar a outra ponta quais pacotes já foram recebidos. As flags ACK, SYN, RST e FIN são bits únicos usados para negociar a abertura (SYN) e o fechamento (RST ou FIN) de conexões.

Depois deste cabeçalho vem a mensagem propriamente dita, enviada pelo aplicativo (o corpo do pacote). Um pacote normal pode ter até 1500 bytes. Isto significa que, descontados os cabeçalhos, o máximo de espaço disponível para os dados é de 1460 bytes, ou seja, mais de 97% do total.

Informações adicionais