Hoje demos continuidade ao estudo de redes de computadores com foco na camada de transporte do modelo TCP/IP. Durante a aula do dia 259, exploramos os dois principais protocolos dessa camada: TCP (Transmission Control Protocol) e UDP (User Datagram Protocol), suas características, diferenças e aplicações práticas.
Visão geral da camada de transporte
A camada de transporte é a quarta camada do modelo OSI e a terceira do modelo TCP/IP. Ela é responsável por fornecer comunicação lógica entre processos de aplicação que rodam em diferentes hospedeiros. Seus serviços principais incluem:
- Multiplexação e demultiplexação de dados;
- Detecção e correção de erros (checksum);
- Controle de fluxo;
- Controle de congestionamento (apenas TCP);
- Entrega confiável (apenas TCP).
Vimos que a escolha entre TCP e UDP depende dos requisitos da aplicação: confiabilidade versus baixa latência.
Além disso, a camada de transporte utiliza números de porta para identificar as aplicações de origem e destino. As portas são classificadas em três categorias: well-known (0–1023), portas registradas (1024–49151) e portas dinâmicas/efêmeras (49152–65535). A combinação de um endereço IP e um número de porta forma um socket, que identifica unicamente um ponto final de uma conexão. Essa multiplexação permite que múltiplas aplicações compartilhem a mesma interface de rede sem conflito.
Protocolo TCP
TCP é um protocolo orientado à conexão e confiável. Antes de transmitir dados, ele estabelece uma conexão através do three-way handshake (SYN, SYN-ACK, ACK). As principais características incluem:
- Garantia de entrega: cada segmento é confirmado (ACK) e retransmitido se necessário;
- Controle de fluxo: utiliza uma janela deslizante para evitar que o transmissor sobrecarregue o receptor;
- Controle de congestionamento: algoritmos como Slow Start, Congestion Avoidance e Fast Retransmit ajustam a taxa de envio conforme a capacidade da rede;
- Segmentos ordenados: os dados são entregues na mesma ordem em que foram enviados;
- Cabeçalho maior: mínimo de 20 bytes, podendo chegar a 60 bytes com opções.
O estabelecimento da conexão TCP é realizado em três etapas bem definidas. O cliente envia um segmento com a flag SYN ativada e um número de sequência inicial (ISN). O servidor responde com um segmento SYN-ACK, que contém seu próprio ISN e confirma o SYN do cliente. Por fim, o cliente envia um ACK confirmando o SYN do servidor. A partir desse momento, a conexão está estabelecida e os dados podem trafegar bidirecionalmente. Esse procedimento garante que ambas as extremidades estejam sincronizadas e prontas para a comunicação, além de evitar conexões fantasmas.
O controle de fluxo no TCP é implementado por meio de uma janela deslizante (sliding window). O receptor informa o tamanho da janela no campo window size do cabeçalho, indicando quantos bytes ainda pode receber. O transmissor ajusta sua taxa de envio conforme essa janela, evitando sobrecarregar o receptor. Já o controle de congestionamento utiliza algoritmos como Slow Start, Congestion Avoidance, Fast Retransmit e Fast Recovery para evitar a saturação da rede. Esses mecanismos tornam o TCP robusto para aplicações que não podem perder dados, como navegação web (HTTP/HTTPS), e-mail (SMTP), transferência de arquivos (FTP) e acesso remoto (SSH).
Protocolo UDP
UDP é um protocolo não orientado à conexão e não confiável. Ele simplesmente envia datagramas sem garantia de entrega, ordem ou integridade (embora possua checksum opcional). Características principais:
- Não requer estabelecimento de conexão – menor latência;
- Não faz retransmissão automática;
- Não controla fluxo nem congestionamento;
- Cabeçalho leve: apenas 8 bytes;
- Suporte a multicast e broadcast.
Apesar de não oferecer garantia de entrega, o UDP inclui um checksum opcional para verificação de integridade. O checksum é calculado sobre um pseudo-cabeçalho que inclui endereços IP de origem e destino, o cabeçalho UDP e os dados. Se o checksum for inválido, o datagrama é descartado silenciosamente, sem qualquer notificação ao remetente. Por ser um protocolo sem estado, o UDP é ideal para aplicações que priorizam velocidade e podem tolerar perdas eventuais, como streaming de áudio/vídeo ao vivo, jogos online, consultas DNS e DHCP.
UDP também é a base para protocolos como o RTP (Real-time Transport Protocol) usado em VoIP e videoconferência, onde a baixa latência é mais crítica do que a perfeita integridade dos dados.
Diferenças entre TCP e UDP
| Característica | TCP | UDP |
|---|---|---|
| Orientação à conexão | Sim | Não |
| Confiabilidade | Garantida (ACK + retransmissão) | Não garantida |
| Ordenação | Mantém ordem dos segmentos | Não mantém |
| Controle de fluxo | Sim (janela deslizante) | Não |
| Controle de congestionamento | Sim | Não |
| Tamanho do cabeçalho | 20-60 bytes | 8 bytes |
| Uso típico | HTTP, FTP, SMTP, SSH | DNS, DHCP, VoIP, streaming |
Outra diferença importante está na estrutura do cabeçalho: o TCP possui campos como número de sequência, número de confirmação, flags (SYN, ACK, FIN, RST), janela, checksum e ponteiro de urgência, totalizando no mínimo 20 bytes (podendo chegar a 60 bytes com opções). O UDP, por sua vez, tem apenas 8 bytes fixos, com porta de origem, porta de destino, comprimento e checksum. Essa simplicidade torna o UDP mais leve e rápido, mas sem garantias adicionais de entrega ou ordenação.
Do ponto de vista de estado, TCP é stateful – mantém informações sobre a conexão durante todo o ciclo de vida – enquanto UDP é stateless, o que simplifica a implementação e reduz o consumo de recursos no servidor.
Exemplos de aplicação
Na prática, a escolha entre TCP e UDP depende do que a aplicação prioriza:
- TCP: navegação web (HTTP/HTTPS), e-mail (SMTP, IMAP), transferência de arquivos (FTP), acesso remoto (SSH), APIs REST.
- UDP: consultas DNS, atribuição de endereço IP (DHCP), monitoramento de rede (SNMP), chamadas de voz (VoIP), videoconferência, jogos multiplayer.
Vale destacar o QUIC (Quick UDP Internet Connections), protocolo da camada de transporte que roda sobre UDP e é usado pelo HTTP/3. O QUIC reduz o tempo de estabelecimento de conexão (combina handshake criptográfico e de transporte em uma única etapa), oferece multiplexação de streams sem bloqueio de cabeça de linha e implementa confiabilidade e controle de fluxo na própria aplicação. Ele representa uma evolução significativa, unindo a velocidade do UDP com garantias típicas do TCP e já é amplamente suportado por navegadores e servidores modernos.
Além disso, muitos serviços de streaming de vídeo utilizam UDP em combinação com protocolos como RTP/RTCP para minimizar atrasos, e o DNS utiliza UDP para consultas rápidas, recorrendo ao TCP apenas quando a resposta excede 512 bytes (ou com extensões EDNS).
Considerações finais
A aula de hoje deixou claro que a camada de transporte é peça fundamental para a comunicação entre aplicações na internet. Compreender as diferenças entre TCP e UDP nos ajuda a projetar sistemas mais eficientes e adequados a cada cenário. Ficamos com a tarefa de analisar protocolos do dia a dia e identificar qual transporte utilizam.
A compreensão desses protocolos é fundamental para projetar sistemas de comunicação eficientes. As próximas aulas abordarão tópicos como roteamento, endereçamento IP e segurança na camada de rede, sempre com exemplos práticos para consolidar o aprendizado.
Perguntas Frequentes
- 1. Qual a diferença principal entre TCP e UDP?
- TCP é confiável e orientado à conexão, enquanto UDP é não confiável e não requer conexão prévia. TCP garante entrega ordenada dos dados; UDP prioriza velocidade.
- 2. Quando devo usar UDP em vez de TCP?
- UDP é recomendado para aplicações que toleram perda de pacotes mas exigem baixa latência, como streaming ao vivo, jogos online e chamadas de voz. Para transferência de arquivos ou dados críticos, prefira TCP.
- 3. O TCP realmente garante que todos os pacotes cheguem?
- Sim, através de confirmações (ACK) e retransmissões. Contudo, isso não impede atrasos ou congestionamento; ele apenas assegura que, se um pacote for perdido, ele será reenviado até chegar ao destino.
- 4. Como o TCP evita congestionamento na rede?
- O TCP utiliza algoritmos como Slow Start, Congestion Avoidance e Fast Retransmit. O Slow Start começa com uma janela de congestionamento pequena e dobra a cada RTT até um limite (threshold). Quando há perda de pacote (timeout ou ACKs duplicados), a janela é reduzida drasticamente. Esses mecanismos evitam que o transmissor sobrecarregue a rede e ajudam a manter a estabilidade do tráfego.
- 5. É possível usar UDP para transferência confiável de dados?
- Sim, desde que a confiabilidade seja implementada na camada de aplicação. Protocolos como TFTP, RTP e QUIC fazem isso. O UDP oferece a base rápida e sem estado; a aplicação decide quais garantias (retransmissão, ordenação, etc.) deseja adicionar, obtendo um transporte confiável com menor latência que o TCP puro.