Vous êtes sur la page 1sur 23

UPMC - Licence Informatique 3I014 - Réseaux

TD 8

UDP ET TCP : PROTOCOLES DE TRANSPORT

1. UDP (USER DATAGRAM PROTOCOL)

1.1. Format de message


UDP est le protocole de transport le plus simple utilisé par Internet. Il fonctionne en mode non
connecté et repose sur des messages dont le format est le suivant :
16 bits 16 bits
Source Port Destination Port
Length Checksum

Data

1.2. Exercice
1.2.1. A quoi correspondent les ports Source et Destination ?
UDP assure essentiellement une fonction de (dé)multiplexage grâce aux champs « Source
Port » et « Destination Port », qui permettent d'identifier (quoique de façon indirecte) les
processus en communication sur les deux machines distantes. On notera que c'est la paire
(port, hôte) appelée socket, qui constitue la clé de démultiplexage pour UDP.
1.2.2. Quelles sont les fonctionnalités assurées par UDP ?
UDP se contente donc d'étendre le service de remise de machine à machine (offert par IP)
en un service de communication de processus à processus.
S'il n'y a pas de contrôle d'erreur à proprement parler, il y a néanmoins une fonction de
détection d'erreur (optionnelle avec IPv4 mais obligatoire avec IPv6) qui repose sur le
champ Cheksum : elle permet de vérifier que le message UDP a bien été délivré entre les 2
bons ports (l'@ IP dest aurait pu être modifiée lors du transit du paquet, ce qui aurait
provoqué une remise à un mauvais destinataire). Lorsqu'il est calculé, le checksum porte sur
la totalité du message UDP augmentée d'un pseudo-header comportant entre autres les @ IP
source et destination (en conséquence de quoi, UDP repose forcément sur IP).
En théorie, les messages UDP peuvent être fragmentés par IP. En pratique, la plupart des
applications utilisant UDP limitent la taille de leurs messages à 512 octets, pour éviter toute
fragmentation.

1
UPMC - Licence Informatique 3I014 - Réseaux

1.2.3. Une machine A envoie un message UDP contenant 1000 octets de données à une machine
B. Le message doit traverser 2 routeurs avant d’arriver à destination. Les 3 réseaux traversés
ont un débit de 10 Mbit/s. Sur chaque réseau le message est transporté en utilisant le
protocole Ethernet. La vitesse de propagation est de 200.000 km/s et les distances entre les
machines sont indiquées sur le schéma.
500 m 500 m 500 m

A B

R1 R2

a. Donner une borne inférieure sur le temps de transfert du message (négligeant tout ce qui
n’est pas indiqué dans l’énoncé).
L’intérêt de cet exercice est tout d’abord de rappeler qu’un message UDP est encapsulé dans
un paquet IP, lui-même encapsulé (ici) dans une trame Ethernet. Pour calculer le temps de
transmission du message sur chaque réseau, il faut donc ajouter aux 1008 octets de données
du message UDP, les 20 octets de l’en-tête IP (sans option) et les 26 octets de l’en-tête de de
l’en-queue Ethernet (incluant préambule et CRC), soit au total 1054 octets. On calcule alors
le temps de transmission sur chaque lien :
L 1054 *8
tt = = = 0, 00085 s = 0,85 ms
D 10 7
auquel il ne faut pas oublier d’ajouter le temps de propagation (même si celui-ci est
négligeable dans ce cas) :
x 500
tp = = = 0, 0000025 s = 2, 5 µs
c 200.000 *1000
On doit alors multiplier le temps de transfert par 3 (car les 3 transferts sur les 3 liens sont
identiques ici) et on obtient 2,5 ms.
b. Quels sont tous les phénomènes dont le temps a été négligé dans le calcul précédent ?
Le calcul précédent a, entre autre, négligé : le temps d’attente avant émission d’une trame
Ethernet, les collisions éventuelles de trame, les erreurs potentielles de transmission, les
temps de constitution des trames, paquets et messages, les temps de calculs des différents
champs de contrôle (ou de détection d’erreur), le temps de routage des paquets IP, etc.
c. Peut-on donner une borne supérieure sur le temps de transfert du message ?
UDP n’assure absolument aucune garantie de délivrance. Le message peut donc se perdre et
ne jamais arriver. La borne max est donc infinie !

2
UPMC - Licence Informatique 3I014 - Réseaux

2. TCP (TRANSMISSION CONTROL PROTOCOL)

2.1. Généralités
TCP est un protocole de transport, donc de bout en bout, offrant un service de remise fiable de flux
d'octets en full-duplex et en mode connecté. Il met notamment en œuvre des mécanismes de :
§ multiplexage/démultiplexage ;
§ contrôle d'erreur ;
§ contrôle de flux ;
§ contrôle de congestion.
A la différence des protocoles en mode connecté que nous avons pu voir jusqu'à présent, TCP
n'utilise qu'un seul format de segment qui sert aussi bien à établir/libérer une connexion qu'à
transférer des données. Le format d’un segment TCP est donné en annexe.
2.1.1. Quelle est la taille minimum d’un segment TCP ?
Un segment TCP sans option et sans donnée fait donc 20 octets.
2.1.2. Quelle est la taille maximum de l’en-tête d’un segment TCP ?
60 octets max : 15 (nombre maximum codable sur 4 bits) * 4 (mots de 32 bits)
Il y a donc, au maximum, 40 octets d’options.
2.1.3. Décoder la trame suivante (donnée sans préambule ni CRC) en séparant bien les
informations de niveaux Ethernet, IP et TCP :

00 01 02 a5 fb 3a 00 01 02 a5 fc 8d 08 00 45 00
00 3c ec 26 40 00 40 06 cc cd 0a 21 b6 b6 84 e3
3c 0d 0e b5 00 50 a9 55 92 64 00 00 00 00 a0 02
3e bc a3 74 00 00 02 04 05 b4 04 02 08 0a 08 39
91 16 00 00 00 00 01 03 03 00
Informations de niveau Ethernet :
Adresse destination : 00:01:02:a5:fb:3a
Adresse source : 00:01:02:a5:fc:8d
Type (DoD Internet) : 08 00

