Saltar para o conteúdoHisnLabs
← TCP/IP: endereços, portas e ligações

Lição 3 de 4 · 7 min

O cumprimento TCP e a vida de uma ligação

Como dois computadores combinam falar antes de qualquer um enviar dados reais, como terminam a conversa, e o que um firewall a observar no meio realmente vê.

Antes de o seu Mac enviar um único byte de um pedido de página web, já trocou três mensagens curtas com o servidor. Essa troca, o cumprimento em três vias do TCP, é o que transforma as promessas de fiabilidade do TCP da lição anterior numa ligação real e rastreável entre duas máquinas.

Três mensagens antes da primeira palavra

A RFC 9293, a especificação atual do TCP, descreve o processo como uma troca sincronizada: "a sincronização exige que cada lado envie o seu próprio número de sequência inicial e receba uma confirmação dele em reconhecimento do par TCP remoto."

  1. SYN. O dispositivo que abre a ligação envia um segmento com a marca SYN ativada, transportando um número de sequência inicial.
  2. SYN-ACK. O outro lado responde com o seu próprio SYN, mais um reconhecimento do primeiro número.
  3. ACK. O primeiro dispositivo reconhece essa resposta. A RFC 9293 nota que "como os passos 2 e 3 podem ser combinados numa única mensagem, isto é chamado o cumprimento em três vias (ou três mensagens)." Assim que termina, ambos os lados contam a ligação como ESTABELECIDA e começam a enviar dados reais.

O Centro de Aprendizagem da Cloudflare dá uma versão em linguagem simples da mesma ideia, usando um e-mail como exemplo: "primeiro, a origem envia um pacote SYN de 'pedido inicial' ao servidor de destino para iniciar o diálogo. Depois, o servidor de destino envia um pacote SYN-ACK para concordar com o processo. Por fim, a origem envia um pacote ACK ao destino para confirmar o processo, após o qual o conteúdo da mensagem pode ser enviado."

Terminar uma ligação de forma limpa

Fechar é mais deliberado do que abrir. A RFC 9293 explica que "a sequência normal de fecho do TCP entrega de forma fiável os dados em memória temporária nas duas direções" antes de a ligação terminar: cada lado envia um segmento FIN assim que não tem mais dados para enviar, o outro lado reconhece-o, e só depois de ambas as direções terminarem é que a ligação fecha por completo. Segue-se um breve período de espera (TIME-WAIT), para que nenhum pacote perdido e atrasado da ligação antiga possa ser confundido com parte de uma nova.

O que vê um firewall no meio

Um firewall com estado, o tipo incorporado na maioria dos routers e no próprio macOS, não precisa de inspecionar cada pacote para tomar uma decisão. A explicação da Cloudflare sobre firewalls coloca-o assim: "guarda informação sobre ligações abertas e usa essa informação para analisar o tráfego de entrada e de saída, em vez de inspecionar cada pacote." Na prática, isto significa que vigia o SYN que abre uma ligação, lembra-se de que esta app pediu uma resposta, e depois deixa entrar silenciosamente o SYN-ACK correspondente; uma resposta que não corresponde a nenhum SYN de saída é descartada. É também assim que um firewall consegue distinguir uma resposta normal de uma tentativa de ligação não solicitada a chegar do nada, o que é a base do bloqueio de tráfego de entrada indesejado.

Nada nesta troca é encriptado pelo próprio TCP; o SYN, o SYN-ACK e o ACK são visíveis em forma simples para qualquer coisa que observe o percurso de rede, incluindo o seu router Wi-Fi. O que é ou não escondido depende da camada acima do TCP, como o TLS para um site HTTPS, que o curso sobre como a internet funciona aborda separadamente.

A reter

  • As ligações TCP abrem com um cumprimento em três vias: SYN, depois SYN-ACK, depois ACK, segundo a RFC 9293.
  • Só depois de o cumprimento terminar é que os dois lados começam a trocar dados reais.
  • Fechar uma ligação é uma troca em ambos os sentidos de segmentos FIN, para que os dados em memória temporária sejam entregues antes de a ligação terminar.
  • Um firewall com estado acompanha que SYNs saíram, para conseguir reconhecer e permitir as respostas correspondentes, e descartar as não solicitadas.
  • O próprio cumprimento não está encriptado; é visível para qualquer coisa no percurso de rede.

Teste-se

  1. 1. Qual é a ordem correta do cumprimento em três vias do TCP?

    • ACK, SYN, SYN-ACK
    • SYN, SYN-ACK, ACK — Certo.
    • SYN-ACK, SYN, ACK
    • FIN, SYN, ACK

    A RFC 9293 descreve o lado que se liga a enviar primeiro o SYN, o outro lado a responder com SYN-ACK, e o lado que se liga a confirmar com ACK.

  2. 2. Quando começam a fluir dados reais da aplicação numa ligação TCP?

    • Antes de o SYN ser enviado
    • Só depois de o cumprimento em três vias terminar — Certo.
    • Durante o passo do SYN-ACK
    • Os dados fluem continuamente sem cumprimento

    O cumprimento existe para sincronizar números de sequência antes de qualquer um dos lados confiar o suficiente na ligação para enviar dados reais.

  3. 3. Como decide um firewall com estado permitir um pacote de resposta recebido?

    • Permite todos os pacotes recebidos por defeito
    • Verifica se o pacote corresponde a uma ligação que este dispositivo abriu, lembrada do SYN de saída anterior — Certo.
    • Inspeciona o conteúdo do pacote à procura de palavras-chave
    • Só olha para a porta de destino, nunca para o estado da ligação

    A Cloudflare descreve um firewall com estado como um que "guarda informação sobre ligações abertas" para reconhecer respostas legítimas em vez de inspecionar cada pacote de raiz.

  4. 4. O próprio cumprimento TCP está encriptado?

    • Sim, sempre
    • Não, é simples e visível para qualquer coisa no percurso de rede — Certo.
    • Só o SYN está encriptado
    • Só em ligações HTTPS

    O TCP fornece ordenação e fiabilidade, não confidencialidade. A encriptação, quando presente, vem de uma camada acima do TCP, como o TLS.

Praticar com o FireAI

Ponha esta lição em prática no seu próprio Mac.

Fontes

Ponha em prática no seu Mac

Experimente todas as funcionalidades grátis durante 17 dias, sem cartão.

Transferir para Mac Docs