SYN é uma das seis flags de controle do protocolo TCP (localizada no bit 1 do campo de flags). A sigla significa Synchronize (Sincronizar). Esta flag é usada exclusivamente durante o estabelecimento da conexão (Three-Way Handshake) para iniciar a comunicação e sincronizar os números de sequência entre o cliente e o servidor.

O uso da flag SYN é o que diferencia o TCP (orientado a conexão) de protocolos sem conexão como o UDP. Ela sinaliza a intenção de abrir um canal de comunicação dedicado.

1. Função: Sincronização de Números de Sequência

O propósito técnico da flag SYN é anunciar e negociar o Número de Sequência Inicial (ISN - Initial Sequence Number).

Como o TCP numera cada byte de dados que flui através da conexão, é crucial que o remetente e o receptor saibam exatamente onde a contagem começa.

  • O lado que envia o SYN (ativa a flag) escolhe um número aleatório X.
  • Esse número X será o número de sequência do primeiro byte de dados que será enviado após o handshake.
  • Como o próprio pacote SYN ocupa um número de sequência lógico (para fins de controle), o primeiro byte de dados efetivo terá o número X + 1.

2. Comportamento no Estabelecimento de Conexão

A flag SYN é usada nas duas primeiras mensagens do Three-Way Handshake:

A. No Pacote de Abertura (Cliente)

Quando um cliente deseja iniciar uma conexão, ele envia um segmento TCP onde:

  • Flag SYN = 1
  • Flag ACK = 0
  • Sequence Number = ISN do Cliente (aleatório)

Este pacote diz: “Olá. Quero conectar. Vou começar a contar meus dados a partir deste número aleatório X”.

B. No Pacote de Aceitação (Servidor)

Quando o servidor aceita a conexão, ele deve responder confirmando o recebimento do SYN do cliente e propondo seu próprio número de sequência. Ele envia um segmento onde:

  • Flag SYN = 1
  • Flag ACK = 1
  • Sequence Number = ISN do Servidor (aleatório)
  • Acknowledgment Number = ISN do Cliente + 1

Este pacote diz: “Recebi seu pedido (ACK X+1). Aceito a conexão. Por sua vez, vou começar a contar meus dados a partir do meu número aleatório Y”.

3. Consumo de Número de Sequência

Um detalhe técnico importante é que a ativação da flag SYN consome um número de sequência.

  • O pacote SYN não transporta dados de aplicação, mas ele é contabilizado no fluxo.
  • Se o ISN do cliente é 1000, o cliente envia SYN (Seq=1000).
  • O servidor confirma com ACK=1001.
  • O primeiro byte de dados enviado pelo cliente terá obrigatoriamente o número de sequência 1001.
  • Isso significa que, para cada conexão TCP, uma unidade de espaço de numeração é “gasta” para o SYN (e outra para o FIN, no encerramento).

4. O Flag SYN em Ataques (SYN Flood)

Devido à maneira como o protocolo funciona, o flag SYN é o vetor de um famoso ataque de negação de serviço chamado SYN Flood.

  • O Processo Normal: Quando um servidor recebe um SYN, ele aloca memória (buffer) e recursos de CPU para criar uma estrutura de controle (TCB) para aquela nova conexão, entrando no estado SYN-RECEIVED. Ele espera o terceiro passo (ACK) para completar a conexão.
  • O Ataque: Um atacante envia milhões de pacotes SYN com endereços IP de origem falsificados (spoofed).
  • O Resultado: O servidor responde com SYN-ACK, mas a resposta vai para os IPs falsos, que nunca respondem com o ACK final. O servidor fica com milhares de conexões “meio-abertas”, consumindo toda a sua memória e ficando incapaz de aceitar conexões legítimas.
  • Defesa (SYN Cookies): Para mitigar isso, os sistemas operacionais modernos usam “SYN Cookies”. O servidor não aloca recursos completos imediatamente. Ele envia um ISN criptografado que codifica o estado da conexão. Quando o ACK final volta, o servidor valida o criptograma. Se for válido, então ele aloca os recursos.

5. Resumo

A flag SYN é o “botoão de início” do TCP.

  • Sinaliza: “Quero falar com você.”
  • Negocia: “Vamos começar a contar os números daqui.”
  • Custo: Requer uma resposta (SYN-ACK) e uma confirmação (ACK) para estabelecer o estado.
  • Identidade: A combinação {IP Origem, Porta Origem, IP Destino, Porta Destino, Número de Sequência SYN} é a assinatura única de uma conexão TCP.