Confus avec la réorganisation des paquets
Je lisais un manuel qui parle du protocole TCP "Selective Repeat":
Nous avons supposé que les paquets ne peuvent pas être réorganisés dans le canal entre l'expéditeur et le récepteur. C'est généralement une hypothèse raisonnable lorsque l'expéditeur et le destinataire sont connectés par un seul fil physique. Cependant, lorsque le «canal» reliant les deux est un réseau, une réorganisation des paquets peut se produire. L'approche adoptée dans la pratique consiste à garantir qu'un numéro de séquence n'est pas réutilisé tant que l'expéditeur n'est pas «sûr» que les paquets précédemment envoyés avec le numéro de séquence x ne se trouvent plus dans le réseau. Ceci est fait en supposant qu'un paquet ne peut pas «vivre» dans le réseau plus longtemps qu'une certaine durée maximale fixe.
Je suis confus et voici mes deux questions.
Q1-Que signifie "le canal peut être considéré comme essentiellement la mise en mémoire tampon de paquets et l'émission spontanée de ces paquets à tout moment dans le futur." signifier? Pourquoi avons-nous besoin de mettre en mémoire tampon un ancien paquet? N'est-il pas préférable que le récepteur l'ignore?
Q2-Disons que la taille de la fenêtre est 2 et le numéro de séquence disponible est 0,1,2,3. L'expéditeur envoie d'abord le paquet 0, le paquet 1, tandis que le paquet 0 est frappé d'une manière ou d'une autre et met beaucoup de temps à arriver, de sorte que le délai d'attente se produit, l'expéditeur doit renvoyer le paquet 0, mais cette fois le paquet 0 (nouveau) arrive à l'heure. Ensuite, l'expéditeur envoie le paquet 2, le paquet 3, tous reçus par le récepteur. Et puis l'expéditeur est sur le point d'envoyer le paquet 0 (nouveau) et le paquet 1 (nouveau), mais l'ancien paquet 0 arrive au récepteur maintenant, donc recevoir ne pouvait pas savoir que ce paquet est l'ancien ou le nouveau paquet. Alors, comment «supposer qu'un paquet ne peut pas« vivre »sur le réseau plus longtemps qu'une durée maximale fixe» peut résoudre ce problème? Cela signifie-t-il que l'en-tête du paquet contient l'heure à laquelle il a été envoyé?
Réponses
Qu'est-ce que «le canal peut être considéré comme essentiellement la mise en mémoire tampon de paquets et l'émission spontanée de ces paquets à tout moment dans le futur». signifier? pourquoi avons-nous besoin de mettre en mémoire tampon un vieux paquet? n'est-ce pas mieux que le récepteur l'ignore?
C'est la nature de la mise en file d'attente et de la mise en mémoire tampon qui est une partie essentielle de la commutation de paquets - les paquets reçus sont mis en file d'attente / mis en mémoire tampon à l'entrée et supprimés de la file d'attente une fois qu'ils ont été transférés. La mise en mémoire tampon est nécessaire car autrement la liaison de sortie devrait toujours être libre chaque fois qu'un paquet est reçu - ce n'est pas possible pour les réseaux à commutation de paquets, uniquement pour ceux à commutation de circuits.
Supposons que la taille de la fenêtre soit 2 et que le numéro de séquence disponible soit 0,1,2,3.
La fenêtre ne compte pas les paquets / datagrammes mais les octets . En outre, le numéro de séquence ne se répète que lorsque son champ de 32 bits déborde - cela ne se produit qu'après 4 Gio de données. Cependant, cette limite signifie qu'il ne peut jamais y avoir plus de 4 Gib de données "en vol" pour éviter toute ambiguïté. Étant donné que la plus grande fenêtre possible est (proche de) 1 Gio, ce n'est pas un problème.
Notez qu'avec des ACK simples et cumulatifs, le récepteur ne peut pas ACK sélectivement les segments suivants lorsqu'un segment précédent est toujours manquant. Un ACK signifie que toutes les données précédentes ont été reçues.
Par exemple, avec une taille de segment de 1 000 et une taille de fenêtre de 10 000, l'expéditeur envoie les datagrammes D00-D09 (séquence 0-9 999). D00 et D02-D09 sont reçus, mais D01 est perdu. Le destinataire ACKs toujours 1 000 (la prochaine séquence de données attendue) qui déclenche l'expéditeur pour déplacer D0 hors de la fenêtre, l'avancer à 1 000-10 999 et envoyer D10.
Pendant ce temps, le récepteur a décidé qu'il y avait un problème, donc il ACK à nouveau 1000 pour signaler exactement cela. L'émetteur reçoit le double ACK et renvoie D01 (mode réticent) ou toutes les données à partir de D01 (mode agressif). Le destinataire a déjà D10 (10 000-10 999), donc il ACK 11 000 qui à son tour déplace la fenêtre de l'expéditeur à 11 000-20 999 (et annule les retransmissions encore en suspens, pour le mode agressif).
(J'ai quelque peu simplifié le processus, en réalité, il y a plus de chevauchement parallèle et un délai entre l'envoi et la réception, bien sûr.)
EDIT: Comme Jeff l'a correctement souligné (thx!), La prise en charge des accusés de réception sélectifs (SACK) est presque une donnée aujourd'hui. En utilisant cette option, le récepteur pourrait également SACK 2 000-9 999 (de D02-D09) tout de suite, de sorte que l'expéditeur ne commence pas à les retransmettre. Il pourrait également commencer à transmettre 11 000-20 999 plus tôt.