Curso de Redes – Protocolo TCP – Handshake de Três Vias

Protocolo TCP – Estabelecendo uma conexão entre dois hosts

O protocolo TCP, como vimos nas lições anteriores, é um protocolo orientado a conexão. Isso significa que, antes que qualquer dado possa ser enviado entre dois hosts, uma conexão deve ser estabelecida entre eles primeiramente. Vamos estudar nessa lição o processo pela qual uma conexão TCP é estabelecida entre dois hosts em uma rede.

Estabelecendo uma conexão TCP

O processo de estabelecimento de conexões TCP se dá da seguinte forma:

  1. O host que quer iniciar a conexão, que normalmente é o cliente, envia um segmento com a flag SYN ativada, especificando a qual número de porta no servidor de destino ele quer se conectar, juntamente com o número de sequência inicial (Seq ISN).
  2. O servidor então responde com um segmento contendo a flag SYN, e seu número de sequência inicial. Além disso, o segmento SYN enviado pelo cliente é confirmado pela ativação da flag ACK neste segmento de resposta, confirmando o ISN do cliente + 1.
  3. O cliente então confirma o segmento SYN proveniente do servidor enviando outro segmento com a flag ACK ativada e o ISN do servidor + 1.

Após essa troca de três segmentos entre cliente e servidor, o processo de estabelecimento de conexão está completo. Chamamos esse processo de Handshake de três Vias ( Three-Way Handshake). Neste caso, o host que envia o primeiro segmento SYN realiza o que chamamos de uma abertura de conexão ativa. Já o outro host, em nosso exemplo o servidor que recebe o segmento SYN, realiza uma abertura de conexão passiva.

Cada vez que um dos hosts envia um segmento com a flag SYN para estabelecer a conexão, ele escolhe um número de sequência inicial para a conexão. Esse ISN muda ao longo do tempo, de modo que cada conexão terá um ISN diferente. De acordo com a RFC 793, o ISN deve ser visualizado como um contador de 32 bits que é incrementado em um a cada 4 μs (microsegundos). Desta forma, pacotes que sofrem um atraso muito grande na rede não serão entregues e, assim, evita-se que sejam interpretados erroneamente como pertencentes a outra conexão.

Veja na figura a seguir a captura dos pacotes trocados durante um handshake de três vias ao acessar um website a partir de um navegador:

Handshake de três vias TCP

Estabelecendo uma conexão TCP entre dois hosts

Meu host é o 192.168.1.119, e estou acessando o host 186.202.153.82. Note nas figuras as flags trocadas, e os números de sequência dos segmentos TCP.
Meu host envia um segmento com a flag SYN ativada, e número de sequência 0 (Seq=0); o servidor web remoto envia como resposta um segmento com as flags SYN e ACK ativas, número de sequência 0 (Seq=0) e confirmação do ISN igual a 0 + 1 =1 (Ack=1).
O cliente, então, finaliza o processo enviando outro segmento ao servidor, com a flag ACK ativa, número de sequência igual ISN a 1 (Seq=1) e confirmando o ISN do servidor (Ack=1).

A figura a seguir detalha o esquema de troca de segmentos entre os dois hosts considerados na captura anterior:

Handshake de Três Vias TCP

Handshake de Três Vias TCP

Apos o processo do handshake de três vias ter sido concluído, a conexão estará estabelecida e os hosts podem começar a trocar dados entre si. Ao final da comunicação, será necessário realizar um processo de finalização da conexão, que detalharemos na próxima lição.

Anterior: O Protocolo TCP

Próximo: Finalizando a conexão TCP entre dois hosts

Sobre Fábio dos Reis (1363 Artigos)
Fábio dos Reis trabalha com tecnologias variadas há mais de 25 anos, tendo atuado nos campos de Eletrônica, Telecomunicações, Programação de Computadores e Redes de Dados. É um entusiasta de Unix, Linux e Open Source em geral, adora Eletrônica e Música, e estuda idiomas, além de ministrar cursos e palestras sobre diversas tecnologias em São Paulo e outras cidades do Brasil.
Contato: Website

4 Comentários em Curso de Redes – Protocolo TCP – Handshake de Três Vias

  1. Adoro seu canal do youtube e sempre leio seus artigos de redes e segurança, está de parabéns

  2. h31s3nb3rg // 26/06/2016 em 23:03 // Responder

    O que acontece se o cliente enviar apenas um pacote TCP ACK para o servidor?

Escreva um comentário

Seu e-mail não será divulgado


*