web-dev-qa-db-fra.com

Quelles sont les règles de retransmission pour TCP?

Le article Wikipedia sur TCP indique que les paquets IP transportant des segments TCP peuvent parfois être perdus, et que TCP "demande la retransmission de données perdues ".

Quelles sont les règles à suivre pour demander la retransmission de données perdues? A quelle fréquence les demandes de retransmission sont-elles effectuées? Y a-t-il une limite supérieure sur le nombre? Existe-t-il une fonctionnalité permettant au client d’indiquer au serveur de ne pas oublier l’ensemble du segment TCP pour lequel la partie a disparu lorsque le paquet IP a disparu?)

53
Randomblue

Quelles sont exactement les règles pour demander la retransmission de données perdues?

Le récepteur ne demande pas la retransmission. L'expéditeur attend un ACK pour la plage d'octets envoyée au client et, lorsqu'il n'est pas reçu, renvoie les paquets après un intervalle particulier. C'est [~ # ~] arq [~ # ~] (Demande de répétition automatique). Ceci est mis en œuvre de plusieurs manières.

Stop-and-wait ARQ
Go-Back-N ARQ
Selective Repeat ARQ

sont détaillés dans le RFC 3366 .

A quelle fréquence les demandes de retransmission sont-elles effectuées?

Les temps de retransmission et le nombre de tentatives ne sont pas imposés par la norme. Il est mis en œuvre différemment par différents systèmes d'exploitation, mais la méthodologie est fixe. (Un des moyens d'empreintes digitales des systèmes d'exploitation peut-être?)

Les délais d'attente sont mesurés en termes de temps RTT (Round Trip Time). Mais cela n'est pas nécessaire très souvent en raison de la retransmission rapide qui entre en jeu lorsque 3 ACK en double sont reçus.

Y a-t-il une limite supérieure sur le nombre?

Oui il y a. Après un certain nombre de tentatives, l'hôte est considéré comme "en panne" et l'expéditeur abandonne et arrête la connexion TCP.

Le client a-t-il une fonctionnalité permettant d'indiquer au serveur de ne pas oublier l'ensemble du segment TCP pour lequel la partie a disparu lorsque le paquet IP a disparu?

Le point essentiel est une communication fiable. Si vous voulez que le client oublie une partie, vous n’utiliseriez pas TCP en premier lieu. (UDP peut-être?)

53
Anirudh Ramanathan

Il n'y a pas de temps fixe pour la retransmission. Les implémentations simples estiment le temps RTT (Round-Trip-Time) et si aucun ACK pour envoyer des données n'a été reçu deux fois plus tard, ils le renvoient.

Ils doublent alors le temps d'attente et le renvoient une fois de plus s'il n'y a pas de réponse. Rincer. Répéter.

Des systèmes plus sophistiqués permettent de mieux estimer le temps nécessaire à l'ACK et de deviner quelles données ont été perdues.

L'essentiel, c'est qu'il n'y a pas de règle absolue sur le moment exact de la retransmission. C'est à la mise en œuvre. Toutes les retransmissions sont déclenchées uniquement par l'expéditeur en raison de l'absence de réponse du destinataire.

TCP jamais supprime les données, donc non, il n’ya aucun moyen d’indiquer à un serveur d’oublier un segment.

11
Brian White