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 de données perdues".

Quelles sont exactement les règles pour demander la retransmission de données perdues? À quelle fréquence les demandes de retransmission sont-elles effectuées? Est-il une limite supérieure sur le nombre? Existe-t-il une fonctionnalité pour que le client indique au serveur d'oublier tout le segment TCP pour lequel la partie a disparu quand le paquet IP a disparu?

51
demandé sur Anirudh Ramanathan 2012-10-18 18:11:18

2 réponses

Quelles sont exactement les règles pour demander la retransmission des 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). Il y a plusieurs façons dont cela est mis en œuvre.

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

Sont détaillées dans le RFC 3366.

À quoi fréquence de temps les demandes de retransmission sont-elles effectuées?

Les retransmissions-fois et le nombre de tentatives ne sont pas appliquées par la norme. Il est implémenté différemment par différents systèmes d'exploitation, mais la méthodologie est fixe. (L'un des moyens d'empreintes digitales OSs peut-être?)

Les délais d'attente sont mesurés en termes de temps RTT (temps aller-retour). Mais ce n'est pas nécessaire très souvent en raison de la retransmission rapide qui entre en jeu lorsque 3 acks en double sont reçu.

Est-il une limite supérieure sur le nombre?

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

Existe-t-il une fonctionnalité pour que le client indique au serveur d'oublier tout le segment TCP pour quelle partie a disparu lorsque le paquet IP a disparu?

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

47
répondu Anirudh Ramanathan 2012-10-18 15:35:09

Il n'y a pas de temps fixe pour la retransmission. Des implémentations simples estiment le RTT (aller-retour-temps) et si aucun ACK pour envoyer des données n'a été reçu dans 2x ce temps, ils ré-envoient.

Ilsdoublent le temps d'attente et ré-envoient une fois de plus s'il n'y a pas de réponse. Rincer. Répéter.

Les systèmes plus sophistiqués font de meilleures estimations du temps qu'il devrait prendre pour L'ACK ainsi que des suppositions sur exactement quelles données ont été perdues.

La ligne de fond est qu'il n'y a pas de règle stricte sur le moment exact de retransmettre. 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 récepteur.

TCP jamais supprime des données donc non, il n'y a aucun moyen d'indiquer qu'un serveur doit oublier un segment.

10
répondu Brian White 2012-10-18 14:18:10