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
Xserá 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 enviaSYN (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.