# PRS - Amphi 1 [Slides](https://moodle.insa-lyon.fr/pluginfile.php/180155/mod_resource/content/3/Cours_TCP.pdf) [LaTeX Symbols](https://oeis.org/wiki/List_of_LaTeX_mathematical_symbols) ###### tags : `PRS` `Amphi` ## Introduction *Note à nous même : Il faut maxer la présentation au cas où le code marche pas* *2e note à nous-même : faut pas récup du code de l'année dernière sinon il va nous cramer (en vrai on peut mais faut avoir vraiment bien compris sinon ça va pas passer)* ## TCP : Transmission Control Protocol **Objectif PRS :** Contrôle de la congestion TCP : série de mécanismes réseau standardisés **Congestion Control :** - Slow Start - Congestion Avoidance - Fast Retransmit - Fast Recovery - Selective Acknowledgements **Contrôle de flux :** Contrôler le débit entre 2 systèmes différents (ne pas surcharger un appareil qui ne peut pas supporter un débit trop élevé) **Contrôle de congestion :** Gestion du débit de transmission en fonction de la saturation sur le réseau (machines intermédiaires entre la source et la destination) **Argument de bout en bout (End to End Argument) :** On intervient pas sur le réseau, le flow de données est géré par les machines. Cela permet par exemple de garantir la neutralité du web. Le débit étant géré à chaque bout du réseau, on ne peut avantager personne à l'intérieur du réseau. **Vocabulaire** - *Segment* : Unité de transmission en TCP (différent de "message", "paquet", "trame") - *Maximum Segment Size (MSS)* : Taille de segment maximale pouvant être transmise (négocié entre les machines au début de la communication) :warning: $MSS \neq MTU$ (couche 2), si $MSS > MTU$ alors TCP va être obligé de procéder à de la fragmentation - *Receiver Window (rwnd ou awnd)* : Nombre de segments pouvant ête reçus à un instant $t$ (décidé via le contrôle de flux). On ne transmet pas plus que ce que l'autre peut recevoir. - *Congestion Window (cwnd)* : Nombre de segments pouvant ête reçus à un instant $t$ (décidé via le contrôle de congestion) *NB : On s'adapte toujours à la limite la plus basse (ex : si cwnd < rwnd la taille de la fenêtre sera celle de cwnd)* **Principe de base TCP (important) :** A un instant $t$, un hôte TCP ne peut pas transmettre un segment ayant un numéro de séquence > à la somme du plus grand numéro de séquence le plus élevé déjà acquitté $S_{max} \leqslant A_{max} + min(cwnd,rwnd)$ **Métrique importante TCP : Le round-trip time (RTT)** Le temps entre le moment où l'on transmet un segment et le moment où l'on reçoit l'aquittement de ce segment. Peut varier car les segments TCP sont encapsulés dans des paquets IP qui peuvent prendre des chemins différents à l'intérieur du réseau. Peut aussi varier s'il y a de la congestion à l'intérieur du réseau. **FlightSize** Nombre de segments envoyés qui n'ont pas encore été acquittés. Ne pas confondre FlightSize et cwnd. **Détection de congestion** *Hypothèse* : Tout segment est perdu à cause de la congestion (vrai sur du filaire car taux d'erreur extrêmement faible mais plus discutable en filaire) A chaque début de transmission, on démarre un timer (basé sur l'estimation du RTT). Si on ne reçoit pas d'ACK, alors le paquet est considéré comme perdu. On va préférer faire une surestimation du RTT plutôt qu'une sous-estimation. **Acquittements dupliqués** En TCP, tout segment reçu entraîne la transmission d'un acquittement et **le numéro de séquence de l'acquittement sera celui du dernier segment reçu en continu.** (voir exemple) ![](https://i.imgur.com/hh7qU4h.png) Ici 79 et 80 sont perdus, on duplique alors l'acquittement 78, dernier segment reçu en continu.