• Blog
  • O que é TCP e como o TCP funciona?

O que é TCP e como o TCP funciona?

Out 19, 2023

O protocolo TCP (Transmission Control Protocol) é um protocolo de comunicação utilizado para transmitir dados pela internet. Ele garante que os dados sejam entregues de forma confiável e em ordem, além de controlar o congestionamento da rede.

TCP é usado para comunicação entre dispositivos na rede. Significa Protocolo de Controle de Transmissão. É usado para criar uma conexão entre o cliente e o servidor. Funciona dividindo os dados em pequenos pacotes que podem ser transferidos por meio da atividade de rede.

O controle de conexão do TCP inclui três apertos de mão e quatro ondas.

O segmento é uma função de roteamento de navegação para todo o protocolo TCP/IP. O segmento de pacote refere-se aos pacotes de dados IP na transmissão de rede do protocolo TCP/IP, que utilizam navegação de rota, consultam cada segmento de rota de rede, endereço IP, protocolo de troca, e assim por diante.

  • SYN: Sincronizar números de sequência
  • ACK: Campo de reconhecimento significativo
  • Seq: Número de sequência
  • Número de reconhecimento

Processo de aperto de mão de três vias

Handshake

Uma das características essenciais do TCP é ser orientado à conexão. Portanto, antes de enviar dados, ambas as partes devem passar por um aperto de mão para garantir que toda a transmissão de dados seja livre de erros antes que as duas partes possam estabelecer a conexão com sucesso.

O primeiro aperto de mão

O cliente envia o segmento 1 para o servidor, onde a flag SYN indica que este é um segmento para solicitar uma conexão. Além disso, o campo Número de Sequência (abreviado como seq na figura) é definido como o número de sequência inicial x (Número de Sequência Inicial, ISN), e ambas as partes na conexão TCP podem selecionar aleatoriamente o número de sequência inicial.

Após enviar o segmento 1, o cliente entra no estado SYN-SENT e aguarda a confirmação do servidor.

O segundo aperto de mão

Após receber o pedido de conexão do cliente, o servidor envia o segmento 2 como resposta ao cliente.

O sinal ACK é definido como 1, indicando que responde ao cliente, e o campo de número de reconhecimento (Número de Reconhecimento, abreviado como ack em minúsculas) entrará em vigor.

O valor deste campo é x + 1, que é o número de sequência do segmento recebido do cliente mais um, o que representa o número de sequência dos dados que o servidor espera receber do cliente na próxima vez.

Além disso, a flag SYN do segmento 2 também está definida como 1, o que significa que este também é um segmento usado para iniciar uma conexão, e o número de sequência seq é definido como o número de sequência inicial do servidor y.

Após enviar o segmento 2, o servidor entra no estado SYN-RECEIVED.

O terceiro aperto de mão

Após receber o segmento 2, o cliente envia o segmento 3 para o servidor, e o seu sinalizador ACK é 1, o que significa que está respondendo ao servidor, confirmando que o campo de número de sequência ack é y + 1, e o campo de número de sequência seq é x + 1. Após o envio deste segmento, ambas as partes entram no estado ESTABELECIDO, indicando que a conexão foi estabelecida.

the third handshake

Julgando o estado da conexão pelo estado de exibição do cliente e do servidor.

  • O cliente e o servidor pertencem ao estado fechado, indicando nenhuma relação de conexão.
  • O cliente envia um pedido, o cliente abre o estado de envio (SYN-sent) e o servidor abre o estado de escuta (Listen);
  • Quando o servidor recebe a solicitação do cliente, o servidor muda para o estado de resposta (SYN-recvd);
  • Quando o cliente recebe a resposta do servidor, o cliente muda para o estado de conexão estável (Estabelecido) e envia simultaneamente o segundo pacote de dados.
  • Quando o servidor recebe os segundos dados do cliente, o servidor muda para um estado de conexão estável (Estabelecido).
  • Após as duas partes estabelecerem uma conexão estável, é hora de começar a comunicação regular de dados.

Como funcionam os três apertos de mão?

O handshake de três vias permite que ambas as partes confirmem as capacidades de envio e recebimento de si mesmas e da outra parte como processo:

