01 - Não Orientado à Conexão
video: https://youtu.be/... no frontmatter da nota.Não Orientado à Conexão (Connectionless)
1. Definição
A característica "Não Orientado à Conexão" é o princípio operacional fundamental do protocolo UDP (RFC 768). Ela define que não existe um ciclo de vida formal para a comunicação: não há fase preliminar de estabelecimento (handshake), não há fase de manutenção de estado e não há fase formal de encerramento.
No modelo "sem conexão", a comunicação é tratada como uma série de transações isoladas. O processo remetente envia dados para o processo receptor sem perguntar se o receptor está pronto, sem avisar que vai enviar e sem esperar um "sinal verde". É o equivalente digital a enviar uma carta pelo correio: você escreve, coloca na caixa e espera que chegue, sem saber se o destinatário está em casa.
Comparação com TCP (Orientado à Conexão)
| Fase | TCP (orientado) | UDP (não orientado) |
|---|---|---|
| Estabelecimento | Three-way handshake (SYN, SYN-ACK, ACK) | Nenhum |
| Transferência | Fluxo contínuo de bytes com estado | Datagramas isolados sem estado |
| Encerramento | Four-way (FIN, ACK, FIN, ACK) + TIME_WAIT | Nenhum |
| Estado no kernel | TCB (Transmission Control Block) por conexão | Nenhum |
| Latência inicial | 1 RTT antes do primeiro byte | Zero |
| Memória | Proporcional ao nº de conexões | Quase constante |
2. Ausência de Handshake (Aperto de Mão)
A diferença mais imediata em relação a protocolos orientados à conexão é a falta de estabelecimento formal.
- Início Imediato: No TCP, antes de qualquer dado útil viajar, os hosts devem trocar mensagens de sincronização (SYN, SYN-ACK, ACK). Isso consome tempo (pelo menos 1 RTT - Round Trip Time). No UDP, o cabeçalho é criado e os dados são passados imediatamente para a Camada IP. A latência inicial é zero.
- Sem Negociação de Parâmetros: Como não há handshake, não há oportunidade para negociar parâmetros como MSS (Maximum Segment Size) ou janela de recebimento. O remetente assume que o receptor pode lidar com o que está sendo enviado, o que exige que a aplicação evite pacotes maiores que o MTU (Path MTU Discovery, RFC 1191).
Diagrama de Tempo
TCP (3-way handshake):
Cliente Servidor
|--- SYN ------->|
|<-- SYN/ACK ----|
|--- ACK ------->| (1 RTT antes do 1o byte de dados)
|--- data ------->|
UDP (sem handshake):
Cliente Servidor
|--- data ------->| (imediatamente)
3. Comunicação "Dispare e Esqueça" (Fire and Forget)
O fluxo de dados é estritamente unidirecional do ponto de vista do transporte.
- Isolamento da Transmissão: Quando o emissor envia um datagrama, o protocolo UDP descarta a informação imediatamente após o envio. Ele não mantém uma cópia do datagrama em um buffer de retransmissão e não espera por uma resposta.
- Foco na Ação: A responsabilidade do protocolo termina no momento em que o dado é entregue à Camada de Rede. Se o dado chegar ao destino, ótimo. Se se perder no caminho, o emissor nunca saberá (a menos que a aplicação implemente seu próprio timer).
4. Ausência de Estado (Statelessness)
Em arquitetura de redes, "estado" significa manter memória sobre transações passadas. O UDP é stateless (sem estado).
4.1 Sem TCB (Transmission Control Block)
No TCP, cada conexão requer que o kernel aloque uma estrutura de dados complexa (TCB) contendo números de sequência, tamanhos de janela, timers, buffers de reordenação, etc. Em Linux (struct tcp_sock), isso chega a ~2 KB por conexão. Um servidor com 100.000 conexões TCP já consome ~200 MB só de TCBs.
4.2 Eficiência de Memória no UDP
No UDP, o servidor não precisa alocar memória para manter o estado de um "cliente conectado". O servidor simplesmente tem um socket aberto na porta. Quando um datagrama chega, ele lê, processa e esquece. Isso permite que um servidor UDP atenda a milhões de clientes simultâneos com uso de memória constante.
Exemplos práticos:
- Servidor DNS recursivo (BIND, Unbound): Pode atender dezenas de milhares de clientes por segundo com poucos MB de RAM.
- Servidor NTP: Um único servidor NTP público (ex.: pool.ntp.org) atende centenas de milhares de clientes UDP por segundo com uso de CPU e RAM desprezíveis.
5. Flexibilidade na Topologia
A natureza sem conexão oferece flexibilidade operacional.
- Mudança Dinâmica de Destino: Como não há "tubo" fixo, um remetente pode enviar o primeiro datagrama para o IP A e o segundo para o IP B usando o mesmo socket. Exemplo: um servidor DNS que responde a clientes diferentes a partir do mesmo socket UDP/53.
- Multicast Nativo: O modelo sem conexão é o único que suporta Multicast eficientemente. Não seria possível estabelecer conexões TCP bilaterais com 10.000 receptores simultaneamente. Com UDP, o servidor envia um único datagrama para um endereço de grupo (224.0.0.0/4), e a rede faz a replicação. O receptor entra (IGMP Join) e sai (IGMP Leave) do grupo sem nunca "conversar" com o servidor.
Exemplos de aplicações multicast UDP: IPTV, streaming de câmeras IP (RTP/RTSP), descoberta de serviços (mDNS, SSDP), sincronização de estado em clusters (Corosync, VRRP).
6. O Princípio do "Melhor Esforço" (Best-Effort)
O UDP herda o serviço "melhor esforço" do IP. Ser não orientado à conexão significa aceitar as imperfeições da rede.
- Perda Silenciosa: Se a rede estiver congestionada e um roteador descartar o datagrama UDP (tail drop, RED, CoDel), o UDP não será notificado. Não haverá retransmissão automática.
- Chegada Fora de Ordem: Como não há conexão com números de sequência contínuos, o receptor aceita os datagramas na ordem em que o IP os entrega. Se o Datagrama 2 chegar antes do 1, será entregue primeiro à aplicação.
- Duplicação: Em raros casos (ex.: reconfiguração de rota em redes redundantes), um mesmo datagrama pode chegar duas vezes. O UDP não remove duplicatas.
7. Implicações para a Aplicação
Como o protocolo de transporte não oferece conectividade gerenciada, a aplicação assume a responsabilidade:
- Confiabilidade Opcional: Se a aplicação precisa saber que o dado chegou (ex.: TFTP - Trivial File Transfer Protocol, RFC 1350), ela deve implementar sua própria lógica de números de sequência e ACKs sobre o UDP.
- Descoberta de Falhas: A aplicação pode implementar timeouts. Se não receber resposta em X segundos, assume que o pedido foi perdido e tenta novamente.
- Controle de Congestionamento Opcional: Aplicações que geram grandes volumes de tráfego UDP (ex.: QUIC antes da adoção generalizada, alguns protocols P2P) devem implementar controle de congestão para não saturar a rede. A RFC 8085 define diretrizes obrigatórias para uso de UDP.
8. Latência Comparativa: TCP vs UDP
Cenário de consulta DNS a 50 ms de RTT:
| Etapa | TCP | UDP |
|---|---|---|
| Handshake | +50 ms (1 RTT) | 0 ms |
| Envio da consulta | +50 ms (1 RTT) | +50 ms |
| Total até resposta | ~100 ms | ~50 ms |
Essa diferença de 50 ms explica por que DNS, NTP, SNMP, DHCP e protocolos de tempo real (VoIP, gaming) usam UDP: a latência de handshake é inaceitável para esses casos.
9. Resumo Técnico
| Atributo | UDP (não orientado) |
|---|---|
| Handshake | Não |
| Estado por fluxo | Não (stateless) |
| Latência inicial | 0 ms |
| Multicast | Suportado nativamente |
| Custo de memória por fluxo | ~0 |
| RFC de referência | RFC 768 (1980), RFC 8085 (2017) |
10. Conclusão
"Não Orientado à Conexão" representa a escolha pela velocidade e simplicidade. O UDP remove toda a burocracia da comunicação de rede (handshake, estado, encerramento, ACKs), permitindo que dados voem pela rede sem atrasos, mas exige que as aplicações sejam resilientes e tolerantes a falhas. É a base ideal para DNS, NTP, VoIP, streaming e qualquer cenário onde baixa latência e escala massiva importem mais que entrega garantida.