UDP e Comunicacao sem Conexao
Video da aula estara disponivel em breve
O papel da camada de transporte
A camada de transporte e responsavel pela comunicacao entre processos (nao entre hosts — isso e responsabilidade da camada de rede). Ela usa portas para multiplexar e demultiplexar dados entre multiplas aplicacoes rodando no mesmo host.
Multiplexacao / Demultiplexacao:
Host A Host B
┌──────────────────────┐ ┌──────────────────────┐
│ App1 (porta 5000) │ │ Servidor Web (:80) │
│ App2 (porta 5001) │ │ Servidor SSH (:22) │
│ App3 (porta 5002) │ │ Servidor DNS (:53) │
└──────────┬───────────┘ └──────────┬───────────┘
│ │
[Camada de Transporte] [Camada de Transporte]
Multiplexacao: combina Demultiplexacao: separa
dados de App1,2,3 em dados e entrega a cada
um unico fluxo de rede processo pela porta correta
│ │
───────────── REDE ──────────────────────
UDP: User Datagram Protocol
UDP e o protocolo de transporte mais simples possivel. Ele adiciona apenas multiplexacao (portas) e checksum (deteccao de erros) sobre IP. Nada mais: sem conexao, sem confiabilidade, sem ordenacao, sem controle de fluxo.
Formato do segmento 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 ... |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Header UDP: apenas 8 bytes!
- Source Port: 16 bits (porta de origem)
- Destination Port: 16 bits (porta de destino)
- Length: 16 bits (tamanho total: header + data)
- Checksum: 16 bits (deteccao de erros, opcional em IPv4)
Checksum
O checksum UDP usa complemento de 1 sobre o cabecalho, dados e um pseudo-header (inclui IPs de origem e destino). Se o checksum calculado pelo receptor nao confere, o segmento e descartado silenciosamente.
Quando usar UDP
Use UDP quando: Exemplos:
───────────────────────── ──────────────────
Velocidade > confiabilidade Video streaming, VoIP
Perda aceitavel Jogos online (posicao de jogadores)
Mensagens pequenas/simples DNS queries (53/udp)
Broadcast/multicast Descoberta de dispositivos (mDNS)
Aplicacao controla confiabilidade QUIC (UDP + confiabilidade propria)
Use TCP quando:
─────────────────────────
Dados devem chegar intactos Transferencia de arquivos
Ordem importa HTTP, email
Confiabilidade e obrigatoria Transacoes financeiras, banco de dados
UDP com sockets em Python
import socket
# ── Servidor UDP ──
def udp_server():
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # DGRAM = UDP
sock.bind(("0.0.0.0", 9999))
print("Servidor UDP ouvindo na porta 9999")
while True:
data, addr = sock.recvfrom(1024) # Recebe datagrama
print(f"Recebido de {addr}: {data.decode()}")
sock.sendto(f"Echo: {data.decode()}".encode(), addr)
# ── Cliente UDP ──
def udp_client():
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.sendto(b"Hello, UDP!", ("localhost", 9999))
data, addr = sock.recvfrom(1024)
print(f"Resposta: {data.decode()}")
sock.close()
accept() como TCP. Nao ha handshake, nao ha conexao. Cada sendto() e independente. Se o servidor estiver fora do ar, o cliente nao recebe erro — o pacote simplesmente se perde.
No harness.os
UDP e util no harness.os para cenarios onde velocidade importa mais que confiabilidade:
Cenarios UDP no harness.os:
1. Event broadcasting (fire-and-forget):
Agente completa task --> broadcast evento para dashboard
Se o dashboard perder um evento, o proximo atualiza o estado
2. Health check pings:
Orchestrator --> UDP ping --> Mesh node
Resposta rapida sem overhead de TCP handshake
3. Logging nao-critico:
Agente --> UDP --> Log collector
Perder uma mensagem de log nao e grave
4. Metricas de token usage:
Agente --> UDP --> Metricas aggregator
Dados sao amostras — perder um ponto nao afeta a media
Contraexemplo (NAO use UDP):
Session handoff: dados criticos, devem chegar intactos --> TCP
Knowledge sync: order matters, no loss --> TCP
Neon DB queries: PostgreSQL usa TCP obrigatoriamente
Resumo
- A camada de transporte usa portas para multiplexar processos
- UDP: connectionless, sem garantias, header minimo (8 bytes)
- Checksum detecta erros mas nao os corrige
- Ideal para: DNS, streaming, gaming, broadcast
- Nao use para dados que devem chegar intactos e em ordem
Exercicio pratico
Construa um event broadcaster UDP para sessoes harness.os.
- Servidor UDP que recebe eventos no formato JSON e exibe no console
- Cliente que envia eventos como
{"type": "task_complete", "agent": "build-ai"} - Teste: envie 100 eventos rapidos. Quantos o servidor recebe? (ilustra perda de pacotes)
- Adicione um sequence number ao JSON para detectar perdas
Verifique seu entendimento
Qual dos seguintes servicos tipicamente usa UDP em vez de TCP?