TD : Couche Transport (TCP)

Transcription

TD : Couche Transport (TCP)
L2 Info&SPI
TD – Systèmes et Réseaux
Institut Galilée
TD : Couche Transport (TCP)
Exercice 1 :
L'échange TCP de la figure ci-dessus correspond au transfert d'une page WEB entre un
navigateur WEB et un serveur WEB. On fait l'hypothèse que la requête à la page WEB fait
100 octets et que la page WEB retournée fait 1000 octets. Il n’y a pas d’erreurs de
transmission.
Pour chaque segment de données, différentes informations apparaissent. D'une part la
présence d'un ou plusieurs des différents indicateurs comme SYN, FIN, ACK. Par ailleurs
sur la première ligne deux chiffres sont portés. Le premier chiffre correspond au numéro
de séquence du premier octet du segment, le deuxième chiffre correspond au numéro du
premier octet du prochain segment à envoyer. Le chiffre entre parenthèses correspond au
nombre total d'octets transmis dans le segment. Si le segment est porteur d'un
acquittement positif, l'indicateur ACK est mentionné et a coté de lui doit figurer la valeur
du champ acquittement du segment TCP.
Complétez les numéros de séquence et les numéros d'acquittement qui manquent sur la
figure (qui apparaissent sous forme de point d'interrogation). Indiquez à quoi
correspondent les différents segments numérotés de 1 à 8.
Correction :
Page 1/4
L2 Info&SPI
TD – Systèmes et Réseaux
Institut Galilée
Exercice 2 :
Considérons le transfert d'un fichier de taille illimité sur une connexion TCP classique. La
taille maximale des données d'un segment (MMS) est 200 octets. La transmission démarre,
nous représentons dans la figure 1 le chronogramme obtenu :
Page 2/4
L2 Info&SPI
#
1
2
3
4
Num
Seq
3999
122
4000
4000
TD – Systèmes et Réseaux
Num
Ack
4000
123
123
URG
ACK
PSH
RST
Institut Galilée
SYN
FIN
X
X
X
X
Taille
Données
0
0
0
200
1. Complétez dans le tableau ci-dessus les paramètres associés à chaque segment
(Numéros de séquence et d'acquittement, flags et Taille des données).
Réponse :
#
1
2
3
4
5
6
7
8
Num
Seq
3999
122
4000
4000
4200
123
123
4400
Num
Ack
4000
123
123
123
4200
4400
123
URG
ACK
X
X
X
X
PSH
RST
SYN
X
X
FIN
Taille
Données
0
0
0
200
200
0
0
200
Page 3/4
L2 Info&SPI
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
4600
123
4800
123
123
5000
5200
123
5400
5600
5800
123
123
5000
123
5200
123
5400
123
TD – Systèmes et Réseaux
123
4400
123
4800
5000
123
123
5000
123
123
123
5000
5000
123
5400
123
5400
123
6000
Institut Galilée
X
X
X
X
X
X
X
X
X
200
0
200
0
0
200
200
0
200
200
200
0
0
200
0
200
0
200
0
2. Qu'implique la première perte au niveau des acquittements suivants ?
L’acquittement 7 est perdu, mais le récepteur envoie un autre acquittement (seg 10) suite à
la réception du segment de données 9.
3. Le déséquencement observé modifie-t-il les émissions de segments de données ?
Non.
4. Comment est détectée la première perte d'un segment de données et comment est
elle réparée ?
La détection de la perte du segment 14 est dû à la réception de 3 ack identiques (16, 20 et
21) avant expiration du temporisateur RTO. A noter que le segment 13 ne compte pas
dans les ACK dupliqués, car le segment 14 n’avait pas encore été généré au moment où le
segment 13 est arrivé.
La stratégie de retransmission suite à 3 ACK dupliqués est de type retransmission
selective : l’émetteur ne retransmet que le segment indiqué par les dupACK (le segment
14).
5. Comment est détectée la seconde perte d'un segment de données et comment est
elle réparée ?
Le temporisateur RTO pour le segment 15 a expiré avant réception d’un ACK 5400. Ce
segment est considéré comme perdu, et TCP considère que cela est dû à un problème
grave (i.e.congestion). La source va considérer que tous les segments envoyés après le
segment 15 sont « vraisemblablement » perdus aussi. La stratégie de retransmission est
alors de type Go-back-n : l’émetteur retransmet tous les segments data depuis le segment
15.
Page 4/4
L2 Info&SPI
TD – Systèmes et Réseaux
Institut Galilée
Remarque : le récepteur ne sait jamais si la source exécute un algo de retransmission de
type sélectif ou go-back-n. Ses acquittements concernent donc toujours le premier octet
non reçu. Les segments correctement reçus sont gardés dans le tampon de réception.
Exercice 3 : Mécanismes de contrôle de congestion TCP
1. Pour TCP, quel phénomène indique une congestion dans le réseau ? Comment
précisément peut-on constater cette congestion ?
Réponse : La congestion est indiquée par le non retour d’un acquittement avant
l’expiration du temporisateur de retransmission. Ce retard s’explique soit par la
perte du paquet soit par un temps de transport trop long...
2. Que se passe t-il dans le routeur pour susciter ce phénomène.
Réponse : Le retard provient d’une surcharge des files d’attente donc de la
mémoire d’un routeur). La perte peut provenir d’un débordement des mémoires
d’un noeud mais aussi d’une perte provoquées explicitement par un élément de
réseau. On suppose que la mémoire d’un routeur se trouve débordée, et que alors
les paquets sont jetés.
3. Pour TCP ce phénomène donne suite à l’inférence de la congestion. Mais ce
phénomène peut se produire même quand il n’y a pas de congestion dans le réseau.
Dans quels autres cas un tel phénomène peut-il se produire ?
Réponse : Les pertes de paquets peuvent se produire si une liaison n’est pas fiable.
Par exemple, si les paquets sont perdus sur une liaison sans-fil. , Dans ce cas, ce
n’est pas une indication de congestion. Une faille transitoire de routage peut aussi
être à l’origine d’une perte, sans qu’il existe de congestion dans le réseau.
4. Si ce phénomène n’indique pas toujours une congestion, pourquoi est-ce que l’IETF
base la norme TCP là-dessus ? Pourquoi est-ce que l’IETF n’a pas défini une norme
dans laquelle un routeur constate lui-même un état de congestion et envoi un
message explicite à l’émetteur ?
Réponse : La philosophie derrière l’Internet est une philosophie de repousser
l’intelligence aux bords du réseau pour permettre d’avoir du matériel très simple au
coeur du réseau. On préfère alors avoir une signalisation de congestion qui marche
de bout en bout, même si elle n’est pas complètement fiable.
5. Pour le contrôle de congestion, TCP utilise un seuil qui indique le débit au dessus
duquel on risque de rencontrer de la congestion. Ce seuil est exprimé par un
paramètre ssthresh, qui indique un nombre d’octets. Pour obtenir le débit seuil
on divise ssthresh par la période aller retour entre l’émetteur et le récepteur (un «
RTT » ou « Round Trip Time » en anglais).
Le débit peut varier en dessous et au dessus du seuil ssthresh /RTT. L’émetteur
maintient un paramètre cwnd qui indique le nombre d’octets qu’il peut envoyer
dans le réseau avant de recevoir un acquittement. (Le nom cwnd est un raccourci
pour « congestion window » en anglais, qui veut dire « fenêtre de congestion ».)
Quand cwnd > ssthresh, l’émetteur fait particulièrement attention à ne pas
provoquer de congestion.
Page 5/4
L2 Info&SPI
TD – Systèmes et Réseaux
Institut Galilée
Supposons que ssthresh est à 5000 octets, cwnd est à 6000 octets, et la taille d’un
paquet est de 500 octets. Un émetteur envoi douze paquets de 500 octets dans une
période RTT, et reçoit douze acquittements (un pour chaque paquet). Que devient
les valeurs de ssthresh et cwnd ? Comment s’appellent ces changements de
valeurs ?
Réponse : La valeur de cwnd augmente avec la taille d’un paquet après avoir reçu
les douze acquittements. La nouvelle valeur de cwnd est donc de 6500 octets. Cela
s’appelle « l’accroissement additif » (« additive increase » en anglais). La valeur de
ssthresh ne change pas.
A noter que la valeur de cwnd augmente de la taille d’un paquet par RTT, et non
par acquittement (qui serait une augmentation beaucoup plus rapide). Dans notre
exemple, l’émetteur envoie douze paquets dans le premier RTT. Dans le deuxième
RTT il va pouvoir envoyer treize paquets.
Une précision : les implémentations de TCP ont le droit d’augmenter cwnd d’une
manière approximativement linéaire. Plusieurs implémentations, par exemple,
augmente cwnd par MSS*2/ cwnd pour chaque acquittement reçu (où MSS est la
taille maximale d’un paquet – Maximum Segment Size). Ceci peut impliquer une
accroissement plus que linéaire ou moins que linéaire dépendant de si on accumule
les acquittements.
6. Supposons que ssthresh est toujours à 5000 octets, que cwnd est maintenant à
14.000 octets, que l’émetteur envoi 14.000/500 = 28 paquets, et que l’émetteur reçoit
une indication de congestion avant de recevoir le premier acquittement. Que
devient les valeurs de ssthresh et cwnd ? Comment s’appel ces changements de
valeurs ?
Réponse : La valeur de ssthresh va devenir la moitié de la valeur cwnd, c'est-àdire 7000 octets. La valeur de cwnd devient la taille d’un paquet, c'est-à-dire 500
octets.
Cela s’appelle la « réduction multiplicative » (« multiplicative decrease » en anglais).
Pourquoi dit-on « multiplicative » quand cwnd retourne toujours à la taille d’un
paquet ? Parce que cwnd va rapidement remonter à la nouvelle valeur de
ssthresh, qui est la moitié de l’ancienne valeur de cwnd.
Une précision : la valeur de ssthresh ne peut pas descendre plus bas que la taille
de deux paquets (c'est-à-dire 1000 octets dans notre exemple).
Une autre précision : ici on suppose que cwnd octets ont été « perdus » dans le
réseau. C'est-à-dire qu’il y a cwnd octets non acquittés. La formule précise est de
fixer ssthresh à la moitié du nombre d’octets non acquittés.
7. Nous venons de voir comment on augmente et comment on diminue cwnd en
fonction de l’absence ou la présence d’indicateurs de congestion. Comment
s’appelle cet algorithme ? Quelle est l’idée derrière cet algorithme ?
Réponse : L’algorithme s’appelle « l’évitement de congestion » (« congestion
avoidance » en anglais). Il implémente une politique AIMD (« Additive Increase,
Multiplicative Decrease »). L’idée est d’augmenter lentement le débit afin de ne pas
produire trop de congestion, et de diminuer le débit très rapidement au cas où on a
une indication de congestion.
Page 6/4
L2 Info&SPI
TD – Systèmes et Réseaux
Institut Galilée
8. Au démarrage, et 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 cwnd < 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 paquet. L’émetteur à plusieurs paquets prêts à être envoyer. Combien
de paquets envoie l’émetteur pendant la première période RTT ? S’il reçoit des
acquittements pour tous ses paquets, que devient la valeur de cwnd ? Combien de
paquets envoie l’émetteur pendant la deuxième période RTT ? S’il reçoit des
acquittements pour tous ses paquets, que devient la valeur de cwnd ? En générale,
comment évolue la taille de cwnd ?
Réponse : Dans la première période RTT l’émetteur envoie un paquet de 500 octets.
Quand il reçoit l’acquittement il augmente cwnd à 1000 octets. Dans la deuxième
période RTT l’émetteur envoie deux paquets de 500 octets chacun. Ayant reçu les
deux acquittements, il augmente cwnd de 1000 octets à 2000 octets. En général, il
augmente cwnd par la taille d’un paquet (500 octets) pour chaque acquittement reçu.
Cela revient à doubler cwnd dans chaque période RTT si l’émetteur reçoit un
acquittement pour chaque paquet envoyé. Ce processus continue jusqu’à ce que
cwnd atteint ssthresh. A ce moment, l’émetteur bascule vers l’ « évitement de
congestion ».
Une précision : certaines implémentations de TCP regroupent les acquittements,
envoyant un acquittement pour deux paquets reçus. Dans ce cas, l’augmentation de
cwnd est moins qu’exponentiel.
9. Comment s’appelle la période pendant laquelle cwnd est plus petit que ssthresh ?
Réponse : « le démarrage lent » (« slow start » en anglais). Le slow start n’est pas
vraiment « slow » -- il s’agit d’une augmentation exponentielle du débit de
transmission. Mais, on l’appelle « slow » parce qu’on commence avec un débit
faible.
10. Que devient la valeur de ssthresh si l’émetteur reçoit une indication de
congestion pendant que cwnd est plus petit que ssthresh ?
Réponse : ssthresh devient toujours la moitié du nombre d’octets non acquittés.
C'est-à-dire cwnd/2 s’il y a cwnd octets non acquittés.
Exercice 4 : Illustration du mécanisme de contrôle de congestion TCP
Le contrôle de flux de TCP repose sur le principe que la perte d’un paquet est due à une
congestion dans le réseau. Aussi, lorsqu’une perte est détectée, la procédure de contrôle
de congestion se met en place. Lors de l’envoi des données, le protocole augmente au fur
et à mesure la vitesse d’émission jusqu’à ce qu’une perte apparaisse. Alors le protocole
ralentit automatiquement son débit afin de palier d’éventuelles pertes additionnelles. Ce
principe permet d’éviter que les retransmissions de données ne viennent s’ajouter à la
congestion déjà existante.
Rappel des algorithmes slow-start et congestion avoidance :
•
A l'initialisation d'une connexion :
cwnd :=
MSS (1 segment)
Page 7/4
L2 Info&SPI
TD – Systèmes et Réseaux
Institut Galilée
ss-threshold := 64 Koctets (65535 octets)
•
AllowedWindow = min (cwnd , AdvertisedWindow)
•
Lorsqu'une congestion est détectée, à chaque expiration du temporisateur :
ss-threshold := fligthsize / 2
cwnd := MSS (1 segment)
•
Lorsque des données sont acquittées, cwnd est augmenté :
IF cwnd ≤ ss-threshold THEN cwnd := cwnd + MSS (ou cwnd + 1 MSS par
ACK reçu) (slow-start)
ELSE cwnd := cwnd + MSS2/cwnd (ou cwnd + 1 MSS par RTT, si
aucune perte) (congestion avoidance).
Tracer un diagramme illustrant l'évolution de la fenêtre de congestion (cwnd) de TCP en
fonction du temps, sous les hypothèses suivantes :
•
la taille maximum de segment est de 1024 octets,
•
initialement, la fenêtre de congestion est de 64 Koctets,
•
l'unité de temps utilisée est le délai aller-retour (RTT),
•
au temps 0, la connexion démarre et au temps 14, le temporisateur de
retransmission vient d'expirer.
Response :
Temps
Réception
ss-threshold
Mécanisme
cwnd
Emission max.
0
Time Out
64Ko/2 = 32Ko
Slow Start
1
1 segment
1
1 ACK
32Ko
Slow Start
1+1 = 2
2 segments
2
2 ACK
32Ko
Slow Start
2+2 = 4
4 segments
3
4 ACK
32Ko
Slow Start
4+4 = 8
8 segments
4
8 ACK
32Ko
Slow Start
8+8 = 16
16 segments
5
16 ACK
32Ko
Slow Start
16+16 = 32
32 segments
6
32 ACK
32Ko
Cong. Avoid. 32+1 = 33
33 segments
7
33 ACK
32Ko
Cong. Avoid. 33+1 = 34
34 segments
8
34 ACK
32Ko
Cong. Avoid. 34+1 = 35
35 segments
9
35 ACK
32Ko
Cong. Avoid. 35+1 = 36
36 segments
10
36 ACK
32Ko
Cong. Avoid. 36+1 = 37
37 segments
11
37 ACK
32Ko
Cong. Avoid. 37+1 = 38
38 segments
12
38 ACK
32Ko
Cong. Avoid. 38+1 = 39
39 segments
13
39 ACK
32Ko
Cong. Avoid. 39+1 = 40
40 segments
14
Time Out
40Ko/2 = 20Ko
Slow Start
1
1 segment
15
1 ACK
20Ko
Slow Start
1+1 = 2
2 segments
Page 8/4
L2 Info&SPI
TD – Systèmes et Réseaux
Institut Galilée
16
2 ACK
20Ko
Slow Start
2+2 = 4
4 segments
17
4 ACK
20Ko
Slow Start
4+4 = 8
8 segments
18
8 ACK
20Ko
Slow Start
8+8 = 16
16 segments
19
16 ACK
20Ko
Slow Start
Min(threshol 20 segments
d,16+16) =
20
20
20 ACK
20Ko
Cong. Avoid. 20+1 = 21
21 segments
21
21 ACK
20Ko
Cong. Avoid. 21+1 = 22
22 segments
22
22 ACK
20Ko
Cong. Avoid.
23 segments
23
23 ACK
20Ko
Cong. Avoid.
segments
…
…
…
…
…
…
40
36
32
seuil
28
24
seuil
20
16
12
8
4
0
2
4
6
8
10
12
14
16
18
20
22
temps
Page 9/4