⬅ Voltar ao Dashboard 2º Bimestre — Camada de Internet

📦 Protocolo IPv4

Aula 9 — Estrutura do pacote IPv4, campos do cabeçalho, TTL e fragmentação: como a camada de internet entrega dados entre redes distintas sem garantia de ordem ou entrega

20bytes mínimos
60bytes máximos
13campos no header
~4,3 biendereços possíveis
RFC 791publicado em 1981

🌐 O que é o IPv4?

O IPv4 — Internet Protocol version 4 (RFC 791, 1981) é o protocolo responsável pelo endereçamento lógico e roteamento de pacotes na camada de Internet da pilha TCP/IP. É ele quem permite que dados trafeguem entre redes diferentes — do seu computador em casa até um servidor no outro lado do planeta.

💬 Analogia: o IPv4 é como o sistema de endereços postais do mundo. Cada dispositivo tem um endereço único (o IP), e o pacote é como uma carta: o roteador é a agência dos correios que lê o CEP de destino e decide para qual próxima agência encaminhar.

Características fundamentais

Não orientado a conexão Connectionless Cada pacote é tratado de forma independente. Não há handshake nem estado de sessão na camada IP — isso é responsabilidade do TCP, na camada superior
Best Effort Sem garantia de entrega O IPv4 faz o máximo esforço para entregar o pacote, mas não garante: o pacote pode se perder, ser duplicado ou chegar fora de ordem
Endereçamento de 32 bits ~4,3 bilhões de endereços O espaço de endereçamento IPv4 é 2³² = 4.294.967.296. Com o crescimento da internet, esse espaço foi esgotado — daí a necessidade do IPv6
Roteamento hop-a-hop Cada salto decide o próximo Não existe um caminho pré-definido: cada roteador no percurso consulta sua tabela e decide de forma independente para onde enviar o pacote
Conexão
Sem conexão (connectionless)
Pacotes do mesmo fluxo podem seguir caminhos diferentes na rede
Confiabilidade
Best effort — sem garantia
Perda de pacotes deve ser tratada pelo TCP ou pela aplicação
Ordem
Não garantida
Pacote 3 pode chegar antes do pacote 1; TCP os reordena
Duplicação
Pode ocorrer
O mesmo pacote pode ser entregue mais de uma vez
Endereçamento
32 bits — esgotado
NAT e IPv6 surgiram como soluções para a escassez

Classes de endereçamento IPv4 — capacidade por rede

Comparativo — hosts por rede por classe
Classe A (1.0.0.0 – 126.255.255.255)16.777.214 hosts/rede
Classe B (128.0.0.0 – 191.255.255.255)65.534 hosts/rede
Classe C (192.0.0.0 – 223.255.255.255)254 hosts/rede
Classe D (224.0.0.0 – 239.255.255.255)Multicast — sem hosts
Classe E (240.0.0.0 – 255.255.255.255)Reservado / Experimental

* Largura proporcional ao número de hosts por rede. Classe A domina com 16,7M hosts/rede.

🧩 Estrutura do Pacote IPv4

Um pacote IPv4 é composto por um cabeçalho (mínimo de 20 bytes, máximo de 60 bytes) seguido pelo payload (dados da camada superior). O cabeçalho contém todos os metadados que os roteadores precisam para encaminhar o pacote corretamente.

Campos do cabeçalho — explorador interativo

🖱️ Clique em qualquer campo para ver detalhes — ou use o tour automático
048162431
👆 Selecione um campo no diagrama acima

⚠️ Por que o checksum é recalculado a cada salto? O campo TTL é decrementado em 1 por cada roteador. Como o cabeçalho muda (TTL mudou), o checksum também deve ser recalculado antes de reencaminhar o pacote. O IPv6 eliminou o checksum no cabeçalho para reduzir esse overhead.

⏳ TTL — Time to Live

O TTL (Time to Live) é um dos campos mais importantes do cabeçalho IPv4. Apesar do nome sugerir tempo, na prática funciona como um contador de saltos (hops): cada roteador que processa o pacote decrementa o TTL em 1. Quando o TTL chega a 0, o pacote é descartado e o roteador envia uma mensagem ICMP “Time Exceeded” de volta ao remetente.

🎯 Objetivo do TTL: evitar que pacotes fiquem circulando indefinidamente na rede em caso de loops de roteamento. Sem o TTL, um loop entre dois roteadores poderia fazer um pacote circular para sempre, consumindo banda e recursos.

