Rede de Computadores (11) - Você já ouviu falar do handshake TCP de três vias?

No artigo anterior, apresentamos a estrutura simples e as características funcionais do UDP. Agora que a espingarda foi substituída pelo canhão, vamos dar uma olhada no destaque da camada de transporte - o protocolo TCP.

O protocolo TCP precisa estabelecer uma sessão antes da transmissão de dados para comunicação full-duplex e tem as funções de transmissão confiável, controle de fluxo e prevenção de congestionamento.

Nesta seção, apresentaremos o formato do cabeçalho da mensagem TCP e seu handshake de três vias e quatro mãos onduladas (gerenciamento de conexão).

1. Formato do cabeçalho TCP

1. Porta de origem / porta de destino: a mesma do UDP, cada uma ocupando 2 bytes

2. Número de sequência e número de confirmação: cada um ocupa 4 bytes, que está relacionado às características orientadas para o fluxo de bytes do TCP.O TCP armazena os dados a serem enviados no buffer TCP e os envia em sequência. Número de sequência Mesmo que seja o primeiro número de byte enviado nesta mensagem, o número de confirmação é o primeiro número de byte que se espera receber o fluxo de bytes.

3. Deslocamento de dados: o deslocamento da parte de dados do segmento de mensagem TCP desde o início do segmento de mensagem TCP, ou seja, o comprimento do cabeçalho, a unidade é 4B e ocupa 6 bytes

4. Bit reservado: ocupa 6 bytes

5. Seis bits de flag, cada um ocupando 1 byte:

1) URG: Sinalizador de emergência, o segmento com UGG = 1 tem prioridade para enviar

2) ACK: bit do sinalizador de confirmação. No segmento de ACK = 1, o número de confirmação é significativo. Após o estabelecimento da conexão, ACK = 1 para todas as mensagens

3) * PSH: Push bit

4) * RST: Reinicialize, quando ocorrer um erro grave na conexão TCP, libere a conexão e restabeleça uma nova conexão

5) SYN: bit de sincronização, o segmento com SYN = 1 é um pedido de conexão \ mensagem de aceitação de conexão

6) FIN: Abort bit, FIN = 1 indica que o segmento da mensagem concluiu o envio de dados, solicitando a liberação da conexão

6. Janela: informe à outra parte o tamanho da janela de recebimento para facilitar o controle do fluxo

7. Checksum: O algoritmo de verificação é o mesmo que UDP, exceto que o campo do protocolo no pseudo cabeçalho é 6 em vez de 17

8. Ponteiro urgente: quando URG = 1, indica o número de bytes de dados urgentes neste segmento

9. Opções: MSS de comprimento máximo de mensagem, expansão de janela, carimbo de data / hora, confirmação de seleção, etc.

10. Preenchimento: devido ao tamanho variável da parte da opção, a parte do preenchimento irá preencher o cabeçalho TCP com um múltiplo inteiro de 4 bytes

Dois, gerenciamento de conexão TCP

O que é gerenciamento de conexão? TCP é uma transmissão confiável baseada em full-duplex, todos baseados na necessidade do TCP de estabelecer uma conexão antes da transmissão de dados. O gerenciamento de conexão é dividido principalmente em duas partes, a saber, o handshake de três vias para estabelecer uma conexão e as quatro ondas para liberar a conexão.

1. Aperto de mão de três vias

O primeiro aperto de mão :

O cliente envia um segmento SYN para o servidor, SYN = 1, seq = x, e o cliente entra no estado SYN-SENT

Segundo aperto de mão :

Depois de receber o segmento SYN, o servidor aloca buffers e variáveis ​​para a conexão TCP e retorna um segmento SYN, SYN = 1, ACK = 1, seq = y, ack = x + 1, e o servidor entra no estado SYN-RECD

O terceiro aperto de mão :

Depois que o cliente recebe a mensagem SYN do servidor, ele aloca buffers e variáveis ​​para a conexão TCP e retorna uma mensagem ACK, ACK = 1, seq = x + 1, ack = y + 1, que pode transportar dados, o cliente A conexão é estabelecida com sucesso e entra no estado ESTABLISHED.

Depois que o servidor recebe a mensagem ACK, a conexão é estabelecida com sucesso e entra no estado ESTABLISED.

2. Acene quatro vezes

Primeira onda :

