Antes de o TCP enviar dados da aplicação, ele deve estabelecer o estado em ambas as extremidades da conexão. Esse processo de configuração é o handshake triplo TCP. Acontece tão rapidamente que a maioria dos usuários nem percebe, mas quando os sites parecem lentos, as portas parecem fechadas ou os firewalls quebram os aplicativos de maneiras estranhas, muitas vezes é no aperto de mão que a história começa.

O handshake triplo TCP

Os três pacotes são:

  1. SYN do cliente
  2. SYNACK do servidor
  3. ACK do cliente

Depois disso, a conexão é estabelecida e a transferência normal de dados começa.

Explicação passo a passo

1. Cliente envia SYN

Na verdade, o cliente diz: "Quero iniciar uma conexão e aqui está meu número de sequência inicial."

2. O servidor responde com SYN-ACK

O servidor reconhece o número de sequência do cliente e envia de volta seu próprio número de sequência inicial.

3. Cliente envia ACK

O cliente reconhece o número de sequência do servidor. Neste ponto, ambos os lados concordam sobre o estado básico necessário para a troca confiável de dados.

Por que o TCP precisa de um aperto de mão

O aperto de mão não é apenas uma cerimônia. Resolve problemas reais de protocolo:

  • confirma que ambos os endpoints podem enviar e receber
  • negocia o rastreamento da sequência inicial
  • evita que pacotes atrasados de sessões mais antigas sejam confundidos com tráfego atual
  • estabelece o estado necessário para uma entrega confiável

Sem esta configuração, o TCP não poderia fornecer o comportamento de fluxo ordenado e confiável que as aplicações esperam.

Por que o TCP usa três etapas em vez de duas

Uma troca em duas etapas não provaria totalmente que ambos os lados estão prontos para transmitir e reconhecer os números de sequência um do outro. O terceiro pacote confirma que a resposta do servidor foi recebida e que o estado da conexão está sincronizado em ambas as direções.

É por isso que o handshake é de “três vias” e não simplesmente um par solicitação-resposta.

O que acontece quando o aperto de mão falha

As falhas de handshake geralmente se enquadram em alguns padrões reconhecíveis.

SYN enviado, sem resposta

Possíveis causas:

  • host de destino está inativo
  • firewall está descartando pacotes silenciosamente
  • IP ou porta errado
  • problema de roteamento no caminho

Sintomas comuns:

  • tempo limite de conexão
  • o navegador gira por um tempo e depois falha
  • telnet ou o aplicativo cliente trava antes de desistir

SYN enviado, RST retornado

Possíveis causas:

  • porta está fechada
  • o serviço não está escutando
  • firewall está configurado para rejeitar em vez de descartar

Sintoma comum:

  • "conexão recusada" imediata

SYN e SYN-ACK aparecem, então a sessão termina

Possíveis causas:

  • roteamento assimétrico
  • problema de firewall com estado
  • dispositivo NAT quebrado
  • configuração incorreta do balanceador de carga
  • Produto de segurança baseado em host interferindo após aceitação inicial

Como é o aperto de mão no Wireshark

Se você capturar tráfego no Wireshark, um início de TCP íntegro geralmente se parecerá com:

  • SYN
  • SYN, ACK
  • ACK

Se você vir apenas pacotes SYN retransmitidos repetidamente, a resposta do servidor nunca retornará. Se você vir um RST, o destino rejeitou ativamente a conexão. Essa visibilidade é a razão pela qual as capturas de pacotes são tão úteis para solução de problemas de rede.

Por que os apertos de mão são importantes para o desempenho

Toda conexão TCP começa com pelo menos uma viagem de ida e volta antes do início do fluxo de dados.

Se a latência for 100 ms:

  • o aperto de mão custa cerca de uma viagem de ida e volta
  • TLS adiciona mais negociações depois disso
  • conexões de curta duração parecem visivelmente mais lentas

Este é um dos motivos pelos quais o ajuste de desempenho moderno se preocupa com a reutilização de conexões, comportamento de manutenção de atividade HTTP, CDNs e protocolos como HTTP/2 e HTTP/3.

Handshake TCP e TLS não são a mesma coisa

Esta é uma fonte comum de confusão.

  • Aperto de mão TCP estabelece a conexão de transporte.
  • Aperto de mão TLS negocia criptografia e confiança de certificado nessa conexão.

Portanto, quando você abre um site HTTPS, o sistema geralmente executa:

  1. Aperto de mão TCP
  2. Aperto de mão TLS
  3. Solicitação e resposta HTTP

Se um site demorar para "iniciar o carregamento", o atraso poderá ocorrer em qualquer uma das camadas de handshake.

Relacionamento com varredura de porta

Muitos scanners dependem do comportamento de aperto de mão:

  • SYNACK geralmente significa que a porta está aberta
  • RST geralmente significa fechado
  • sem resposta geralmente significa filtrado ou descartado

Isso torna o handshake central não apenas para a rede, mas também para enumeração e testes de segurança.

Ataques de inundação SYN

Uma inundação SYN abusa do handshake enviando um grande número de pacotes SYN sem completar o ACK final. O servidor aloca recursos para muitas sessões semiabertas e pode ficar sobrecarregado.

Mitigações comuns:

  • Cookies SYN
  • limitação de taxa
  • filtragem upstream
  • proteções de firewall
  • ajuste do balanceador de carga

A desmontagem da conexão é diferente

Iniciar uma sessão utiliza o handshake triplo. Seu fechamento geralmente usa um processo diferente envolvendo pacotes FIN e ACK em ambas as direções.

Essa desmontagem é importante ao depurar soquetes presos TIME_WAIT ou CLOSE_WAIT, mas é separado do handshake de conexão inicial.

Conclusão

O handshake TCP é a inicialização em três etapas para uma comunicação TCP confiável:

  • SYN
  • SYNACK
  • ACK

É importante porque cada solicitação web, sessão SSH, conexão de banco de dados ou chamada de API construída em TCP depende disso. Se uma conexão expirar, for recusada ou parecer lenta antes da movimentação de qualquer dado, o handshake é um dos primeiros locais a investigar.