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)
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
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
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 ...
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
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é.
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
É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
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;
2. Recommandations pour générer TCP ACK [RFC 1122, RFC 2581]
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
• 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:
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.
Tampons de récepteur de socket TCP: tampons de récepteur de socket TCP
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)
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
1. Acceptez d'établir une connexion
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
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
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
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 ~
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.
Fin de cet article