🎬 Simulação interativa — TTL hop a hop

Valores padrão de TTL por sistema operacional

Sistema Operacional TTL padrão Observação
Linux / Android 64 Configurado em /proc/sys/net/ipv4/ip_default_ttl
Windows (todas versões) 128 Chave: HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\DefaultTTL
macOS / iOS / FreeBSD 64 Mesmo valor do Linux; alterado via sysctl net.inet.ip.ttl
Cisco IOS (roteadores) 255 Usado em tráfego gerado pelo próprio roteador (ex: OSPF Hello)
Solaris / AIX 255 TTL máximo; sinal de sistema legado ou equipamento de rede

🔍 Fingerprinting de SO: o TTL recebido permite estimar o sistema operacional do remetente. Se um ping responde com TTL=118, provavelmente partiu de um Windows (128) e passou por 10 saltos. Se TTL=55, provavelmente Linux (64) com 9 saltos. Ferramentas como Nmap usam isso para identificar sistemas remotos.

TTL e a ferramenta traceroute

O traceroute (Linux/Mac) e o tracert (Windows) exploram o mecanismo de TTL para mapear o caminho até um destino. A técnica consiste em enviar pacotes com TTL=1, 2, 3, ... e coletar as mensagens ICMP “Time Exceeded” geradas por cada roteador.

traceroute — mecânica de funcionamento (TTL 1→5)
PC R1 192.168.1.1 R2 10.0.0.1 R3 189.62.14.1 8.8.8.8 Google DNS TTL=1 TTL=2 TTL=3 TTL=4,5… ICMP Time Exceeded traceroute to 8.8.8.8, 30 hops max 1 192.168.1.1 1.2 ms 1.0 ms 1.1 ms ← gateway local 2 10.0.0.1 8.3 ms 8.1 ms 8.4 ms ← ISP 3 189.62.14.1 12.7 ms * * ← roteador parcial 4 * * * ← firewall bloqueou ICMP

✂️ Fragmentação de Pacotes

Diferentes tecnologias de rede suportam tamanhos máximos de quadro diferentes — o MTU (Maximum Transmission Unit). Quando um pacote IPv4 é maior que o MTU do próximo enlace, o roteador pode fragmentar o pacote em pedaços menores. O host de destino é responsável por remontar os fragmentos na ordem correta.

Tecnologia MTU (bytes) Observação
Ethernet (padrão) 1.500 MTU mais comum na internet; payload do quadro Ethernet
Ethernet Jumbo Frames 9.000 Usado em redes de datacenter de alto desempenho
PPPoE (ADSL) 1.492 8 bytes do cabeçalho PPPoE reduzem o MTU efetivo
Wi-Fi (802.11) 2.304 MTU da camada física; normalmente usa MTU Ethernet (1500)
VPN / Tunnel ~1.400–1.460 Encapsulamento adicional reduz o MTU efetivo disponível
Loopback 65.536 Interface virtual local; sem fragmentação prática
Fragmentação em ação — pacote de 4000 bytes no MTU 1500
PACOTE ORIGINAL — 4000 bytes ID=5432 DF=0 MF=0 Offset=0 HDR 20B Payload — 3980 bytes src=192.168.1.10 → dst=200.100.50.10 Roteador — MTU=1500 → FRAGMENTA Frag 1 — 1500B MF=1 Off=0 HDR 1480 bytes payload Offset=0 Frag 2 — 1500B MF=1 Off=185 HDR 1480 bytes payload Offset=185 (×8=1480B) Frag 3 — 1040B MF=0 Off=370 HDR 1020 bytes MF=0 → último! REMONTAGEM no destino • Mesmo ID=5432 em todos • Offset define a posição • MF=0 sinaliza o último → original de 4000B restaurado Overhead: cada fragmento carrega 20B de cabeçalho IPv4 extra. Se Frag 2 se perder → pacote inteiro retransmitido.

Bit DF — Don’t Fragment

Quando o bit DF (Don’t Fragment) = 1, o pacote não pode ser fragmentado. Se chegar a um enlace com MTU menor, o roteador descarta o pacote e envia uma mensagem ICMP “Destination Unreachable: Fragmentation Needed” (Tipo 3, Código 4) ao remetente, informando o MTU do enlace bloqueante.

