Home Comunidade Eventos YouTube Networks Desafios // produtos Academy News CTI | CVE Contato

02 - IHL (Tamanho do Cabeçalho)

video explicativo
Video explicativoEspaco reservado para o video desta anotação — adicione video: https://youtu.be/... no frontmatter da nota.

Campo IHL (Internet Header Length) do Cabeçalho IPv4

1. Definição e Localização

O campo IHL (Internet Header Length) é um componente crítico localizado nos segundos 4 bits do primeiro byte do cabeçalho IPv4. Sua função é indicar o tamanho total do cabeçalho IP, permitindo que o receptor saiba exatamente onde os dados de controle terminam e onde a carga útil (payload) dos dados começa.

Embora pareça simples, o IHL introduz uma nuance importante na arquitetura do IPv4: o cabeçalho não é de tamanho fixo. A presença deste campo é necessária porque o protocolo permite a inclusão de Opções (Options) extras. Se não houvesse opções, o cabeçalho teria sempre 20 bytes, e este campo seria desnecessário (como ocorre no IPv6, que possui cabeçalho fixo).

Características Formais

  • Tamanho: 4 bits (half-byte / nibble)
  • Posição no cabeçalho: Bits 4-7 do primeiro byte
  • Unidade: Palavras de 32 bits (4 bytes)
  • RFC de referência: RFC 791 (1981)

2. Unidade de Medida: Palavras de 32 Bits

A característica técnica mais distintiva do IHL é que ele não mede o tamanho do cabeçalho em bytes, mas sim em palavras de 32 bits (também conhecidas como words ou double-words).

  • 1 Palavra (Word) = 4 Bytes (32 bits).
  • O cabeçalho IPv4 foi projetado para ser alinhado em limites de 32 bits para facilitar o processamento pelos roteadores e processadores da época (anos 1980), que tinham registradores de 32 bits.

Devido a essa definição, o cálculo para determinar o tamanho real do cabeçalho em bytes é:

Tamanho do Cabeçalho (bytes) = Valor do IHL × 4

Tabela de Conversão

Valor IHL Tamanho (bytes) Cenário
5 20 Mínimo permitido (sem Options)
6 24 4 bytes de Options
7 28 8 bytes de Options
8 32 12 bytes de Options
... ... ...
15 60 Máximo (40 bytes de Options)

Por exemplo, se o valor do IHL for 5 (binário 0101), o tamanho do cabeçalho é 5 × 4 = 20 bytes.

3. Faixa de Valores e Limites

Como o campo IHL possui apenas 4 bits, ele pode representar valores decimais de 0 a 15. No entanto, existem restrições práticas impostas pela estrutura mínima do protocolo:

Valor Mínimo (5)

O cabeçalho IPv4 padrão, sem nenhuma opção adicional, tem 20 bytes. Portanto, o menor valor permitido para o IHL é 5. Se um receptor receber um datagrama com IHL menor que 5, ele é considerado inválido e geralmente é descartado, pois não contém informações suficientes para ser processado.

Valor Máximo (15)

O maior valor possível é 15. Isso resulta em um tamanho máximo de cabeçalho de 15 × 4 = 60 bytes.

Espaço para Opções

Como o cabeçalho fixo ocupa 20 bytes (IHL=5), o espaço máximo disponível para o campo de Options é de 40 bytes (60 bytes totais - 20 bytes fixos).

Cenário IHL Tamanho Total Espaço p/ Options
Mínimo (sem Options) 5 20 bytes 0 bytes
Com Record Route 6 24 bytes 4 bytes
Com Timestamp 8 32 bytes 12 bytes
Com LSRR/SSRR 8 32 bytes 12 bytes
Máximo (40 bytes Options) 15 60 bytes 40 bytes

4. O Papel do IHL no Parsing (Análise) do Pacote

Quando um host ou roteador recebe um datagrama IP, a primeira coisa que ele faz é ler o primeiro byte do cabeçalho. Os primeiros 4 bits indicam a versão (IPv4), e os 4 próximos bits indicam o IHL.

Fluxo de Processamento

  1. O sistema lê o valor do IHL no primeiro byte.
  2. Multiplica por 4 para obter o tamanho em bytes.
  3. O sistema avança esse número de bytes a partir do início do pacote.
  4. Tudo o que estiver antes desse ponto é tratado como Cabeçalho IP (incluindo quaisquer Opções).
  5. O byte imediatamente após esse ponto é o início do Payload (ex: o cabeçalho TCP ou UDP).

Sem o IHL, o sistema não saberia distinguir onde um campo de opção complexo termina e onde o dado real do usuário começa, levando a corrupção total na leitura da mensagem.

