DEV Community

mylena
mylena

Posted on

Protocolos base da internet: TCP

TCP - Transmission Control Protocol

O TCP é um dos principais protocolos de transporte que existe na internet, e também é visto popularmente com o IP, formando o TCP/IP. Ou seja, o TCP é responsável por gerenciar o processo de comunicação entre duas partes (client-server).

Uma requisição dividida em segmentos 1, 2 e 3
Ao fazermos uma requisição, ela é dividida em fragmentos menores onde contém dados importantes como o próprio conteúdo em si, o IP de origem, o IP de destino. E no cabeçalho do protocolo de transporte, está contido o número de sequência.

Antes de receber esses pacotes e fazer a troca de informações, o server TCP precisa estabelecer a conexão com o outro dispositivo. Esse processo é chamado de three handshake.

Processo de three handshake: Syn, Syn-Ack, Ack
SYN: Faz a solicitação para estabelecer uma conexão - Essa solicitação pede para o servidor sincronizar com o número da sequência.

SYN ACK: Aceita a conexão e sincroniza com o dispositivo - O servidor confirma a sincronização e solicita que o cliente sincronize o seu número de sequência.

ACK: Confirma que recebeu a resposta e que houve a sincronização.

Exemplo:
Fluxo de SYN/ACK entre cliente e servidor

  • O cliente envia um SYN para o servidor e seu número de sequência é 483.
    Do outro lado, o servidor tem o número 222 como sequência, e ao receber a solicitação, o confirma (ACK) com +1.

  • O cliente ao receber o SYN-ACK do servidor, recebe a sequência do servidor (222) e o novo número de sequência (484).

  • O cliente envia um ACK para o servidor com o ACK = 223, e o servidor passa a ter o número 223 como sequência.

Ao receber os segmentos, o servidor TCP dá a garantia de receber/organizar em ordem, porém se um segmento se perdeu, o TCP não prossegue com os outros segmentos. Ele faz a retransmissão.

Fragmento 1 perdido

Vamos supor que deu tudo certo no recebimento e organização do TCP: Após a conexão estabelecida, a gente tem que a sequência do cliente é 484 e a do servidor é 223.

Se o cliente tiver, por exemplo, um payload de 30 bytes, ao enviar para o servidor, o servidor irá acrescentar +30 ao 484. Então o ACK será de 514.

Fluxo de envio do cliente com payload para o servidor

Exemplo de abertura de conexão em C# 11 + .NET 7

Criação do servidor e aceite do cliente

Criação do cliente e conexão no servidor

👍

Top comments (0)