Informations de niveau IP :
Version = 4
IHL = 5 : 5 mots de 32 bits c’est-à-dire 20 octets (donc il n’y a pas d’option)
TOS = 00 : pas de priorité particulière
Total Length = 0x003c : 60 octets
Identification, flags et fragment offset = 0xec264000 : pas de fragmentation
Time to live = 0x40 : 64
Protocol = 0x06 : TCP
Header checksum = 0xcccd : correct

3
UPMC - Licence Informatique 3I014 - Réseaux

Adresse IP source = 0x0a21b6b6 : 10.33.182.182


Adresse IP destination = 0x84e33c0d : 132.227.60.13
Faire remarquer que l’ordre est inversé par rapport à la couche liaison... historiquement,
pour des contraintes de performance sur les trames Ethernet.

Information de niveau TCP :


Src Port = 0x0eb5 : 3765
Dst Port = 0x0050 : 80, soit http
Seq = 0xa9559264 : 2840957540
Ack = 0x00000000 : 0
Header length = 0xa : 40 octets
Flags = 0x002 : SYN
0... .... = Congestion Window Reduced (CWR) : Not set
.0.. .... = ECN-Echo : Not set
..0. .... = Urgent : Not set
...0 .... = Acknowledgment : Not set
.... 0... = Push : Not set
.... .0.. = Reset : Not set
.... ..1. = Syn : Set
.... ...0 = Fin : Not set
Window size = 0x3ebc : 16060
Checksum = 0xa374 : correct
Pointeur d’urgence = 0x0000 : pas de données urgentes
Options = 0x020405b40402080a083991160000000001030300 : 20 bytes
0x020405b4 : Maximum segment size = 1460 (0x05b4) octets
0x0402 : SACK permitted
0x080a0839911600000000 : Time stamp : tsval = 137990422, tsecr = 0
0x01 : NOP
0x030300 : adaptation de la taille de la fenêtre.

4
UPMC - Licence Informatique 3I014 - Réseaux

2.2. Etablissement de connexion


L'établissement d'une connexion TCP se fait par échange de trois messages (three-way handshake) :
A B

SYN

SYN, ACK

ACK

t t
Dans le cas où la connexion est refusée, B envoie un RST :
A B

SYN

RST

t t
2.2.1. Pourquoi trois messages ? Deux n'auraient-ils pas suffi ?
A B A B

CR CR CR : Connexion Request
CC : Connection confirmation
CC CC DT : Data
DT

DT

