⬅ 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.

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 — Packet Tracer

Topologia
PC0 192.168.1.10  /24
Switch
PC1 192.168.1.20  /24
💡 Configuração: Em cada PC → Desktop → IP Configuration. Preencha o IP e a máscara. Não precisa de gateway.
Capturando o pacote
  1. 1Clique no ícone de relógio (canto inferior direito) para entrar no modo Simulation.
  2. 2Em Edit Filters, deixe marcado apenas ICMP.
  3. 3No PC0 → Desktop → Command Prompt: ping 192.168.1.20
  4. 4Clique em ► Capture / Forward (botão do play) e depois clique no envelope que aparece na topologia.
  5. 5Na janela que abrir, role até a seção IP Header.
Preencha o cabeçalho
Campo Valor observado O que significa
Version   1=ICMP, 4 no IPv4 — versão do protocolo
TTL   Contador de saltos; cada roteador decrementa 1
Protocol   1=ICMP  |  6=TCP  |  17=UDP
Source IP   IP de quem enviou o pacote
Destination IP   IP de quem vai receber o pacote
Fragment Offset   0 = pacote não foi fragmentado
Questões

6.  O TTL mudou entre o envio (PC0) e o recebimento (PC1)? Por quê?

Por quê:
 

7.  No pacote de resposta (PC1 → PC0), o Source IP e o Destination IP trocaram de lugar? O que isso indica?

Indica:
 
Bônus — Tracert
💻 Execute o comando abaixo no Prompt de Comando do seu computador (fora do Packet Tracer):

tracert 8.8.8.8

a)  Quantos saltos foram necessários para chegar ao destino?

 

b)  Algum salto exibiu * * *? Em qual posição? O que isso indica?

 

c)  Qual foi o IP do primeiro salto (salto 1)?

 

d)  Qual o endereço IP do último salto antes de chegar ao destino 8.8.8.8?