🛠 PMTUD — Path MTU Discovery: o TCP moderno usa o bit DF e as mensagens ICMP “Fragmentation Needed” para descobrir automaticamente o menor MTU no caminho até o destino e ajustar o MSS (Maximum Segment Size). Isso evita fragmentação en route e melhora a eficiência. Se firewalls bloquearem as mensagens ICMP necessárias, conexões TCP podem travar — o famoso “black hole PMTUD”.

⚠️ Fragmentação tem custos: (1) overhead: cada fragmento carrega um cabeçalho IP completo de 20 bytes; (2) se um fragmento se perder, o pacote inteiro deve ser retransmitido; (3) firewalls stateless podem ter dificuldade para inspecionar pacotes fragmentados. Por isso, o IPv6 não permite fragmentação en route — apenas na origem.

📋 O Campo Protocolo e o Encapsulamento

O campo Protocolo (8 bits) informa ao host de destino qual protocolo está encapsulado no payload do pacote IP. Isso permite que a pilha TCP/IP faça a demultiplexação correta, entregando os dados ao módulo certo.

1 — ICMP Diagnóstico ping, traceroute, mensagens de erro de rede (Destination Unreachable, Time Exceeded)
6 — TCP Transporte confiável HTTP, HTTPS, SSH, SMTP, FTP — qualquer protocolo que exija entrega garantida e em ordem
17 — UDP Transporte rápido DNS, DHCP, VoIP, streaming, jogos online — baixa latência em detrimento de confiabilidade
89 — OSPF Roteamento dinâmico Pacotes OSPF vão diretamente sobre IP, sem TCP ou UDP; TTL=1 para mensagens Hello multicast
47 — GRE Túnel Generic Routing Encapsulation: encapsula pacotes IP dentro de outros pacotes IP (VPN simples)
50 — ESP IPSec Encapsulating Security Payload: criptografia e autenticação do payload para VPNs IPSec
Encapsulamento — visão em camadas de um pacote HTTP
ENLACE DE DADOS — Ethernet Ethernet Hdr 14B FCS 4B src=AA:BB:CC:DD:EE:01 dst=GW:MAC type=0x0800 CAMADA INTERNET — IPv4 (protocolo=6 → TCP) IPv4 Hdr 20B src=192.168.1.5 dst=93.184.216.34 TTL=64 CAMADA TRANSPORTE — TCP TCP Hdr 20B src=52341 dst=80 seq=… ack=… flags=SYN/ACK CAMADA APLICAÇÃO — HTTP GET /index.html HTTP/1.1 Host: example.com Accept: text/html ← dados da aplicação Overhead mínimo no fio: 14 (Ethernet) + 20 (IPv4) + 20 (TCP) = 54 bytes antes dos dados HTTP

🛠️ Analisando Pacotes IPv4 na Prática

O conhecimento do cabeçalho IPv4 é essencial para interpretar capturas de pacotes. Ferramentas como o Wireshark e o tcpdump permitem inspecionar cada campo em tempo real.

tcpdump — filtros úteis para análise IPv4
# Capturar todo tráfego IPv4 na interface eth0 $ tcpdump -i eth0 ip # Filtrar por IP de origem / destino $ tcpdump -i eth0 src host 192.168.1.10 $ tcpdump -i eth0 dst host 8.8.8.8 # Ver apenas pacotes fragmentados (MF=1 ou offset>0) $ tcpdump -i eth0 "ip[6] & 0x20 != 0 or ip[6:2] & 0x1fff != 0" # Ver TTL de cada pacote (-v mostra: ttl, tos, id, flags, len, proto) $ tcpdump -i eth0 -v ip # Salvar captura para análise no Wireshark $ tcpdump -i eth0 -w captura.pcap
ping com TTL — diagnóstico prático
# Windows — ping mostrando TTL recebido C:\> ping 8.8.8.8 Resposta de 8.8.8.8: bytes=32 tempo=26ms TTL=118 TTL=118 → Windows padrão=128 → 128−118 = 10 saltos percorridos # Linux — ping com TTL customizado $ ping -t 5 8.8.8.8 # Envia com TTL=5 From 72.14.215.165: icmp_seq=1 Time to live exceeded # Descobrir MTU do caminho (PMTUD manual) $ ping -M do -s 1472 192.168.1.1 Resposta OK → MTU ≥ 1500 "Frag needed" → MTU < 1500 (PPPoE/VPN?)

