11 - Datagrama IPv4
video: https://youtu.be/... no frontmatter da nota.O Datagrama IPv4 é a unidade de dados básica da camada de rede. Ele é composto por um Cabeçalho (mínimo de 20 bytes) seguido pelos dados propriamente ditos. Definido pela RFC 791 (1981), o datagrama IPv4 é a PDU (Protocol Data Unit) que transporta informações através da Internet, sendo encapsulado em quadros de Camada de Enlace a cada salto entre roteadores.
1. Estrutura do Cabeçalho IPv4 (RFC 791)
| Campo | Tamanho (Bits) | Função |
|---|---|---|
| Version | 4 | Para o IPv4, o valor é fixo em 4 (0100). |
| IHL (Header Length) | 4 | Indica o tamanho do cabeçalho em palavras de 32 bits. |
| Type of Service (ToS) | 8 | Usado para priorização de pacotes (Differentiated Services). |
| Total Length | 16 | Tamanho total do datagrama (Cabeçalho + Dados). |
| Identification | 16 | Identifica pacotes que pertencem a um mesmo datagrama fragmentado. |
| Flags | 3 | Usado no controle de fragmentação (Don't Fragment, More Fragments). |
| Fragment Offset | 13 | Indica a posição da parte do dado no datagrama original. |
| TTL (Time to Live) | 8 | Contador de "saltos" para evitar pacotes em loop infinito na rede. |
| Protocol | 8 | Identifica qual protocolo da camada superior (ex: 6=TCP, 17=UDP, 1=ICMP). |
| Header Checksum | 16 | Verificação de integridade apenas do cabeçalho. |
| Source Address | 32 | Endereço IP do emissor. |
| Destination Address | 32 | Endereço IP do receptor final. |
| Options (opcional) | 0-320 | Campo variável para opções de roteamento, debugging e timestamps. |
O cabeçalho totaliza 20 bytes fixos (sem opções) e pode chegar a 60 bytes (com IHL=15) quando opções são usadas.
2. Diagrama Visual do Datagrama IPv4
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 | ToS/DSCP | Total Length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Identification |Flags| Fragment Offset |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| TTL | Protocol | Header Checksum |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Source Address |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Destination Address |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Options (variable, 0-40 bytes) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Payload (Dados L4) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Cada linha do diagrama representa 32 bits (4 bytes). O cabeçalho mínimo (IHL=5) ocupa 5 linhas, totalizando 20 bytes. Após o cabeçalho, o payload (segmento TCP/UDP, mensagem ICMP ou dados IGMP) é transportado transparentemente.
3. O Papel do TTL (Time to Live)
O campo TTL é vital para a sobrevivência da rede:
- A cada roteador que o pacote atravessa, o valor do TTL é subtraído em 1.
- Se o TTL chegar a zero, o roteador descarta o pacote e envia uma mensagem de erro ICMP Type 11 (Time Exceeded) para o remetente.
- Isso impede que pacotes fiquem girando para sempre em caso de erro de roteamento.
- Valor típico inicial em Linux: 64; em Windows: 128; em equipamentos Cisco: 255.
- O TTL também é usado propositalmente pela ferramenta
traceroute, que envia pacotes com TTL crescente (1, 2, 3...) para mapear a rota.
4. Fragmentação e Montagem
Quando um pacote IP precisa atravessar um link com uma MTU (Maximum Transmission Unit) menor que o tamanho do pacote, ele é fragmentado.
- Os roteadores dividem o pacote original em pedaços menores.
- O host de destino usa o campo Identification e Fragment Offset para remontar o pacote original antes de entregá-lo para a camada de transporte.
- A flag DF (Don't Fragment), quando setada, instrui os roteadores a não fragmentarem; caso o pacote seja maior que a MTU, o roteador descarta e envia ICMP Type 3 Code 4 (Fragmentation Needed), mecanismo usado pelo PMTUD (Path MTU Discovery).
- A flag MF (More Fragments) indica se há mais fragmentos a caminho (MF=1) ou se aquele é o último (MF=0).
Exemplo de Fragmentação
Um datagrama IP de 4000 bytes atravessando uma Ethernet com MTU 1500:
| Fragmento | Offset | Tamanho Total | MF | Payload |
|---|---|---|---|---|
| 1 | 0 | 1500 bytes | 1 | 1480 bytes de dados |
| 2 | 1480 | 1500 bytes | 1 | 1480 bytes de dados |
| 3 | 2960 | 1040 bytes | 0 | 1020 bytes de dados |
O destino aguarda receber todos os fragmentos (com mesmo Identification) para recompô-los em ordem usando o Fragment Offset.
5. Identificação do Protocolo de Camada Superior
O campo Protocol (8 bits) indica qual protocolo de camada superior está encapsulado no payload:
| Valor | Protocolo | Descrição |
|---|---|---|
| 1 | ICMP | Internet Control Message Protocol |
| 2 | IGMP | Internet Group Management Protocol |
| 6 | TCP | Transmission Control Protocol |
| 17 | UDP | User Datagram Protocol |
| 41 | IPv6 | Encapsulação IPv6-in-IPv4 |
| 47 | GRE | Generic Routing Encapsulation |
| 50 | ESP | IPsec Encapsulating Security Payload |
| 89 | OSPF | Open Shortest Path First |
| 132 | SCTP | Stream Control Transmission Protocol |
A lista completa é mantida pela IANA em https://www.iana.org/assignments/protocol-numbers.
6. Campo Options (Opcional)
Embora raramente utilizado na Internet pública, o campo Options permite funcionalidades avançadas:
- Strict Source Route (SSRR, type 137): O emissor define a rota exata que o pacote deve seguir.
- Loose Source Route (LSRR, type 131): O emissor define alguns roteadores pelos quais o pacote deve passar (mas não a rota completa).
- Record Route (type 7): Cada roteador no caminho adiciona seu IP ao campo, permitindo rastrear a rota inversa.
- Timestamp (type 68): Cada roteador adiciona seu IP e o timestamp, útil para medição de delay.
Essas opções são frequentemente bloqueadas em roteadores de borda por motivos de segurança, pois podem ser usadas para mapeamento de rede e ataques de IP spoofing.
7. Tamanho Máximo e MTU
- Limite teórico: 65.535 bytes (campo Total Length de 16 bits).
- MTU Ethernet padrão: 1500 bytes.
- MTU PPPoE: 1492 bytes (devido ao overhead de 8 bytes do PPPoE).
- MTU IPv6 mínimo: 1280 bytes (RFC 8200).
- Jumbo frames (datacenter): 9000 bytes, usado para reduzir overhead.
8. Diferenças em Relação ao Datagrama IPv6
O IPv6 simplifica o cabeçalho, removendo campos como Header Checksum, IHL (cabeçalho fixo de 40 bytes) e Options (substituído por extensões encadeadas). A fragmentação só é feita pela origem, e a identificação de protocolo passa a se chamar Next Header.
No IPv6, a fragmentação não é mais feita pelos roteadores intermediários. Se um pacote for muito grande, o roteador simplesmente o descarta e avisa o emissor para que ele mesmo faça a fragmentação. Isso torna o roteamento na espinha dorsal da Internet muito mais performático.
Apesar do IPv6 ser o sucessor natural, o IPv4 ainda domina o tráfego da Internet em grande parte das redes locais e provedores. A coexistência é viabilizada por mecanismos como túneis (6to4, Teredo) e tradução (NAT64/DNS64).