Aperto de mão triplo do TCP, os alunos que não entenderem podem procurar aqui. (explicação super detalhada)

Aperto de mão tridirecional TCP.

    O primeiro handshake: Quando a conexão é estabelecida, o cliente  envia  um pacote syn  ( syn=j) para  o servidor e entra  no estado SYN_SENT  , aguardando a confirmação do servidor;

      syn: Sincronizar Números de Sequência ( Sincronizar Números de Sequência )

    O segundo handshake: O servidor  recebe  o pacote syn  enviado  pelo cliente  , e deve confirmar o ACK do cliente (ack=j+1) e, ao mesmo tempo, também envia um  pacote SYN ( seq=k ), ou seja,  o pacote SYN+ACK Neste momento, o servidor Entra  no estado SYN_RECV ; 

      seq: (sequência)

      ack: confirme

    O terceiro handshake: o cliente  recebe o pacote SYN+ACK  do  servidor e  envia um pacote de confirmação  ACK (ack=k+1) para o servidor . Após o envio do pacote, o cliente e o servidor entram  no ESTABLISHED (a conexão TCP foi bem-sucedida ) estado e completo três vezes apertar as mãos.

      estabelecido: estabelecido com sucesso

************************************************** ************************************************** ***************

Por que três vezes e não duas?

Então devemos entender uma coisa, qual problema o aperto de mão deve resolver?

O problema a ser resolvido pelo handshake na verdade é: espero que o servidor abra apenas uma conexão para o cliente usar. Dois apertos de mão não são necessariamente malsucedidos

Suponha que a envie uma carta para b (pela primeira vez).

b recebe a carta e escreve novamente para dizer a a que a recebeu! (a segunda vez)

Neste momento, a não escreveu para b novamente (sem terceira vez).

Superficialmente, a comunicação entre a e b foi bem-sucedida, mas na verdade existem duas possibilidades aqui:

1. A não tem letra para b.

2. a pode receber carta de b.

 Aqui reside o problema, supondo que haja apenas dois apertos de mão 

 a envia uma carta para b, e b escreve para a novamente após receber a carta (os dois apertos de mão são concluídos).

 No entanto, quando a carta de b é enviada para a, a carta é perdida (a rede de b para a não está disponível).

 Neste momento, se a não receber a carta, pensará que a carta não foi enviada para b. (Como é um aperto de mão bidirecional, b neste momento apenas assume que a recebeu o pacote)

O estado de b neste momento é que um canal foi aberto, esperando que a escreva novamente.

O estado de a neste momento é que, como nenhuma resposta foi recebida, a carta é reenviada para b. (Na verdade, se a receber o pacote, os dois handshakes também estabelecem a conexão com sucesso)

Então b abrirá um novo canal após receber a carta e esperará que a envie a carta, repetindo o ciclo, o que causa um desperdício de recursos de rede! ! !

Não existe esse problema após o aperto de mão de 3 vias?

O handshake de 3 vias foi bem-sucedido, o que prova que a rede de a para b e b para a está conectada. a envia informações para b, há um período de tempo limite neste momento, se as informações de b não puderem ser enviadas para a (vai expirar neste momento), então a reenviará uma nova solicitação logicamente, até que b receba as informações e as retorne para um.

Por que não enviar a mensagem de texto diretamente durante o aperto de mão, porque se a rede for desconectada e o texto for enviado para o servidor, o servidor ficará facilmente congestionado e desligará.

Resumo: O handshake de 3 vias é para reduzir o desperdício desnecessário de recursos devido à rede ou outros motivos (quando a não recebe o pacote de b)

Acho que você gosta

Origin blog.csdn.net/weixin_42335036/article/details/92586219#comments_25357911
Recomendado
Clasificación