Tópico 08 · Camada de Transporte

Protocolo TCP

Transmissão confiável e orientada a conexão na Internet — RFC 793 / RFC 9293

Serviços de Redes

O que é o TCP

O Transmission Control Protocol entrega um fluxo confiável e ordenado de bytes sobre o serviço de melhor esforço do IP.

  • Orientado a conexão: estabelece um circuito lógico antes de enviar dados.
  • Confiável: recupera perdas por confirmação (ACK) e retransmissão.
  • Ordenado: reordena segmentos pela numeração de sequência.
  • Full-duplex e ponto a ponto: entre exatamente dois extremos.

O que o IP não faz, o TCP faz

O IP pode perder, duplicar ou entregar pacotes fora de ordem. O TCP constrói, acima dele, a ilusão de um canal contínuo e seguro de bytes — sem que a aplicação precise lidar com pacotes.

Serviços oferecidos

Confiabilidade

Números de sequência, ACKs cumulativos e retransmissão garantem que todo byte chegue.

Controle de fluxo

A janela de recepção impede que um emissor rápido afogue um receptor lento.

Controle de congestionamento

Ajusta a taxa de envio à capacidade da rede, evitando o colapso por sobrecarga.

Multiplexação: as portas permitem várias conexões simultâneas no mesmo host. Cada conexão é identificada por uma quádrupla: (IP origem, porta origem, IP destino, porta destino).

O segmento TCP (cabeçalho)

O cabeçalho tem 20 bytes (até 60 com opções). Cada linha = 32 bits:

0 16 31 Porta de Origem (16) Porta de Destino (16) Número de Sequência (32) Número de Confirmação / ACK (32) Offset (4) Reserv. (6) Flags (6) URG ACK PSH RST SYN FIN Janela / Window (16) Checksum (16) Ponteiro de Urgência (16) Opções (MSS, escala de janela, SACK, timestamps…) + Enchimento

Os flags controlam a conexão; o número de sequência/ACK sustenta a confiabilidade.

Flags e campos essenciais

FlagSignificado
SYNInicia a conexão (sincroniza sequência).
ACKO campo de confirmação é válido.
FINEncerra o envio (sem mais dados).
RSTAborta a conexão imediatamente.
PSHEntregar os dados à aplicação já.
URGHá dados urgentes (raro hoje).

Sequência e confirmação

O número de sequência identifica a posição do primeiro byte do segmento no fluxo. O ACK informa o próximo byte esperado (confirmação cumulativa).

Opções modernas: MSS (tamanho máximo de segmento), escala de janela (RFC 7323), SACK (confirmação seletiva, RFC 2018) e timestamps.

Estabelecimento: o three-way handshake

Cliente Servidor ① SYN (seq = x) ② SYN, ACK (seq = y, ack = x+1) ③ ACK (ack = y+1) → conexão ESTABELECIDA

As três mensagens sincronizam os números de sequência iniciais (ISN) de cada lado.

Por que três? Ambos os lados precisam escolher e confirmar seu ISN. O SYN consome um número de sequência, daí o ack = x+1.

Confiabilidade: ACK e retransmissão

O receptor confirma os bytes recebidos com ACKs cumulativos. Se um segmento se perde, o emissor o reenvia por dois gatilhos:

  • Timeout (RTO): esgotou o tempo sem ACK → retransmite.
  • Fast retransmit: 3 ACKs duplicados indicam perda → retransmite antes do timeout.

Estimando o RTO

O tempo de espera adapta-se ao RTT medido (Jacobson/Karels):

SRTT = (1−α)·SRTT + α·RTT
RTTVAR = (1−β)·RTTVAR + β·|SRTT−RTT|
RTO = SRTT + 4·RTTVAR
SACK: a confirmação seletiva permite avisar exatamente quais blocos chegaram, evitando reenviar dados já recebidos após uma perda.

Controle de fluxo: a janela deslizante

