06 - Protocolo UDP
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:
- Características Técnicas: Melhor Esforço e Stateless
- 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.
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.