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.