Tabela de Conteúdos
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.
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.
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 .