Quelles sont les règles de retransmission pour TCP?

L’ article de Wikipedia sur TCP indique que les paquets IP transportant des segments TCP peuvent parfois être perdus et que TCP “demande la retransmission des données perdues”.

Quelles sont exactement les règles pour demander la retransmission des données perdues? À quelle heure les demandes de retransmission sont-elles effectuées? Y a-t-il une limite supérieure au nombre? Existe-t-il une fonctionnalité permettant au client d’indiquer au serveur d’oublier tout le segment TCP pour lequel la partie a disparu lorsque le paquet IP a disparu?

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

Le destinataire 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. Ceci est ARQ (Automatic Repeat ReQuest). Il y a plusieurs façons d’implémenter cela.

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

sont détaillés dans la RFC 3366 .

À quelle heure les demandes de retransmission sont-elles effectuées?

Les délais de retransmission et le nombre de tentatives ne sont pas appliqués par la norme. Il est implémenté différemment par différents systèmes d’exploitation, mais la méthodologie est fixe. (Une des façons d’identifier les systèmes d’exploitation des empreintes digitales 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 intervient lorsque trois ACK en double sont reçus.

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

Oui il y a. Après un certain nombre de tentatives, l’hôte est considéré comme “hors service” et l’expéditeur abandonne et arrête la connexion TCP.

Existe-t-il une fonctionnalité permettant au client d’indiquer au serveur d’oublier tout le segment TCP pour lequel la partie a disparu lorsque le paquet IP a disparu?

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

Il n’y a pas de temps fixe pour la retransmission. Les implémentations simples estiment le temps de réponse (aller-retour) et, si aucun accusé de réception pour envoyer des données n’a été reçu en 2x, elles sont à nouveau envoyées.

Ils doublent ensuite le temps d’attente et renvoient une nouvelle fois si, à nouveau, il n’ya pas de réponse. Rincer. Répéter.

Des systèmes plus sophistiqués permettent de mieux évaluer le temps nécessaire à l’ACK, ainsi que des hypothèses sur les données perdues.

L’essentiel, c’est qu’il n’ya pas de règle ssortingcte concernant 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 ne supprime jamais les données, alors non, il est impossible d’indiquer qu’un serveur doit oublier un segment.