Jour 7: TCP: transmission orientée connexion, TCP: transmission fiable des données, TCP: contrôle de flux, TCP: gestion des connexions

Allez! Voler Bozi

Les poèmes que j'ai vus aujourd'hui sont gris

Le ciel est gris, la
route est grise, le
bâtiment est gris, la
pluie est grise,
parmi les cendres mortes,
deux enfants sont passés, l'
un rouge vif et l'
autre vert clair-
"Feeling" juillet 1980


Jusqu'au point

1. TCP: transmission orientée connexion

1. TCP: vue d'ensemble (RFC: 793, 1122, 1323, 2018, 2581)

Insérez la description de l'image ici

Explication:
· La
soi-disant limite sans message : l'
expéditeur envoie deux petits messages, peut-être que le destinataire reçoit un gros message, ou vice versa.
Envoyer et recevoir des tampons ,
pour la retransmission de détection de retransmission ou d'une erreur de dépassement de temps, correspondant à envoyer et recevoir des vitesses sont incompatibles
·
MTU:
Maximum Transmission Unit, la plus grande unité de transmission de données, le plus grand paquet de transmission de réseau, le MTU Ethernet maximum 1500B
MSS:
taille de segment Maxitum le processus d'application est distribué aux segments d' entité TCP de la couche de transport , et le traitement doit être segmenté en fonction de la taille des informations d'en-tête TCP du MSS en segments TCP (segment)
·
Par conséquent, (le message est converti en un flux d'octets, Et puis divisé en MSS individuel)
MSS + informations d'en-tête TCP + informations d'en-tête IP <= MTU (comme Ethernet MTU1500B) , ("Donc, il n'y a pas de problème de fragmentation?" Quelle fragmentation ...)
·
Sinon, si le datagramme IP doit être envoyé est plus grand que le MTU de la couche liaison de données, le datagramme ne peut pas être envoyé.
Vous pouvez également vous référer au partage de cet internaute: La relation entre MSS et MTU


2. Structure du segment TCP

Insérez la description de l'image ici


Expliquez : port source 16
bits , port de destination 16 bits, numéro de série 32 bits, numéro de confirmation.
Donc, intelligent, la même chose peut être obtenue: 32
bits en option; somme de contrôle et ainsi de suite numéro de séquence de 16 bits:
pour que la couche d'application passe le relais au message, divisez le MSS de chaque couche et le corps de chaque segment TCP (segment) La partie est la partie de la charge utile (correspondant à MSS), et le décalage (décalage) du premier octet de la charge utile dans l'ensemble du flux d'octets est le numéro de séquence d'octets

3. Numéro de série TCP, numéro de confirmation

Insérez la description de l'image ici

Les segments que le récepteur traite dans le désordre peuvent être mis en cache ou supprimés, et il n'y a pas de régulation. En fonction de ...
Insérez la description de l'image ici
Explication:

  • Hôte A → Hôte B Seq = 42, ACK = 79, data = 'C':
    Hôte A, le numéro de séquence initial négocié est Seq = 42, et on espère que le numéro de séquence initial de l'hôte B commence à 79, et le l'octet C doit être renvoyé
  • Puis Hôte B → Hôte A Seq = 79, ACK = 43, data = 'C':
    Puisque l'hôte B a reçu Seq42 avant, confirmez ACK = 43 après le traitement. Dans le même temps, ACK = 43 signifie que l'hôte B a reçu 42 et avant, et espère que l'hôte A commencera à 43.
    …Donc c'est tout

4. Délai aller-retour TCP (RTT) et délai d'expiration

Configurez et mesurez / estimez correctement le RTT.

  • Q: Comment définir le délai d'expiration TCP?
     Plus long que RTT  Mais RTT change
     Trop court : time out trop tôt  retransmission inutile
     Trop long: trop lent pour réagir à la perte de segment, négatif

  • Q: Comment estimer le RTT?
     SampleRTT: mesure le temps entre l'envoi du segment de message et la réception de la confirmation
     S'il y a une retransmission, ignorez cette mesure
    SampleRTT changera, donc le RTT estimé devrait être plus lisse
     Faites la moyenne de plusieurs mesures récentes au lieu de SampleRTT actuel

TimeoutInterval est une mesure adaptative et un calcul du
Insérez la description de l'image ici
calcul EstimatedRTT actuel:
`

" EstimatedRTT = (1-α) EstimatedRTT + α SampleRTT ": le
côté gauche du signe égal est le RTT moyen actuel , et le RTT estimé sur le côté droit du signe égal est le RTT moyen le plus récent . Avant tout autre échantillonnage temps, un de plus (1-α), la contribution à la moyenne actuelle diminue de façon exponentielle.
`
Estimé: adj. Estimé.
Insérez la description de l'image ici
Ce DevRTT (Deviation RTT) est très similaire à l'écart type. Il s'agit de la valeur de l'écart / changement entre SampleRTT et EstimatedRTT.
DevRTT = (1-β) DevRTT + β (| SampleRTT-EstimatedRTT |): Calcule la différence entre le lissé RTT et la moyenne mobile réelle (pondérée))