O primeiro aperto de mão: o cliente envia o segmento de solicitação e nada pode ser confirmado, enquanto o servidor pode garantir que sua capacidade de recebimento e a capacidade de transmissão da outra parte são padrão.

O segundo aperto de mão: O cliente pode confirmar que suas capacidades de envio e recebimento são padrão, e as capacidades de envio e recebimento da outra parte são padrão.

O terceiro aperto de mão: o servidor pode confirmar que suas capacidades de envio e recebimento são padrão, e as capacidades de envio e recebimento da outra parte são padrão.

O handshake de três vias pode permitir que ambas as partes confirmem que as capacidades de envio e recebimento delas e da outra parte estão todas em conformidade com os padrões para que possam se comunicar.

Como funcionam as quatro ondas?

Estabelecer uma conexão requer três apertos de mão, e terminar uma conexão requer quatro ondas.

O processo detalhado de acenar quatro vezes

1. O cliente envia um segmento de fechamento da conexão, solicitando o encerramento da conexão e a interrupção do envio de dados. Em seguida, o campo de número de sequência seq = x (igual ao número de sequência do último byte de todos os dados enviados anteriormente mais um), então o cliente entrará no estado FIN-WAIT-1, aguardando uma mensagem de reconhecimento do servidor.

2. O servidor recebe o segmento FIN, envia de volta uma mensagem de confirmação, ACK = 1, ack = x + 1, e define o número de sequência como seq = y, em seguida, o servidor entra no estado CLOSE-WAIT.

3. O cliente entra imediatamente no estado FIN-WAIT-2 após receber o segmento ACK do servidor e ainda pode receber os dados seq=z do servidor até receber o segmento FIN.

4. Em seguida, o servidor enviou todos os dados, ele enviará um segmento FIN para o cliente e, em seguida, o servidor entrará no estado LAST-ACK, aguardando um segmento de reconhecimento do cliente.

5. Após o cliente receber o segmento FIN do servidor, ele envia uma mensagem ACK para o servidor e entra no estado TIME-WAIT.

6. O servidor entrará imediatamente no estado FECHADO após receber a mensagem ACK do cliente e encerrará a conexão neste momento. Em geral, o servidor entra no estado FECHADO mais cedo do que o cliente, pois não há tempo de espera.

four waves

Em resumo, quer seja um aperto de mão de 3 vias ou uma onda de 4 vias, o protocolo TCP precisa obter a confirmação de informações de ambas as partes para estabelecer a conexão ou desconexão.

Por que o TCP fecha a conexão quatro vezes em vez de três?

Após receber o segmento de pacote FIN do cliente, o servidor pode ainda ter alguns dados para transmitir. Portanto, o servidor não pode fechar a conexão imediatamente. Em vez disso, ele responderá com um segmento de pacote ACK e poderá continuar a enviar dados.

O cliente não responde até que o servidor envie um segmento de pacote FIN para o cliente, indicando que todos os dados foram enviados. O servidor solicita o fechamento da conexão. Portanto, são necessárias um total de quatro ondas.

Quais problemas de segurança ocorrem durante a conexão TCP?

No processo de handshake de três vias, após o servidor enviar o SYN-ACK, a conexão TCP antes de receber o ACK do cliente é chamada de conexão semiaberta. Neste momento, o servidor está no estado SYN_RCVD. Quando um ACK é recebido, o servidor pode passar para o estado ESTABLISHED.

Ataque SYN significa que o cliente atacante forja um grande número de endereços IP inexistentes em um curto período, envia continuamente pacotes SYN para o servidor, e o servidor responde com o pacote de confirmação, aguardando a confirmação do cliente.

Uma vez que o endereço de origem não existe, o servidor precisa retransmitir continuamente até que ocorra um timeout. Como resultado, esses pacotes SYN falsificados ocuparão a fila de conexões não estabelecidas por um longo período de tempo, e as solicitações SYN regulares serão descartadas.

Em casos graves, isso causará congestionamento de rede ou até mesmo falhas no sistema. Um ataque SYN é um típico ataque DoS/DDoS. Clique para saber mais sobre ataques DoS/DDoS .