Hoje vamos mergulhar nos protocolos da camada de transporte do modelo TCP/IP. Essa camada é fundamental porque oferece comunicação lógica entre processos de aplicação rodando em hosts distintos. Diferente da camada de rede, que fornece comunicação entre hosts (endereçamento IP), a camada de transporte trabalha com multiplexação e demultiplexação através do conceito de portas. Basicamente, ela pega os dados da camada de aplicação e os segmenta (ou não) para a camada de rede. Vamos focar nos dois principais protocolos dessa camada: TCP (Transmission Control Protocol) e UDP (User Datagram Protocol).

Visão Geral da Camada de Transporte

A camada de transporte atua como uma ponte entre a camada de aplicação e a camada de rede. Ela é responsável por multiplexar/demultiplexar os dados, utilizando portas (portas TCP/UDP) para identificar qual aplicação deve receber os dados. Um pacote chega com um número de porta de destino, e o sistema operacional encaminha para o processo correto.

As portas são numeradas de 0 a 65535. As portas bem conhecidas (0 a 1023) são reservadas para serviços padrão como HTTP (80), HTTPS (443), DNS (53) e SSH (22). Portas registradas (1024 a 49151) são usadas por aplicações específicas, e portas efêmeras/dinâmicas (49152 a 65535) são usadas temporariamente pelos clientes durante uma conexão.

Dois protocolos dominam esta camada: TCP e UDP, cada um com características e casos de uso específicos que vamos detalhar a seguir.

Protocolo UDP (User Datagram Protocol)

O UDP é um protocolo simples, sem conexão (connectionless) e não confiável. Não há handshake antes da transmissão. O processo de origem simplesmente encapsula os dados em um segmento UDP — cabeçalho de apenas 8 bytes contendo portas de origem e destino, comprimento e um checksum opcional — e entrega à camada de rede. Não há retransmissão, garantia de ordem, confirmação de recebimento (ACK) nem controle de fluxo ou congestionamento.

Isso traz vantagens em termos de latência e overhead, tornando o UDP ideal para aplicações em tempo real onde a perda eventual de um pacote é aceitável, mas o atraso não é. Exemplos clássicos incluem:

  • Voice over IP (VoIP) e videochamadas
  • Streaming de vídeo ao vivo
  • Jogos online multiplayer
  • Consultas DNS (Domain Name System)
  • DHCP (Dynamic Host Configuration Protocol)
  • SNMP (Simple Network Management Protocol)

A natureza stateless do UDP também o torna útil para aplicações que implementam seus próprios mecanismos de confiabilidade na camada de aplicação, como o protocolo QUIC (usado no HTTP/3).

Protocolo TCP (Transmission Control Protocol)

O TCP é o oposto do UDP: é orientado à conexão, confiável e possui controle de fluxo e congestionamento. Ele garante que os dados sejam entregues ao destino na ordem correta, sem perdas e sem duplicação.

Three-way Handshake

Antes de transmitir dados, o TCP estabelece uma conexão lógica através do three-way handshake. O processo funciona assim:

  1. SYN: O cliente envia um segmento com o flag SYN ativo, informando seu número de sequência inicial.
  2. SYN-ACK: O servidor responde com SYN-ACK, confirmando o recebimento e enviando seu próprio número de sequência.
  3. ACK: O cliente confirma o recebimento do SYN-ACK e a conexão está estabelecida.

Esse processo consome 1 RTT (Round Trip Time) antes de qualquer dado ser enviado, mas garante que ambos os lados estejam prontos para a comunicação.

Confiabilidade e Controle

O TCP utiliza números de sequência e acknowledgment (ACK) para garantir a entrega. Cada segmento enviado deve ser confirmado pelo receptor. Se o remetente não receber um ACK dentro de um tempo determinado (timeout), ele retransmite o segmento.

