Falando em formato dos dados em um datagrama, vamos direto ao
assunto. A figura abaixo mostra um mapa de bits que compõe o
cabeçalho de um datagrama IP. Seu tamanho mínimo é
de 20 bytes (5 longwords), mas pode variar em função
das opções.
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|Version| IHL |Type of Service| Total Length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Identification |Flags| Fragment Offset |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Time to Live | Protocol | Header Checksum |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Source Address |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Destination Address |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Options | Padding |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- Version
- Identifica a versão do protocolo IP usada no datagrama.
- Datagramas recebidos com versões não conhecidas devem
ser simplesmente ignorados.
- A versão atual é a 4, mas já está em
discussão a implementação da versão
6 do IP, o
IPNg.
- IHL
- Header Length, comprimento do cabeçalho IP em múltiplos
de 4 bytes.
- O tamanho variável permite o uso de campos opcionais, mas dificulta
o processamento. Por isso, seu uso deve ser evitado.
- Type of Service
- Define a qualidade do serviço (QOS) desejada , mas...
- É ignorado na maioria das implementações
- Com o uso deste campo é possível escolher
as prioridades de serviço para aplicações do
tipo interativa, de transferência em massa ou de tempo real.
- Total Length
- Tamanho total, em bytes, do datagrama (ou de um fragmento),
incluindo o cabeçalho.
- Todos os hosts devem aceitar datagramas de, pelo menos, 576 bytes.
O valor máximo a ser usado numa sub-rede pode ser negociado entre
os hosts.
- Identification
- Flags
- Fragment Offset
- Time to Live
- A cada nó (roteador) por onde o datagrama passa, este campo
deve ser decrementado de uma unidade.
- Os roteadores mais inteligentes podem decidir por decrementar
um valor proporcional ao tempo despendido pelo datagrama em seus
buffers.
- Quando o valor do TTL chega a zero, o datagrama é descartado
e uma mensagem enviada ao emissor, através do protocolo ICMP.
- O objetivo de toda esta operação é evitar que
um erro nas tabelas
de roteamento permita que alguns datagramas fiquem circulando
eternamente pela rede.
- Protocol
- Identificador do protocolo usado na camada imediatamente acima.
- Mais usados na internet:
- TCP: Stream confiável
- UDP: Datagrama com endereço de porta para usuário
- ICMP: Controle
- Outros muito comuns:
- EGP: Roteamento
- TP4: Transporte classe 4 da ISO
- RDP: Reliable Datagram Protocol
- Header Checksum
- Garante a integridade do cabeçalho IP. Caso haja erro o
datagrama deve ser ignorado.
- Não garante a integridade dos dados.
- Source Address
- Endereço de origem do datagrama.
- Destination Address
- Endereço destino do datagrama.
- Options
- Este campo pode ser usado para usar serviços extras. Apesar
do nome, todas as implementações de IP devem suportar
todas as opções.
- Alguns exemplos de opções válidas:
- Source Routing: Especifica no datagrama qual a rota a ser seguida,
retirando esta liberdade do roteador. Em geral é usado para
testes de rede.
- Record Route: Anota a rota por onde o datagrama passou, roteador
por roteador.
- Time Stamps: Além de anotar a rota, anota também o
horário em cada ponto.
- Formato: 32 bits, milisegundos após meia-noite, em
relação a GMT.
- Usado apenas como referência, uma vez que a
sincronização de tempo entre os roteadores é
muito difícil de ser realizada.
- Padding
- Complemento sem uso, para garantir que o cabeçalho tem um
tamanho múltiplo de 4 bytes.
Analisando o sistema de roteamento IP do ponto de vista de uma
estação, temos 3 casos particulares:
- Loopback: Endereço 127.0.0.1 ou mesmo um dos endereços
associados ao próprio emissor.
- Neste caso, o datagrama não chega nem mesmo a sair da
estação emissora, sendo conduzido internamente pelo
sistema operacional.
- Local: O endereço destino está localizado na mesma
sub-rede que o emissor. Esta determinação pode ser feita
através de uma comparação do
netmask com os endereços envolvidos.
- Neste caso, o datagrama deve ser enviado para o endereço
físico (MAC Addr, no caso ethernet) do destinatário.
- Remoto: O endereço deve ser acessado através de um
roteador.
- Neste caso, o datagrama deve ser enviado para o endereço
físico do roteador, sem mexer no endereço lógico
(IP Dest Addr), do destinatário.
Temos então um problema: Como determinar qual roteador usar
nas entregas remotas ? Se só existir um roteador, o problema
termina: basta mandar tudo que é desconhecido para ele. Este
caso é chamado de rota default.
Se existir mais de um roteador, então é necessário
usar alguma forma de escolha. A mais comum é usar uma tabela
de roteamento interna, com pares destino-roteador. A forma de
construção desta tabela pode ser estática, através
de uma configuração permanente, ou dinâmica, com
o uso de um software de roteamento tipo o routed
ou o
gated
.
Outro problema existente se refere ao uso de endereços locais.
Como determinar qual o endereço físico referente a um
endereço lógico ? Uma opção é
encapsular o endereço físico dentro do endereço
lógico. Essa opção é usada pela rede
DecNet, da DEC. Outra forma, menos
restritiva é usar uma tabela de conversão.
Esta tabela de conversão pode ser fixa ou dinâmica.
Uma tabela fixa é mais simples de implementar, mas torna
proibitiva a interligação de novas máquinas.
Cada modificação na rede ou na interface de uma das
máquinas exigiria a atualização das bases de
dados de todas as outras. Esse é um problema de complexidade
exponencial, que deve ser evitado.
Já a implementação dinâmica se baseia
na determinação do endereço através de
negociação entre as máquinas. Para redes com
suporte a transmissão em broadcast, como a ethernet, foi
criado o protocolo ARP, assunto do
próximo capítulo.
Copyright ©1995 by Jonny