Ensuite, regardez TCP en RDT

2. TCP: transmission de données fiable

TCP a établi rdt sur la base d'un service IP non fiable

  •  Segment de pipeline (• GBN ou SR)
  •  Confirmation cumulative (comme GBN)
  •  Minuterie de retransmission unique (comme GBN)
  •  Peut-il être accepté dans le désordre, il n'y a pas de norme

La retransmission est déclenchée par les événements suivants

  •  Timeout (seul le premier segment non confirmé est retransmis: comme SR à nouveau)
  •  Confirmation répétée
    • Exemple: reçu ACK50, puis reçu 3 ACK50 (accusé de réception redondant)

Considérons d'abord l'expéditeur TCP simplifié: (point 1 ci-dessous)

  •  Ignorer les confirmations répétées
  •  Ignorer le contrôle de flux et le contrôle de la congestion

1. Expéditeur TCP (version simplifiée

Mon explication pour la figure suivante:
·
Initialement, établissez une connexion TCP. À partir de la ligne pointillée, il y a un numéro de séquence suivant initialisé et SendBase,
(en tant qu'expéditeur initial, le premier numéro de séquence d'octet envoyé provient du numéro de séquence initial)
· Attendez
ensuite l' événement ,
puis regardez dans le sens des aiguilles d'une montre .
Alors attendez , le processus d'application arrive aux données, il crée le segment et envoie le front seq de la fenêtre.
Et puis trouvez une couche inférieure et envoyez une
fenêtre glissante de transmission de datagramme encapsulée IP : ( NextSeqNum NextSeqNum + = length (Data) )
ne compte pas, le minuteur a commencé
·
Si le délai d'attente, il ne transmet qu'un nombre minimum de segments non acquittés
comme le SR , ne passe pas tous les non acquittés une fois
`
Lorsque ACK est reçu, et que la valeur de ACK est y,
si y> SendBase, alors SendBase = y , ce qui
équivaut à faire glisser le bord arrière de la fenêtre d'envoi à la position y, et
enfin il y a une minuterie pour le fonctionnement de la minuterie, regardez l'image
Insérez la description de l'image ici


Événement de l'expéditeur 1.1TCP: (ppt à l'explication de la figure ci-dessus)

Recevez des données de la couche d'application:

  •  Créer un segment avec nextseq
  •  Le numéro de séquence nextseq est le numéro de flux d'octets du premier octet du segment de message
  •  S'il ne fonctionne pas, démarrez la minuterie
    •  La minuterie est associée au plus ancien segment non acquitté
    •  Intervalle d'expiration: TimeOutInterval

Timeout:
 Le segment le plus ancien après la retransmission
 Redémarrez la minuterie

Réception de la confirmation:

  •  S'il s'agit de confirmer le segment non confirmé
  •  Mettez à jour le numéro de séquence du message confirmé  S'il reste des segments de message non confirmés, redémarrez le chronomètre
    Insérez la description de l'image ici

Profitons du pseudo-code pour la réalisation de l'envoi et de l'envoi de photos 1.TCP

	NextSeqNum = InitialSeqNum
	SendBase = InitialSeqNum
	loop (forever) {
    
    
		switch(event) 
		event: data received from application above 
			create TCP segment with sequence number NextSeqNum 
			if (timer currently not running) 
				start timer 
			pass segment to IP 
			NextSeqNum = NextSeqNum + length(data) 
		event: timer timeout
			retransmit not-yet-acknowledged segment with smallest sequence number start timer 
		event: ACK received, with ACK field value of y 
			if (y > SendBase) {
    
     
				SendBase = y
			if (there are currently not-yet-acknowledged segments) 
				start timer 
				} 
	} /* end of loop forever */
	
	/*注释:• SendBase-1: 最后一个累积确认的字节例:
			• SendBase-1 = 71;
			y= 73, 因此接收方期望73+ ;
			y > SendBase,因此新的数据被确认
 	*/

Enfin, passez à une autre image
pour confirmer l'octet le plus élevé reçu en séquence;
Insérez la description de l'image ici


2. Recommandations pour générer TCP ACK [RFC 1122, RFC 2581]

Insérez la description de l'image ici

3. retransmission rapide

Retransmission rapide: retransmettez le segment de message avant l'expiration du temporisateur


Détecter la perte de segment de message par ACK répété

  •  L'expéditeur envoie généralement un grand nombre de segments en continu
  •  Si le segment de message est perdu, il causera généralement (recevra) plusieurs ACK répétés

 Si l' expéditeur reçoit 3 ACK redondants pour les mêmes données , (trois ACK50 redondants comme indiqué sur la figure ci-dessous),

  • Retransmettez le segment avec le plus petit numéro de séquence:
  • Il suppose que les données suivant les données confirmées sont perdues

Insérez la description de l'image ici
Insérez la description de l'image ici
• Le premier ACK est normal;
• Le deuxième ACK de ce segment est reçu, ce qui signifie que le récepteur a reçu un segment hors séquence après ce segment;
• Les 3e et 4e ACK de ce segment sont reçus, ce qui signifie que le récepteur Après réception de ce segment, 2 ou 3 segments hors séquence sont très susceptibles d'être
perdus

3.1 Algorithme de retransmission rapide:

Insérez la description de l'image ici

dup: duplicate: adj. exactement le même, redondant

Trois, TCP: contrôle de flux

Le récepteur contrôle l’émetteur et
ne lui permet pas d’envoyer trop ou trop rapidement pour
éviter que la mémoire tampon du récepteur ne déborde.

Insérez la description de l'image ici
Tampons de récepteur de socket TCP: tampons de récepteur de socket TCP
Insérez la description de l'image ici

Ensuite, TCP est en duplex intégral, donc:

  •  Le récepteur "annonce" sa taille de tampon libre dans le champ rwnd de son en- tête de segment TCP à l' expéditeur .
    (Pas un message de confirmation séparé, mais une petite marque "espace tampon libre" sur la boîte express)
    • La taille de RcvBuffer est définie par l'option de socket (la taille par défaut typique est de 4096 octets)
    •  De nombreux systèmes d'exploitation ajustent automatiquement RcvBuffer
  • L'expéditeur limite le nombre d'octets non acquittés ("en vol") la valeur rwnd envoyée par le
    destinataire pour s'assurer que le destinataire ne sera pas submergé

Examinez la fenêtre de réception et le tampon de réception (champ Receive Window && Receive Buffer)
Insérez la description de l'image ici


Quatre, TCP: gestion des connexions

Avant d'échanger officiellement des données, l'expéditeur et le destinataire se serrent la main pour établir une relation de communication:

  •  Acceptez d'établir une connexion (chaque partie sait que l'autre partie est prête à établir une connexion)
  •  Acceptez les paramètres de connexion
    Insérez la description de l'image ici

1. Acceptez d'établir une connexion

Insérez la description de l'image ici

Scénario d'échec de la négociation bidirectionnelle :
semi-connexion, le
processus hôte client sur la gauche, en raison du délai d'expiration de acc_conn (x), retransmet une nouvelle demande de connexion (req_conn (x)),
entraînant le maintien d'une semi-connexion par le processus hôte du serveur
Insérez la description de l'image ici

2. Établissement de liaison TCP à 3 voies (solution d’établissement de liaison à 2 voies)

Il y a un bit indicateur SYN dans TCP.
SYN = 1 représente la demande de connexion
Seq = x représente la transmission à partir du x octet
Insérez la description de l'image ici

Généralement, le premier transfert de données et la troisième poignée de main se font ensemble.

2.1 Solution de prise de contact à trois: demi-connexion et réception d'anciens problèmes de données

Insérez la description de l'image ici

Utilisez le numéro de séquence d'initialisation comme numéro de séquence du segment TCP au lieu d'un numéro de séquence fixe :
cela peut
effectivement éviter que
les données
de l' ancienne
connexion
provoquent des interférences avec les données de la nouvelle connexion.

2.2 Prise de contact à trois: FSM (machine à états finis)

Envoyez-en quelques-uns pour voir ~
Insérez la description de l'image ici

3.TCP: fermez la connexion

  •  Le client et le serveur ferment respectivement la connexion de son propre côté (les connexions dans les deux sens sont supprimées séparément)
     Envoi du segment TCP avec le bit FIN = 1 (FIN = 1 signifie la fermeture de la connexion)
  • Une fois le FIN reçu, répondez avec ACK
     À la réception du segment FIN, ACK peut être envoyé avec le segment FIN envoyé par lui-même
  • peut gérer l'échange FIN simultané

Il y a des choses amusantes, que faire
si la confirmation FIN n'est pas reçue?
Et si FIN ne peut pas du tout passer?
Et si quelqu'un forgeait FIN pour l'envoyer à l'autre partie?
hahaha

La libération de la connexion TCP n'est pas parfaite et un mécanisme de minuterie est utilisé pour déconnecter la connexion.
Insérez la description de l'image ici


Fin de cet article

Je suppose que tu aimes

Origine blog.csdn.net/m0_46156900/article/details/113826344
conseillé
Classement