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

05 - Campos do Cabeçalho

video explicativo
Video explicativoEspaco reservado para o video desta anotação — adicione 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:

  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.
  5. 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:

  1. Verifica o checksum (se habilitado). Se falhar, descarta silenciosamente.
  2. Lê o campo Destination Port.
  3. Consulta a tabela interna de soquetes UDP abertos.
  4. Se houver um soquete ouvindo aquela porta, os dados são copiados para o buffer de recepção daquele processo.
  5. 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.