College Online
0%

UDP e Comunicacao sem Conexao

Modulo 3 · Aula 1 ~20 min de leitura Nivel: Intermediario

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.

Diagrama
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

Diagrama
 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

Referencia
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

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()
!
Sem conexao = sem garantias Observe que o servidor UDP nao chama 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:

Diagrama
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

Exercicio pratico

Construa um event broadcaster UDP para sessoes harness.os.

  1. Servidor UDP que recebe eventos no formato JSON e exibe no console
  2. Cliente que envia eventos como {"type": "task_complete", "agent": "build-ai"}
  3. Teste: envie 100 eventos rapidos. Quantos o servidor recebe? (ilustra perda de pacotes)
  4. Adicione um sequence number ao JSON para detectar perdas

Verifique seu entendimento

Qual dos seguintes servicos tipicamente usa UDP em vez de TCP?

  • HTTP (transferencia de paginas web)
  • SMTP (envio de email)
  • DNS (resolucao de nomes de dominio)
  • SSH (acesso remoto seguro)