Link
http://tools.ietf.org/html/rfc791
Introdução
- IP foi projetado para interconectar computadores em redes com sistemas de comutação de pacotes.
- Prevê a transmissão de datagramas de fontes para o destino.
- Também provê fragmentação e remontagem de datagramas se necessário.
- Limitado para prover funções de entrega de um pacote de bits (end-to-end), não há mecanismos de controle (entrega confiável, sequenciamento, controle de fluxo)
- É chamado de host-to-host (Camada de Rede), e usa de protocolos de nível mais baixo para carregar o datagrama nas redes locais.
Operação
- São basicamente duas funções: endereçamento e fragmentação.
- A seleção de um caminho para uma transmissão: roteamento.
- São usados campos do cabeçalho para a fragmentação.
- O IP trata cada datagrama como uma entidade independente.
- O serviço é oferecido um quatro mecanismos chaves: ToS (Type of Service), Options, Checksum e TTL(Time to Live).
- O ToS influencia no QoS, na escolha de parâmentros de tranmissão, a rede a ser utilizada no próximo hop(salto)...
- O TTL indica o número de saltos que podem ser feitos pelo datagrama até sua "auto-destruição".
- O "Options" provê funções pouco usadas de segurança, roteamento especial, timestamp (eventos identificados por sequência de caracteres geralmente indicando a hora ou a data)
- o Checksum é usado para verificar se não houve erro no datagrama. Os erros detectados são reportados por uma mensagem ICMP.
- Não há controle de erro, retransmissões ou controle de fluxo.
Overview
- Protocolo da camada de rede, faz a interface entre o transporte e a "rede local".
Exemplo de operação
- O módulo internet pega dados fornecidos por uma aplicação e adiciona um cabeçalho (datagrama) com alguns parâmetros, como destino e fonte (endereço local).
- Após enviado para a rede local, a interface de rede adiciona um novo cabeçalho, reenviando para uma próxima rede local.
- Uma nova interface de rede recebe o datagrama e percebe que este está direcionado a uma outra rede e reenvia o datagrama.
- Isso até que seja atingido o host final.
- Obs.: A transferência dentro da rede local é feita por um protocolo nível abaixo (como o CSMA/CD).
Descrição de funções
- A função do IP é transportar datagramas em redes interconectadas. Tudo isto através de de módulos situados pelo caminho que redirecionam o datagrama de acordo com o endereço de destino.
- Endereçamento:
- Módulo de internet mapeia IPs para endereços locais, este protocolo lida com endereços.
- Classes:
- A: início(bit) - 0, 7 bits - rede, 24 bits - endereço local
- B: início - 10, 14 bits - rede, 16 bits - endereço local
- C: início - 110, 21 bits - rede, 8 bits - endereço local
- Um host pode ter várias interfaces e assim vários endereços lógicos (IP).
- Fragmentação:
- Quantidade de dados pode ser maior que o máximo permitido (MTU), assim acontece a fragmentação.
- Os campos:
- id: permanece o mesmo
- Bytes: número de bytes de dados
- offset: quantos bytes existem antes destes (múltiplo de 8)
- flag: 1 (mais fragmentos) ou 0 (sem mais fragmentos)
Gateways
- Implementam IP e GGP(Gateway to Gateway Protocol)
- Não há implementação de protocolos de camadas superiores
- Passagem de datagramas para redes posteriores.
Especificação

