A camada de transporte é a quarta camada do modelo OSI e a segunda do modelo TCP/IP. Sua principal função é permitir a comunicação lógica entre processos de aplicação que rodam em hosts distintos. Diferente das camadas inferiores, que cuidam do roteamento e da entrega física dos dados, a camada de transporte trabalha diretamente com a multiplexação de aplicações através do conceito de portas. Nesta aula, vamos detalhar o funcionamento dos dois principais protocolos dessa camada: TCP e UDP.
Multiplexação e Demultiplexação com Portas
Imagine um servidor que roda um servidor web (HTTP) e um servidor de email (SMTP) simultaneamente. Quando um pacote chega para esse servidor, como ele sabe para qual aplicação entregar os dados? A resposta está no número da porta.
O cabeçalho da camada de transporte contém campos para a porta de origem e a porta de destino. A combinação de um endereço IP com um número de porta forma um socket, que é o endpoint único de uma comunicação.
- Multiplexação (transmissor): Coletar dados de diferentes aplicações, encapsulá-los em segmentos (TCP) ou datagramas (UDP) com o cabeçalho apropriado, e passá-los para a camada de rede.
- Demultiplexação (receptor): Utilizar o campo de porta de destino no cabeçalho do segmento/datagrama recebido para entregar os dados ao processo de aplicação correto.
Vimos em aulas anteriores de redes (como as dos dias 277, 281 e 284) que a camada de rede (IP) cuida da entrega "host-a-host". A camada de transporte estende essa entrega para "processo-a-processo".
Protocolo UDP (User Datagram Protocol)
O UDP é o protocolo mais simples da camada de transporte. Ele fornece um serviço de entrega de dados sem conexão e não confiável. Não há handshake antes do envio, e o protocolo não oferece garantias de que os dados chegarão ao destino.
Características principais do UDP:
- Sem conexão: Não há estabelecimento de conexão. Cada datagrama é independente.
- Não confiável: Pacotes podem ser perdidos, duplicados ou chegar fora de ordem sem nenhuma ação corretiva por parte do protocolo.
- Leve: O cabeçalho do UDP tem apenas 8 bytes (porta origem, porta destino, comprimento, checksum).
- Rápido: Como não há overhead de controle de conexão ou confiabilidade, o UDP é ideal para aplicações que priorizam a velocidade.
Onde o UDP é usado?
- DNS (Domain Name System)
- DHCP (Dynamic Host Configuration Protocol)
- Streaming de vídeo e áudio (VoIP, IPTV, videoconferência)
- Jogos online (onde uma latência baixa é mais importante que a confiabilidade total)
- SNMP (Simple Network Management Protocol)
O UDP é frequentemente chamado de protocolo "dispare e esqueça" (fire and forget). Se a aplicação precisa de confiabilidade, ela mesma deve implementá-la sobre o UDP.
Protocolo TCP (Transmission Control Protocol)
O TCP é o protocolo padrão para a grande maioria das aplicações da internet. Ele oferece um serviço orientado à conexão e confiável.
Características principais do TCP:
- Orientação à conexão: Antes de transmitir dados, o transmissor e o receptor estabelecem uma conexão lógica através do three-way handshake (SYN, SYN-ACK, ACK). Ao final da comunicação, a conexão é encerrada formalmente (FIN).
- Confiabilidade: O TCP garante que todos os dados enviados cheguem ao destino, na ordem correta e sem duplicação. Isso é feito através de números de sequência, confirmações positivas (ACKs) e retransmissão em caso de timeout.
- Controle de Fluxo (Flow Control): Através do mecanismo de sliding window (janela deslizante), o receptor informa ao transmissor quantos dados ele pode receber a qualquer momento, evitando que o remetente sobrecarregue o receptor.
- Controle de Congestionamento (Congestion Control): O TCP é um protocolo "gentil" com a rede. Algoritmos como Slow Start, Congestion Avoidance, Fast Retransmit e Fast Recovery ajustam dinamicamente a taxa de transmissão para evitar sobrecarregar a rede.
- Full-Duplex: Dados podem trafegar nas duas direções simultaneamente.
Estrutura do segmento TCP:
O cabeçalho TCP é mais complexo que o UDP, variando de 20 a 60 bytes. Ele contém campos como:
- Porta de Origem e Porta de Destino (16 bits cada)
- Número de Sequência e Número de Acknowledgement (32 bits cada)
- Flags: URG, ACK, PSH, RST, SYN, FIN
- Tamanho da Janela (Window Size)
- Checksum
- Ponteiro de Urgência
- Opções (MSS, Timestamp, etc.)
O Three-Way Handshake:
O estabelecimento de uma conexão TCP segue três passos:
- O cliente envia um segmento com a flag SYN ativa e um número de sequência inicial (ISN).
- O servidor responde com um segmento SYN-ACK, confirmando o ISN do cliente e enviando seu próprio ISN.
- O cliente envia um segmento ACK confirmando o ISN do servidor. A conexão está estabelecida.
O TCP é utilizado em praticamente todas as aplicações que exigem integridade dos dados: web (HTTP/HTTPS), email (SMTP, IMAP), transferência de arquivos (FTP), acesso remoto (SSH).
Comparação: TCP vs UDP
| Característica | TCP | UDP |
|---|---|---|
| Conexão | Orientado à conexão | Sem conexão |
| Confiabilidade | Confiável (ACKs e retransmissão) | Não confiável (melhor esforço) |
| Ordenação | Ordenado (números de sequência) | Não ordenado |
| Overhead | Alto (20-60 bytes de cabeçalho) | Baixo (8 bytes de cabeçalho) |
| Velocidade | Mais lento (handshake e controle) | Mais rápido (sem overhead) |
| Controle de Fluxo | Sim (Sliding Window) | Não |
| Controle de Congestionamento | Sim (Slow Start, etc.) | Não |
| Uso Típico | Web, Email, FTP, SSH | DNS, DHCP, Streaming, Jogos |
Portas e Sockets: Uma Visão Aprofundada
Conforme discutimos, a combinação de um endereço IP e um número de porta forma um socket. Uma conexão é unicamente identificada por um par de sockets: (IP_origem, Porta_origem) e (IP_destino, Porta_destino).
As portas são divididas em três categorias:
- Portas Bem Conhecidas (0-1023): Atribuídas a serviços padrão da internet (HTTP na porta 80, HTTPS na 443, SSH na 22, DNS na 53).
- Portas Registradas (1024-49151): Atribuídas a aplicações específicas pela IANA.
- Portas Dinâmicas/Privadas (49152-65535): Usadas temporariamente por clientes para fazer conexões.
Esse modelo de multiplexação com portas é o que permite que um único servidor web atenda milhares de clientes simultaneamente. Cada conexão tem um socket de origem diferente, mesmo que o socket de destino seja o mesmo (IP_servidor, Porta 80).
Perguntas Frequentes (FAQ)
1. Qual a principal diferença entre TCP e UDP?
A principal diferença é a confiabilidade. O TCP é orientado à conexão e confiável, garantindo que os dados cheguem na ordem correta. O UDP é sem conexão e não confiável, priorizando a velocidade em detrimento da garantia de entrega.
2. O que é o Three-Way Handshake?
É o processo de estabelecimento de uma conexão TCP, composto por três passos: SYN, SYN-ACK e ACK. Ele sincroniza os números de sequência entre o cliente e o servidor.
3. Por que o UDP é mais rápido que o TCP?
Porque o UDP não possui o overhead do estabelecimento de conexão (handshake), não precisa esperar confirmações de recebimento (ACKs) e não possui mecanismos de controle de fluxo e congestionamento. Ele simplesmente "envia e esquece".
4. Quais aplicações usam TCP e quais usam UDP?
Aplicações que exigem integridade total dos dados, como web (HTTP/HTTPS), emails (SMTP) e transferência de arquivos (FTP), usam TCP. Aplicações sensíveis à latência, como streaming de vídeo ao vivo, jogos online e DNS, usam UDP.
5. O que é um socket?
Um socket é a interface de comunicação de um processo, definido pela combinação de um endereço IP e um número de porta. Ele representa o endpoint de uma conexão.
Conclusão
A camada de transporte é um dos pilares da arquitetura de redes moderna. Entender as diferenças fundamentais entre TCP e UDP, o funcionamento do three-way handshake e dos mecanismos de controle de fluxo e congestionamento é essencial para qualquer profissional que trabalhe com redes, sistemas ou desenvolvimento. No dia 244 da nossa jornada, construímos uma base sólida sobre esses protocolos que são a espinha dorsal da internet.
Continue acompanhando as próximas aulas para explorarmos mais a fundo temas como segurança da camada de transporte (TLS), QUIC e o futuro dos protocolos de transporte.