O controle de fluxo utiliza uma janela deslizante (sliding window) que permite ao transmissor enviar múltiplos segmentos antes de receber um ACK, otimizando o uso da rede. O receptor anuncia o tamanho da sua janela (receiver window, rwnd) para que o remetente não o sobrecarregue.

Já o controle de congestionamento utiliza o conceito de janela de congestionamento (congestion window, cwnd), com algoritmos como AIMD (Additive Increase Multiplicative Decrease), Slow Start (crescimento exponencial) e Congestion Avoidance (crescimento linear). A perda de pacotes (detectada por timeout ou ACKs duplicados) faz com que o TCP reduza drasticamente a taxa de transmissão para não colapsar a rede.

Diferenças Principais entre TCP e UDP

Característica TCP UDP
Conexão Orientado à conexão Sem conexão
Confiabilidade Garantida (ACK + retransmissão) Não garantida (melhor esforço)
Ordenação Garante ordem Não garante ordem
Controle de Fluxo Sim (janela deslizante) Não
Controle de Congestionamento Sim (Slow Start, AIMD) Não
Velocidade Mais lento (overhead de controle) Mais rápido
Tamanho do Cabeçalho 20 bytes (mínimo, sem opções) 8 bytes
Casos de Uso Típicos HTTP, FTP, SMTP, SSH, Banco de Dados DNS, DHCP, SNMP, TFTP, VoIP, Streaming

Aplicações Práticas e Casos Híbridos

A escolha entre TCP e UDP depende estritamente dos requisitos da aplicação. Aplicações que precisam de transferência confiável de arquivos, como navegação web (HTTP/HTTPS), e-mail (SMTP/IMAP) e acesso remoto (SSH), utilizam TCP. A confiabilidade é crucial aqui, e o overhead do TCP é um custo aceitável.

Por outro lado, aplicações em tempo real frequentemente escolhem UDP. Em uma videochamada, perder um frame é preferível a atrasar a transmissão inteira para retransmiti-lo. O UDP proporciona a baixa latência necessária para uma experiência fluida.

Um caso híbrido interessante é o QUIC (Quick UDP Internet Connections), usado no HTTP/3. Ele roda sobre UDP, mas implementa confiabilidade, controle de congestionamento e criptografia na camada de aplicação. Isso evita o atraso do handshake TCP somado ao handshake TLS (que juntos podem levar 2-3 RTTs), reduzindo para 1 RTT (ou até 0 RTT em conexões prévias). O QUIC combina a baixa latência do UDP com a confiabilidade e segurança que esperamos do TCP+TLS.

Perguntas Frequentes

P: Qual a principal diferença entre TCP e UDP?
R: TCP é orientado à conexão e confiável, garantindo entrega e ordem dos dados através de confirmações (ACKs) e retransmissões. UDP é sem conexão e não confiável, focado em velocidade e baixa latência sem garantia de entrega.

P: Por que o TCP é usado para navegação web?
R: A navegação web (HTTP/HTTPS) exige que os dados (HTML, CSS, JS) cheguem completos e na ordem correta para renderizar a página corretamente. Qualquer perda de pacote poderia corromper a página, então a confiabilidade do TCP é essencial.

P: O que é um socket?
R: Um socket é a combinação de um endereço IP e um número de porta. Por exemplo, 192.168.1.10:443. Ele identifica unicamente um ponto final de uma conexão de rede, permitindo que múltiplas aplicações rodem simultaneamente no mesmo host sem conflito.

P: O que é o Three-way Handshake?
R: É o processo de estabelecimento de conexão do TCP, composto por três etapas: SYN, SYN-ACK e ACK. Ele sincroniza os números de sequência entre cliente e servidor e prepara ambos para a troca de dados.

P: Por que o QUIC usa UDP se precisa de confiabilidade?
R: O QUIC implementa confiabilidade e segurança na própria camada de aplicação, rodando sobre UDP para evitar o atraso de estabelecimento de conexão do TCP (handshake TCP + TLS). Isso reduz a latência inicial, mantendo uma experiência segura e confiável.