- Versão (4 bits): versão do protocolo
- IHL (4 bits): Tamanho do cabeçalho (palavras de 32 bits)
- Type of Service (8 bits): parâmetros de QoS.
- Bits 0-2: Precedência
- 111 - Controle de Rede
- 110 - Controle entre redes
- 101 - CRITIC/ECP
- 100 - Sobrescrita Flash
- 011 - Flash
- 010 - Intermediário
- 001 - Prioridade
- 000 - Rotina
- Bit 3: Normal ou baixo delay
- Bit 4: Normal ou alta vazão
- Bit 5: Normal ou alta confiança
- Bits 6-7: Uso futuro
- Obs: Isso pode aumentar o custo da transmissão.
- Bits 0-2: Precedência
- Comprimento do datagrama (16 bits): Tamanho total do datagrama (cabeçalho mais dados). Assim na teoria o maior valor aqui seria 65535 bytes.
- Identificador (16 bits): id do datagrama, usado p/ fragmentação.
- Flags (3 bits)
- Bit 0: reservado, sempre 0.
- Bit 1: pode ou não fragmentar (0-1)
- Bit 2: não tem ou tem mais fragmentos (0-1)
- Fragment Offset (13 bits): usado na fragmentação, usa unidades de 8 octetos (64 bits)
- TTL (8 bits): Indica o máximo de saltos do datagrama.
- Protocolo da camada superior (8 bits)
- Checksum (16 bits): Soma todas as palavras de 16 bits e armazena o complemento de 1, usado p/ detecção de erros.
- Endereço Fonte (32 bits)
- Endereço Destino (32 bits)
- Opções (Variável): podem existir ou não.
- 2 Casos:
- Um octeto de "option-type"
- Um octeto de "option-type mais um "option-lenght" e os octetos de "option-data".
- 2 Casos:
- Para o primeiro caso:
- 1 bit flag de cópia: esta opção deve ou não ser copiada em todos os fragmentos(1-0)
- 2 bits para a classe: 0 - controle, 1 e 3 - reservados para uso futuro, 2 - debug/medição.
- 5 bits para o número da opção
- Exemplos:
- 00000000 - Fim da lista de opções
- 00000001 - No Operation: pode ser usada entre opções.
- [10000010][00001011] - Segurança: A segunda sequência de bits indica o tamanho (11). A partir deste serão 16 bits para especificar um nível de segurança, 16 bits para compartimento, 16 bits para manipular restrições e 24 bits para um código de controle de transmissão (separar tráfego e definir comunidades controladas). Vê-se que são 11 octetos!
- 10000011 - Fonte solta e registro de rota: Tamanho variável, permite a fonte do datagrama prover informações sobre a rota, além de registrar a rota que está sendo percorrida. Possui um ponteiro, que aponta para a próxima rota a ser seguida. Ele faz isso substituindo os campos de destino e fonte.
- 10001001 - Fonte estrita e registro de rora: Igual o acima, a diferença é que o próximo endereço nesse caso é sempre direto, já no "loose" (solta) podem ser passados vários elementos até o próximo endereço especificado.
- 00000111 - Record Route: Tamanho variável, registra rotas através de um ponteiro. Se não cabe mais endereços, para de gravar, se cabe parcialmente um endereço dá erro e o pacote é descartado.
- [10001000][00000100] - Identificador de fluxo: Forncede um meio para identificar fluxos (SATNET 16 bits) em redes que não suportam o conceito de fluxo.
- 01000100 - Internet Timestamp: sequências de tempo que podem indicar eventos. Tamanho variável. Tem uma flag de 2 bits, que se for 0 só acontece o timestamp, se for 1 cada timestamp é marcado pelo endereço da entidade, e se for 3 o campo de endereço é pré-especificado. Possui os campos: lenght (que pega o tamanho até o fim da flag), pointer, overflow (número de módulos que não vão registrar timestamp), flag, internet address, timestamp.
- Padding: Tamanho variável, para garantir que o cabeçalho encerre em um limite de 32 bits.
- Para o primeiro caso:
Observações
- É possível que um host possua vários IPs, ou que um único IP corresponda a uma rede local inteira, ou seja, vários hosts.
- Todo módulo de internet deve ser capaz de passar um datagrama de 68 bytes sem fragmentação, visto que o cabeçalho pode chegar a 60 bytes e o menor fragmento tem 8 bytes.
- Todo módulo de internet deve ser capaz de receber 576 bytes, fragmentados ou em apenas um datagrama.
- Erros são reportados em mensagens ICMP.
- Interfaces:
- Enviando
SEND (src, dst, prot, TOS, TTL, BufPTR, len, Id, DF, opt => result)
where:
src = source address
dst = destination address
prot = protocol
TOS = type of service
TTL = time to live
BufPTR = buffer pointer
len = length of buffer
Id = Identifier
DF = Don't Fragment
opt = option data
result = response
OK = datagram sent ok
Error = error in arguments or local network error
- Recebendo:
RECV (BufPTR, prot, => result, src, dst, TOS, len, opt)
where:
BufPTR = buffer pointer
prot = protocol
result = response
OK = datagram received ok
Error = error in arguments
len = length of buffer
src = source address
dst = destination address
TOS = type of service
opt = option data