Hoje nas nossas aulas de redes de computadores, mergulhamos fundo na camada de transporte. Esta camada é uma das mais importantes do modelo TCP/IP, responsável por estabelecer uma comunicação lógica entre processos rodando em hosts diferentes. Diferente da camada de rede (Internet), cujo trabalho é levar os pacotes até o host correto, a camada de transporte tem a tarefa mais refinada de entregar os dados ao processo (aplicação) correto dentro daquele host. Para isso, ela utiliza dois protocolos principais: UDP e TCP.

A camada de transporte oferece dois tipos de serviços principais: o serviço não orientado à conexão (UDP) e o serviço orientado à conexão (TCP). Vamos entender as diferenças e particularidades de cada um.

Multiplexação e Demultiplexação

Antes de falarmos diretamente dos protocolos, é essencial entender o conceito de multiplexação e demultiplexação, que é a função base da camada de transporte.

  • Multiplexação: Do lado do remetente, a camada de transporte coleta dados de vários sockets de aplicação (como navegador, cliente de e-mail, SSH) e os encapsula em segmentos, adicionando um cabeçalho que contém as portas de origem e destino. Esse cabeçalho é fundamental para que o destino saiba a qual aplicação entregar os dados.
  • Demultiplexação: Do lado do destinatário, a camada de transporte examina os campos do cabeçalho (principalmente a porta de destino) e entrega os dados ao socket correto. Este mecanismo permite que múltiplas aplicações usem a rede simultaneamente sem que os dados de uma se misturem com os da outra.

O processo de multiplexação/demultiplexação é implementado tanto no UDP quanto no TCP, mas cada um lida com isso de forma ligeiramente diferente. No UDP, o socket é identificado apenas pela porta de destino. No TCP, a identificação é feita por uma tupla de quatro valores: IP de origem, porta de origem, IP de destino e porta de destino.

Protocolo UDP (User Datagram Protocol)

O UDP é o protocolo mais simples da camada de transporte. Ele é leve, não orientado à conexão (connectionless) e não oferece garantia de entrega. Isso significa que não há um handshake antes do envio dos dados, e não há confirmação de recebimento (ACK). Se um segmento for perdido na rede, o UDP não tentará reenviá-lo.

Características principais do UDP:

  • Sem conexão: Não há handshake entre remetente e destinatário. Os dados são enviados imediatamente.
  • Não confiável: A entrega não é garantida. Se um pacote for perdido, ele não será retransmitido.
  • Sem controle de fluxo: O UDP não possui mecanismos para evitar que o remetente sobrecarregue o receptor.
  • Baixo overhead: O cabeçalho do UDP tem apenas 8 bytes, tornando-o extremamente rápido.

Um segmento UDP possui um cabeçalho de apenas 8 bytes contendo: porta de origem (2 bytes), porta de destino (2 bytes), comprimento do segmento (2 bytes) e checksum (2 bytes). A simplicidade do UDP o torna ideal para aplicações onde a velocidade é mais crítica do que a confiabilidade, como streaming de vídeo ao vivo, jogos online, VoIP e consultas DNS.

Protocolo TCP (Transmission Control Protocol)

Diferente do UDP, o TCP é orientado à conexão (connection-oriented) e confiável. Ele foi projetado para garantir que os dados enviados cheguem ao destino na ordem correta e sem erros, mesmo que a camada de rede abaixo seja não confiável. O TCP é o protocolo base para a grande maioria das aplicações web (HTTP, HTTPS), e-mail (SMTP, IMAP) e transferência de arquivos (FTP).

Características principais do TCP:

  • Orientação à conexão: Antes de enviar os dados, o TCP estabelece uma conexão lógica entre o remetente e o destinatário através do famoso handshake de três vias (SYN, SYN-ACK, ACK).
  • Confiabilidade: O TCP utiliza números de sequência e ACKs para garantir que todos os dados sejam recebidos. Se um segmento não for confirmado, ele é retransmitido.
  • Controle de fluxo: Implementa um mecanismo de janela deslizante (sliding window) que ajusta a taxa de transmissão para evitar que o receptor seja sobrecarregado.
  • Controle de congestionamento: O TCP também possui algoritmos (Slow Start, Congestion Avoidance, Fast Retransmit/Fast Recovery) para evitar que o remetente sobrecarregue a rede, ajustando dinamicamente a taxa de envio com base nas condições da rede.

O cabeçalho do TCP é maior, com 20 bytes (sem opções), e contém campos como porta de origem/destino, número de sequência, número de ACK, flags (SYN, ACK, FIN, RST, etc.), tamanho da janela, checksum e ponteiro de urgência. Essa complexidade extra é o preço a se pagar pela confiabilidade e pelas funcionalidades avançadas.

Comparação TCP vs UDP

A escolha entre TCP e UDP depende estritamente dos requisitos da aplicação. Abaixo uma tabela comparativa para fixar os conceitos:

Característica TCP UDP
Conexão Orientado à conexão (handshake) Sem conexão
Confiabilidade Garantida (ACKs e retransmissão) Não garantida (melhor esforço)
Ordenação Garantida (números de sequência) Não garantida
Controle de Fluxo Sim (janela deslizante) Não
Controle de Congestionamento Sim (Slow Start, etc.) Não
Velocidade Mais lento (overhead de controle) Mais rápido (baixo overhead)
Tamanho do Cabeçalho 20 bytes (mínimo) 8 bytes
Uso Típico Web (HTTP/HTTPS), Email (SMTP), FTP Streaming, VoIP, DNS, Jogos Online

FAQ — Perguntas Frequentes sobre a Camada de Transporte

O que é um socket?
É a interface entre o processo da aplicação e a camada de transporte. No modelo Internet, um socket é identificado pelo endereço IP e pelo número da porta. É através do socket que a aplicação envia e recebe dados da rede.
Por que o UDP existe se ele não é confiável?
Porque para muitas aplicações, a velocidade e a baixa latência são mais importantes do que a garantia de entrega. O UDP não tem o overhead do handshake e do controle de fluxo, o que o torna ideal para aplicações em tempo real. Perder um frame de vídeo é melhor do que ter que esperar a retransmissão dele.
O que é o Three-Way Handshake do TCP?
É o processo de estabelecimento de conexão do TCP, composto por três mensagens: o remetente envia um segmento SYN (synchronize), o destinatário responde com SYN-ACK (synchronize-acknowledge), e o remetente finaliza com um ACK (acknowledge). A partir desse momento, a conexão está estabelecida e os dados podem fluir.
O controle de fluxo e o controle de congestionamento não são a mesma coisa?
Não, são conceitos diferentes. O controle de fluxo visa evitar que o remetente sobrecarregue o receptor (ponto a ponto). O controle de congestionamento visa evitar que o remetente sobrecarregue a rede como um todo (evitando a perda de pacotes por saturação dos roteadores).

Estas foram as anotações de hoje sobre a camada de transporte do modelo TCP/IP. Entender a diferença entre TCP e UDP e como a multiplexação/demultiplexação funciona é fundamental para qualquer profissional de redes e sistemas. Para mais conteúdos como este, navegue pela lista completa de posts do blog ou explore as tags para encontrar assuntos específicos.