Skip to content

Cisco CCNAv7 - O pacote IPv4

Todo pacote IP carrega, antes dos dados, um cabeçalho com as informações de que os roteadores precisam para encaminhá-lo. Conhecer os campos desse cabeçalho ajuda a entender o ping, o traceroute, a fragmentação e muitos problemas de rede. Neste post, você vai abrir o pacote IPv4 e ver para que serve cada campo.

O pacote IPv4 tem duas partes: o cabeçalho (informações de controle) e a carga (os dados vindos da camada de transporte).

flowchart LR
  A["Cabeçalho IPv4<br/>20 a 60 bytes"] --> B["Dados<br/>segmento TCP ou UDP"]

O cabeçalho tem 20 bytes no mínimo. Pode chegar a 60 bytes, se houver opções, que hoje quase não são usadas.

CampoTamanhoPara que serve
Versão4 bitsIndica a versão do IP. No IPv4, o valor é 4
IHL (Internet Header Length)4 bitsTamanho do cabeçalho, em palavras de 32 bits (4 bytes)
DSCP / ECN8 bitsClassificação do tráfego (QoS) e notificação de congestionamento
Comprimento total16 bitsTamanho do pacote inteiro (cabeçalho + dados), em bytes
Identificação16 bitsIdentifica os fragmentos de um mesmo pacote
Flags3 bitsControle da fragmentação (por exemplo, DF, que proíbe fragmentar, e MF, que indica mais fragmentos)
Deslocamento do fragmento13 bitsPosição do fragmento no pacote original
TTL (Time to Live)8 bitsLimite de saltos. Cada roteador subtrai 1
Protocolo8 bitsIdentifica o conteúdo (1 = ICMP, 6 = TCP, 17 = UDP)
Checksum do cabeçalho16 bitsVerificação de erros só do cabeçalho
Endereço IP de origem32 bitsQuem enviou
Endereço IP de destino32 bitsPara quem vai
Opções e enchimentoVariávelRecursos raros; o enchimento completa o múltiplo de 32 bits

Somando os campos fixos: 4 + 4 + 8 + 16 + 16 + 3 + 13 + 8 + 8 + 16 + 32 + 32 = 160 bits = 20 bytes.

O IHL conta em palavras de 4 bytes. Para obter o tamanho em bytes, multiplique por 4.

IHLTamanho do cabeçalho
55 × 4 = 20 bytes (o mais comum, sem opções)
66 × 4 = 24 bytes
15 (máximo)15 × 4 = 60 bytes

O TTL: o “prazo de validade” do pacote

Section titled “O TTL: o “prazo de validade” do pacote”

O TTL impede que um pacote circule para sempre em caso de erro de roteamento (um loop).

  1. O remetente define o TTL inicial (valores comuns: 64, 128 ou 255).
  2. Cada roteador que encaminha o pacote diminui o TTL em 1.
  3. Se o TTL chegar a 0, o roteador descarta o pacote e envia uma mensagem ICMP de “tempo excedido” ao remetente.
flowchart LR
  A["PC<br/>TTL 64"] --> B["Roteador 1<br/>TTL 63"] --> C["Roteador 2<br/>TTL 62"] --> D["Servidor<br/>TTL 62"]

Informa qual protocolo da camada de transporte (ou de controle) está dentro do pacote, para o destino saber a quem entregar os dados:

ValorProtocolo
1ICMP
6TCP
17UDP

Se um pacote for maior que o MTU do próximo enlace e a flag DF (Don’t Fragment) não estiver marcada, o roteador divide o pacote em fragmentos. O destino os remonta.

Cada fragmento carrega o mesmo campo Identificação, a flag MF (mais fragmentos) em todos, menos o último, e o deslocamento, medido em unidades de 8 bytes.

Um pacote de 4000 bytes (20 de cabeçalho + 3980 de dados) precisa passar por um enlace com MTU de 1500 bytes.

  • Cada fragmento pode ter 1500 bytes no total: 20 de cabeçalho + 1480 de dados. (1480 é múltiplo de 8, como exige o campo de deslocamento.)
FragmentoDadosTamanho totalMFDeslocamento
11480150010
21480150011480 ÷ 8 = 185
33980 − 2960 = 10201020 + 20 = 104002960 ÷ 8 = 370

Mini laboratório: observando o cabeçalho IPv4

Section titled “Mini laboratório: observando o cabeçalho IPv4”

Objetivo: identificar os campos de um pacote IPv4 real.

  1. Monte 2 PCs ligados a um switch, com IPs 192.168.10.1/24 e 192.168.10.2/24.
  2. Mude para o modo Simulation e envie um ping do PC0 para o PC1.
  3. Abra o envelope do ICMP e veja o PDU Information, na camada de rede (Layer 3).
  4. Anote: IP de origem, IP de destino, TTL e protocolo.
  1. Inicie uma captura e rode ping para um site (use -c 4 no Linux ou -n 4 no Windows).
  2. Aplique o filtro icmp e clique em um pacote de Echo request.
  3. Expanda Internet Protocol Version 4 e preencha:
CampoValor observado
Version?
Header Length?
Total Length?
Time to Live?
Protocol?
Source / Destination?
  1. Compare o TTL do pacote enviado com o TTL do Echo reply recebido. Por que costumam ser diferentes?
SituaçãoResposta
Um pacote tem IHL = 5. Qual é o tamanho do cabeçalho??
Um pacote de 1500 bytes tem cabeçalho de 20 bytes. Quantos bytes de dados??
Um pacote de 3020 bytes (3000 de dados) passa por um enlace com MTU 1500. Quantos fragmentos? Quais os deslocamentos??
Ver respostas

Parte 2: versão 4; cabeçalho 20 bytes (IHL 5); protocolo ICMP (1); um ping comum tem total de 84 bytes no Linux (20 de IP, 8 de ICMP e 56 de dados). Os TTLs costumam ser diferentes porque cada sistema usa um valor inicial próprio (por exemplo, 64 no Linux, 128 no Windows e 255 em equipamentos Cisco), e a resposta ainda atravessa roteadores que subtraem 1 a cada salto.

Parte 3:

SituaçãoResposta
IHL = 55 × 4 = 20 bytes
Dados de um pacote de 15001500 − 20 = 1480 bytes
3000 bytes de dados, MTU 15001480 + 1480 + 40 = 3 fragmentos, com dados de 1480, 1480 e 40 bytes; deslocamentos 0, 185 e 370

Perguntas para fixar:

  • Para que serve o campo TTL e o que acontece quando ele chega a 0?
  • Qual campo informa se o conteúdo do pacote é TCP, UDP ou ICMP?
  • Qual é o tamanho mínimo do cabeçalho IPv4?
Ver respostas
  • Evita que o pacote circule para sempre. Ao chegar a 0, o roteador descarta o pacote e envia um aviso ICMP.
  • O campo Protocolo (1 = ICMP, 6 = TCP, 17 = UDP).
  • 20 bytes.
  • O pacote IPv4 tem cabeçalho (mínimo de 20 bytes) e dados.
  • Campos principais: versão (4), IHL, comprimento total, TTL, protocolo, IP de origem e IP de destino.
  • O TTL diminui 1 em cada roteador e evita loops. Ao chegar a 0, o pacote é descartado.
  • O campo Protocolo indica o conteúdo (1 = ICMP, 6 = TCP, 17 = UDP).
  • Pacotes maiores que o MTU podem ser fragmentados (campos Identificação, Flags e Deslocamento), o que prejudica o desempenho.