⚠️ ICMP bloqueado por firewall: muitos roteadores e firewalls bloqueiam mensagens ICMP por “segurança”. Isso causa o sintoma * * * no traceroute e pode quebrar o PMTUD. A prática é permitir seletivamente: ICMP Echo (ping) pode ser opcional, mas “Destination Unreachable” e “Time Exceeded” devem ser permitidos para que o roteamento funcione corretamente.

❓ Verifique seu Conhecimento

Um pacote IPv4 chega a um roteador com TTL=1. O que o roteador faz?

AEncaminha o pacote normalmente, pois TTL=1 ainda é válido
BDecrementa o TTL para 0, descarta o pacote e envia ICMP Time Exceeded ao remetente
CReenvia o pacote ao host de origem solicitando um novo TTL
DIncrementa o TTL para 2 e tenta encontrar um caminho alternativo
✓ O roteador decrementa o TTL antes de decidir encaminhar. Com TTL=1, após decrementar o TTL fica 0; o pacote é descartado e o roteador gera uma mensagem ICMP tipo 11 (Time Exceeded) para o IP de origem. Esse mecanismo é a base do funcionamento do traceroute.

Um pacote IPv4 possui os seguintes campos: Identificação=9999, Flags: DF=0, MF=1, Offset=185. O que isso indica?

AÉ o primeiro e único fragmento do pacote original
BÉ o último fragmento; não há mais fragmentos após ele
CÉ um fragmento intermediário (não é o primeiro nem o último), e seus dados começam no byte 1480 do pacote original
DO pacote não pode ser fragmentado pois DF=0
✓ MF=1 significa que ainda há mais fragmentos após este (não é o último). Offset=185 significa que os dados deste fragmento começam na posição 185 × 8 = 1480 bytes do payload original. DF=0 apenas diz que fragmentação é permitida (mas não significa que é o primeiro). O primeiro fragmento teria Offset=0.

Por que o roteador IPv4 precisa recalcular o checksum do cabeçalho a cada salto?

APorque o IP de destino muda a cada salto
BPorque o roteador pode alterar as opções do cabeçalho em trânsito
CPorque o tamanho do cabeçalho aumenta a cada salto
DPorque o TTL é decrementado em cada salto, alterando o cabeçalho; como o checksum cobre o cabeçalho, ele deve ser recalculado após qualquer modificação
✓ O checksum do cabeçalho IPv4 é calculado sobre todos os campos do cabeçalho. Como o TTL é decrementado em 1 em cada roteador, o cabeçalho muda — e qualquer mudança invalida o checksum anterior. Isso é um dos motivos pelos quais o IPv6 eliminou o checksum de cabeçalho: o overhead de recalcular a cada salto era considerado desnecessário com as redes modernas mais confiáveis.

Um host envia um ping com DF=1 (Don’t Fragment) e o pacote precisa passar por um enlace com MTU menor que o tamanho do pacote. O que acontece?

AO roteador descarta o pacote e envia ICMP “Destination Unreachable: Fragmentation Needed” ao remetente com o MTU do enlace bloqueante
BO roteador fragmenta o pacote mesmo com DF=1, pois a entrega tem prioridade
CO pacote fica em fila no roteador até que o MTU do enlace aumente
DO roteador negocia um MTU maior com o próximo enlace antes de encaminhar
✓ Com DF=1, fragmentação é proibida. Se o pacote é grande demais para o próximo enlace, o roteador deve descartar e notificar o remetente via ICMP tipo 3, código 4 (Fragmentation Needed and DF Set), incluindo o MTU do enlace. O remetente pode então ajustar o tamanho dos pacotes. Esse é o mecanismo do PMTUD (Path MTU Discovery).

Ao executar traceroute 8.8.8.8, a linha exibe * * * para o 4º salto. Qual a interpretação mais provável?

AO destino 8.8.8.8 foi alcançado com sucesso no 4º salto
BO roteador no 4º salto está desligado e a rota foi interrompida permanentemente
CO roteador no 4º salto recebeu o pacote mas não respondeu ao ICMP (bloqueado por firewall), embora continue encaminhando tráfego normalmente
DO traceroute sofreu um erro e não deve ser confiado após esse ponto
* * * significa que o probe com TTL correspondente foi enviado, mas nenhuma resposta ICMP chegou dentro do timeout. A causa mais comum é que o roteador no 4º salto tem uma regra de firewall bloqueando respostas ICMP (Time Exceeded). Isso não significa que a rota está quebrada — o traceroute geralmente continua nos próximos saltos e atinge o destino normalmente.

