Redes e Segurança

Three-Way Handshake - SYN, SYN+ACK, ACK (TCP)

Three-way handshake do TCP: o que são SYN, SYN+ACK e ACK, números de sequência, estados da conexão e como capturar no Wireshark ou tcpdump.

Capa: Three-Way Handshake - SYN, SYN+ACK, ACK (TCP)

O three-way handshake (handshake de três vias) é o procedimento que o TCP usa para estabelecer uma conexão entre cliente e servidor. Em três mensagens (SYN, SYN+ACK e ACK) os dois lados confirmam que estão online, combinam os números de sequência iniciais e só então começam a trocar dados.

O que é o TCP

O TCP (Transmission Control Protocol) é um protocolo da camada de transporte orientado a conexão. Ele garante que os dados cheguem completos, sem erros e na ordem certa, usando números de sequência, confirmações (ACK), retransmissão e controle de fluxo.

Por isso é usado onde nenhum erro é aceitável: HTTP/HTTPS, FTP, SSH, e-mail. Em troca, é mais lento que o UDP, que não estabelece conexão nem confirma entregas.

Flags usadas no handshake

FlagSignificadoFunção
SYNSynchronize (sincronizar)Inicia a conexão e informa o número de sequência inicial (ISN).
ACKAcknowledgement (reconhecimento)Confirma o recebimento, indicando o próximo número esperado.
FINFinish (finalizar)Encerra a conexão de forma ordenada.
RSTResetDerruba a conexão imediatamente (porta fechada, erro).

Como funciona, passo a passo

  1. SYN: o cliente envia um segmento com a flag SYN ativa e o seu número de sequência inicial (por exemplo, seq=100).
  2. SYN + ACK: o servidor responde com SYN e ACK ativos: envia o seu próprio número (seq=200) e confirma o do cliente (ack=101).
  3. ACK: o cliente confirma o número do servidor (seq=101, ack=201). A conexão passa a ESTABLISHED nos dois lados.
   Cliente                                   Servidor
      |                                         |
      |  ---- SYN        seq=100 ------------->  |   (1) quero conectar
      |                                         |
      |  <--- SYN+ACK    seq=200, ack=101 ----  |   (2) ok, também quero
      |                                         |
      |  ---- ACK        seq=101, ack=201 ---->  |   (3) combinado
      |                                         |
      |  ========= conexão ESTABLISHED ======== |
      |  ---- dados ---------------------------> |

Em linguagem simples: "Posso falar com você? Começo na mensagem 100" → "Pode. Começo na 200 e espero a sua 101" → "Beleza, espero a sua 201".

Estados do TCP durante o handshake

LadoAntesDepois de enviar/receber
ServidorLISTEN (aguardando)Recebe SYN → SYN-RECEIVED → recebe ACK → ESTABLISHED
ClienteCLOSEDEnvia SYN → SYN-SENT → recebe SYN+ACK e envia ACK → ESTABLISHED

Por que são três passos e não dois?

Cada lado precisa escolher o seu número de sequência e ter a confirmação do outro. Com dois passos, o servidor nunca saberia se o cliente recebeu o seu número. O terceiro passo também evita que SYNs antigos e duplicados, perdidos na rede, abram conexões fantasmas.

Como ver o handshake na prática

Capture o tráfego com o tcpdump (Linux) ou o Wireshark e filtre pela porta desejada:

sudo tcpdump -nn -i any 'tcp port 443 and (tcp[tcpflags] & (tcp-syn|tcp-ack) != 0)'

No Wireshark, use o filtro tcp.flags.syn == 1 e acompanhe os três primeiros pacotes de uma conexão. Para listar o estado das conexões locais:

ss -tan state established
ss -tan state syn-sent

SYN Flood: o ataque ao handshake

No SYN flood (DoS), o atacante envia muitos SYNs, geralmente com IP falsificado, e nunca completa o terceiro passo. O servidor fica com milhares de conexões "meio abertas" em SYN-RECEIVED e esgota a fila de conexões. As defesas mais comuns são os SYN cookies, a redução do tempo de espera, limites de taxa e firewalls/CDN com mitigação.

# Linux: habilitar SYN cookies
sudo sysctl -w net.ipv4.tcp_syncookies=1

E o encerramento da conexão?

Para fechar, o TCP usa o four-way handshake (FIN, ACK, FIN, ACK), porque cada sentido da conexão é encerrado separadamente.

Resumo

  • O handshake de três vias estabelece conexões TCP: SYN → SYN+ACK → ACK.
  • Serve para sincronizar os números de sequência e confirmar que ambos os lados estão prontos.
  • Fica visível em ferramentas como Wireshark, tcpdump e ss.
  • É alvo de ataques SYN flood, mitigados com SYN cookies e limites de taxa.

Mais artigos