# PRS - TD 1
[Sujet](https://moodle.insa-lyon.fr/pluginfile.php/180166/mod_resource/content/2/TD-PRS.pdf)
[Correction](https://moodle.insa-lyon.fr/pluginfile.php/240917/mod_resource/content/1/4TC_PRS_corrige.pdf)
###### tags : `PRS` `TD`
## Exercice 1 : Estimation du RTT

Une bonne estimation du RTT permet de trnsmettre efficacement les données et de bien détecter les pertes.
Si on sous-estime le RTT, tous les segments seront considérés comme perdus alors que l'ACK n'aura juste pas eu le temps d'arriver. On risque alors de retransmettre des segments qui ont bien été reçus.
Si on sur-estime le RTT, on va attendre plus longtemps avant de déclarer la perte d'un segment. Cette attente peut-être perçue comme une perte d'efficacité si elle est trop longue mais elle permet surtout de mieux détecter les pertes.
**Calcul de $SRTT(k)$ en fonction de $SRTT(0)$**
$SRTT(1) = \alpha.SRTT(0)+(1-\alpha)$
$SRTT(2) = \alpha.SRTT(1)+(1-\alpha) = \alpha^2.SRTT(0)+\alpha(1-\alpha)+(1-\alpha) = \alpha^2.SRTT(0)+(\alpha+1)(1-\alpha)$
$SRTT(3) = \alpha.SRTT(2)+(1-\alpha) = \alpha^3.SRTT(0)+\alpha(\alpha+1)(1-\alpha)+(1-\alpha) = \alpha^3.SRTT(0)+(\alpha^2+\alpha+1)(1-\alpha)$
On en déduit :
$SRTT(k) = \alpha^k.SRTT(0)+(\sum_i^{k-1}\alpha^i)(1-\alpha)=\alpha^k.SRTT(0)+\frac{1-\alpha^k}{1-\alpha}(1-\alpha)=\alpha^k.SRTT(0)+1-\alpha^k$
$SRTT(k)=\alpha^k(SRTT(0)-1)+1$
**Calcul de $SRTT(20)$ avec $SRRT(0)=4$**
- Pour $\alpha=0.9$, $SRTT(20)=0.9^{20}(4-1)+1=1.36$
- Pour $\alpha=0.6$, $SRTT(20)=0.6^{20}(4-1)+1=1.00$
## Exercice 2 : Contrôle de flux

La taille de la fenêtre annoncée par le récepteur (constante dans cet exercice) est 20. On le remarque car 20 segments sont envoyés "d'un coup" et que l'émetteur attend avant d'envoyer le segment 21 (le temps que l'ACK du segment 1 arrive).
*Fenêtre d'émission* : Correspond aux segments que l'émetteur peut envoyer. Sa taille est définie en fonction des mécanismes TCP utilisés.
- Au point A : $[0,19]$ : Rien n'a été envoyé, les 20 premiers segments sont dans la fenêtre.
- Au point B : $[1,20]$ : $0$ est envoyé pour vérifier le bon focntionnement du réseau. Une fois l'ACK reçu, on décale la fenêtre de 1.
- Au point C : $[16,35]$ : Les acquittements des segments $0$ à $15$ ont été reçus mais pas celui de $16$.
- Au point D : $[17,36]$ : $16$ a été retransmis avec succès, on peu décaler la fenêtre de 1.
- Au point E : $[36,55]$ : Les acquittements de $0$ à $35$ ont bien été reçus mais pas celui de $36$.
La capacité du routeur est de 15 segments. On le déduit car lors du premier envoi de 20 segments, les 5 derniers sont détruits. On peut aussi le vérifier à d'autres moments
Le délai de réémission varie entre 1s et 1.5s. Cette différence vient de la variation de l'estimation du RTT.

## Exercice 3 : Contrôle de congestion

Pendant les 3.5 premières secondes de transmissions, on distingue plusieurs phases :
- Une première phase de Slow Start
- Fast Retransmit après la perte du segment 21
- Une deuxième phase de Slow Start
- Une troisième phase de Slow Start à la réémission du segment 24
- Congestion Avoidance une fois que le $sstresh$ est atteint
*Lexique* :
- $swnd$ : Contenu de la fenêtre d'émission
- $cwnd\_size$ : Taille de la fenêtre de congestion
- $sstresh$ : valeur du seuil $sstresh$

On a alors :
- Au point A :
- $swnd$ : $0$
- $cwnd\_size$ : 1
- $sstresh$ : $rnd\_high$
- $rnd\_high$ est la valeur initiale très élevée de sstresh
- Au point B :
- $swnd$ : $0$
- $cwnd\_size$ : 1
- $sstresh$ : $rnd\_high$
- On attend l'acquittement de $0$
- Au point C :
- $swnd$ : $[1,2]$
- $cwnd\_size$ : 2
- $sstresh$ : $rnd\_high$
- On attend les ACK de $1$ et $2$. La taille de la fenêtre double (Slow Start)
- Au point D :
- $swnd$ : $[3,6]$
- $cwnd\_size$ : 4
- $sstresh$ : $rnd\_high$
- On attend les ACK de $3$ à $6$. La taille de la fenêtre double (Slow Start)
- Au point E :
- $swnd$ : $[7,14]$
- $cwnd\_size$ : 8
- $sstresh$ : $rnd\_high$
- On attend les ACK de $7$ à $14$. La taille de la fenêtre double (Slow Start)
- Au point F :
- $swnd$ : $[15,30]$
- $cwnd\_size$ : 16
- $sstresh$ : $rnd\_high$
- On attend les ACK de $15$ à $30$. La taille de la fenêtre double (Slow Start)
- Au point G :
- $swnd$ : $21$
- $cwnd\_size$ : 1
- $sstresh$ : 5
- On a reçu 3 ACK pour $20$, il est donc considéré perdu par Fast Retransmit. On entre de nouveau en Slow Start. La valeur de $sstresh$ est visible au point L
- Au point H :
- $swnd$ : $24$
- $cwnd\_size$ : 1
- $sstresh$ : 5
- Le dernier ACK reçu est celui de $23$
- Au point I :
- $swnd$ : $24$
- $cwnd\_size$ : 1
- $sstresh$ : 5
- On détecte la perte de $24$ (lors de son premier envoi) après expiration du timer (RTT). On entre de nouveau en Slow Start et on retransmet
- Au point J :
- $swnd$ : $[28,29]$
- $cwnd\_size$ : 2
- $sstresh$ : 5
- On attend les ACK de $28$ à $29$. La taille de la fenêtre double (Slow Start)
- Au point K :
- $swnd$ : $[41,44]$
- $cwnd\_size$ : 4
- $sstresh$ : 5
- On attend les ACK de $41$ à $44$. La taille de la fenêtre double (Slow Start)
- Au point L :
- $swnd$ : $[45,49]$
- $cwnd\_size$ : 5
- $sstresh$ : 5
- On atteint $sstresh$, on entre dans Congestion Avoidance