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:
- 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).
- 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.
- 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:
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:
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
Adoro seu canal do youtube e sempre leio seus artigos de redes e segurança, está de parabéns
Obrigado Carlos! Em breve colocarei mais artigos sobre Redes de Computadores e Protocolos. Abraço!
O que acontece se o cliente enviar apenas um pacote TCP ACK para o servidor?
O servidor provavelmente irá descartar o pacote, se ele não fizer parte do handshake ou de uma sessão de transmissão de dados.