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

06 - Protocolo UDP

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

O UDP (User Datagram Protocol) é o "irmão rápido e simples" do TCP. Padronizado na RFC 768 (1980), ele foca na velocidade e na eficiência, abrindo mão da confiabilidade extrema em favor da baixa latência.

Enquanto o TCP é como uma chamada telefônica (orientada à conexão), o UDP é como o envio de um cartão-postal (sem conexão).

1. O Papel do UDP na Internet

O UDP é essencial para aplicações onde:
- A perda ocasional de um pacote não é um desastre (ex: voz e vídeo).
- A velocidade de transmissão é mais importante que a integridade absoluta.
- O processamento deve ser o mais leve possível para o host (ex: dispositivos IoT).
- Aplicações implementam sua própria lógica de confiabilidade (ex: QUIC).

2. Cabeçalho Mínimo de 8 Bytes

Diferente do TCP (20 bytes mínimos), o cabeçalho UDP tem apenas 8 bytes, fixos:

 0      7 8     15 16    23 24    31
+--------+--------+--------+--------+
|     Source       | Destination   |
|       Port       |    Port       |
+--------+--------+--------+--------+
|       Length      |   Checksum    |
+--------+--------+--------+--------+
|          data octets ...          |
+-----------------------------------+
Campo Tamanho Função
Source Port 16 bits Porta do emissor (opcional, pode ser 0)
Destination Port 16 bits Porta do receptor
Length 16 bits Tamanho total: cabeçalho (8) + payload
Checksum 16 bits Integridade do cabeçalho + payload + pseudo-header

O campo Length inclui os 8 bytes do cabeçalho, então o payload mínimo é 0 (em segmentos como DNS de 0 bytes para sondagem). O tamanho máximo teórico do datagrama é 65.535 bytes, mas na prática é limitado pela MTU (1500 → 1472 bytes úteis no Ethernet).

3. Características Fundamentais

Característica UDP TCP
Conexão Não Sim (3-way handshake)
Confiabilidade Não (best-effort) Sim
Ordenação Não Sim (sequence numbers)
Controle de fluxo Não Sim (window)
Controle de congestão Não Sim (AIMD, CUBIC, BBR)
Cabeçalho 8 bytes 20 bytes mínimos
Multiplexação Por porta Por porta
Multicast/Broadcast Sim Não
Handshake Não Sim

4. Aplicações Típicas

Protocolo Porta Aplicação
DNS 53 Resolução de nomes (queries curtas)
DHCP 67/68 Atribuição dinâmica de IP
NTP 123 Sincronização de relógio
SNMP 161/162 Gerência de rede
TFTP 69 Transferência simples de arquivos
Syslog 514 Logs centralizados
RTP / RTCP 5004/5005 VoIP, vídeo (WebRTC, SIP)
QUIC 443/UDP HTTP/3
WireGuard 51820/UDP VPN moderna
Jogos online Variável Baixa latência, tolerância a perda

Por que DNS usa UDP?

Uma query DNS típica tem ~70 bytes, e o cliente não quer pagar o custo do 3-way handshake do TCP (1 RTT extra) só para resolver um nome. A resposta usualmente cabe em um único datagrama. Quando a resposta excede 512 bytes (DNSSEC, respostas grandes), o servidor sinaliza com TC flag = 1 (truncation) e o cliente refaz a query sobre TCP.

5. Sem Controle de Fluxo ou Congestão

O UDP é "send-and-forget": a aplicação envia o datagrama e o protocolo não bloqueia, não retransmite, não ajusta taxa. Isso significa:
- Uma aplicação mal comportada pode saturar o link sem freio algum.
- Em redes sem QoS, fluxos UDP podem "afogar" conexões TCP (que recuam ao detectar perda).

Para evitar isso, a RFC 8085 recomenda que aplicações UDP implementem algum controle de congestionamento (ex: TCP-friendly rate control ou algoritmos como LEDBAT). QUIC e WebRTC já fazem isso nativamente.

6. Checksum e Pseudo-Header

O campo Checksum do UDP é facultativo em IPv4 (pode ser zero), mas obrigatório em IPv6. Quando calculado, envolve um pseudo-header que inclui IPs de origem e destino — isso permite ao receptor detectar se o datagrama foi entregue ao IP errado.

Pseudo-header:
+--------+--------+--------+--------+
|         Source IP Address         |
+--------+--------+--------+--------+
|      Destination IP Address       |
+--------+--------+--------+--------+
|  zero  |  proto |   UDP length    |
+--------+--------+--------+--------+

7. Multicast e Broadcast

O UDP suporta nativamente o envio para múltiplos destinos:
- Broadcast (255.255.255.255 ou subnet broadcast): usado em DHCP, ARP (este último é L2, não UDP).
- Multicast (224.0.0.0/4): IPTV, OSPF, descoberta de serviços (mDNS, SSDP).

O TCP não suporta esses modos porque exige conexão ponto-a-ponto.

8. Estrutura do Módulo UDP

Nesta seção, exploraremos as engrenagens internas deste protocolo:

  1. Características Técnicas: Melhor Esforço e Stateless
  2. A Estrutura Minimalista do Datagrama UDP

9. Análise Prática

# Verificar sockets UDP abertos
ss -unlp

# Capturar datagramas UDP de DNS
sudo tcpdump -i eth0 -n udp port 53 -vv

# Sonda manual de DNS via netcat
echo -ne '\xab\xcd\x01\x00\x00\x01\x00\x00\x00\x00\x00\x00\x07example\x03com\x00\x00\x01\x00\x01' | nc -u -w2 8.8.8.8 53 | xxd

10. UDP em Cenários Modernos

A web moderna redescobriu o UDP com o QUIC (RFC 9000, transporta HTTP/3). Motivos:
- Múltiplos fluxos independentes sem bloqueio de cabeça de fila (head-of-line blocking).
- 0-RTT para conexões repetidas (mais rápido que o TCP+TLS 1.3).
- Mobilidade (conexão identificada por Connection ID e não por 5-tuple, sobrevive a troca de IP).
- Confiabilidade customizada em userspace, evoluindo sem precisar de mudanças no kernel.


Note

Muitos dos protocolos fundamentais da Internet, como o DNS, o DHCP e o NTP, rodam sobre o UDP devido à sua simplicidade e baixo consumo de recursos. A filosofia do UDP resume-se a: a rede entrega o que pode, a aplicação lida com o resto.