t t
t t
Avec 2 messages (dessin de gauche), le sous-réseau pouvant déséquencer les paquets,
l'appelant de la connexion reçoit un segment de données pour une connexion qui est en
attente de confirmation d'établissement.
Avec 3 messages (dessin de droite), l'appelé doit attendre de recevoir un acquittement de sa
confirmation (sous la forme de données ou d'acquittement) avant de pouvoir émettre ses
propres données. On évite ainsi à l'appelant de se retrouver dans un état mal défini.
2.2.2. Donner les numéros de séquence et d’acquittement des trois messages d’établissement.
Le SYN « consomme » un numéro l’espace de numérotation et peut donc être acquitté :

5
DT i stockée pour
considérée reséquencement
comme puis délivrée
retransmission
2ème incarnation
DT i
1ère incarnation
UPMC - Licence Informatique 3I014 - Réseaux

A B

SYN
SeqNum = x
SYN, ACK
SeqNum = y
ACK AckNum = x+1
SeqNum = x+1
AckNum = y+1

t t
2.2.3. Pourquoi la numérotation n'est-elle pas commencée à 0 ?
Une connexion TCP est en fait identifiée par (port S, hôte S, port D, hôte D). Il est tout à fait
possible d'ouvrir une connexion entre les machines A et B, ports X et Y, de la fermer, puis
quelque temps après, d'ouvrir une nouvelle connexion, toujours entre les machines A et B et
les ports X et Y. On parle dans ce cas d'incarnations différentes d'une même connexion. Le
scénario suivant est alors possible :

On y voit une seconde incarnation réutilisant un numéro de séquence trop tôt, c'est-à-dire
quand il y a encore une chance qu'un segment appartenant à une incarnation précédente
interfère avec l'incarnation courante.
Le numéro de séquence initial (ISN) est choisi de façon à éviter cette situation. A l'origine,
il devait être tiré aléatoirement ; en pratique, il est généralement mis à jour grâce à un
compteur de 32 bits incrémenté toutes les 4 µs.

2.3. Numérotation des données


L'une des principales propriétés du protocole TCP est la fiabilité. TCP doit donc résoudre les
problèmes de données en erreur, perdues, dupliquées ou délivrées dans le mauvais ordre par les
couches inférieures. Pour cela, TCP assigne à chaque octet transmis un numéro de séquence et le
numéro indiqué dans le champ « Sequence Number » de l’en-tête du segment est le numéro du
premier octet transporté par le segment. On parlera alors du numéro de séquence du segment.
2.3.1. On considère TCP opérant sur un lien à 1 Gbit/s.
a. Combien de temps met le numéro de séquence pour reboucler complètement ?

6
UPMC - Licence Informatique 3I014 - Réseaux

1 Gbit/s, cela fait exactement 125 Mo/s. Par ailleurs, les numéros de séquence rebouclent
quand on envoie 232 octets c'est-à-dire environ 4 Go. Par conséquent, cela prend 4 Go / 125
Mo/s, soit 32 s.
Ce calcul ne compte pas les octets de contrôle et fournit donc une borne inférieure au temps
de rebouclage.
b. On utilise dans les options une estampille temporelle, codée sur 32 bits, qui s'incrémente
1000 fois pendant le temps trouvé précédemment. Combien de temps met l'estampille
pour reboucler ?
Pour que l'estampille reboucle, il faut qu'elle passe par 232 valeurs, soit à peu près 4.109
valeurs. Or, par hypothèse, elle prend 1000 valeurs en 32 s. Donc, elle prendra 4.109 valeurs
en 4.32.106 s, soit 4 ans.
On voit donc que ce champ d'estampille permet d'étendre en quelque sorte l'espace de
numérotation des données, celui tendant à devenir quelque peu étroit avec l'arrivée des très
hauts débits.

2.4. Acquittement des données


Les segments TCP véhiculent également un numéro d'acquittement dans le champ
« Acknowledgment Number », qui représente le numéro de séquence du prochain octet de données
attendu dans le flux de données en sens inverse.
Lorsqu’un émetteur envoie un segment TCP contenant des données, il déclenche une temporisation.
Si aucun acquittement couvrant tous les octets du segment n’est revenu pendant la durée de cette
temporisation, les données doivent être retransmises par l’émetteur.
2.4.1. On considère une connexion TCP entre deux machines distantes A et B. A doit envoyer à B
deux segments de 100 octets de données chacun et B doit envoyer à A un segment de 300
octets de données. A est à l’origine de l’établissement, son ISN (numéro de séquence initial)
est égal à 0 et celui de B est égal à 1000.

7
UPMC - Licence Informatique 3I014 - Réseaux

A B

SYN
SeqNum = 0
SYN, ACK
SeqNum = 1000
ACK AckNum =
SeqNum =       
AckNum =       
300 octets
100 octets SeqNum =
SeqNum =       
AckNum =
AckNum =       
ACK
SeqNum =
100 octets AckNum =
SeqNum =       
AckNum =        ACK
SeqNum =
AckNum =

t t
a. Compléter sur le schéma précédent les numéros de séquence et d’acquittement
manquants.
A B

SYN
SeqNum = 0
SYN, ACK
SeqNum = 1000
ACK AckNum = 1
SeqNum = 1
AckNum = 1001
300 octets
100 octets SeqNum = 1001
SeqNum = 1 1
1001
AckNum = 1 100
AckNum = 1001
1300
ACK
SeqNum = 1301
100 octets AckNum = 101
SeqNum = 101 1
AckNum = 1301 ACK 200
SeqNum = 1301
AckNum = 201

t t
b. Que se passe-t-il si le premier segment de données de A se perd ? Redessiner l’échange
complet.

8
UPMC - Licence Informatique 3I014 - Réseaux

A B

SYN
SeqNum = 0
SYN, ACK
SeqNum = 1000
ACK AckNum = 1
SeqNum = 1
AckNum = 1001
100 octets
SeqNum = 1 300 octets
1001 AckNum = 1001 SeqNum = 1001
AckNum = 1
1300

100 octets
SeqNum = 101 1
101
AckNum = 1301 ACK 200
Tempo SeqNum = 1301
AckNum = 1

100 octets
SeqNum = 1 1
AckNum = 1301 ACK 200
SeqNum = 1301
AckNum = 201

t t

2.5. Contrôle de flux


Pour son contrôle de flux, TCP utilise un mécanisme de fenêtre coulissante de taille variable
(contrairement aux protocoles de niveaux inférieurs vus jusqu’à présent qui utilisent une fenêtre de
taille fixe). La taille courante de la fenêtre est communiquée dans le champ « Window » (également
appelé « Advertised Window ») du segment et correspond au nombre d’octets de données que
l’émetteur est prêt à recevoir à partir du numéro d’acquittement inclus dans le segment, avant de
recevoir plus d’autorisations du récepteur.
2.5.1. Une machine envoie un segment TCP avec les valeurs suivantes : SeqNum = 1227,
AckNum = 2513 et Win = 3007. Quelle plage d’octets est-elle prête à recevoir ?
La machine est prête à recevoir les octets dont le numéro de séquence est compris entre
2513 et 5519.
2.5.2. A quoi se relie la taille de la fenêtre annoncée lors de la phase d’établissement (dans le SYN
ou dans le SYN/ACK) ?
La taille de la fenêtre annoncée lors de la phase d’établissement est au maximum égale à la
taille du buffer de réception TCP (en octets) et correspond au nombre maximum d’octets
que la machine est capable de recevoir et de stocker.
2.5.3. Un émetteur sur une connexion TCP qui reçoit un « Window » à 0 sonde périodiquement le
récepteur pour déterminer quand la fenêtre « s'ouvre ». Pourquoi le récepteur aurait-il besoin

9
UPMC - Licence Informatique 3I014 - Réseaux

d'un temporisateur supplémentaire s'il était responsable de signaler explicitement et


spontanément l'ouverture de la fenêtre ?
Si on responsabilise le récepteur, en lui faisant indiquer explicitement la réouverture de sa
fenêtre par l'envoi spontané d'un ACK avec Window > 0, le problème qui se pose est que le
récepteur ne peut avoir confirmation du fait que l'émetteur a bien reçu son ACK que
lorsqu'il reçoit de nouvelles données ; et si le ACK s'est perdu… On fait alors appel à un
temporisateur, qui est armé à la réouverture de la fenêtre, désarmé à la réception de
données ; sur expiration, un ACK avec une valeur de fenêtre éventuellement mise à jour est
renvoyé.
Rappel sur le contrôle de flux TCP : la taille de la fenêtre est susceptible de prendre
momentanément une valeur nulle. Le récepteur met alors la valeur 0 dans le champ Window
du ACK qu'il envoie à l'émetteur. Ce dernier va ensuite sonder périodiquement le récepteur
pour déterminer quand la fenêtre de contrôle de flux devient positive (par envoi d'un
segment contenant 1 octet de données) ; si le ACK du récepteur indiquant une réouverture
de fenêtre se perd, une sonde ultérieure de l'émetteur va provoquer un duplicata de cet ACK.
C'est la solution qui a été retenue pour TCP, dans le cadre de sa philosophie « smart sender /
dumb receiver » (i.e. avoir une algorithmique aussi simple que possible au niveau du
récepteur).
2.5.4. On considère l’échange suivant dans lequel la machine A doit envoyer 1500 octets de
données à la machine B, mais B a auparavant annoncé à A une fenêtre de taille 1000. A
envoie donc seulement 1000 octets qui viennent remplir le buffer de réception de B. Peu de
temps après, l’application de B vient lire 800 octets dans le buffer. Compléter l’échange.
A B

ACK
SeqNum = 2001
1000 octets AckNum = 501
SeqNum = 501 Win = 1000 501
AckNum = 2001 ACK Buffer de réception plein
SeqNum = 2001
AckNum = 1501 1500
L'application vient
Win = 0
lire 800 octets dans
1301 le buffer de réception
1500

t t

10
UPMC - Licence Informatique 3I014 - Réseaux

A B

ACK
SeqNum = 2001
1000 octets AckNum = 501
SeqNum = 501 Win = 1000 501
AckNum = 2001 ACK Buffer de réception plein
SeqNum = 2001
AckNum = 1501 1500
L'application vient
Win = 0
lire 800 octets dans
1301 le buffer de réception
1500

1 octet
SeqNum = 1501 1301
1501
AckNum = 2001 ACK
SeqNum = 2001
499 octets AckNum = 1502
SeqNum = 1502 Win = 799
AckNum = 2001 1301
ACK
SeqNum = 2001
AckNum = 1502 2000
Win = 300

t t
2.5.3. TCP est orienté-octet : la numérotation et la fenêtre portent sur des octets. Quand est-ce que
TCP décide de constituer et d'envoyer un segment ?
1) dès qu'il a MSS (Maximum Segment Size) octets de données à envoyer MSS = MTU du
sous-réseau local – entête IP – entête TCP (Remarque : les entités TCP se communiquent
leurs MSS respectifs au moment de l'établissement (champ options) et c'est la valeur la plus
faible qui gagne. Par défaut la MSS est de 536 octets (+20 en-tête)) ;
2) lorsque son application lui demande explicitement : TCP supporte une fonction push que
le processus peut invoquer pour vider le buffer des octets en attente d'émission (ex : c'est
utile pour l'émulation de terminaux (Telnet), où chaque caractère doit être envoyé aussitôt
tapé) ;
3) sur expiration d'un temporisateur : pour éviter d'attendre trop longtemps les MSS octets.

