05 - Campos do Cabeçalho
video: https://youtu.be/... no frontmatter da nota.Campos do Cabeçalho UDP
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 o bit "Don't Fragment" (DF) estiver ativado 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 |
+--------+--------+--------+--------+
5. Diagrama do Cabeçalho UDP
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Source Port | Destination Port |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Length | Checksum |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| data octets ... |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
6. Cálculo do Checksum (Algoritmo)
O checksum é calculado sobre o complemento de um (ones' complement) da soma em complemento de um de todos os campos de 16 bits (incluindo o pseudo-cabeçalho). Se a soma não preencher múltiplos de 16 bits, um byte zero é adicionado ao final para fins de cálculo (padding).
PASSO 1: Somar todos os campos de 16 bits (pseudo + cabeçalho + dados)
PASSO 2: Adicionar os carries (vai-um) ao resultado
PASSO 3: Inverter todos os bits (complemento de um)
PASSO 4: O resultado é o valor do campo Checksum
No receptor, o mesmo cálculo é feito incluindo o campo Checksum recebido. Se o resultado for 0xFFFF, o pacote está íntegro.
7. Exemplo Prático de Cálculo de Tamanho
Se uma aplicação envia 100 bytes de dados via UDP:
- Payload: 100 bytes.
- Cabeçalho UDP: 8 bytes.
- Campo Length: Será preenchido com o valor 108.
- Datagrama IP Total: Será o Cabeçalho IP (20 bytes) + Datagrama UDP (108 bytes) = 128 bytes.
- Quadro Ethernet Total: 128 + 14 (cabeçalho Ethernet) + 4 (FCS) = 146 bytes.
8. Comparação Cabeçalho UDP x TCP
| Campo | UDP (8 bytes) | TCP (20 bytes mínimo) |
|---|---|---|
| Porta de origem | Sim (16 bits) | Sim (16 bits) |
| Porta de destino | Sim (16 bits) | Sim (16 bits) |
| Comprimento | Sim (16 bits) | Implícito no IP |
| Checksum | Opcional (IPv4) | Obrigatório |
| Número de sequência | Não | Sim (32 bits) |
| ACK Number | Não | Sim (32 bits) |
| Janela (Window) | Não | Sim (16 bits) |
| Flags de controle | Não | Sim (9 bits) |
| Ponteiro de urgência | Não | Sim (16 bits) |
9. Desmultiplexação no Destino
Quando um datagrama UDP chega ao host destino, o kernel do SO executa as seguintes etapas:
- Verifica o checksum (se habilitado). Se falhar, descarta silenciosamente.
- Lê o campo
Destination Port. - Consulta a tabela interna de soquetes UDP abertos.
- Se houver um soquete ouvindo aquela porta, os dados são copiados para o buffer de recepção daquele processo.
- Se não houver processo escutando, o kernel gera uma mensagem ICMP "Port Unreachable" (Tipo 3, Código 3) enviada de volta ao remetente.
10. Vantagens do Cabeçalho Minimalista
- Baixo Overhead: Apenas 8 bytes de cabeçalho contra 20 do TCP.
- Processamento Rápido: Roteadores e hosts gastam pouca CPU para interpretar esses 4 campos.
- Ideal para Pequenas Mensagens: Em transações DNS (geralmente < 512 bytes), o overhead do cabeçalho UDP é insignificante.
- Compatível com Multicast: Não há estado a ser mantido, permitindo entrega um-para-muitos eficiente.
11. Conclusão
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. A simplicidade é proposital: o UDP prioriza desempenho sobre confiabilidade, deixando para a aplicação a decisão sobre se e como implementar controle de erro, ordem e retransmissão. Esse design fez do UDP a base ideal para DNS, DHCP, VoIP, streaming e os modernos protocolos como QUIC.