O cliente envia uma mensagem FIN solicitando o fechamento da conexão, FIN = 1, seq = u, e o cliente entra no estado FIN-WAIT-1

A segunda onda :

O servidor recebe a mensagem FIN e retorna uma mensagem ACK, ACK = 1, seq = v, ack = u + 1, e o cliente entra no estado CLOSE-WAIT.

Neste momento, a conexão TCP está semi-fechada - o cliente não transmite dados para o servidor, mas o servidor ainda pode transmitir dados para o cliente

Terceira onda :

O servidor envia uma mensagem FIN para o cliente, FIN = 1, ACK = 1, seq = w, ack = u + 1, e o cliente entra no estado LAST-ACK

Quarta onda :

O cliente envia uma mensagem ACK para o segmento do servidor, ACK = 1, seq = u + 1, ack = w + 1, após esperar por 2MSL, ele entra no estado FECHADO

Após receber a mensagem ACK, o servidor entra no estado FECHADO

3. Gerenciamento de conexão respondendo a perguntas

Em uma entrevista com um programador, três apertos de mão e quatro acenos de mãos são tópicos comuns dos entrevistadores. Aqui estão algumas perguntas comuns:

P: O handshake de três vias pode ser alterado para handshake de duas vias?

Resposta: Não, é propenso a um impasse. Se a conexão for estabelecida usando apenas dois handshake, o servidor considerará que a conexão foi estabelecida com sucesso após receber a mensagem SYN e retornará uma mensagem de confirmação e os dados do aplicativo ao mesmo tempo. Se a mensagem de confirmação for perdida neste momento, o cliente considera que o estabelecimento da conexão falhou, e irá ignorar todas as mensagens enviadas pelo servidor e aguardar a mensagem de confirmação. O servidor estúpido envia uma mensagem ao cliente, mas não consegue obter a mensagem de confirmação do cliente e também entra no estado de espera. Os dois esperam um pelo outro, formando um impasse.

Pergunta: Por que o último cliente precisa enviar uma mensagem de confirmação no handshake triplo?

Resposta: Para evitar que uma solicitação de conexão inválida seja enviada ao servidor repentinamente, causando erros.

Pode haver tal situação na realidade: a primeira mensagem SYN enviada pelo cliente ao servidor, por motivos de rede, a transmissão é lenta e não chega imediatamente. Portanto, o cliente enviou a segunda mensagem SYN e ela rapidamente alcançou o servidor, estabeleceu a conexão com êxito, concluiu a transmissão de dados e liberou a conexão. Então, o primeiro SYN perdido atingiu o servidor de repente, que pensou erroneamente que o cliente havia iniciado a solicitação novamente e, em seguida, estabeleceu uma conexão e transmissão de dados, o que desperdiçou recursos.
E se houver uma terceira confirmação, mesmo que a primeira mensagem SYN que tenha expirado faça com que o servidor retorne uma mensagem SYN, o cliente não confirmará essa mensagem e as duas partes não estabelecerão uma segunda conexão.

P: Por que há três handshake e quatro wave hands?
Resposta: O segundo aperto de mão é equivalente a combinar a segunda onda e a terceira onda em uma, então uma é omitida

P: Por que esperar por 2MSL após a quarta onda?

Resposta A mensagem ACK para a quarta onda pode ser perdida. O servidor que não pode receber a mensagem ACK reenviará a mensagem SYN para a terceira onda. Se o cliente durante o período de espera 2MSL receber a mensagem SYN retransmitida, A mensagem ACK para a quarta onda de mãos será retransmitida, se não for recebida considera-se que a quarta onda de mãos chegou com sucesso e a conexão é encerrada. MSL é geralmente definido para 75s

P: O que devo fazer se o cliente falhar repentinamente depois que a conexão for estabelecida?
Resposta: O TCP tem um temporizador de keep-alive. Se o cliente falhar, o servidor não esperará para sempre. O servidor zera o cronômetro sempre que recebe uma solicitação do cliente. O tempo é definido para 2 horas. Se nenhum dado do cliente for recebido em duas horas, o servidor enviará uma mensagem de detecção, que será enviada a cada 75 segundos. Se nenhuma resposta for recebida por 10 mensagens de detecção consecutivas, o servidor determina que o cliente está com defeito e fecha a conexão diretamente

Acho que você gosta

Origin blog.csdn.net/weixin_44580146/article/details/106965891
Recomendado
Clasificación