2.6. Temporisateur de retransmission


Un élément important du contrôle d'erreur est le temporisateur de retransmission.
2.6.1. Pourquoi la valeur du temporisateur doit-elle être ajustée dynamiquement et ce, pour chaque
connexion ?
Le délai aller-retour (RTT) varie dans l'espace et dans le temps : a priori, il sera supérieur
pour une connexion entre Paris et Los Angeles qu'entre Jussieu et Scott, et a priori, pour la
connexion entre Paris et Los Angeles, le RTT sera supérieur dans l'après-midi.
La procédure de dimensionnement du temporisateur de retransmission proposée initialement est la
suivante. TCP mesure le temps écoulé entre l’envoi d’un octet de données ayant un numéro de

11
TO0
TO1
TO2 RTT1, d'où SRTT1 et TO1
RTT2,
RTT3, d'où
d'où SRTT2
SRTT3 et
et TO2
TO3
UPMC - Licence Informatique 3I014 - Réseaux

séquence donné et la réception de l’acquittement couvrant ce numéro de séquence. Cette mesure


s’appelle le RTT (« Round Trip Time »). Une valeur lissée appelée le SRTT (« Smoothed Round
Trip Time ») est alors calculée :
SRTT = α * SRTT + (1-α) * RTT
où α est un facteur de pondération (« smoothing factor »), typiquement compris entre 0,8 et 0,9.
Au final, la valeur du temporisateur de retransmission, RTO (« Retransmission TimeOut »), est
estimée de la façon suivante :
RTO = β * SRTT
où β est un facteur lié à la variance du délai, généralement compris entre 1,3 et 2. (Il est à noter
qu’en pratique le RTO est borné par une valeur minimum et une valeur maximum.)
2.6.2. La valeur courante de SRTT est de 30 ms. Les acquittements des trois segments de données
suivants reviennent après 26 ms, 32 ms et 24 ms respectivement. Que deviennent
l'estimation du délai aller-retour (SRTT) et la durée de la temporisation de retransmission
(RTO) ? On prendra α = 0,9 et β = 2.
Après 26 ms : SRTT = 0,9*30 + 0,1*26 = 29,6 ms ; RTO = 2*29,6 = 59,2 ms
Après 32 ms : SRTT = 0,9*29,6 + 0,1*32 = 29,84 ms ; RTO = 2*29,84 = 59,68 ms
Après 24 ms : SRTT = 0.9*29,84 + 0.1*24 = 29,256 ms ; RTO = 2*29,256 = 58,512 ms
2.6.3. On suppose que, lorsqu'un segment est envoyé plus d'une fois, la mesure du RTT est prise
entre l'instant de la première émission et l'instant de réception du premier ACK. Montrer
que pour une connexion dont la fenêtre est de un segment et pour laquelle chaque segment
est transmis deux fois, on a SRTT qui tend vers l'infini. Que peut-on proposer ?

