Home Comunidade Eventos YouTube Networks Desafios // produtos Academy News CTI | CVE Contato

01 - SYN

video explicativo
Video explicativoEspaco reservado para o video desta anotação — adicione video: https://youtu.be/... no frontmatter da nota.

SYN (Synchronize)

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. Posição no Cabeçalho TCP

O campo de flags do TCP tem 9 bits (versão moderna), com as seguintes posições:

Bit Flag Significado
0 CWR Congestion Window Reduced
1 ECE ECN-Echo
2 URG Urgent pointer válido
3 ACK Acknowledgment field válido
4 PSH Push function
5 RST Reset da conexão
6 SYN Sincronizar números de sequência
7 FIN Finalizar envio de dados
8 NS ECN Nonce Sum

A flag SYN ocupa o bit 6 (contagem a partir do bit 0 da palavra de 16 bits que inclui Data Offset, Reserved e Flags). Seu valor numérico isolado é 0x02 em hexadecimal ou 0b00000010 na representação binária do campo de flags.

2. 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.

Por que o ISN é Aleatório?

Se o ISN fosse sempre 0 (ou previsível), um atacante poderia forjar pacotes que parecessem pertencer a uma conexão legítima — ataque conhecido como TCP Sequence Prediction Attack (popularizado por Kevin Mitnick em 1994). Os sistemas modernos usam algoritmos pseudoaleatórios criptograficamente seguros (como o algoritmo de Knuth ou baseados em hash SHA) para gerar ISNs que não podem ser adivinhados.

3. 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".

4. 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).

Tabela de Consumo de Números de Sequência

Flag Ativada Consome Número? Incremento
SYN Sim +1
FIN Sim +1
Dados (payload) Sim +N (bytes enviados)
ACK puro Não 0
RST Não 0
PSH (sozinho) Não (apenas marca dados) 0

5. 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 - Transmission Control Block) 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.

Defesas contra SYN Flood

Técnica Descrição
SYN Cookies Servidor não aloca TCB até receber ACK válido; ISN é criptografado
SYN Proxy Firewall intermediário completa o handshake antes de repassar
Redução de Backlog Aumenta o número de conexões half-open suportadas
Rate Limiting Limita SYNs por segundo por IP de origem

O mecanismo de SYN Cookies (RFC 4987) foi proposto por Daniel J. Bernstein em 1996 e é hoje padrão em kernels Linux modernos (/proc/sys/net/ipv4/tcp_syncookies).

6. Opções TCP Negociadas no SYN

O primeiro segmento SYN (e sua resposta SYN-ACK) carrega parâmetros críticos que definem o comportamento da conexão por toda sua duração:

  • MSS (Maximum Segment Size): Tamanho máximo do payload TCP por segmento (típico: 1460 em Ethernet).
  • Window Scale: Permite janelas maiores que 65535 bytes (até 1 GB).
  • SACK Permitted: Selective Acknowledgment, evita retransmissões desnecessárias.
  • Timestamps: Para cálculo preciso de RTT e PAWS (Protection Against Wrapped Sequence Numbers).

Se o cliente não oferecer essas opções no SYN, o servidor assume os valores padrão conservadores — sem janela escalada, sem SACK, MSS 536 — o que degrada drasticamente o desempenho em redes modernas.

7. Captura Prática (Wireshark)

Um pacote SYN típico aparece no Wireshark da seguinte forma:

Transmission Control Protocol, Src Port: 54321, Dst Port: 443, Seq: 0, Len: 0
    Source Port: 54321
    Destination Port: 443
    [Stream index: 0]
    Sequence number (relative): 0
    Sequence number (raw): 2821093324
    Acknowledgment number: 0
    Header Length: 32 bytes (12 bytes options)
    Flags: 0x002 (SYN)
        000. .... .... = Reserved: Not set
        ...0 .... .... = Nonce: Not set
        .... 0... .... = Congestion Window Reduced (CWR): Not set
        .... .0.. .... = ECN-Echo: Not set
        .... ..0. .... = Urgent: Not set
        .... ...0 .... = Acknowledgment: Not set
        .... .... 0... = Push: Not set
        .... .... .0.. = Reset: Not set
        .... .... ..1. = Syn: Set
        .... .... ...0 = Fin: Not set
    Window: 64240
    Checksum: 0x8a3c [unverified]
    Urgent Pointer: 0
    Options: (12 bytes), Maximum segment size, No-Operation, Window scale, SACK permitted

8. Resumo

A flag SYN é o "botã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.
  • Segurança: Sua exploração (SYN Flood) motivou o desenvolvimento de técnicas como SYN Cookies, fundamentais para a resiliência da internet moderna.

Sem o SYN, o TCP não existiria como o conhecemos — não haveria conexão lógica, nem garantia de entrega, nem controle de fluxo. É o ponto de partida que torna possível toda a comunicação confiável fim-a-fim da web, e-mail e transferência de arquivos.