Enigma do aperto de mão de três vias

3

Estou tentando entender o aperto de mão de três vias, mas tenho dificuldade em entender como isso se aplica a um mundo real. cenário. Por exemplo, se eu estiver usando um navegador da web, como o Mozilla Firefox, e navegar até o site www.superuser.com, seguintes ocorrências

  1. Eu inicio o Firefox e, como um aplicativo, é atribuído um identificador de processo aleatório. Supondo que eu lance com uma página em branco, isso é tudo isso acontece.

  2. Agora, se eu navegar para www.superuser.com, meu PC iniciará o contato com o servidor enviando um pacote SYN.

  3. O servidor responde por solicitação enviando um pacote ACK junto com seu próprio pacote SYN

  4. Meu computador responde com um pacote ACK e a conexão é estabelecida.

Agora a confusão,

  1. O que exatamente significa estabelecido? Se eu fosse, por exemplo, para navegar para outra página em www.superuser.com, o caminho triplo o aperto de mão se repete?

  2. Quando meu computador envia o sinalizador FIN e quando o servidor responde com seu próprio pacote FIN?

  3. Eu entendo que um aplicativo pode ter vários segmentos ao fazer uma solicitação de um servidor, isso significa que cada thread tem seu próprio Aperto de mão de três vias? São independentes um do outro?

  4. O que significam os vários estados de FIN_WAIT?

  5. Um servidor pode finalizar a conexão sem ser iniciado pelo cliente ou precisa sempre ser iniciado pelo cliente?

por PeanutsMonkey 18.09.2011 / 23:15

2 respostas

3

What does established exactly mean? If I were to for example to then browse to another page on www.superuser.com, does the three way handshake repeat itself?

"Estabelecido" significa que o handshake de três vias foi concluído e a conexão está disponível para transferência de dados (até que seja fechado).

O número de solicitações é dependente do protocolo. No HTTP 1.0, apenas uma solicitação por conexão é feita - handshake TCP, solicitação HTTP, resposta HTTP, handshake de fechamento TCP. Para recuperar as folhas de estilo ou as imagens, mais conexões tiveram que ser feitas (possivelmente múltiplas em ao mesmo tempo).

No HTTP 1.1, conexões persistentes são permitidas, nas quais a conexão é mantida aberta (ociosa) após a solicitação inicial e, se o navegador precisar carregar mais recursos (imagens, outras páginas), envia mais solicitações pela mesma conexão .

Outros protocolos geralmente realizam longas conversas em uma única conexão. O FTP, por outro lado, usa várias conexões de "dados" de vida curta, além da conexão primária "controle".

When does my PC send the FIN flag and when does the server respond with its own FIN packet?

Quando o seu navegador decide fechar a conexão ou "desligar", o computador envia um pacote FIN, o servidor responde a ele com FIN ACK e o computador responde com um ACK.

I understand that an application can have multiple threads when making a request from a server, does this mean each thread has its own three way handshake? Are these independent from one another?

Threads são irrelevantes. O único conceito é conexões TCP . Cada conexão separada tem um aperto de mão separado.

Cada thread pode estabelecer conexões múltiplas ; vários segmentos podem potencialmente compartilhar uma conexão; até mesmo vários processos podem compartilhar uma conexão em algumas situações.

What does the various states of FIN_WAIT mean?

  1. o cliente está em ESTABLISHED → o servidor envia FIN → o cliente está em FIN_WAIT1
  2. o servidor está em ESTABLISHED → servidor recvs FIN → o servidor está em CLOSE_WAIT
  3. ... Eu admito, não sei. (Alguém está à vontade para editar. Eu encontrei este diagrama. )

Can a server end the connection without being initiated by the client or does it always have to be initiated from the client?

A conexão pode ser fechada por uma das extremidades. Se o daemon HTTP fechou, funcionaria da mesma maneira, mas na direção oposta - o servidor enviaria FIN e seu computador responderia com FIN ACK ...

O TCP é especificado em RFC 793 . O artigo da Wikipedia sobre TCP explica como o handshake do protocolo é feito.

    
por 18.09.2011 / 23:38
0
  1. significa que uma conexão TCP está configurada (uma conexão duplex)

  2. quando a conexão não é mais necessária (alguns navegadores e servidores mantêm uma conexão ativa por algum tempo, veja os cabeçalhos da conexão http)

  3. cada conexão TCP é independente e fez seu próprio aperto de mão quando a conexão está configurada

  4. FIN_WAIT_1 significa que FIN é enviado, mas não acked FIN_WAIT_2 significa que está acked mas o outro lado ainda não FINED

  5. qualquer extremidade pode encerrar a conexão quando não tiver mais nada para enviar

por 18.09.2011 / 23:40

Tags