5. O Primeiro Byte Composto

É importante notar visualmente como o Version e o IHL coexistem no primeiro byte do pacote. Se olharmos para um valor hexadecimal comum no início de um pacote IPv4, como 0x45:

  • 4 (primeiro dígito hexadecimal, ou 0100 em binário): Version = 4 (IPv4).
  • 5 (segundo dígito hexadecimal, ou 0101 em binário): IHL = 5 (Cabeçalho de 20 bytes).

Tabela de Combinações Comuns

Byte Hex Version IHL Tamanho Descrição
0x45 4 5 20 bytes IPv4 sem Options
0x46 4 6 24 bytes IPv4 com 4 bytes Options
0x47 4 7 28 bytes IPv4 com 8 bytes Options
0x4F 4 15 60 bytes IPv4 com 40 bytes Options (máximo)
0x60 6 0 - IPv6 (formato diferente)

Se o cabeçalho tivesse opções, o primeiro byte poderia ser algo como 0x46 (IHL=6, 24 bytes), 0x47 (IHL=7, 28 bytes), até um máximo teórico de 0x4F (IHL=15, 60 bytes).

6. Padding (Preenchimento)

Como o IHL exige que o tamanho do cabeçalho seja um múltiplo inteiro de 4 bytes, se as opções adicionadas não preencherem exatamente esse múltiplo, é necessário adicionar bytes extras de preenchimento (padding) ao final do campo de opções.

  • O padding geralmente consiste em bytes com valor 0 (NOP - No Operation, ou END).
  • O objetivo é garantir que o próximo campo após o cabeçalho (o payload) comece exatamente em um limite de 32 bits, mantendo o alinhamento de memória otimizado para o processamento.
  • O valor do IHL já contabiliza esse padding.

Exemplo de Padding

Se uma opção ocupa 7 bytes (não múltiplo de 4), adiciona-se 1 byte de padding (NOP, tipo 0x01) para chegar a 8 bytes. O IHL seria então 5 + 8/4 = 7 (cabeçalho de 28 bytes).

7. Tipos de Options Mais Comuns

O campo Options é raramente usado na prática moderna, mas existe em situações específicas:

Opção Tipo Função Tamanho Típico
END of Options List 0 Marca fim das opções 1 byte
NOP (No Operation) 1 Padding/alinhamento 1 byte
LSRR (Loose Source Route) 131 Rota de origem flexível Variável
SSRR (Strict Source Route) 137 Rota de origem estrita Variável
Record Route 7 Registra rota percorrida Variável
Timestamp 68 Registra timestamps dos hops Variável

8. Diferença Crucial em Relação ao IPv6

O IPv6 abandonou o conceito de IHL e Options variáveis. Em vez disso:

  • Cabeçalho fixo de 40 bytes sempre.
  • Sem campo IHL (offset do payload é fixo e conhecido).
  • Opções ficam em Extension Headers encadeados, processados separadamente.

Isso torna o roteamento IPv6 mais eficiente: roteadores intermediários não precisam processar opções complexas, apenas encaminhar baseado no endereço destino.

9. Detecção de Pacotes Malformados

Roteadores e firewalls validam o IHL para evitar abusos:

  • IHL < 5: Pacote descartado (cabeçalho mínimo violado).
  • IHL × 4 > Total Length do IP: Pacote descartado (inconsistência).
  • IHL × 4 = Total Length: Payload vazio (válido em alguns casos, suspeito em outros).

Ferramentas como Scapy permitem criar pacotes com IHL inválido para testes de IDS/firewall:

from scapy.all import *
# Pacote com IHL inválido (= 2)
pkt = IP()/TCP()
pkt.ihl = 2  # 8 bytes - inválido!
send(pkt)

10. Resumo Técnico

Atributo Valor
Tamanho do campo 4 bits
Posição Bits 4-7 do primeiro byte
Unidade Palavras de 32 bits
Valor mínimo 5 (20 bytes)
Valor máximo 15 (60 bytes)
Espaço para Options Até 40 bytes
RFC 791 (1981)
Substituído em IPv6? Sim (cabeçalho fixo)

11. Conclusão

O campo IHL é um excelente exemplo de design de protocolo que equilibra flexibilidade (cabeçalho variável) com eficiência (alinhamento de 32 bits). Embora seu uso prático tenha diminuído com a obsolescência das Options no IPv4 moderno, sua presença é fundamental para a correta interpretação de qualquer pacote IPv4. Para engenheiros de rede que realizam análise de pacotes (com tcpdump, Wireshark ou Scapy), entender o IHL é pré-requisito para identificar anomalias e decodificar tráfego legítimo com Options ativas, especialmente em ambientes de rede legados ou militares.