Maison >Problème commun >Que voulez-vous dire par tenir vos doigts dans trois messages ?
La poignée de main à trois messages fait référence au suivi et à la négociation de la quantité de données envoyées à chaque fois, en garantissant la synchronisation des segments de données d'envoi et de réception et en confirmant la transmission et la réception des données en fonction de la quantité de données reçues. retiré et une connexion virtuelle est établie.
La soi-disant « poignée de main à trois » : afin de suivre et de négocier la quantité de données envoyées à chaque fois, pour garantir que l'envoi et la réception des segments de données sont synchronisés, en fonction de la réception. Lorsque les données sont envoyées et reçues, le contact est annulé et une connexion virtuelle est établie.
Afin de fournir une livraison fiable, TCP numérote les paquets de données dans un ordre spécifique avant d'envoyer de nouvelles données et exige des messages de confirmation une fois ces paquets livrés à la machine cible. TCP est toujours utilisé pour envoyer de grandes quantités de données. TCP est également utilisé lorsqu'une application doit confirmer après avoir reçu des données.
Afin d'établir une connexion TCP, les deux parties communicantes doivent connaître les informations suivantes de l'autre partie :
Poignée de main à trois
1 .Le numéro de séquence de départ de l'envoi du message par l'autre partie.
2. La taille du tampon des données envoyées par l'autre partie.
3. La longueur maximale du segment de message pouvant être reçu, MSS.
4. Options TCP prises en charge.
Dans le protocole TCP, les parties communicantes comprendront les informations ci-dessus à travers trois segments de message TCP et établiront une connexion TCP sur cette base. Le processus d'échange des trois segments de message TCP entre les parties communicantes, c'est-à-dire. ce que l'on appelle communément le processus de prise de contact à trois voies consistant à établir une connexion TCP.
Lorsque la connexion est établie, alors :
1. Les deux parties communicantes de la connexion TCP peuvent connaître le numéro de séquence du premier octet qui sera envoyé par l'autre partie sur la connexion ( envoyé à l'autre partie) Numéro de confirmation, le numéro de confirmation envoyé par A à B est le numéro de séquence que B enverra, et le même est le numéro de séquence envoyé par B
2. le MSS qui peut être envoyé sur la connexion, afin qu'ils puissent choisir d'échanger entre les deux parties pendant la phase de prise de contact. La valeur la plus petite de l'option MSS dans le message SYN et le message SYN+ACK est utilisée comme valeur réelle
;3. Les deux parties peuvent connaître la taille du tampon de réception de l'autre partie.
4. Les deux parties peuvent savoir si l'autre partie peut utiliser SACK, la mise à l'échelle de la fenêtre et d'autres options.
Sur la base de ces informations, les deux parties peuvent établir une connexion TCP (x, y) et démarrer la transmission de segments de message basés sur cette connexion.
Une poignée de main à trois est utilisée pour établir une connexion TCP. Si deux hôtes tentent d'établir une connexion entre les mêmes sockets en même temps, une seule connexion sera établie (ces deux connexions sont considérées comme identiques. , c'est-à-dire la même connexion), car toutes les connexions sont identifiées par leurs points de terminaison. Si la première requête aboutit à l'établissement d'une connexion identifiée par (x, y), et que la deuxième requête établit également une connexion identifiée par (X, y), alors il n'y aura qu'une seule table de connexion TCP à l'intérieur du terme d'entité TCP. (x,y).
Processus
Première fois
Première prise de contact : Lors de l'établissement d'une connexion, le client envoie un paquet de synchronisation (seq=j) au serveur, Et entrez dans l'état SYN_SENT, en attendant la confirmation du serveur ; SYN : Synchroniser les numéros de séquence.
Deuxième poignée de main
Deuxième poignée de main : Le serveur reçoit le paquet syn et doit confirmer le SYN du client (ack=j+1), et envoie également un paquet SYN (seq=k ), qui est un paquet SYN+ACK, à ce moment le serveur entre dans l'état SYN_RECV.
La troisième fois
La troisième poignée de main : Le client reçoit le paquet SYN+ACK du serveur et envoie un paquet de confirmation ACK (ack=k+1) au serveur. envoyé. Le client et le serveur entrent dans l'état ESTABLISHED (connexion TCP réussie) et terminent la négociation à trois.
Terminez la poignée de main à trois, le client et le serveur commencent à transmettre des données. Au cours du processus ci-dessus, il existe quelques concepts importants :
(1) File d'attente non connectée
en trois fois Dans le protocole handshake, le serveur maintient une file d'attente non connectée, qui ouvre une entrée pour le paquet SYN de chaque client (seq=j). Cette entrée indique que le serveur a reçu le paquet SYN et a envoyé une confirmation au client, et attend la confirmation du client. La connexion identifiée par ces entrées est dans l'état Syn_RECV sur le serveur. Lorsque le serveur reçoit le paquet de confirmation du client, l'entrée est supprimée et le serveur entre dans l'état ESTABLISHED. (2) Le paramètre Backlog indique le nombre maximum de connexions mises en file d'attente par le noyau pour le socket correspondant. Temps de retransmission SYN-ACK Une fois que le serveur a envoyé le paquet SYN-ACK, s'il ne reçoit pas le paquet de confirmation client, le serveur effectuera la première retransmission après avoir attendu un certain temps et ne reçoit toujours pas le paquet de confirmation client. il effectuera la deuxième retransmission. Si les délais de retransmission sont dépassés, le système supprimera les informations de connexion de la file d'attente de semi-connexion. A noter que le temps d'attente pour chaque retransmission n'est pas forcément le même. (3) Temps de survie de semi-connexion fait référence au temps le plus long nécessaire à l'entrée de la file d'attente de semi-connexion pour survivre, c'est-à-dire le temps le plus long à partir duquel le serveur reçoit le paquet SYN pour confirmer que le message n'est pas valide, cette valeur de temps est la somme des temps d'attente les plus longs de tous les paquets de demande de retransmission. Parfois, nous appelons également le temps de survie à la semi-connexion Timeout time et SYN_RECV survival time.Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!