Prenons par exemple un SRTT initial SRTT0 = 100, un RTT (délai aller-retour mesuré entre
l'envoi qui est réellement acquitté) de 50, ALPHA = 0,85 et BETA = 1,3 :
envoi SRTT RTO
1 0,85.100+0,15(1,3.100+50) = 112 1,3.112 = 145,6
2 0,85.112+0,15(145,6+50) = 124,54 1,3.124,54 = 161,902
3 0,85.124,54+0,15(161,902+50) = 137,7853 1,3.137,7853 = 178,93…
On voit donc que la valeur de SRTT et donc celle de RTO croissent indéfiniment.

12
UPMC - Licence Informatique 3I014 - Réseaux

D'un autre côté, si on avait mesuré RTT comme la durée séparant la dernière transmission
du même segment et la réception de l'acquittement, on aurait eu le problème inverse : la
valeur de SRTT aurait diminué.
Karn et Partridge ont proposé une solution simple : mesurer RTT uniquement pour les
segments qui ont été envoyés une seule fois.
Remarque : Jacobson et Karels ont parallèlement proposé une amélioration qui prend en
compte la variance des RTT mesurés dans le calcul de SRTT.
2.6.4. L'algorithme de Karn-Partridge propose de doubler la valeur du temporisateur à chaque
nouvelle retransmission, et ce jusqu'à ce qu'un segment soit acquitté du premier coup
(auquel cas, la valeur de SRTT est recalculée et la nouvelle valeur de RTO déduite).
Comment justifier cette proposition ?
Les timeouts sont une indication de congestion du réseau (en effet, la cause la plus probable
de perte de paquet est la congestion et non pas les erreurs de transmission). Pour ne pas
aggraver la congestion, il est souhaitable de retransmettre avec « modération » ! D'où ce
schéma de type Exponential Backoff.

2.7. Libération de connexion


La libération d’une connexion TCP est illustrée ci-dessous :
A B

FIN

ACK
FIN

ACK
Connexion libérée
Tempo

Connexion libérée

t t
2.7.1. Lorsque TCP envoie un [SYN, SeqNum = x] ou un [FIN, SeqNum = x], le segment ACK
correspondant porte AckNum = x+1. En d'autres termes, les segments SYN et FIN
consomment une unité de l'espace de numérotation. Est-ce vraiment nécessaire ? Aurait-on
pu avoir à la place [ACK, AckNum = x] ?
Il est nécessaire d'incrémenter le AckNum d'un FIN, de façon à ce que l'émetteur du FIN
puisse déterminer si son FIN a bien été reçu, et non pas seulement les données précédentes.
Pour un segment SYN, tout ACK pour des données postérieures au SYN incrémente AckNum :
un tel ACK va donc acquitter implicitement le SYN (puisque des données ne peuvent pas être
acquittées tant que la connexion n'est pas établie). Par conséquent, le fait d'avoir [ACK,
AckNum = x+1] au lieu de [ACK, AckNum = x] relève plus d'une convention dans un souci
d'homogénéité que d'une nécessité protocolaire.

13
UPMC - Licence Informatique 3I014 - Réseaux

3. EXERCICES DE REVISION
3.1. On considère l’échange de segments TCP suivant :

Une trace (incomplète) correspondant à cet échange et obtenue par un analyseur réseau est
donnée ci-dessous.
a. Quel est le numéro de séquence initial (ISN) de A ? Quel est le numéro de séquence
initial (ISN) de B ?
ISN de A : DC A5 2F 97
ISN de B : 2D 00 2A 58
b. Dans la trace, le segment de données (4ème trame) a été tronqué. Combien d’octets de
données transporte-t-il ?
Longueur du paquet = 05 8C = 1420 octets
Longueur du paquet = lg entête IP + lg entête TCP + lg données TCP = 20 + 32 + lg
données TCP
D’où longueur des données = 1420 – 52 = 1368 octets
c. Compléter directement sur la trace les valeurs des champs de numéros de séquence et de
numéros d’acquittement.
0000 00 15 17 78 86 b8 00 15 17 50 93 e6 08 00 45 08 ...x.....P....E.
0010 00 3c e6 b3 40 00 40 06 3c e1 0a 0f 02 01 0a 0f .<..@.@.<.......
0020 01 01 00 14 b8 6b dc a5 2f 97 00 00 00 00 a0 02 .....k../.......
0030 16 d0 8c 30 00 00 02 04 05 b4 04 02 08 0a 00 00 ...0............
0040 c9 24 00 00 00 00 01 03 03 06 .$........

0000 00 15 17 50 93 e6 00 15 17 78 86 b8 08 00 45 00 ...P.....x....E.
0010 00 3c 00 00 40 00 40 06 23 9d 0a 0f 01 01 0a 0f .<..@.@.#.......
0020 02 01 b8 6b 00 14 2d 00 2a 58 a0 12 ...k..-.*X../...
0030 16 a0 61 b0 00 00 02 04 05 b4 04 02 08 0a 00 58 ..a............X
0040 d2 ee 00 00 c9 24 01 03 03 06 .....$....

0000 00 15 17 78 86 b8 00 15 17 50 93 e6 08 00 45 08 ...x.....P....E.
0010 00 34 e6 b4 40 00 40 06 3c e8 0a 0f 02 01 0a 0f .4..@.@.<.......
0020 01 01 00 14 b8 6b 80 10 .....k../.-.*Y..
0030 00 5c a6 bf 00 00 01 01 08 0a 00 00 c9 24 00 58 .\...........$.X
0040 d2 ee

14
UPMC - Licence Informatique 3I014 - Réseaux

0000 00 15 17 78 86 b8
00 15 17 50 93 e6 08 00 45 08 ...x.....P....E.
0010 05 8c e6 b5 40 00
40 06 37 8f 0a 0f 02 01 0a 0f ....@.@.7.......
0020 01 01 00 14 b8 6b 80 18 .....k../.-.*Y..
0030 00 5c 83 74 00 00
01 01 08 0a 00 00 c9 24 00 58 .\.t.........$.X
0040 d2 ee 74 6f 74 61
6c 20 39 32 0d 0a 2d 72 77 2d ..total 92..-rw-
(...) (...) (...)
0590 6e 2d 65 72 72 6f 72 73 0d 0a n-errors..

0000 00 15 17 78 86 b8 00 15 17 50 93 e6 08 00 45 08 ...x.....P....E.
0010 00 34 e6 b6 40 00 40 06 3c e6 0a 0f 02 01 0a 0f .4..@.@.<.......
0020 01 01 00 14 b8 6b 80 11 .....k..4.-.*Y..
0030 00 5c a1 66 00 00 01 01 08 0a 00 00 c9 24 00 58 .\.f.........$.X
0040 d2 ee ..

0000 00 15 17 50 93 e6 00 15 17 78 86 b8 08 00 45 08 ...P.....x....E.
0010 00 34 f8 b7 40 00 40 06 2a e5 0a 0f 01 01 0a 0f .4..@.@.*.......
0020 02 01 b8 6b 00 14 80 10 ...k..-.*Y..4...
0030 00 88 a1 3b 00 00 01 01 08 0a 00 58 d2 ee 00 00 ...;.......X....
0040 c9 24 .$

0000 00 15 17 50 93 e6 00 15 17 78 86 b8 08 00 45 08 ...P.....x....E.
0010 00 34 f8 b8 40 00 40 06 2a e4 0a 0f 01 01 0a 0f .4..@.@.*.......
0020 02 01 b8 6b 00 14 80 11 ...k..-.*Y..4...
0030 00 88 a1 39 00 00 01 01 08 0a 00 58 d2 ee 00 00 ...9.......X....
0040 c9 24 .$

0000 00 15 17 78 86 b8 00 15 17 50 93 e6 08 00 45 08 ...x.....P....E.
0010 00 34 e6 b7 40 00 40 06 3c e5 0a 0f 02 01 0a 0f .4..@.@.<.......
0020 01 01 00 14 b8 6b 80 10 .....k..4.-.*Z..
0030 00 5c a1 64 00 00 01 01 08 0a 00 00 c9 25 00 58 .\.d.........%.X
0040 d2 ee ..

0000 00 15 17 78 86 b8 00 15 17 50 93 e6 08 00 45 08 ...x.....P....E.
0010 00 3c e6 b3 40 00 40 06 3c e1 0a 0f 02 01 0a 0f .<..@.@.<.......
0020 01 01 00 14 b8 6b dc a5 2f 97 00 00 00 00 a0 02 .....k../.......
0030 16 d0 8c 30 00 00 02 04 05 b4 04 02 08 0a 00 00 ...0............
0040 c9 24 00 00 00 00 01 03 03 06 .$........

0000 00 15 17 50 93 e6 00 15 17 78 86 b8 08 00 45 00 ...P.....x....E.
0010 00 3c 00 00 40 00 40 06 23 9d 0a 0f 01 01 0a 0f .<..@.@.#.......
0020 02 01 b8 6b 00 14 2d 00 2a 58 dc a5 2f 98 a0 12 ...k..-.*X../...
0030 16 a0 61 b0 00 00 02 04 05 b4 04 02 08 0a 00 58 ..a............X
0040 d2 ee 00 00 c9 24 01 03 03 06 .....$....

0000 00 15 17 78 86 b8 00 15 17 50 93 e6 08 00 45 08 ...x.....P....E.
0010 00 34 e6 b4 40 00 40 06 3c e8 0a 0f 02 01 0a 0f .4..@.@.<.......
0020 01 01 00 14 b8 6b dc a5 2f 98 2d 00 2a 59 80 10 .....k../.-.*Y..
0030 00 5c a6 bf 00 00 01 01 08 0a 00 00 c9 24 00 58 .\...........$.X
0040 d2 ee

15
UPMC - Licence Informatique 3I014 - Réseaux

0000 00 15 17 78 86 b8 00
50 93 15 17 e6 08 00 45 08 ...x.....P....E.
0010 05 8c e6 b5 40 00 40
8f 0a 06 37 0f 02 01 0a 0f ....@.@.7.......
0020 01 01 00 14 b8 6b dc
98 2d a5 2f 00 2a 59 80 18 .....k../.-.*Y..
0030 00 5c 83 74 00 00 01
0a 00 01 08 00 c9 24 00 58 .\.t.........$.X
0040 d2 ee 74 6f 74 61 6c
32 0d 20 39 0a 2d 72 77 2d ..total 92..-rw-
(...) (...) (...)
0590 6e 2d 65 72 72 6f 72 73 0d 0a n-errors..

0000 00 15 17 78 86 b8 00 15 17 50 93 e6 08 00 45 08 ...x.....P....E.
0010 00 34 e6 b6 40 00 40 06 3c e6 0a 0f 02 01 0a 0f .4..@.@.<.......
0020 01 01 00 14 b8 6b dc a5 34 f0 2d 00 2a 59 80 11 .....k..4.-.*Y..
0030 00 5c a1 66 00 00 01 01 08 0a 00 00 c9 24 00 58 .\.f.........$.X
0040 d2 ee ..

0000 00 15 17 50 93 e6 00 15 17 78 86 b8 08 00 45 08 ...P.....x....E.
0010 00 34 f8 b7 40 00 40 06 2a e5 0a 0f 01 01 0a 0f .4..@.@.*.......
0020 02 01 b8 6b 00 14 2d 00 2a 59 dc a5 34 f0 80 10 ...k..-.*Y..4...
0030 00 88 a1 3b 00 00 01 01 08 0a 00 58 d2 ee 00 00 ...;.......X....
0040 c9 24 .$

0000 00 15 17 50 93 e6 00 15 17 78 86 b8 08 00 45 08 ...P.....x....E.
0010 00 34 f8 b8 40 00 40 06 2a e4 0a 0f 01 01 0a 0f .4..@.@.*.......
0020 02 01 b8 6b 00 14 2d 00 2a 59 dc a5 34 f1 80 11 ...k..-.*Y..4...
0030 00 88 a1 39 00 00 01 01 08 0a 00 58 d2 ee 00 00 ...9.......X....
0040 c9 24 .$

0000 00 15 17 78 86 b8 00 15 17 50 93 e6 08 00 45 08 ...x.....P....E.
0010 00 34 e6 b7 40 00 40 06 3c e5 0a 0f 02 01 0a 0f .4..@.@.<.......
0020 01 01 00 14 b8 6b dc a5 34 f1 2d 00 2a 5a 80 10 .....k..4.-.*Z..
0030 00 5c a1 64 00 00 01 01 08 0a 00 00 c9 25 00 58 .\.d.........%.X
0040 d2 ee ..

3.2. On dispose de deux réseaux A et B, reliés entre eux par une passerelle (gateway). Le réseau
A est également relié à Internet par une passerelle.
Réseau A : metaux-net adresse IP 192.3.2.0
– Masque de sous-réseau : 255.255.255.0
– Ordinateur 1 : platine adresse IP 192.3.2.2 interface eth0
– Ordinateur 2 : uranium adresse IP 192.3.2.3 interface eth0
– Serveur : mercure adresse IP 192.3.2.4 interface eth0
Réseau B : roches-net adresse IP 130.2.0.0
– Masque de sous-réseau : 255.255.254.0
– Ordinateur 1 : quartz adresse IP 130.2.0.2 interface eth0
– Ordinateur 2 : silex adresse IP 130.2.0.3 interface eth0
La passerelle entre le réseau A et le réseau B a deux interfaces :
– eth0 : pass-versA adresse IP 192.3.2.1
– eth1 : pass-versB adresse IP 130.2.0.1
Les noms des différentes machines seront utilisés à la place des adresses mac (Ethernet).

16
UPMC - Licence Informatique 3I014 - Réseaux

a. A quelles classes appartiennent les réseaux A et B ? Ces deux réseaux ont-ils été
subdivisés ? Justifier les réponses.
Réseau A : classe C, pas de subdivision (car masque de sous-réseau identique au masque
primaire associé à une classe C).
Réseau B : classe B, subdivisé (car masque de sous-réseau différent du masque primaire
associé à une classe B).
b. Combien de machines supplémentaires peuvent être ajoutées au réseau A ? Même
question pour le réseau B.
Réseau A : 28–2–5 = 249 machines.
Réseau B : 29–2–3 = 507 machines.
c. Donner les adresses de diffusion locale (broadcast) sur les deux réseaux A et B.
Réseau A : 192.3.2.255
Réseau B : 130.2.1.255
d. Donner les tables de routage (minimum) d’une machine du réseau A, d’une machine du
réseau B et de la passerelle entre le réseau A et le réseau B.

17
UPMC - Licence Informatique 3I014 - Réseaux

Table de routage d’une machine du réseau A


Destination Masque Passerelle Interface
192.3.2.0 255.255.255.0 0.0.0.0 (*) eth0
130.2.0.0 255.255.254.0 192.3.2.1 eth0
0.0.0.0 (*) 0.0.0.0 (*) 192.3.2.254 eth0

Table de routage d’une machine du réseau B


Destination Masque Passerelle Interface
130.2.0.0 255.255.254.0 0.0.0.0 (*) eth0
0.0.0.0 (*) 0.0.0.0 (*) 130.2.0.1 eth0

Table de routage de la passerelle entre le réseau A et le réseau B


Destination Masque Passerelle Interface
192.3.2.0 255.255.255.0 0.0.0.0 (*) eth0
130.2.0.0 255.255.254.0 0.0.0.0 (*) eth1
0.0.0.0 (*) 0.0.0.0 (*) 192.3.2.254 eth0

e. La machine quartz souhaite ouvrir une connexion http avec le serveur mercure. Donner
les champs manquants des quatre trames transportant le segment SYN (pour les deux
premières) et le segment SYN/ACK (pour les deux autres).

Trame transportant le segment SYN de quartz vers la passerelle


En-tête trame En-tête IP En-tête TCP
Ethernet
@mac @mac TTL @IP @IP port port Seq. Ack.
dest. source source dest. source dest. Num Num

pass- quartz 255 130.2.0. 192.3.2. 2000 80 777 0


versB 2 4

18
UPMC - Licence Informatique 3I014 - Réseaux

Trame transportant le segment SYN de la passerelle vers mercure


En-tête trame En-tête IP En-tête TCP
Ethernet
@mac @mac TTL @IP @IP port port Seq. Ack.
dest. source source dest. source dest. Num Num

mercure pass- 254 130.2.0. 192.3.2. 2000 80 777 0


versA 2 4

Trame transportant le segment SYN/ACK de mercure vers la passerelle


En-tête trame En-tête IP En-tête TCP
Ethernet
@mac @mac TTL @IP @IP port port Seq. Ack.
dest. source source dest. source dest. Num Num

pass- mercure 64 192.3.2. 130.2.0. 80 2000 9876 778


versA 4 2

Trame transportant le segment SYN/ACK de la passerelle vers quartz


En-tête trame En-tête IP En-tête TCP
Ethernet
@mac @mac TTL @IP @IP port port Seq. Ack.
dest. source source dest. source dest. Num Num

quartz pass- 63 192.3.2. 130.2.0. 80 2000 9876 778


versB 4 2

3.3. On considère l’échange de segments TCP suivant entre deux machines distantes A et B. Cet
échange est incomplet et devra être poursuivi dans les questions d et e.
Les segments sont classés dans le tableau au niveau de la machine A, par ordre
chronologique d’émission (complète de A) et de réception (complète par A). Les colonnes
du tableaux fournissent : le numéro du segment, le sens (émission de A ou réception par A),
le numéro de séquence du segment, le numéro d’acquittement, les drapeaux positionnés
dans le segment, la taille de la fenêtre d’anticipation transmise dans le segment et la taille
des données. Un « X » dans une colonne signifie que la valeur n’est pas significative.
On suppose que les 8 segments de l’échange représenté sont correctement reçus (sans
erreur) et que l’application de B utilisant les services de TCP ne vient lire dans le buffer de
réception aucun octet de données pendant l’échange. On suppose que la taille du buffer de
réception de TCP de A est de 2000 octets et que celle de B est de 4000 octets.

19
UPMC - Licence Informatique 3I014 - Réseaux

Segment Sens Seq Num Ack Num Flags Window Taille des
données
1 A→B 1 X SYN 2000 0
2 B→A 1000 SYN, ACK 4000 0
3 A→B ACK 2000 0
4 A→B 2 1001 ACK 2000
5 B→A 1001 1002 ACK
6 A→B ACK 2000 1000
7 A→B 2002 1001 ACK 2000 1000
8 B→A 1001 2002 ACK 2000 0
a. Compléter les cases manquantes dans le tableau précédent.

Segment Sens Seq Num Ack Num Flags Window Taille des
données
1 A→B 1 X SYN 2000 0
2 B→A 1000 2 SYN, ACK 4000 0
3 A→B 2 1001 ACK 2000 0
4 A→B 2 1001 ACK 2000 1000
5 B→A 1001 1002 ACK 3000 0
6 A→B 1002 1001 ACK 2000 1000
7 A→B 2002 1001 ACK 2000 1000
8 B→A 1001 2002 ACK 2000 0
b. Qu’indique la valeur du numéro d’acquittement (Ack Num) du segment 8 ? Que peut-on
en déduire en ce qui concerne les segments 7 et 8 ?
La valeur de l'AckNum dans le segment 8 (qui est un simple ACK puisqu'il ne comporte pas
de données) est de 2002, ce qui signifie que lorsque B l'envoie, il a uniquement reçu les 2
premiers segments de 1000 octets de A. Les segments 7 et 8 se sont donc croisés. Le
segment 8 a été envoyé par B avant de recevoir le segment 7 de A (mais après avoir reçu le
segment 6 de A).
c. Quelle quantité d’octets supplémentaires la machine A peut-elle envoyer à la machine B
sans avoir reçu de nouvel acquittement ? Quelle est la plage des numéros de séquence
de ces octets ?
1000 octets de données de 3002 à 4001, car le dernier ACK de B autorisait A à envoyer tous
les octets entre 2002 et 4001, et A a déjà envoyé les octets 2002 à 3001.
d. On suppose que la machine A envoie dans le segment 9 le maximum d’octets possible
et que sur réception, la machine B acquitte dans le segment 10 toutes les données
envoyées par A (y compris celles qui n’ont éventuellement pas encore été acquittées
dans l’échange précédent). Compléter dans le tableau suivant les deux nouveaux
segments. On supposera que l’application de B n’a toujours lu aucun octet dans le
buffer de réception de TCP.

Segment Sens Seq Num Ack Num Flags Window Taille des
données
9 A→B 3002 1001 ACK 2000 1000
10 B→A 1001 4002 ACK 0 0

20
UPMC - Licence Informatique 3I014 - Réseaux

e. L’application de B vient vider le buffer de réception de TCP. Indiquer les segments


échangés par A et B pour permettre à A d’envoyer 2000 octets supplémentaires.

Segment Sens Seq Num Ack Num Flags Window Taille des
données
11 A→B 4002 1001 ACK 2000 1
12 B→A 1001 4003 ACK 3999 0
13 A→B 4003 1001 ACK 2000 1999
15 B→A 1001 6002 ACK 2000 0

21
UPMC - Licence Informatique 3I014 - Réseaux

ANNEXE

SEGMENT TCP
4 bits 6 bits 6 bits 16 bits
Source Port Destination Port
Sequence Number
Acknowledgment Number
Data Reserved U A P R S F Window
Offset R C S S Y I
G K H T N N
Checksum Urgent Pointer
Options
Padding

Data

§ Source Port et Destination Port identifient les extrémités locales de la


connexion. Les numéros jusqu’à 1024 correspondent à des ports réservés (Exemple : le port
21 correspond à FTP, le port 80 à HTTP) ;
§ Sequence Number est le numéro de séquence du premier octet de données du segment
TCP ; si le drapeau SYN est à 1, ce numéro est l’ISN (Initial Sequence Number) et le
premier octet de données sera numéroté ISN+1 ;
§ Acknowledgment Number est le numéro d’acquittement ; si le drapeau ACK est à 1, ce
numéro contient la valeur du prochain numéro de séquence que l’émetteur est prêt à
recevoir ;
§ Data Offset est la longueur de l’en-tête TCP exprimée en mots de 32 bits ; elle indique
donc où les données commencent ;
§ Reserved n’est pas utilisé et doit être mis à zéro ;
§ URG drapeau positionné à 1 si le pointeur d’urgence est en cours d’utilisation ;
§ ACK drapeau positionné à 1 pour indiquer la validité du numéro d’acquittement ;
§ PSH drapeau positionné à 1 pour indiquer au destinataire de remettre les données à
l’application concernée dès leur arrivée ;
§ RST drapeau positionné à 1 pour réinitialiser une connexion devenue incohérente, pour
rejeter un segment altéré ou pour rejeter une tentative d’ouverture de connexion ;
§ SYN drapeau positionné à 1 lors d’une phase d’établissement de connexion ;
§ FIN drapeau positionné à 1 lors d’une phase de libération de connexion ;

22
UPMC - Licence Informatique 3I014 - Réseaux

§ Window fenêtre d’anticipation de taille variable ; la valeur de ce champ indique au


récepteur combien il peut émettre d’octets après l’octet acquitté ;
§ Cheksum champs de contrôle portant sur tout le segment augmenté d’un pseudo en-tête,
constitué principalement des adresses IP source et destination ;
§ Urgent Pointer pointeur indiquant l’emplacement des données urgentes ; utilisé
uniquement si le drapeau URG est positionné à 1 ;
§ Options champs de longueur variable offrant des possibilités non offertes dans l’en-tête
de base. Exemple : détermination du MSS ou Maximum Segment Size, la taille maximum
d’un segment TCP (en fait la taille maximum du champs de données d’un segment TCP, car
la MSS n’inclue pas l’en-tête) ;
§ Padding champs permettant de cadrer l’en-tête TCP sur des mots de 32 bits.

23

Vous aimerez peut-être aussi