O cabeçalho do protocolo UDP é notável por sua extrema simplicidade e eficiência. Diferente do cabeçalho TCP, que possui pelo menos 20 bytes e campos complexos de controle, o cabeçalho UDP possui um tamanho fixo de 8 bytes (64 bits). Essa economia de espaço maximiza o payload disponível para os dados da aplicação e reduz o overhead de processamento em cada pacote.

O cabeçalho é composto por quatro campos de 16 bits cada. Sua função é puramente de endereçamento (entregar para o processo certo) e verificação básica de integridade.

1. Source Port (Porta de Origem) - 16 bits

  • Função: Identifica o número da porta do processo remetente.
  • Utilidade: Permite que o receptor saiba para onde enviar a resposta (o endereço de retorno da comunicação).
  • Opcionalidade: Este campo é opcional. Se não for utilizado (ou se o datagrama não requer resposta), o campo deve ser preenchido com zeros. Isso é comum em mensagens unidirecionais (como certos logs de syslog ou mensagens de rádio multicast).
  • Faixa: Varia de 0 a 65535. Geralmente, em comunicações cliente-servidor, este é um número de porta efêmera (aleatório e alto) escolhido pelo cliente.

2. Destination Port (Porta de Destino) - 16 bits

  • Função: Identifica o número da porta do processo destinatário.
  • Obrigatoriedade: Este campo é obrigatório. Sem ele, o sistema operacional do host de destino não seria capaz de realizar a desmultiplexação, ou seja, não saberia qual aplicação deve receber os dados.
  • Mapeamento: Geralmente aponta para portas bem conhecidas (Well-Known Ports) em comunicações cliente-servidor (ex: 53 para DNS, 67 para DHCP, 161 para SNMP).

3. Length (Comprimento) - 16 bits

  • Função: Especifica o tamanho total do datagrama UDP em bytes.
  • Cálculo: O valor inclui o cabeçalho UDP (8 bytes) + o tamanho dos dados (payload).
  • Valor Mínimo: 8 bytes (apenas o cabeçalho, sem dados).
  • Valor Máximo Teórico: 65.535 bytes (limite de 16 bits).
  • Limitação Prática (MTU): Embora o campo permita 65.535 bytes, o datagrama UDP deve ser encapsulado em um quadro IP. Como a Camada de Enlace tem um MTU (geralmente 1500 bytes na Ethernet), datagramas UDP maiores que isso serão fragmentados pela Camada de Rede (IP). Se a bit “Don’t Fragment” (DF) estiver ativada no IP, um pacote UDP grande será descartado. Na prática, aplicações UDP tentam manter o payload abaixo de 1472 bytes para evitar fragmentação IP.

4. Checksum - 16 bits

  • Função: Campo de verificação de integridade usado para detectar erros de transmissão no cabeçalho e nos dados.
  • Alcance (Pseudo-Cabeçalho): O checksum do UDP é único. Ele não cobre apenas o cabeçalho UDP e os dados. Ele também inclui um Pseudo-Cabeçalho extra derivado do IP, contendo:
    • Endereço IP de Origem
    • Endereço IP de Destino
    • Número do Protocolo (17 para UDP)
    • Comprimento do segmento UDP
  • Propósito: O pseudo-cabeçalho garante que o pacote não foi roteado incorretamente para o host errado.
  • Opcionalidade no IPv4: No IPv4, o uso do checksum é opcional. Se o valor for 0x0000, o checksum está desabilitado (o receptor não o verifica). No entanto, na prática, a maioria das implementações o ativa por padrão para segurança.
  • Obrigatoriedade no IPv6: No IPv6, o checksum UDP é obrigatório. Como o IPv6 removeu o checksum do cabeçalho IP, o checksum do UDP torna-se a única proteção contra corrupção de dados na Camada de Transporte. O valor 0x0000 é inválido no IPv6.
  0      7 8     15 16    23 24    31
 +--------+--------+--------+--------+
 |          source address           |
 +--------+--------+--------+--------+
 |        destination address        |
 +--------+--------+--------+--------+
 |  zero  |protocol|   UDP length    |
 +--------+--------+--------+--------+

Se uma aplicação envia 100 bytes de dados via UDP:
1. Payload: 100 bytes.
2. Cabeçalho UDP: 8 bytes.
3. Campo Length: Será preenchido com o valor 108.
4. Datagrama IP Total: Será o Cabeçalho IP (20 bytes) + Datagrama UDP (108 bytes) = 128 bytes.

Essa estrutura minimalista permite que o UDP seja extremamente rápido, pois o roteador ou o receptor gasta muito pouca CPU para processar esses 4 campos antes de passar os dados para a aplicação.