Contrôle de congestion

TCP est utilisé pour le transport fiable de données dans l'Internet. Nous avons précédemment étudié la gestion des connexions et les mécanismes de TCP. Dans les exercices suivants, nous allons nous intéresser à un autre comportement fondamental de TCP : le contrôle de congestion.

Détection de la congestion

La conception de TCP date de la fin des années 70. Plusieurs algoritmes de contrôle de congestion ont été intégrés depuis, principalement suite aux travaux de Van Jacobson publiés en 1988. Ces derniers continuent à évoluer dans les différentes variantes de TCP. Les exercices proposés dans la suite sont fondés sur les dernières mises à jour : le RFC 5681 de septembre 2009.

  1. Pour TCP, quel phénomène indique une congestion dans le réseau ?

  2. Que se passe-t-il dans un routeur pour susciter ce phénomène?

  3. Pour TCP, ce phénomène permet de déduire la congestion. Mais celui-ci peut aussi se produire quand il n'y a pas de congestion dans le réseau. Dans quels autres cas un tel phénomène peut-il apparaître ?

  4. Si ce phénomène n'indique pas toujours une congestion, pourquoi TCP se base-t-il sur cette inférence ? Pourquoi n'utilise-t-on pas une approche où le routeur constatant la congestion envoie un message explicite à l'émetteur ?

Algorithmes de contrôle de congestion

Pour le contrôle de congestion, TCP utilise un seuil qui indique le débit au-dessus duquel la congestion risque de se produire. Ce seuil est exprimé par le paramètre ssthresh (en octets). Pour obtenir le débit seuil on divise ssthresh par le RTT (Round Trip Time). Le débit peut varier en-dessous et au-dessus du seuil ssthresh/RTT. L'émetteur maintient un second paramètre, cwnd (taille de la fenêtre de congestion) qui indique le nombre maximum d'octets qu'il peut envoyer avant de recevoir un acquittement. Quand cwnd > ssthresh, l'émetteur fait particulièrement attention à ne pas provoquer de congestion.

  1. Supposons que ssthresh soit à 5000 octets, cwnd est à 6000 octets, et la taille d'un segment est de 500 octets.Un émetteur envoie douze segments de 500 octets dans une période RTT, et reçoit douze acquittements (un pour chaque segment). Que deviennent les valeurs de ssthresh et cwnd ? Comment s'appellent ces changements de valeurs ?

  2. Supposons que ssthresh soit toujours à 5000 octets, que cwnd est maintenant à 14.000 octets, que l'émetteur envoie 14.000/500 = 28 segments, et que l'émetteur reçoive une indication de congestion avant de recevoir le premier acquittement. Que deviennent les valeurs de ssthresh et cwnd ? Comment s'appellent ces changements de valeurs ?

  3. Nous venons de voir comment augmente et diminue cwnd en fonction de l'absence ou la présence d'indicateurs de congestion. Comment s'appelle cet algorithme ? Sur quel principe repose cet algorithme ?

  4. Au démarrage, ou après avoir reçu une indication de congestion, la valeur de cwnd est plus petite que la valeur de ssthresh. Décrivez la manière permettant d'augmenter cwnd quand celle-ci est inférieure à ssthresh, en fonction de l'exemple suivant. Supposons que ssthresh soit égal à 3000 octets et que cwnd soit égal à 500 octets, la taille d'un segment. L'émetteur a plusieurs segments prêts à être envoyés. Combien de segments envoie l'émetteur pendant la première période RTT ? S'il reçoit des acquittements pour tous ses segments, que devient la valeur de cwnd ? Combien de segments envoie l'émetteur pendant la deuxième période RTT ? S'il reçoit des acquittements pour tous ses segments, que devient la valeur de cwnd ? En général, comment évolue la taille de cwnd ?

  5. Comment s'appelle la période pendant laquelle cwnd est plus petit que ssthresh ?

  6. Que devient la valeur de ssthresh si l'émetteur reçoit une indication de congestion pendant que cwnd est plus petit que ssthresh ?

Débit moyen d'une connexion TCP

Supposons que nous souhaitions effectuer un transfert de données de taille importante à travers une connexion TCP.

  1. En négligeant la période pendant laquelle cwnd est plus petite que ssthresh, montrez que le débit moyen d associé à une connexion TCP est égal à :

    W est la taille de la fenêtre (en segment) au moment de la congestion, MSS la taille d'un segment (supposée maximale), et RTT est le délai aller-retour (supposé constant durant la période de la transmission).

  2. Montrez que le taux de pertes p est égal à :

  3. Montrez que si le taux de pertes observé par une connexion TCP esqt p, alors son débit moyen d peut être approximé par :

  4. Quels autres paramètres peuvent influer sur le débit d'une connexion TCP ?

  5. Quelle utilité voyez-vous à la relation claculée dans la dernière formule de d ?

Etude de la latence d'un serveur web

Nous souhaitons étudier la latence liée à la réponse à une requête HTTP. Nous faisons les hypothèses simplificatrices suivantes:

  1. Dans un premier temps, nous supposons que nous n'avons pas de fenêtre de contrôle de congestion. Dans ce cas montrez que la latence L peut s'exprimer de la manière suivante :

  2. Nous supposons maintenant une fenêtre de congestion statique de taille fixe égale à W. Calculez la latence dans ce premier cas :

  3. Nous supposons toujours une fenêtre de congestion statique de taille fixe égale à W. Calculez la latence dans ce second cas :

  4. Comparez la latence obtenue avec une fenêtre de contrôle de congestion dynamique (slow-start) avec celle sans contrôle de congestion.

  5. Application numérique

    K' est le nombre de fenêtre envoyées avant de passer au second cas(log2(1 + RTT * R/S)). Considérez trois cas :

    • S=512 octets, RTT= 100msec, O=100 Koctets (=200S);
    • R
      O/R
      L (sans slow start)
      K'
      L (latence globale de TCP)
      56 Kbps
      512 Kbps
      8 Mbps
      100 Mbps
    • S=512 octets, RTT= 100msec, O=5 Koctets (=200S);
    • S=512 octets, RTT= 1 seconde, O=5 Koctets (=200S).

Analyse des mécanismes TCP

Dans cette partie vous génèrerez des captures de trafic vers un serveur plus ou moins éloigné grâce à la plateforme d'expérimentation PlanetLab Europe. Pour chacune d'elles, tracez précisément le chronogamme et étudiez les mécanismes de contrôle de congestion mis en oeuvre. Discutez en particulier les points suivants:

  1. Quel est le RTT moyen ?

  2. Reconnaissez-vous les mécanismes de contrôle de congestion ?

  3. Jusqu'à combien de segments sont transmis par RTT ?

  4. Quel est le débit moyen alors atteint ?

  5. Un envoi continu apparaît-il ?

  6. Des perturbations sont-elles présentes (déséquencement, retransmissions...) ?

Génération et capture de trafic HTTP