📝 Atividade Prática

Analisar, interpretar e calcular campos do cabeçalho IPv4 para consolidar o entendimento do protocolo.

1
Interpretar um cabeçalho IPv4 real
Considere o seguinte dump hexadecimal de um cabeçalho IPv4:

45 00 00 3C 1A 2B 40 00 40 06 B2 EC C0 A8 01 0A 4A 7D 6E 22

Identifique e explique cada campo: (a) qual a versão e o tamanho do cabeçalho? (b) qual o comprimento total do pacote? (c) o bit DF está ativo? Como você sabe? (d) qual o TTL e o protocolo encapsulado? (e) quais são os IPs de origem e destino? (f) quantos saltos este pacote provavelmente já percorreu desde o remetente?
2
Calcular fragmentação manualmente
Um host envia um datagrama IPv4 de 5.020 bytes totais (incluindo cabeçalho de 20 bytes) para um destino que exige passar por um enlace com MTU = 1.500 bytes. O roteador deve fragmentar o pacote. Calcule: (a) quantos fragmentos serão gerados? (b) para cada fragmento, determine: tamanho total, tamanho do payload, valor do campo Offset (em unidades de 8 bytes), bit MF; (c) se o terceiro fragmento se perder durante a transmissão, o que acontece com os demais? Por quê?
3
Mapear o caminho com traceroute / tracert
Execute traceroute 8.8.8.8 (Linux/Mac) ou tracert 8.8.8.8 (Windows) no laboratório ou em sua máquina. (a) Quantos saltos até o destino? (b) Identifique os IPs privados (seu gateway e o ISP) e os IPs públicos; (c) Algum roteador não respondeu (* * *)? Em qual posição? O que isso indica? (d) Com base no TTL da resposta do 8.8.8.8 (use ping 8.8.8.8 -v), qual TTL inicial provavelmente usam os servidores do Google?
4
Descobrir o MTU do caminho (PMTUD manual)
No Linux, use ping -M do -s <tamanho> <destino> para enviar pacotes com DF=1 e tamanhos variados. No Windows, use ping -f -l <tamanho> <destino>. (a) Comece com 1472 bytes (1472 + 28 bytes de cabeçalhos = 1500). Se receber resposta, o MTU do caminho é ≥ 1500; se receber “Frag needed”, reduza o tamanho; (b) Faça busca binária para descobrir o MTU exato até o gateway local e até um destino na internet; (c) Se o MTU for diferente de 1500, explique o que pode estar causando isso (PPPoE, VPN, túnel).
5
👥 Trabalho em grupo — Simulação do roteamento IPv4
(Aprendizagem Baseada em Equipes — grupos de 4–5 alunos) Monte uma topologia no papel com 5 roteadores e 3 redes distintas. Cada grupo recebe um “pacote” (cartão com IP de origem, destino, TTL inicial e tamanho). Simulem: (a) o caminho hop-a-hop decrementando o TTL; (b) o comportamento quando o TTL chega a 0 no meio do caminho; (c) a fragmentação quando o pacote passa por um enlace com MTU menor; (d) o que acontece quando o bit DF está ativo e a fragmentação seria necessária. Apresentem os resultados ao restante da turma e comparem os caminhos.
6
🧩 Computação desplugada — Montando o cabeçalho IPv4
(Sem computador — metodologia ativa) Cada aluno recebe uma folha impressa com o diagrama do cabeçalho IPv4 em branco. O professor dita um cenário: “PC-A (10.0.0.5) envia um arquivo de 3000 bytes para servidor (172.16.0.100), TTL=64, protocolo TCP, sem fragmentar.” Os alunos preenchem cada campo do cabeçalho. Em seguida, compare com o vizinho: as respostas batem? Discutam as diferenças. Variação: o professor anuncia que um enlace tem MTU=1400 — refazer os cálculos de fragmentação.
📌 Para refletir: o IPv4 foi projetado em 1981 com endereçamento de 32 bits, suficiente para uma rede acadêmica de poucos milhões de dispositivos. Ninguém imaginou que 40 anos depois haveria bilhões de smartphones, sensores IoT e servidores. Entender o IPv4 — suas limitações de endereçamento, a ausência de QoS nativo e a fragmentação ineficiente — é fundamental para compreender por que o IPv6 foi projetado da forma que foi.