O receptor anuncia, no campo Janela, quanto espaço livre tem em seu buffer (rwnd). O emissor nunca envia mais do que isso sem confirmação.

Janela deslizante: conforme os ACKs chegam, a "janela" de bytes que podem estar em trânsito avança, mantendo o cano cheio sem estourar o receptor.

Janela zero e SWS

Se o buffer enche, o receptor anuncia janela = 0 e o emissor pausa, sondando periodicamente. Técnicas evitam a síndrome da janela boba (silly window syndrome), que desperdiçaria a rede com segmentos minúsculos.

Controle de congestionamento

Diferente do controle de fluxo (que protege o receptor), este protege a rede. O emissor mantém uma janela de congestionamento (cwnd) e envia min(cwnd, rwnd).

  • Partida lenta: cwnd cresce exponencialmente até o limiar ssthresh.
  • Prevenção: depois, cresce linearmente (+1 MSS por RTT).
  • Perda (3 ACKs dup.): cwnd cai à metade (AIMD) — fast recovery.
  • Timeout: colapso para 1 MSS e recomeça a partida lenta.
cwnd tempo (RTT) ssthresh partida lenta prevenção

O padrão "dente de serra": cresce até detectar perda, recua e volta a crescer.

Variantes históricas: Tahoe e Reno; o padrão atual do Linux é o CUBIC.

Encerramento: o four-way handshake

Lado A Lado B ① FIN (seq = u) ② ACK (ack = u+1) ③ FIN (seq = v) ④ ACK (ack = v+1) Lado A entra em TIME_WAIT (2·MSL) antes de fechar

Cada sentido é fechado de forma independente (o TCP é full-duplex), permitindo o "meio-fechamento".

Os principais estados de uma conexão

EstadoSignificado
LISTENServidor aguardando conexões.
SYN-SENT / SYN-RECEIVEDHandshake em andamento.
ESTABLISHEDConexão aberta; dados fluindo nos dois sentidos.
FIN-WAIT / CLOSE-WAITUm lado iniciou o encerramento.
TIME-WAITEspera de 2·MSL para garantir que ACKs/segmentos atrasados não confundam uma futura conexão.
CLOSEDConexão encerrada.
Por que TIME_WAIT existe? Para absorver retransmissões tardias do FIN e impedir que pacotes "fantasmas" de uma conexão antiga sejam aceitos por uma nova com a mesma quádrupla.

TCP × UDP: quando usar cada um

AspectoTCPUDP
ConexãoOrientado a conexão (handshake)Sem conexão
ConfiabilidadeGarantida (ACK + retransmissão)Não garantida
OrdemPreservadaNão preservada
Cabeçalho20–60 bytes8 bytes
Controle de fluxo/congestãoSimNão
Uso típicoWeb (HTTP), e-mail, SSH, transferência de arquivosDNS, streaming, VoIP, jogos
Regra prática: use TCP quando cada byte importa; use UDP quando a velocidade importa mais que a entrega perfeita.

Segurança: ataques e defesas

SYN flood

O atacante envia muitos SYN e não completa o handshake, lotando a fila de conexões meio-abertas (DoS). Defesa: SYN cookies.

Previsão de sequência

Adivinhar o ISN permite injetar dados ou sequestrar a conexão. Defesa: ISN aleatório (RFC 6528).

Injeção de RST

Um RST forjado derruba a conexão. Mitigações verificam a janela e a sequência do pacote.

Confidencialidade: o TCP não cifra nada. Sigilo e autenticação vêm de uma camada acima — o TLS (HTTPS).
Síntese

Em resumo

O TCP transforma o serviço não confiável do IP em um fluxo de bytes confiável e ordenado. Abre a conexão com o three-way handshake, recupera perdas com ACK e retransmissão, ajusta a taxa com controle de fluxo (rwnd) e de congestionamento (cwnd, partida lenta + AIMD), e encerra com o four-way handshake. É a base de HTTP, e-mail e SSH — deixando a cifragem para o TLS.

Voltar aos Tópicos