U.E. Architecture des Réseaux (ARES) 3/5 : Couche transport
U.E. Architecture des Réseaux (ARES) 3/5 : Couche transport
U.E. Architecture des Réseaux (ARES) 3/5 : Couche transport
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
Service de base<br />
Service fiable<br />
Contrôle de congestion<br />
Service de base<br />
Service fiable<br />
Contrôle de congestion<br />
<strong>ARES</strong> : Plan du cours 3/5<br />
U.E. <strong>Architecture</strong> <strong>des</strong> Réseaux (<strong>ARES</strong>)<br />
3/5 : <strong>Couche</strong> <strong>transport</strong><br />
Olivier Fourmaux (olivier.fourmaux@upmc.fr)<br />
Version 6.1<br />
1 Service de base<br />
Rappels sur la couche <strong>transport</strong><br />
Multiplexage et démultiplexage<br />
UDP : un protocole en mode non connecté<br />
2 Service fiable<br />
Principes de transfert de données fiable<br />
TCP : un protocole en mode orienté connexion<br />
TCP : mécanismes de fiabilisation<br />
3 Contrôle de congestion<br />
Principes généraux<br />
Mécanismes de TCP<br />
Olivier Fourmaux (olivier.fourmaux@upmc.fr)<br />
U.E. <strong>Architecture</strong> <strong>des</strong> Réseaux (<strong>ARES</strong>) 3/5 : <strong>Couche</strong> <strong>transport</strong><br />
Olivier Fourmaux (olivier.fourmaux@upmc.fr)<br />
U.E. <strong>Architecture</strong> <strong>des</strong> Réseaux (<strong>ARES</strong>) 3/5 : <strong>Couche</strong> <strong>transport</strong><br />
Service de base<br />
Service fiable<br />
Contrôle de congestion<br />
Rappels sur la couche <strong>transport</strong><br />
Multiplexage et démultiplexage<br />
UDP : un protocole en mode non connecté<br />
Service de base<br />
Service fiable<br />
Contrôle de congestion<br />
Rappels sur la couche <strong>transport</strong><br />
Multiplexage et démultiplexage<br />
UDP : un protocole en mode non connecté<br />
<strong>Couche</strong> <strong>transport</strong><br />
<strong>ARES</strong> : Plan du cours 3/5<br />
Compréhension <strong>des</strong> principes de base de la couche <strong>transport</strong> 1<br />
multiplexage<br />
transfert fiable<br />
contrôle de flux<br />
contrôle de congestion<br />
Etude <strong>des</strong> protocoles de <strong>transport</strong> dans l’Internet<br />
UDP : <strong>transport</strong> sans connexion<br />
TCP : <strong>transport</strong> orienté-connexion<br />
contrôle de congestion de TCP<br />
1. Nombreuses adaptations <strong>des</strong> sli<strong>des</strong>, <strong>des</strong> schémas et du livre de J. F. Kurose<br />
et K. W. Ross, Computer Networking : A Top Down Approach Featuring the<br />
Internet, 3e edition chez Addisson-Wesley, juillet 2004.<br />
Olivier Fourmaux (olivier.fourmaux@upmc.fr)<br />
U.E. <strong>Architecture</strong> <strong>des</strong> Réseaux (<strong>ARES</strong>) 3/5 : <strong>Couche</strong> <strong>transport</strong><br />
1 Service de base<br />
Rappels sur la couche <strong>transport</strong><br />
Multiplexage et démultiplexage<br />
UDP : un protocole en mode non connecté<br />
2 Service fiable<br />
Principes de transfert de données fiable<br />
TCP : un protocole en mode orienté connexion<br />
TCP : mécanismes de fiabilisation<br />
3 Contrôle de congestion<br />
Principes généraux<br />
Mécanismes de TCP<br />
Olivier Fourmaux (olivier.fourmaux@upmc.fr)<br />
U.E. <strong>Architecture</strong> <strong>des</strong> Réseaux (<strong>ARES</strong>) 3/5 : <strong>Couche</strong> <strong>transport</strong>
<strong>Couche</strong> <strong>transport</strong><br />
Service de base<br />
Service fiable<br />
Contrôle de congestion<br />
Rappels sur la couche <strong>transport</strong><br />
Multiplexage et démultiplexage<br />
UDP : un protocole en mode non connecté<br />
<strong>Couche</strong> <strong>transport</strong><br />
Service de base<br />
Service fiable<br />
Contrôle de congestion<br />
Rappels sur la couche <strong>transport</strong><br />
Multiplexage et démultiplexage<br />
UDP : un protocole en mode non connecté<br />
01<br />
01<br />
01<br />
00 11<br />
00 11<br />
00 11<br />
... ... ...<br />
... ...<br />
01 00 11<br />
01 00 11<br />
...<br />
01 00 11 01 01<br />
...<br />
...<br />
La <strong>Couche</strong> <strong>transport</strong> permet de faire communiquer<br />
directement deux ou plusieurs entités sans avoir à se préoccuper<br />
<strong>des</strong> différents éléments de réseaux traversés :<br />
associations virtuelles entre processus<br />
communication de bout-en-bout (end-to-end)<br />
abstraction de la topologie et <strong>des</strong> technologies sous-jacentes<br />
fonctionne dans les machines d’extrémité<br />
émetteur : découpe les messages de la couche applicative en<br />
segments et les “<strong>des</strong>cend” à la couche réseau<br />
récepteur : réassemble les segments en messages et les<br />
“remonte” à la couche application<br />
➠ 2 modèles définissent les fonctionnalités associés à chaque<br />
couche...<br />
Olivier Fourmaux (olivier.fourmaux@upmc.fr)<br />
U.E. <strong>Architecture</strong> <strong>des</strong> Réseaux (<strong>ARES</strong>) 3/5 : <strong>Couche</strong> <strong>transport</strong><br />
Olivier Fourmaux (olivier.fourmaux@upmc.fr)<br />
U.E. <strong>Architecture</strong> <strong>des</strong> Réseaux (<strong>ARES</strong>) 3/5 : <strong>Couche</strong> <strong>transport</strong><br />
Service de base<br />
Service fiable<br />
Contrôle de congestion<br />
<strong>Couche</strong> <strong>transport</strong> : OSI<br />
Rappels sur la couche <strong>transport</strong><br />
Multiplexage et démultiplexage<br />
UDP : un protocole en mode non connecté<br />
Service de base<br />
Service fiable<br />
Contrôle de congestion<br />
<strong>Couche</strong> <strong>transport</strong> : TCP/IP<br />
Rappels sur la couche <strong>transport</strong><br />
Multiplexage et démultiplexage<br />
UDP : un protocole en mode non connecté<br />
7 Application<br />
Interface<br />
6 Presentation<br />
Application protocol<br />
APDU<br />
Presentation protocol<br />
Application<br />
Presentation<br />
Interface<br />
5<br />
Session<br />
Session protocol<br />
Session<br />
TELNET<br />
FTP<br />
SMTP<br />
DNS<br />
4<br />
Transport<br />
Transport protocol<br />
Transport<br />
TCP<br />
UDP<br />
3<br />
Network<br />
Network<br />
Network<br />
Network<br />
IP<br />
2<br />
Data link<br />
Data link<br />
Data link<br />
Data link<br />
ARPANET<br />
SATNET<br />
Packet#<br />
radio<br />
LAN<br />
1<br />
Physical<br />
Physical<br />
Physical<br />
Physical<br />
Host A<br />
Router<br />
Router<br />
Host B<br />
Olivier Fourmaux (olivier.fourmaux@upmc.fr)<br />
U.E. <strong>Architecture</strong> <strong>des</strong> Réseaux (<strong>ARES</strong>) 3/5 : <strong>Couche</strong> <strong>transport</strong><br />
Olivier Fourmaux (olivier.fourmaux@upmc.fr)<br />
U.E. <strong>Architecture</strong> <strong>des</strong> Réseaux (<strong>ARES</strong>) 3/5 : <strong>Couche</strong> <strong>transport</strong>
Service de base<br />
Service fiable<br />
Contrôle de congestion<br />
<strong>Couche</strong> <strong>transport</strong> : Internet<br />
Rappels sur la couche <strong>transport</strong><br />
Multiplexage et démultiplexage<br />
UDP : un protocole en mode non connecté<br />
Service de base<br />
Service fiable<br />
Contrôle de congestion<br />
<strong>Couche</strong> <strong>transport</strong> : 2 approches<br />
Rappels sur la couche <strong>transport</strong><br />
Multiplexage et démultiplexage<br />
UDP : un protocole en mode non connecté<br />
2 protocoles de <strong>transport</strong> standard : TCP et UDP<br />
transfert fiable et ordonné : TCP<br />
gestion de la connexion<br />
contrôle de flux<br />
contrôle de congestion<br />
transfert non fiable non ordonné : UDP<br />
service best effort (”au mieux”) d’IP<br />
très léger<br />
non disponible :<br />
garanties de débit<br />
garanties temporelles<br />
délais non bornés<br />
jigue imprévisible<br />
Mode non connecté<br />
Sending host<br />
Datagram<br />
Sending process<br />
Mode orienté connexion<br />
Sending host<br />
Sending process<br />
Network<br />
Network<br />
Virtual connection<br />
Receiving host<br />
Receiving process<br />
Receiving host<br />
Receiving process<br />
Olivier Fourmaux (olivier.fourmaux@upmc.fr)<br />
U.E. <strong>Architecture</strong> <strong>des</strong> Réseaux (<strong>ARES</strong>) 3/5 : <strong>Couche</strong> <strong>transport</strong><br />
Olivier Fourmaux (olivier.fourmaux@upmc.fr)<br />
U.E. <strong>Architecture</strong> <strong>des</strong> Réseaux (<strong>ARES</strong>) 3/5 : <strong>Couche</strong> <strong>transport</strong><br />
Service de base<br />
Service fiable<br />
Contrôle de congestion<br />
<strong>Couche</strong> <strong>transport</strong> : primitives<br />
Rappels sur la couche <strong>transport</strong><br />
Multiplexage et démultiplexage<br />
UDP : un protocole en mode non connecté<br />
Service de base<br />
Service fiable<br />
Contrôle de congestion<br />
Rappels sur la couche <strong>transport</strong><br />
Multiplexage et démultiplexage<br />
UDP : un protocole en mode non connecté<br />
<strong>Couche</strong> <strong>transport</strong> : automate de connexion<br />
Connection request <br />
TPDU received<br />
IDLE<br />
Connect primitive<br />
executed<br />
Interface de programmation (applications ou developpeurs)<br />
exemple de primitives de base en mode connecté :<br />
LISTEN<br />
CONNECT<br />
SEND<br />
RECEIVE<br />
DISCONNECT<br />
PASSIVE<br />
ESTABLISHMENT<br />
PENDING<br />
Connect primitive<br />
executed<br />
Disconnection request<br />
TPDU received<br />
PASSIVE<br />
DISCONNECT<br />
PENDING<br />
ESTABLISHED<br />
ACTIVE<br />
ESTABLISHMENT<br />
PENDING<br />
Connection accepted<br />
TPDU received<br />
Disconnect primitive<br />
executed<br />
ACTIVE<br />
DISCONNECT<br />
PENDING<br />
Disconnect<br />
primitive executed<br />
IDLE<br />
Disconnection request <br />
TPDU received<br />
pictures from Tanenbaum A. S. Computer Networks 3rd edition<br />
Olivier Fourmaux (olivier.fourmaux@upmc.fr)<br />
U.E. <strong>Architecture</strong> <strong>des</strong> Réseaux (<strong>ARES</strong>) 3/5 : <strong>Couche</strong> <strong>transport</strong><br />
Olivier Fourmaux (olivier.fourmaux@upmc.fr)<br />
U.E. <strong>Architecture</strong> <strong>des</strong> Réseaux (<strong>ARES</strong>) 3/5 : <strong>Couche</strong> <strong>transport</strong>
Service de base<br />
Service fiable<br />
Contrôle de congestion<br />
Rappels sur la couche <strong>transport</strong><br />
Multiplexage et démultiplexage<br />
UDP : un protocole en mode non connecté<br />
<strong>Couche</strong> <strong>transport</strong> : établissement (call setup)<br />
Service de base<br />
Service fiable<br />
Contrôle de congestion<br />
<strong>ARES</strong> : Plan du cours 3/5<br />
Rappels sur la couche <strong>transport</strong><br />
Multiplexage et démultiplexage<br />
UDP : un protocole en mode non connecté<br />
Time<br />
Host 1 Host 2<br />
CR (seq = x)<br />
ACK (seq = y, ACK = x)<br />
Host 1 Host 2<br />
Old duplicate<br />
CR (seq = x)<br />
ACK (seq = y, ACK = x)<br />
1 Service de base<br />
Rappels sur la couche <strong>transport</strong><br />
Multiplexage et démultiplexage<br />
UDP : un protocole en mode non connecté<br />
DATA (seq = x, ACK = y)<br />
(a)<br />
Host 1 Host 2<br />
Old duplicate<br />
CR (seq = x)<br />
ACK (seq = y, ACK = x)<br />
Old duplicate<br />
DATA (seq = x,<br />
ACK = z)<br />
REJECT (ACK = y)<br />
REJECT (ACK = y)<br />
(b)<br />
2 Service fiable<br />
Principes de transfert de données fiable<br />
TCP : un protocole en mode orienté connexion<br />
TCP : mécanismes de fiabilisation<br />
3 Contrôle de congestion<br />
Principes généraux<br />
Mécanismes de TCP<br />
Olivier Fourmaux (olivier.fourmaux@upmc.fr)<br />
(c)<br />
U.E. <strong>Architecture</strong> <strong>des</strong> Réseaux (<strong>ARES</strong>) 3/5 : <strong>Couche</strong> <strong>transport</strong><br />
Olivier Fourmaux (olivier.fourmaux@upmc.fr)<br />
U.E. <strong>Architecture</strong> <strong>des</strong> Réseaux (<strong>ARES</strong>) 3/5 : <strong>Couche</strong> <strong>transport</strong><br />
pictures from Tanenbaum A. S. Computer Networks 3rd edition<br />
Service de base<br />
Service fiable<br />
Contrôle de congestion<br />
Multiplexage/Démultiplexage<br />
Rappels sur la couche <strong>transport</strong><br />
Multiplexage et démultiplexage<br />
UDP : un protocole en mode non connecté<br />
Les processus applicatifs transmettent leurs données au système à<br />
travers <strong>des</strong> sockets : Le multiplexage consiste à regrouper ces<br />
données.<br />
mux (à l’émetteur) :<br />
ajout d’un entête à chaque bloc de données d’un socket<br />
collecte les données de plusieurs socket<br />
demux (au récepteur) :<br />
fourniture <strong>des</strong> données au socket correspondant<br />
A B C<br />
Service de base<br />
Service fiable<br />
Contrôle de congestion<br />
Démultiplexage en mode non connecté<br />
Association d’un socket avec un numéro de port<br />
Rappels sur la couche <strong>transport</strong><br />
Multiplexage et démultiplexage<br />
UDP : un protocole en mode non connecté<br />
identification du DatagramSocket : (@IP<strong>des</strong>t,<br />
numPortDest)<br />
réception d’un datagramme à un hôte :<br />
vérification du numPortDest contenu<br />
envoi au socket correspondant à numPortDest<br />
∀ @IPsource, ∀ numPortSource<br />
A B C<br />
P1<br />
P3<br />
P2<br />
P1 P2 P4 P3<br />
Olivier Fourmaux (olivier.fourmaux@upmc.fr)<br />
U.E. <strong>Architecture</strong> <strong>des</strong> Réseaux (<strong>ARES</strong>) 3/5 : <strong>Couche</strong> <strong>transport</strong><br />
000 111PD : 4201 PS : 8511<br />
PS : 2034 PD : 4201 0000 1111<br />
000 111<br />
PS : 4201 PD : 8511000<br />
111 0000 1111<br />
0000 1111<br />
PD : 2034 PS : 4201<br />
000 111 0000 1111<br />
Olivier Fourmaux (olivier.fourmaux@upmc.fr)<br />
U.E. <strong>Architecture</strong> <strong>des</strong> Réseaux (<strong>ARES</strong>) 3/5 : <strong>Couche</strong> <strong>transport</strong>
Service de base<br />
Service fiable<br />
Contrôle de congestion<br />
Rappels sur la couche <strong>transport</strong><br />
Multiplexage et démultiplexage<br />
UDP : un protocole en mode non connecté<br />
Multiplexage en mode orienté connection<br />
Service de base<br />
Service fiable<br />
Contrôle de congestion<br />
Rappels sur la couche <strong>transport</strong><br />
Multiplexage et démultiplexage<br />
UDP : un protocole en mode non connecté<br />
Démultiplexage en mode orienté connection (1)<br />
Association relative à une connexion entre deux processus<br />
identification du StreamSocket par le quadruplet :<br />
adresse source : @IPsource<br />
port source : numPortSource<br />
adresse <strong>des</strong>tination : @IP<strong>des</strong>t<br />
port <strong>des</strong>tination : numPortDest<br />
réception d’un segment à un hôte :<br />
vérification du quadruplet contenu<br />
envoi au socket correspondant au quadruplet<br />
un serveur web peut avoir plusieurs connexions simultanée<br />
Serveur web classique (apache 1.x)<br />
un socket par connexion<br />
HTTP en mode non persistant : un socket par requête!<br />
A B C<br />
P1 P4 P5 P6<br />
P2 P3<br />
PS : 1417<br />
PD : 80<br />
@A>@B<br />
00000<br />
11111<br />
00000<br />
11111<br />
00000<br />
11111<br />
00000<br />
11111<br />
PS : 3012<br />
PD : 80<br />
@C>@B<br />
0000 1111<br />
0000 1111<br />
0000 1111<br />
0000 1111<br />
PS : 2411<br />
PD : 80<br />
@C>@B<br />
00000<br />
11111<br />
00000<br />
11111<br />
00000<br />
11111<br />
00000<br />
11111<br />
00000<br />
11111<br />
Olivier Fourmaux (olivier.fourmaux@upmc.fr)<br />
U.E. <strong>Architecture</strong> <strong>des</strong> Réseaux (<strong>ARES</strong>) 3/5 : <strong>Couche</strong> <strong>transport</strong><br />
Olivier Fourmaux (olivier.fourmaux@upmc.fr)<br />
U.E. <strong>Architecture</strong> <strong>des</strong> Réseaux (<strong>ARES</strong>) 3/5 : <strong>Couche</strong> <strong>transport</strong><br />
Service de base<br />
Service fiable<br />
Contrôle de congestion<br />
Rappels sur la couche <strong>transport</strong><br />
Multiplexage et démultiplexage<br />
UDP : un protocole en mode non connecté<br />
Démultiplexage en mode orienté connection (2)<br />
Service de base<br />
Service fiable<br />
Contrôle de congestion<br />
Multiplexage : dénominations OSI<br />
Rappels sur la couche <strong>transport</strong><br />
Multiplexage et démultiplexage<br />
UDP : un protocole en mode non connecté<br />
Serveur web multi-threadé (apache 2.x)<br />
A B C<br />
Application<br />
process<br />
Host 1 Host 2<br />
TSAP 1208<br />
Application<br />
layer<br />
Server 1<br />
Server 2<br />
P1 P4<br />
P2 P3<br />
Transport<br />
connection<br />
Transport<br />
layer<br />
TSAP 1522<br />
TSAP1836<br />
PS : 1417<br />
PD : 80<br />
@A>@B<br />
0000 1111<br />
0000 1111<br />
0000 1111<br />
0000 1111<br />
0000 1111<br />
PS : 3012<br />
PD : 80<br />
@C>@B<br />
00000<br />
11111<br />
00000<br />
11111<br />
00000<br />
11111<br />
00000<br />
11111<br />
00000<br />
11111<br />
PS : 3011<br />
PD : 80<br />
@C>@B<br />
00000<br />
11111<br />
00000<br />
11111<br />
00000<br />
11111<br />
00000<br />
11111<br />
NSAP<br />
Network<br />
layer<br />
Data link<br />
layer<br />
Physical<br />
layer<br />
NSAP<br />
Olivier Fourmaux (olivier.fourmaux@upmc.fr)<br />
U.E. <strong>Architecture</strong> <strong>des</strong> Réseaux (<strong>ARES</strong>) 3/5 : <strong>Couche</strong> <strong>transport</strong><br />
Olivier Fourmaux (olivier.fourmaux@upmc.fr)<br />
U.E. <strong>Architecture</strong> <strong>des</strong> Réseaux (<strong>ARES</strong>) 3/5 : <strong>Couche</strong> <strong>transport</strong>
Service de base<br />
Service fiable<br />
Contrôle de congestion<br />
<strong>ARES</strong> : Plan du cours 3/5<br />
Rappels sur la couche <strong>transport</strong><br />
Multiplexage et démultiplexage<br />
UDP : un protocole en mode non connecté<br />
UDP<br />
Service de base<br />
Service fiable<br />
Contrôle de congestion<br />
Rappels sur la couche <strong>transport</strong><br />
Multiplexage et démultiplexage<br />
UDP : un protocole en mode non connecté<br />
1 Service de base<br />
Rappels sur la couche <strong>transport</strong><br />
Multiplexage et démultiplexage<br />
UDP : un protocole en mode non connecté<br />
2 Service fiable<br />
Principes de transfert de données fiable<br />
TCP : un protocole en mode orienté connexion<br />
TCP : mécanismes de fiabilisation<br />
3 Contrôle de congestion<br />
Principes généraux<br />
Mécanismes de TCP<br />
01<br />
01<br />
01<br />
01<br />
01<br />
01<br />
... ... ...<br />
DATA<br />
00 11<br />
... ...<br />
01<br />
01<br />
01<br />
01<br />
01<br />
...<br />
01 01 01 01<br />
...<br />
...<br />
Olivier Fourmaux (olivier.fourmaux@upmc.fr)<br />
U.E. <strong>Architecture</strong> <strong>des</strong> Réseaux (<strong>ARES</strong>) 3/5 : <strong>Couche</strong> <strong>transport</strong><br />
Olivier Fourmaux (olivier.fourmaux@upmc.fr)<br />
U.E. <strong>Architecture</strong> <strong>des</strong> Réseaux (<strong>ARES</strong>) 3/5 : <strong>Couche</strong> <strong>transport</strong><br />
UDP<br />
Service de base<br />
Service fiable<br />
Contrôle de congestion<br />
Rappels sur la couche <strong>transport</strong><br />
Multiplexage et démultiplexage<br />
UDP : un protocole en mode non connecté<br />
Datagramme UDP<br />
Service de base<br />
Service fiable<br />
Contrôle de congestion<br />
Rappels sur la couche <strong>transport</strong><br />
Multiplexage et démultiplexage<br />
UDP : un protocole en mode non connecté<br />
32 bits (4 octets)<br />
User Datagram Protocol [RFC 768]<br />
protocole de <strong>transport</strong> Internet basique (sans fioriture)<br />
service best effort :<br />
les datagrammes transférés peuvent être...<br />
perdus<br />
dupliqués<br />
désordonnés<br />
service sans connexion :<br />
pas d’échange préalable<br />
pas d’information d’état aux extrémités<br />
chaque datagramme géré indépendamment<br />
Source port<br />
Datagram length<br />
1st bit<br />
Message<br />
(application data)<br />
Destination port<br />
Checksum<br />
last bit<br />
2 lignes (8 octets)<br />
Olivier Fourmaux (olivier.fourmaux@upmc.fr)<br />
U.E. <strong>Architecture</strong> <strong>des</strong> Réseaux (<strong>ARES</strong>) 3/5 : <strong>Couche</strong> <strong>transport</strong><br />
Olivier Fourmaux (olivier.fourmaux@upmc.fr)<br />
U.E. <strong>Architecture</strong> <strong>des</strong> Réseaux (<strong>ARES</strong>) 3/5 : <strong>Couche</strong> <strong>transport</strong>
Service de base<br />
Service fiable<br />
Contrôle de congestion<br />
Rappels sur la couche <strong>transport</strong><br />
Multiplexage et démultiplexage<br />
UDP : un protocole en mode non connecté<br />
Service de base<br />
Service fiable<br />
Contrôle de congestion<br />
Rappels sur la couche <strong>transport</strong><br />
Multiplexage et démultiplexage<br />
UDP : un protocole en mode non connecté<br />
UDP : port source<br />
UDP : port <strong>des</strong>tination<br />
32 bits (4 octets)<br />
32 bits (4 octets)<br />
Source port<br />
Datagram length<br />
Destination port<br />
Checksum<br />
2 lignes (8 octets)<br />
Source port<br />
Datagram length<br />
Destination port<br />
Checksum<br />
2 lignes (8 octets)<br />
16 bits (65535 ports)<br />
multiplexage à la source<br />
identification du socket pour un retour potentiel<br />
allocation fixe ou dynamique (généralement dans le cas d’un<br />
client)<br />
répartition de l’espace <strong>des</strong> ports :<br />
0 ≤ numPort ≤ 1023 : accessible à l’administrateur<br />
socket serveurs (généralement)<br />
1024 ≤ numPort : accessible aux utilisateurs<br />
socket clients (généralement)<br />
16 bits (65535 ports)<br />
démultiplexage à la <strong>des</strong>tination<br />
le <strong>des</strong>tinataire doit être à l’écoute sur ce port<br />
négociation du port ou well-known ports (port réservés) :<br />
Unix> cat \etc\services |grep udp domain 53/udp<br />
echo 7/udp tftp 69/udp<br />
discard 9/udp gopher 70/udp<br />
daytime 13/udp www 80/udp<br />
chargen 19/udp kerberos 88/udp<br />
ssh 22/udp snmp 161/udp<br />
time 37/udp .. snmp-trap 162/udp ....<br />
Olivier Fourmaux (olivier.fourmaux@upmc.fr)<br />
U.E. <strong>Architecture</strong> <strong>des</strong> Réseaux (<strong>ARES</strong>) 3/5 : <strong>Couche</strong> <strong>transport</strong><br />
Olivier Fourmaux (olivier.fourmaux@upmc.fr)<br />
U.E. <strong>Architecture</strong> <strong>des</strong> Réseaux (<strong>ARES</strong>) 3/5 : <strong>Couche</strong> <strong>transport</strong><br />
Service de base<br />
Service fiable<br />
Contrôle de congestion<br />
UDP : longueur du datagramme<br />
Rappels sur la couche <strong>transport</strong><br />
Multiplexage et démultiplexage<br />
UDP : un protocole en mode non connecté<br />
Service de base<br />
Service fiable<br />
Contrôle de congestion<br />
UDP : contrôle d’érreur<br />
Rappels sur la couche <strong>transport</strong><br />
Multiplexage et démultiplexage<br />
UDP : un protocole en mode non connecté<br />
16 bits<br />
32 bits (4 octets)<br />
Source port Destination port<br />
Datagram length Checksum<br />
Data<br />
16 bits (64 Koctets maximum)<br />
longueur totale avec les données exprimée en octets<br />
2 lignes (8 octets)<br />
32 bits (4 octets)<br />
Source port<br />
Datagram length<br />
Destination port<br />
Checksum<br />
Data<br />
00000000 Protocol Datagram Length<br />
IP source address<br />
IP <strong>des</strong>tination address<br />
2 lignes (8 octets)<br />
contrôle d’erreur facultatif<br />
émetteur :<br />
ajout pseudo-header<br />
checksum a = ∑ mot 16bits<br />
récepteur :<br />
ajout pseudo-header<br />
recalcul de ∑ mot 16bits<br />
= 0 : pas d’erreur détectée<br />
toujours possible...<br />
≠ 0 : erreur (<strong>des</strong>truction<br />
silencieuse)<br />
a. Somme binaire sur 16 bits avec report<br />
de la retenue débordante ajoutée au bit de<br />
poid faible<br />
Olivier Fourmaux (olivier.fourmaux@upmc.fr)<br />
U.E. <strong>Architecture</strong> <strong>des</strong> Réseaux (<strong>ARES</strong>) 3/5 : <strong>Couche</strong> <strong>transport</strong><br />
Olivier Fourmaux (olivier.fourmaux@upmc.fr)<br />
U.E. <strong>Architecture</strong> <strong>des</strong> Réseaux (<strong>ARES</strong>) 3/5 : <strong>Couche</strong> <strong>transport</strong>
Service de base<br />
Service fiable<br />
Contrôle de congestion<br />
Rappels sur la couche <strong>transport</strong><br />
Multiplexage et démultiplexage<br />
UDP : un protocole en mode non connecté<br />
UDP : arguments pour un <strong>transport</strong> sans connexion<br />
Service de base<br />
Service fiable<br />
Contrôle de congestion<br />
UDP : exemples d’applications<br />
Rappels sur la couche <strong>transport</strong><br />
Multiplexage et démultiplexage<br />
UDP : un protocole en mode non connecté<br />
Motivation pour le choix d’un service <strong>transport</strong> non connecté :<br />
ressources limitées aux extrémités<br />
pile TCP/IP limitée<br />
absence d’état dans les hôtes<br />
capacité de traitement limitée<br />
besoin d’échange rapide<br />
pas d’établissement de connexion<br />
besoin d’éfficacité<br />
entête réduit<br />
contraintes temporelles<br />
retransmission inadapté<br />
pas de contrôle du débit d’émission<br />
besoin de nouvelles fonctionnalités<br />
remontés dans la couche application...<br />
applications classiques :<br />
résolution de noms (DNS)<br />
administration du réseau (SNMP)<br />
protocole de routage (RIP)<br />
protocole de synchronisation d’horloge (NTP)<br />
serveur de fichiers distants (NFS)<br />
fiabilisation implicite par redondance temporelle<br />
fiabilisation explicte par <strong>des</strong> mécanismes ajoutés dans la<br />
couche application<br />
applications multicast ➠ U.E. ING<br />
applications multimédia ➠ U.E. MMQOS<br />
diffusion multimédia, streaming audio ou vidéo<br />
téléphonie sur Internet<br />
visioconférence<br />
contraintes temporelles<br />
tolérance aux pertes<br />
Olivier Fourmaux (olivier.fourmaux@upmc.fr)<br />
U.E. <strong>Architecture</strong> <strong>des</strong> Réseaux (<strong>ARES</strong>) 3/5 : <strong>Couche</strong> <strong>transport</strong><br />
Olivier Fourmaux (olivier.fourmaux@upmc.fr)<br />
U.E. <strong>Architecture</strong> <strong>des</strong> Réseaux (<strong>ARES</strong>) 3/5 : <strong>Couche</strong> <strong>transport</strong><br />
Service de base<br />
Service fiable<br />
Contrôle de congestion<br />
Rappels sur la couche <strong>transport</strong><br />
Multiplexage et démultiplexage<br />
UDP : un protocole en mode non connecté<br />
Service de base<br />
Service fiable<br />
Contrôle de congestion<br />
Principes de transfert de données fiable<br />
TCP : un protocole en mode orienté connexion<br />
TCP : mécanismes de fiabilisation<br />
UDP : Interface socket<br />
<strong>ARES</strong> : Plan du cours 3/5<br />
#include <br />
#include <br />
# Create a <strong>des</strong>criptor<br />
int socket(int domain, int type, int protocol);<br />
# domain : PF_INET for IPv4 Internet Protocols<br />
# type : SOCK_DGRAM Supports datagrams (connectionless, unreliable msg of a fixed max length)<br />
# protocol : UDP (/etc/protocols)<br />
# Bind local IP and port<br />
int bind(int s, struct sockaddr *my_addr, socklen_t addrlen);<br />
# Send an outgoing datagram to a <strong>des</strong>tination address<br />
int sendto(int s, const void *msg, size_t len, int flags,<br />
const struct sockaddr *to, socklen_t tolen);<br />
# Receive the next incoming datagram and record is source address<br />
int recvfrom(int s, void *buf, size_t len, int flags,<br />
struct sockaddr *from, socklen_t *fromlen);<br />
# End : dealocate<br />
int close(int s);<br />
1 Service de base<br />
Rappels sur la couche <strong>transport</strong><br />
Multiplexage et démultiplexage<br />
UDP : un protocole en mode non connecté<br />
2 Service fiable<br />
Principes de transfert de données fiable<br />
TCP : un protocole en mode orienté connexion<br />
TCP : mécanismes de fiabilisation<br />
3 Contrôle de congestion<br />
Principes généraux<br />
Mécanismes de TCP<br />
Olivier Fourmaux (olivier.fourmaux@upmc.fr)<br />
U.E. <strong>Architecture</strong> <strong>des</strong> Réseaux (<strong>ARES</strong>) 3/5 : <strong>Couche</strong> <strong>transport</strong><br />
Olivier Fourmaux (olivier.fourmaux@upmc.fr)<br />
U.E. <strong>Architecture</strong> <strong>des</strong> Réseaux (<strong>ARES</strong>) 3/5 : <strong>Couche</strong> <strong>transport</strong>
Service de base<br />
Service fiable<br />
Contrôle de congestion<br />
<strong>Couche</strong> <strong>transport</strong> et fiablité (1)<br />
Principes de transfert de données fiable<br />
TCP : un protocole en mode orienté connexion<br />
TCP : mécanismes de fiabilisation<br />
Service de base<br />
Service fiable<br />
Contrôle de congestion<br />
<strong>Couche</strong> <strong>transport</strong> et fiablité (2)<br />
Principes de transfert de données fiable<br />
TCP : un protocole en mode orienté connexion<br />
TCP : mécanismes de fiabilisation<br />
Processus<br />
d’émission<br />
Data<br />
Canal fiable<br />
Problématique multi-couche :<br />
couche application<br />
couche <strong>transport</strong><br />
couche liaison<br />
Processus<br />
de réception<br />
Data<br />
<strong>Couche</strong> application<br />
<strong>Couche</strong> <strong>transport</strong><br />
Processus<br />
d’émission<br />
Data<br />
Canal fiable<br />
? ? ? ? ? ? ?<br />
Canal non fiable<br />
Processus<br />
de réception<br />
Data<br />
<strong>Couche</strong> application<br />
<strong>Couche</strong> <strong>transport</strong><br />
Les cartactéristiques du canal non fiable determine la complexité<br />
du protocol de transfert fiable (PTF).<br />
Olivier Fourmaux (olivier.fourmaux@upmc.fr)<br />
U.E. <strong>Architecture</strong> <strong>des</strong> Réseaux (<strong>ARES</strong>) 3/5 : <strong>Couche</strong> <strong>transport</strong><br />
Olivier Fourmaux (olivier.fourmaux@upmc.fr)<br />
U.E. <strong>Architecture</strong> <strong>des</strong> Réseaux (<strong>ARES</strong>) 3/5 : <strong>Couche</strong> <strong>transport</strong><br />
Service de base<br />
Service fiable<br />
Contrôle de congestion<br />
<strong>Couche</strong> <strong>transport</strong> et fiablité (3)<br />
Principes de transfert de données fiable<br />
TCP : un protocole en mode orienté connexion<br />
TCP : mécanismes de fiabilisation<br />
Service de base<br />
Service fiable<br />
Contrôle de congestion<br />
Protocole de Transfert Fiable (PTF)<br />
Principes de transfert de données fiable<br />
TCP : un protocole en mode orienté connexion<br />
TCP : mécanismes de fiabilisation<br />
ptf_emis()<br />
Data<br />
Data<br />
app_rcpt()<br />
Processus<br />
d’émission<br />
Data<br />
Data<br />
Protocole de<br />
transfert fiable<br />
Paquet<br />
PTF<br />
Canal non fiable<br />
Processus<br />
de réception<br />
Data<br />
Data<br />
Protocole de<br />
transfert fiable<br />
Paquet<br />
<strong>Couche</strong> application<br />
<strong>Couche</strong> <strong>transport</strong><br />
ptnf_emis()<br />
Protocole de<br />
transfert fiable<br />
Paquet<br />
Primitives de base du PTF :<br />
PTF<br />
Canal non fiable<br />
Protocole de<br />
transfert fiable<br />
Paquet<br />
ptf_rcpt()<br />
ptf emis() : appelée par la couche supérieure (application)<br />
pour envoyer <strong>des</strong> données à la couche correspondante du<br />
récepteur<br />
ptfn emis() : appelée par le PTF transférer un paquet sur le<br />
canal non fiable vers le récepteur<br />
ptf rcpt() : appelée lorqu’un paquet arrive au récepteur<br />
app rcpt() : appelée par le PTF pour livrer les données<br />
Olivier Fourmaux (olivier.fourmaux@upmc.fr)<br />
U.E. <strong>Architecture</strong> <strong>des</strong> Réseaux (<strong>ARES</strong>) 3/5 : <strong>Couche</strong> <strong>transport</strong><br />
Olivier Fourmaux (olivier.fourmaux@upmc.fr)<br />
U.E. <strong>Architecture</strong> <strong>des</strong> Réseaux (<strong>ARES</strong>) 3/5 : <strong>Couche</strong> <strong>transport</strong>
PTF et AEF<br />
Service de base<br />
Service fiable<br />
Contrôle de congestion<br />
Principes de transfert de données fiable<br />
TCP : un protocole en mode orienté connexion<br />
TCP : mécanismes de fiabilisation<br />
PTF v1.0<br />
Service de base<br />
Service fiable<br />
Contrôle de congestion<br />
Principes de transfert de données fiable<br />
TCP : un protocole en mode orienté connexion<br />
TCP : mécanismes de fiabilisation<br />
Nous allons construire progressivement le PTF<br />
transfert de données dans un seul sens<br />
information de contrôle dans les 2 directions<br />
spécification de l’émetteur et du récepteur par <strong>des</strong> Automates<br />
à Etats Finis (AEF) :<br />
état<br />
1<br />
évenement causant la transition<br />
action réalisée pendant la transition<br />
évenement<br />
action<br />
état<br />
2<br />
Transfert fiable sur un canal sans erreur<br />
canal sous-jacent complètement fiable<br />
pas de bits en erreur<br />
pas de perte de paquets<br />
automates séparés pour l’émetteur et le récepteur :<br />
Attente<br />
appel couche<br />
supérieure<br />
émetteur<br />
ptf_emis(data)<br />
pqtem=cree_pqt(data)<br />
ptnf_emis(pqtem)<br />
Attente<br />
appel couche<br />
inférieure<br />
récepteur<br />
ptf_rcpt(pqtrc)<br />
data=extr_pqt(pqtrc)<br />
app_rcpt(data)<br />
Olivier Fourmaux (olivier.fourmaux@upmc.fr)<br />
U.E. <strong>Architecture</strong> <strong>des</strong> Réseaux (<strong>ARES</strong>) 3/5 : <strong>Couche</strong> <strong>transport</strong><br />
Olivier Fourmaux (olivier.fourmaux@upmc.fr)<br />
U.E. <strong>Architecture</strong> <strong>des</strong> Réseaux (<strong>ARES</strong>) 3/5 : <strong>Couche</strong> <strong>transport</strong><br />
PTF v2.0<br />
Service de base<br />
Service fiable<br />
Contrôle de congestion<br />
Principes de transfert de données fiable<br />
TCP : un protocole en mode orienté connexion<br />
TCP : mécanismes de fiabilisation<br />
PTF v2.0<br />
Service de base<br />
Service fiable<br />
Contrôle de congestion<br />
Principes de transfert de données fiable<br />
TCP : un protocole en mode orienté connexion<br />
TCP : mécanismes de fiabilisation<br />
Transfert fiable sur un canal avec <strong>des</strong> erreurs<br />
canal sous-jacent pouvant changer la valeur <strong>des</strong> bits d’un<br />
paquet<br />
introduction de contrôle d’erreur :<br />
ctrlerr : redondance rajoutée au paquet<br />
Comment récupérer les erreurs ?<br />
acquittement (ACK) : le récepteur indique explicitement la<br />
réception correcte d’un paquet<br />
acquittement négatif (NAK) : le récepteur indique<br />
explicitement la réception incorrecte d’un paquet<br />
l’émetteur ré-émet le paquet sur réception d’un NAK<br />
nouveau mécanisme dans PTV v2.0 :<br />
détection d’erreur<br />
valide(pqt) : vrai si le contrôle d’erreur de pqt est correct<br />
erreur(pqt) : vrai si le contrôle d’erreur de pqt est incorrect<br />
retour d’information (feedback) du récepteur (ACK et NAK)<br />
Transfert fiable sur un canal avec <strong>des</strong> erreurs :<br />
ptf_rcpt(pqtrc)<br />
&& estACK(pqtrc)<br />
Attente<br />
appel couche<br />
supérieure<br />
Attente<br />
ACK ou<br />
NAK<br />
émetteur<br />
ptf_emis(data)<br />
pqtem=cree_pqt(data, ctrlerr)<br />
ptnf_emis(pqtem)<br />
ptf_rcpt(pqtrc) && estNAK(pqtrc)<br />
ptnf_emis(pqtem)<br />
Attente<br />
appel couche<br />
inférieure<br />
récepteur<br />
ptf_rcpt(pqtrc) && erreur(pqtrc)<br />
ptnf_emis(NAK)<br />
ptf_rcpt(pqtrc) && valide(pqtrc)<br />
data=extr_pqt(pqtrc)<br />
app_rcpt(data)<br />
ptnf_emis(ACK)<br />
Olivier Fourmaux (olivier.fourmaux@upmc.fr)<br />
U.E. <strong>Architecture</strong> <strong>des</strong> Réseaux (<strong>ARES</strong>) 3/5 : <strong>Couche</strong> <strong>transport</strong><br />
Olivier Fourmaux (olivier.fourmaux@upmc.fr)<br />
U.E. <strong>Architecture</strong> <strong>des</strong> Réseaux (<strong>ARES</strong>) 3/5 : <strong>Couche</strong> <strong>transport</strong>
Service de base<br />
Service fiable<br />
Contrôle de congestion<br />
Principes de transfert de données fiable<br />
TCP : un protocole en mode orienté connexion<br />
TCP : mécanismes de fiabilisation<br />
Service de base<br />
Service fiable<br />
Contrôle de congestion<br />
Principes de transfert de données fiable<br />
TCP : un protocole en mode orienté connexion<br />
TCP : mécanismes de fiabilisation<br />
PTF v2.0 : ACK<br />
PTF v2.0 : NAK<br />
Transfert fiable lorsqu’il n’y a pas d’erreur :<br />
Transfert fiable lorqu’il y a une erreur :<br />
3<br />
ptf_rcpt(pqtrc)<br />
&& estACK(pqtrc)<br />
4<br />
Attente<br />
appel couche<br />
supérieure<br />
Attente<br />
ACK ou<br />
NAK<br />
1<br />
ptf_emis(data)<br />
pqtem=cree_pqt(data, ctrlerr)<br />
ptnf_emis(pqtem)<br />
ptf_rcpt(pqtrc) && estNAK(pqtrc)<br />
ptnf_emis(pqtem)<br />
Attente<br />
appel couche<br />
inférieure<br />
ptf_rcpt(pqtrc) && erreur(pqtrc)<br />
ptnf_emis(NAK)<br />
2<br />
ptf_rcpt(pqtrc) && valide(pqtrc)<br />
data=extr_pqt(pqtrc)<br />
app_rcpt(data)<br />
ptnf_emis(ACK)<br />
ptf_rcpt(pqtrc)<br />
&& estACK(pqtrc)<br />
10<br />
Attente<br />
appel couche<br />
supérieure<br />
Attente<br />
ACK ou<br />
NAK<br />
1<br />
ptf_emis(data)<br />
pqtem=cree_pqt(data, ctrlerr)<br />
ptnf_emis(pqtem)<br />
2<br />
ptf_rcpt(pqtrc) && estNAK(pqtrc)<br />
ptnf_emis(pqtem)<br />
5<br />
7<br />
Attente<br />
appel couche<br />
inférieure<br />
ptf_rcpt(pqtrc) && erreur(pqtrc)<br />
ptnf_emis(NAK)<br />
4<br />
8<br />
ptf_rcpt(pqtrc) && valide(pqtrc)<br />
data=extr_pqt(pqtrc)<br />
app_rcpt(data)<br />
ptnf_emis(ACK)<br />
émetteur<br />
récepteur<br />
3<br />
émetteur<br />
récepteur<br />
9<br />
Olivier Fourmaux (olivier.fourmaux@upmc.fr)<br />
U.E. <strong>Architecture</strong> <strong>des</strong> Réseaux (<strong>ARES</strong>) 3/5 : <strong>Couche</strong> <strong>transport</strong><br />
Olivier Fourmaux (olivier.fourmaux@upmc.fr)<br />
U.E. <strong>Architecture</strong> <strong>des</strong> Réseaux (<strong>ARES</strong>) 3/5 : <strong>Couche</strong> <strong>transport</strong><br />
Service de base<br />
Service fiable<br />
Contrôle de congestion<br />
Principes de transfert de données fiable<br />
TCP : un protocole en mode orienté connexion<br />
TCP : mécanismes de fiabilisation<br />
Service de base<br />
Service fiable<br />
Contrôle de congestion<br />
Principes de transfert de données fiable<br />
TCP : un protocole en mode orienté connexion<br />
TCP : mécanismes de fiabilisation<br />
PTF v2.0 : discussion<br />
PTF v2.1 : émetteur<br />
PTF v2.0 est un protocole stop and wait :<br />
émetteur envoi un paquet et attend la réponse du récepteur<br />
peu performant...<br />
PTF v2.0 à un défaut majeur !<br />
Que se passe-t-il si les ACK ou NAK sont incorrect ?<br />
pas d’information sur l’état du récepteur<br />
une retransmission simple risque de dupliquer les données<br />
gestion <strong>des</strong> duplicats :<br />
émetteur retransmet le paquet courant si ACK/NAK incorrect<br />
émetteur insert un numéro de séquence à chaque paquet<br />
récepteur supprime les paquets dupliqués<br />
inclu dans PTF v2.1<br />
ptf_rcpt(pqtrc)<br />
&& valide (pqtrc)<br />
&& estACK(pqtrc)<br />
Attente<br />
ACK 1 ou<br />
NAK 1m<br />
ptf_rcpt(pqtrc) &&<br />
(erreur(pqtrc) || estNAK(pqtrc))<br />
ptn_emis(pqtem)<br />
ptf_emis(data)<br />
pqtem=cree_pqt(0, data, ctrlerr)<br />
ptnf_emis(pqtem)<br />
Attente<br />
appel couche<br />
supérieure<br />
Attente<br />
ACK 0 ou<br />
NAK 0<br />
Attente<br />
appel couche<br />
supérieure<br />
ptf_emis(data)<br />
pqtem=cree_pqt(1, data, ctrlerr)<br />
ptnf_emis(pqtem)<br />
ptf_rcpt(pqtrc) &&<br />
(erreur(pqtrc) || estNAK(pqtrc))<br />
ptn_emis(pqtem)<br />
ptf_rcpt(pqtrc)<br />
&& valide (pqtrc)<br />
&& estACK(pqtrc)<br />
émetteur<br />
Olivier Fourmaux (olivier.fourmaux@upmc.fr)<br />
U.E. <strong>Architecture</strong> <strong>des</strong> Réseaux (<strong>ARES</strong>) 3/5 : <strong>Couche</strong> <strong>transport</strong><br />
Olivier Fourmaux (olivier.fourmaux@upmc.fr)<br />
U.E. <strong>Architecture</strong> <strong>des</strong> Réseaux (<strong>ARES</strong>) 3/5 : <strong>Couche</strong> <strong>transport</strong>
Service de base<br />
Service fiable<br />
Contrôle de congestion<br />
Principes de transfert de données fiable<br />
TCP : un protocole en mode orienté connexion<br />
TCP : mécanismes de fiabilisation<br />
Service de base<br />
Service fiable<br />
Contrôle de congestion<br />
Principes de transfert de données fiable<br />
TCP : un protocole en mode orienté connexion<br />
TCP : mécanismes de fiabilisation<br />
PTF v2.1 : récepteur<br />
PTF v2.1 : discussion<br />
ptf_rcpt(pqtrc) && erreur(pqtrc)<br />
pqtem=cree_pqt(NAK, ctrlerr)<br />
ptnf_emis(pqtem)<br />
ptf_rcpt(pqtrc) &&<br />
valide(pqtrc) && estseq1(pqtrc)<br />
pqtem=cree_pqt(ACK, ctrlerr)<br />
ptnf_emis(pqtem)<br />
ptf_rcpt(pqtrc) && valide(pqtrc) && estseq0(pqtrc)<br />
data=extr_pqt(pqtrc)<br />
app_rcpt(data)<br />
pqtem=cree_pqt(ACK, ctrlerr)<br />
ptnf_emis(pqtem)<br />
Attente<br />
Attente<br />
0 couche 1 couche<br />
inférieure<br />
inférieure<br />
ptf_rcpt(pqtrc) && valide(pqtrc) && estseq1(pqtrc)<br />
data=extr_pqt(pqtrc)<br />
app_rcpt(data)<br />
pqtem=cree_pqt(ACK, ctrlerr)<br />
ptnf_emis(pqtem)<br />
ptf_rcpt(pqtrc) && erreur(pqtrc)<br />
pqtem=cree_pqt(NAK, ctrlerr)<br />
ptnf_emis(pqtem)<br />
ptf_rcpt(pqtrc) &&<br />
valide(pqtrc) && estseq0(pqtrc)<br />
pqtem=cree_pqt(ACK, ctrlerr)<br />
ptnf_emis(pqtem)<br />
récepteur<br />
Comportement <strong>des</strong> extrémités avec PFT v2.1<br />
émetteur<br />
ajout de numéro de séquence à chaque paquet<br />
2 suffisent (0 et 1)<br />
contrôle d’erreur sur les ACK et NAK<br />
2 fois plus d’états<br />
récepteur<br />
vérification que le paquet n’est pas dupliqué<br />
l’état où l’on se trouve indique le numéro de séquence attendu<br />
Peut-on éliminer les NAK?<br />
remplacement <strong>des</strong> NAK par ACK du dernier paquet valide<br />
recu<br />
récepteur inclu le numéro de séquence correspondant dans le<br />
ACK<br />
ACK dupliqué au récepteur = NAK recu au récepteur<br />
intégré dans PFT v2.2<br />
Olivier Fourmaux (olivier.fourmaux@upmc.fr)<br />
U.E. <strong>Architecture</strong> <strong>des</strong> Réseaux (<strong>ARES</strong>) 3/5 : <strong>Couche</strong> <strong>transport</strong><br />
Olivier Fourmaux (olivier.fourmaux@upmc.fr)<br />
U.E. <strong>Architecture</strong> <strong>des</strong> Réseaux (<strong>ARES</strong>) 3/5 : <strong>Couche</strong> <strong>transport</strong><br />
Service de base<br />
Service fiable<br />
Contrôle de congestion<br />
Principes de transfert de données fiable<br />
TCP : un protocole en mode orienté connexion<br />
TCP : mécanismes de fiabilisation<br />
Service de base<br />
Service fiable<br />
Contrôle de congestion<br />
Principes de transfert de données fiable<br />
TCP : un protocole en mode orienté connexion<br />
TCP : mécanismes de fiabilisation<br />
PTF v2.2 : émetteur<br />
PTF v2.2 : récepteur<br />
ptf_rcpt(pqtrc)<br />
&& valide (pqtrc)<br />
&& estACK(pqtrc, 1)<br />
ptf_rcpt(pqtrc) &&<br />
(erreur(pqtrc) || estACK(pqtrc, 0))<br />
ptnf_emis(pqtem)<br />
ptf_emis(data)<br />
pqtem=cree_pqt(0, data, ctrlerr)<br />
ptnf_emis(pqtem)<br />
Attente<br />
appel couche<br />
supérieure<br />
Attente<br />
ACK 1<br />
Attente<br />
ACK 0<br />
Attente<br />
appel couche<br />
supérieure<br />
ptf_emis(data)<br />
pqtem=cree_pqt(1, data, ctrlerr)<br />
ptnf_emis(pqtem)<br />
ptf_rcpt(pqtrc) &&<br />
(erreur(pqtrc) || estACK(pqtrc, 1))<br />
ptnf_emis(pqtem)<br />
ptf_rcpt(pqtrc)<br />
&& valide (pqtrc)<br />
&& estACK(pqtrc, 0)<br />
émetteur<br />
ptf_rcpt(pqtrc) &&<br />
(erreur(pqtrc) || estseq1(pqtrc))<br />
ptnf_emis(pqtem)<br />
ptf_rcpt(pqtrc) && valide(pqtrc) && estseq0(pqtrc)<br />
data=extr_pqt(pqtrc)<br />
app_rcpt(data)<br />
pqtem=cree_pqt(ACK0, ctrlerr)<br />
ptnf_emis(pqtem)<br />
Attente<br />
Attente<br />
0 couche 1 couche<br />
inférieure<br />
inférieure<br />
ptf_rcpt(pqtrc) && valide(pqtrc) && estseq1(pqtrc)<br />
data=extr_pqt(pqtrc)<br />
app_rcpt(data)<br />
pqtem=cree_pqt(ACK1, ctrlerr)<br />
ptnf_emis(pqtem)<br />
ptf_rcpt(pqtrc) &&<br />
(erreur(pqtrc) || estseq0(pqtrc))<br />
ptnf_emis(pqtem)<br />
récepteur<br />
Olivier Fourmaux (olivier.fourmaux@upmc.fr)<br />
U.E. <strong>Architecture</strong> <strong>des</strong> Réseaux (<strong>ARES</strong>) 3/5 : <strong>Couche</strong> <strong>transport</strong><br />
Olivier Fourmaux (olivier.fourmaux@upmc.fr)<br />
U.E. <strong>Architecture</strong> <strong>des</strong> Réseaux (<strong>ARES</strong>) 3/5 : <strong>Couche</strong> <strong>transport</strong>
PTF v3.0<br />
Service de base<br />
Service fiable<br />
Contrôle de congestion<br />
Principes de transfert de données fiable<br />
TCP : un protocole en mode orienté connexion<br />
TCP : mécanismes de fiabilisation<br />
PTF v3.0 : émetteur<br />
Service de base<br />
Service fiable<br />
Contrôle de congestion<br />
Principes de transfert de données fiable<br />
TCP : un protocole en mode orienté connexion<br />
TCP : mécanismes de fiabilisation<br />
Transfert fiable sur un canal avec erreurs et pertes<br />
canal sous-jacent peut aussi perdre <strong>des</strong> paquets (data ou<br />
ACK)<br />
ctrlerr + numSeq + ACK + retransmission<br />
insuffisant : l’absence d’un paquet bloque l’automate !<br />
Temporisation <strong>des</strong> retransmission<br />
estimation d’un temps de retour de ACK raisonable<br />
déclenchement d’une temporisation à l’emission d’un paquet<br />
tempo init<br />
ACK avant l’expiration de la temporisation ➠ rien<br />
tempo stop<br />
pas de ACK à l’expiration de la temporisation<br />
➠ retransmission<br />
tempo expire<br />
si le ACK est seulement en retard...<br />
retransmission = duplication<br />
détectée grâce au numéro de séquence<br />
ptf_rcpt(pqtrc)<br />
ptf_rcpt(pqtrc)<br />
&& valide (pqtrc)<br />
&& estACK(pqtrc, 1)<br />
tempo_stop<br />
tempo_expire<br />
ptnf_emis(pqtem)<br />
tempo_init<br />
ptf_rcpt(pqtrc) &&<br />
(erreur(pqtrc) || estACK(pqtrc, 0))<br />
ptf_emis(data)<br />
pqtem=cree_pqt(0, data, ctrlerr)<br />
ptnf_emis(pqtem)<br />
tempo_init<br />
Attente<br />
Attente<br />
appel couche<br />
ACK 0<br />
supérieure<br />
Attente<br />
ACK 1<br />
Attente<br />
appel couche<br />
supérieure<br />
ptf_emis(data)<br />
pqtem=cree_pqt(1, data, ctrlerr)<br />
ptnf_emis(pqtem)<br />
tempo_init<br />
ptf_rcpt(pqtrc) &&<br />
(erreur(pqtrc) || estACK(pqtrc, 1))<br />
tempo_expire<br />
ptnf_emis(pqtem)<br />
tempo_init<br />
ptf_rcpt(pqtrc)<br />
&& valide (pqtrc)<br />
&& estACK(pqtrc, 0)<br />
tempo_stop<br />
ptf_rcpt(pqtrc)<br />
émetteur<br />
Olivier Fourmaux (olivier.fourmaux@upmc.fr)<br />
U.E. <strong>Architecture</strong> <strong>des</strong> Réseaux (<strong>ARES</strong>) 3/5 : <strong>Couche</strong> <strong>transport</strong><br />
Olivier Fourmaux (olivier.fourmaux@upmc.fr)<br />
U.E. <strong>Architecture</strong> <strong>des</strong> Réseaux (<strong>ARES</strong>) 3/5 : <strong>Couche</strong> <strong>transport</strong><br />
PTF v3.0 : sans perte<br />
Service de base<br />
Service fiable<br />
Contrôle de congestion<br />
Principes de transfert de données fiable<br />
TCP : un protocole en mode orienté connexion<br />
TCP : mécanismes de fiabilisation<br />
Service de base<br />
Service fiable<br />
Contrôle de congestion<br />
Principes de transfert de données fiable<br />
TCP : un protocole en mode orienté connexion<br />
TCP : mécanismes de fiabilisation<br />
PTF v3.0 : perte d’un paquet de données<br />
Emetteur<br />
envoi Data 0<br />
réception ACK 0<br />
envoi Data 1<br />
réception ACK 1<br />
envoi Data 0<br />
Data 0<br />
Data 1<br />
Data 0<br />
ACK 0<br />
ACK 1<br />
ACK 0<br />
Récepteur<br />
réception Data 0<br />
envoi ACK 0<br />
réception Data 1<br />
envoi ACK 1<br />
réception Data 0<br />
envoi ACK 0<br />
Emetteur<br />
envoi Data 0<br />
réception ACK 0<br />
envoi Data 1<br />
tempo_expire<br />
ré−envoi Data 1<br />
réception ACK 1<br />
envoi Data 0<br />
Data 0<br />
ACK 0<br />
Data 1<br />
Data 1<br />
ACK 1<br />
Data 0<br />
Récepteur<br />
réception Data 0<br />
envoi ACK 0<br />
réception Data 1<br />
envoi ACK 1<br />
Olivier Fourmaux (olivier.fourmaux@upmc.fr)<br />
U.E. <strong>Architecture</strong> <strong>des</strong> Réseaux (<strong>ARES</strong>) 3/5 : <strong>Couche</strong> <strong>transport</strong><br />
Olivier Fourmaux (olivier.fourmaux@upmc.fr)<br />
U.E. <strong>Architecture</strong> <strong>des</strong> Réseaux (<strong>ARES</strong>) 3/5 : <strong>Couche</strong> <strong>transport</strong>
Service de base<br />
Service fiable<br />
Contrôle de congestion<br />
PTF v3.0 : perte d’un ACK<br />
Principes de transfert de données fiable<br />
TCP : un protocole en mode orienté connexion<br />
TCP : mécanismes de fiabilisation<br />
Service de base<br />
Service fiable<br />
Contrôle de congestion<br />
Principes de transfert de données fiable<br />
TCP : un protocole en mode orienté connexion<br />
TCP : mécanismes de fiabilisation<br />
PTF v3.0 : fin de temporisation prématurée<br />
Emetteur<br />
envoi Data 0<br />
réception ACK 0<br />
envoi Data 1<br />
tempo_expire<br />
ré−envoi Data 1<br />
réception ACK 1<br />
envoi Data 0<br />
Data 0<br />
ACK 0<br />
Data 1<br />
ACK 1<br />
Data 1<br />
ACK 1<br />
Data 0<br />
Récepteur<br />
réception Data 0<br />
envoi ACK 0<br />
réception Data 1<br />
envoi ACK 1<br />
réception Data 1<br />
détecte le duplicat<br />
envoi ACK 1<br />
réception Data 0<br />
Emetteur<br />
envoi Data 0<br />
réception ACK 0<br />
envoi Data 1<br />
tempo_expire<br />
ré−envoi Data 1<br />
réception ACK 1<br />
envoi Data 0<br />
réception ACK 1<br />
ne rien faire<br />
réception ACK 0<br />
envoi Data 0<br />
Data 0<br />
ACK 0<br />
Data 1<br />
Data 1<br />
ACK 1<br />
Data 0 ACK 1<br />
ACK 0<br />
Data 0<br />
Récepteur<br />
réception Data 0<br />
envoi ACK 0<br />
réception Data 1<br />
envoi ACK 1<br />
réception Data 1<br />
détecte le duplicat<br />
envoi ACK 1<br />
réception Data 0<br />
envoi ACK 0<br />
réception Data 0<br />
Olivier Fourmaux (olivier.fourmaux@upmc.fr)<br />
U.E. <strong>Architecture</strong> <strong>des</strong> Réseaux (<strong>ARES</strong>) 3/5 : <strong>Couche</strong> <strong>transport</strong><br />
Olivier Fourmaux (olivier.fourmaux@upmc.fr)<br />
U.E. <strong>Architecture</strong> <strong>des</strong> Réseaux (<strong>ARES</strong>) 3/5 : <strong>Couche</strong> <strong>transport</strong><br />
Service de base<br />
Service fiable<br />
Contrôle de congestion<br />
PTF v3.0 : performance<br />
Principes de transfert de données fiable<br />
TCP : un protocole en mode orienté connexion<br />
TCP : mécanismes de fiabilisation<br />
Service de base<br />
Service fiable<br />
Contrôle de congestion<br />
PTF v3.0 : stop and wait<br />
Principes de transfert de données fiable<br />
TCP : un protocole en mode orienté connexion<br />
TCP : mécanismes de fiabilisation<br />
PFT v3.0 fonctionne mais quelles sont ses performances ?<br />
exemple de communication :<br />
débit du lien : D reseau = 1 Gbps,<br />
délais de bout-en-bout : d = 40 ms (d AR = 80 ms)<br />
paquets de longueur 1000 octets (L paquet = 8000 b)<br />
T transmission = L paquet /D reseau = 8.10 3 /10 9 = 8 µs<br />
efficatité émetteur (E emis ) : fraction de temps en émission<br />
E emis =<br />
Lpaquet/Dreseau 8.10<br />
L paquet/D reseau+d AR<br />
=<br />
−6<br />
= 1<br />
8.10 −6 +8.10 −2 10000<br />
D <strong>transport</strong> = L paquet /d AR = 8.10 3 /8.10 −2 = 100 Kbps<br />
le protocole limite l’utilisation <strong>des</strong> ressources disponibles<br />
départ bit 1 du pqt 1 : t = 0<br />
dernier bit pqt 1 : t = L/R<br />
RTT<br />
arrivée ACK pqt 1 :<br />
t = RTT + L/R<br />
arrivée bit 1 pqt 1<br />
dernier bit pqt 1 : envoi ACK<br />
Olivier Fourmaux (olivier.fourmaux@upmc.fr)<br />
U.E. <strong>Architecture</strong> <strong>des</strong> Réseaux (<strong>ARES</strong>) 3/5 : <strong>Couche</strong> <strong>transport</strong><br />
Olivier Fourmaux (olivier.fourmaux@upmc.fr)<br />
U.E. <strong>Architecture</strong> <strong>des</strong> Réseaux (<strong>ARES</strong>) 3/5 : <strong>Couche</strong> <strong>transport</strong>
Protocole pipeline<br />
Service de base<br />
Service fiable<br />
Contrôle de congestion<br />
Principes de transfert de données fiable<br />
TCP : un protocole en mode orienté connexion<br />
TCP : mécanismes de fiabilisation<br />
Performance pipeline<br />
Service de base<br />
Service fiable<br />
Contrôle de congestion<br />
Principes de transfert de données fiable<br />
TCP : un protocole en mode orienté connexion<br />
TCP : mécanismes de fiabilisation<br />
départ bit 1 du pqt 1 : t = 0<br />
ACK<br />
dernier bit pqt 1 : t = L/R<br />
Data<br />
Data<br />
l’émetteur autorise plusieurs paquets en attente<br />
d’acquittement<br />
numéro de sequences étendus<br />
tampons d’émission et de réception<br />
2 types de protocole pipeliné : Go-Back-N et<br />
Retransmissions sélectives<br />
RTT<br />
arrivée ACK pqt 1 :<br />
t = RTT + L/R<br />
arrivée bit 1 pqt 1<br />
dernier bit pqt 1 : envoi ACK<br />
dernier bit pqt 2 : envoi ACK<br />
dernier bit pqt 3 : envoi ACK<br />
dernier bit pqt 4 : envoi ACK<br />
Olivier Fourmaux (olivier.fourmaux@upmc.fr)<br />
U.E. <strong>Architecture</strong> <strong>des</strong> Réseaux (<strong>ARES</strong>) 3/5 : <strong>Couche</strong> <strong>transport</strong><br />
Olivier Fourmaux (olivier.fourmaux@upmc.fr)<br />
U.E. <strong>Architecture</strong> <strong>des</strong> Réseaux (<strong>ARES</strong>) 3/5 : <strong>Couche</strong> <strong>transport</strong><br />
Service de base<br />
Service fiable<br />
Contrôle de congestion<br />
Go-Back-N : émetteur<br />
Principes de transfert de données fiable<br />
TCP : un protocole en mode orienté connexion<br />
TCP : mécanismes de fiabilisation<br />
PTF v4.0 : émetteur<br />
Service de base<br />
Service fiable<br />
Contrôle de congestion<br />
Principes de transfert de données fiable<br />
TCP : un protocole en mode orienté connexion<br />
TCP : mécanismes de fiabilisation<br />
Emetteur avec gestion Go-Back-N (retour arrière).<br />
entête <strong>des</strong> paquets avec k bits de numéro de séquence<br />
acquittements cumulatifs<br />
ACK(n) acquitte tous les paquets jusqu’au numéro de séquence<br />
n<br />
fenêtre d’au maximun N paquets non acquités :<br />
base<br />
proch_numseq<br />
Taille de la fenêtre<br />
une temporisation pour les paquets en attente (in-flight)<br />
tempo expire(n) : retransmission du paquet n et <strong>des</strong> suivants<br />
avec numéro de séquence supérieur<br />
base=1<br />
proch_numseq=1<br />
ptf_rcpt(pqtrc) &&<br />
erreur(pqtrc)<br />
émetteur<br />
ptf_emis(data)<br />
si (proch_numseq < base+N) alors :<br />
pqtem[proch_numseq] = cree_pqt(proch_numseq, data, ctrlerr)<br />
ptnf_emis(pqtem[proch_numseq])<br />
si (base == proch_numseq) alors tempo_init<br />
proch_numseq ++<br />
sinon refuse_data(data)<br />
tempo_expire<br />
tempo_init<br />
ptnf_emis(pqtem[base])<br />
Attente<br />
ptnf_emis(pqtem[base+1])<br />
.....<br />
ptnf_emis(pqtem[proch_numseq−1])<br />
ptf_rcpt(pqtrc) && valide(pqtrc)<br />
base = extr_numack(pqtrc)+1<br />
si (base == proch_numseq) alors tempo_stop sinon tempo_init<br />
Olivier Fourmaux (olivier.fourmaux@upmc.fr)<br />
U.E. <strong>Architecture</strong> <strong>des</strong> Réseaux (<strong>ARES</strong>) 3/5 : <strong>Couche</strong> <strong>transport</strong><br />
Olivier Fourmaux (olivier.fourmaux@upmc.fr)<br />
U.E. <strong>Architecture</strong> <strong>des</strong> Réseaux (<strong>ARES</strong>) 3/5 : <strong>Couche</strong> <strong>transport</strong>
Service de base<br />
Service fiable<br />
Contrôle de congestion<br />
Go-Back-N : récepteur<br />
Principes de transfert de données fiable<br />
TCP : un protocole en mode orienté connexion<br />
TCP : mécanismes de fiabilisation<br />
PTF v4.0 : récepteur<br />
Service de base<br />
Service fiable<br />
Contrôle de congestion<br />
Principes de transfert de données fiable<br />
TCP : un protocole en mode orienté connexion<br />
TCP : mécanismes de fiabilisation<br />
Récepteur avec gestion Go-Back-N (retour arrière).<br />
seulement <strong>des</strong> ACK :<br />
envoie toujours <strong>des</strong> ACK avec le plus élevé <strong>des</strong> seqnum de<br />
paquets vali<strong>des</strong> ordonnés<br />
peut générer <strong>des</strong> ACK dupliqués<br />
seul seqnum attendu est mémorisé<br />
déséquencement :<br />
élimine les paquets déséquencés<br />
pas de tampon au niveau du récepteur<br />
ré-émet le ACK avec le plus élevé <strong>des</strong> seqnum de paquets<br />
vali<strong>des</strong> ordonnés<br />
ptf_rcpt(pqtrc) && valide(pqtrc) && estseqnum(pqtrc, seqnum_attendu)<br />
data=extr_pqt(rcpqt)<br />
app_rcpt(data)<br />
pqtem=cree_pqt(seqnum_attendu, ACK, ctrlerr)<br />
ptnf_emis(pqtem)<br />
seqnum_attendu++<br />
Attente<br />
couche<br />
defaut<br />
inférieure<br />
ptnf_emis(pqtem)<br />
seqnum_attendu=1<br />
récepteur<br />
pqtem=cree_pqt(seqnum_attendu, ACK, ctrlerr)<br />
Olivier Fourmaux (olivier.fourmaux@upmc.fr)<br />
U.E. <strong>Architecture</strong> <strong>des</strong> Réseaux (<strong>ARES</strong>) 3/5 : <strong>Couche</strong> <strong>transport</strong><br />
Olivier Fourmaux (olivier.fourmaux@upmc.fr)<br />
U.E. <strong>Architecture</strong> <strong>des</strong> Réseaux (<strong>ARES</strong>) 3/5 : <strong>Couche</strong> <strong>transport</strong><br />
PTF v4.0 : exemple<br />
Service de base<br />
Service fiable<br />
Contrôle de congestion<br />
Principes de transfert de données fiable<br />
TCP : un protocole en mode orienté connexion<br />
TCP : mécanismes de fiabilisation<br />
Service de base<br />
Service fiable<br />
Contrôle de congestion<br />
Retransmissions sélectives : émetteur<br />
Principes de transfert de données fiable<br />
TCP : un protocole en mode orienté connexion<br />
TCP : mécanismes de fiabilisation<br />
Emetteur<br />
envoi Data 0<br />
envoi Data 1<br />
envoi Data 2<br />
envoi Data 3<br />
attente<br />
réception ACK 0<br />
envoi Data 4<br />
réception ACK 1<br />
envoi Data 5<br />
tempo_2_expire<br />
envoi Data 2<br />
envoi Data 3<br />
envoi Data 4<br />
envoi Data 5<br />
Data 0<br />
Data 1<br />
Data 2<br />
Data 3<br />
Data 4<br />
Data 5<br />
Data 2<br />
Data 3<br />
Data 4<br />
Data 5<br />
ACK 0<br />
ACK 1<br />
ACK 1<br />
ACK 1<br />
ACK 1<br />
ACK 2<br />
ACK 3<br />
Récepteur<br />
réception Data 0<br />
envoi ACK 0<br />
réception Data 1<br />
envoi ACK 1<br />
réception Data 3, éliminé<br />
envoi ACK 1<br />
réception Data 4, éliminé<br />
envoi ACK 1<br />
réception Data 5, éliminé<br />
envoi ACK 1<br />
réception Data 2<br />
envoi ACK 2<br />
réception Data 3<br />
envoi ACK 3<br />
Emetteur avec gestion <strong>des</strong> retransmissions sélectives :<br />
retransmet seulement les paquets non acquittés<br />
fenêtre d’émission limité à N paquets consécutifs<br />
algo :<br />
pft emis(data)<br />
envoi un paquet si seqnum dans la fenêtre<br />
tempo expire(n)<br />
retransmet paquet n<br />
tempo init(n)<br />
ACK(n)<br />
marque le paquet n reçu<br />
si n est le plus petit paquet non acquitté, décale la fenêtre<br />
Olivier Fourmaux (olivier.fourmaux@upmc.fr)<br />
U.E. <strong>Architecture</strong> <strong>des</strong> Réseaux (<strong>ARES</strong>) 3/5 : <strong>Couche</strong> <strong>transport</strong><br />
Olivier Fourmaux (olivier.fourmaux@upmc.fr)<br />
U.E. <strong>Architecture</strong> <strong>des</strong> Réseaux (<strong>ARES</strong>) 3/5 : <strong>Couche</strong> <strong>transport</strong>
Service de base<br />
Service fiable<br />
Contrôle de congestion<br />
Retransmissions sélectives : récepteur<br />
Principes de transfert de données fiable<br />
TCP : un protocole en mode orienté connexion<br />
TCP : mécanismes de fiabilisation<br />
Service de base<br />
Service fiable<br />
Contrôle de congestion<br />
Retransmissions sélectives : visualisation<br />
Principes de transfert de données fiable<br />
TCP : un protocole en mode orienté connexion<br />
TCP : mécanismes de fiabilisation<br />
Récepteur avec gestion <strong>des</strong> retransmissions sélectives :<br />
acquitte explicitement chaque paquet valide reçu<br />
tampon de réception pour re-séquencement<br />
algo :<br />
ptf rcpt(n)<br />
(base rcpt ≤ n ≤ base rcpt+N-1)<br />
ACK(n)<br />
si déséquensé : tampon<br />
si séquense : app emis(data), est le plus petit paquet non<br />
acquitté, décale la fenêtre<br />
ptf rcpt(n)<br />
(base rcpt-N ≤ n ≤ base rcpt-1)<br />
ACK(n)<br />
autre<br />
ignore<br />
Vue émetteur<br />
base_emis<br />
Vue récepteur<br />
base_rcpt<br />
proch_seqnum<br />
Taille de la fenêtre<br />
Taille de la fenêtre<br />
Olivier Fourmaux (olivier.fourmaux@upmc.fr)<br />
U.E. <strong>Architecture</strong> <strong>des</strong> Réseaux (<strong>ARES</strong>) 3/5 : <strong>Couche</strong> <strong>transport</strong><br />
Olivier Fourmaux (olivier.fourmaux@upmc.fr)<br />
U.E. <strong>Architecture</strong> <strong>des</strong> Réseaux (<strong>ARES</strong>) 3/5 : <strong>Couche</strong> <strong>transport</strong><br />
Service de base<br />
Service fiable<br />
Contrôle de congestion<br />
Retransmissions sélectives : exemple<br />
Principes de transfert de données fiable<br />
TCP : un protocole en mode orienté connexion<br />
TCP : mécanismes de fiabilisation<br />
Service de base<br />
Service fiable<br />
Contrôle de congestion<br />
<strong>ARES</strong> : Plan du cours 3/5<br />
Principes de transfert de données fiable<br />
TCP : un protocole en mode orienté connexion<br />
TCP : mécanismes de fiabilisation<br />
0 1 2 3 4 5 6 7<br />
0 1 2 3 4 5 6 7<br />
0 1 2 3 4 5 6 7<br />
0 1 2 3 4 5 6 7<br />
0 1 2 3 4 5 6 7<br />
0 1 2 3 4 5 6 7<br />
0 1 2 3 4 5 6 7<br />
0 1 2 3 4 5 6 7<br />
Emetteur<br />
envoi Data 0<br />
envoi Data 1<br />
envoi Data 2<br />
envoi Data 3<br />
attente<br />
réception ACK 0<br />
envoi Data 4<br />
réception ACK 1<br />
envoi Data 5<br />
tempo_2_expire<br />
envoi Data 2<br />
réception ACK 3<br />
Data 0<br />
Data 1<br />
Data 2<br />
Data 3<br />
Data 4<br />
Data 5<br />
Data 2<br />
ACK 0<br />
ACK 1<br />
ACK 3<br />
ACK 4<br />
ACK 5<br />
ACK 2<br />
Récepteur<br />
réception Data 0<br />
envoi ACK 0<br />
réception Data 1<br />
envoi ACK 1<br />
réception Data 3<br />
envoi ACK 3<br />
réception Data 4<br />
envoi ACK 4<br />
réception Data 5<br />
envoi ACK 5<br />
réception Data 2<br />
envoi ACK 2<br />
0 1 2 3 4 5 6 7<br />
0 1 2 3 4 5 6 7<br />
0 1 2 3 4 5 6 7<br />
0 1 2 3 4 5 6 7<br />
0 1 2 3 4 5 6 7<br />
0 1 2 3 4 5 6 7<br />
1 Service de base<br />
Rappels sur la couche <strong>transport</strong><br />
Multiplexage et démultiplexage<br />
UDP : un protocole en mode non connecté<br />
2 Service fiable<br />
Principes de transfert de données fiable<br />
TCP : un protocole en mode orienté connexion<br />
TCP : mécanismes de fiabilisation<br />
3 Contrôle de congestion<br />
Principes généraux<br />
Mécanismes de TCP<br />
Olivier Fourmaux (olivier.fourmaux@upmc.fr)<br />
U.E. <strong>Architecture</strong> <strong>des</strong> Réseaux (<strong>ARES</strong>) 3/5 : <strong>Couche</strong> <strong>transport</strong><br />
Olivier Fourmaux (olivier.fourmaux@upmc.fr)<br />
U.E. <strong>Architecture</strong> <strong>des</strong> Réseaux (<strong>ARES</strong>) 3/5 : <strong>Couche</strong> <strong>transport</strong>
TCP<br />
Service de base<br />
Service fiable<br />
Contrôle de congestion<br />
Principes de transfert de données fiable<br />
TCP : un protocole en mode orienté connexion<br />
TCP : mécanismes de fiabilisation<br />
Service de base<br />
Service fiable<br />
Contrôle de congestion<br />
TCP (Transmission Control Protocol)<br />
Principes de transfert de données fiable<br />
TCP : un protocole en mode orienté connexion<br />
TCP : mécanismes de fiabilisation<br />
01<br />
01<br />
01<br />
01<br />
01<br />
01<br />
... ... ...<br />
DATA<br />
... ...<br />
00 11 00 11<br />
01<br />
01<br />
01<br />
SYN<br />
SYN+ACK<br />
...<br />
ACK<br />
01 01 01 01<br />
...<br />
...<br />
[RFCs : 793, 1122-1123, 2474, 3168, 3260, 4379, 5462 et 5681]<br />
service fiable<br />
mécanismes ARQ<br />
point-à-point<br />
deux processus (généralement un client et un serveur)<br />
flot d’octet continu<br />
pas de frontières de messages<br />
orienté connexion<br />
ouverture en trois échanges (three-way handshake)<br />
initiation <strong>des</strong> états aux extrémité avant l’échanges de données<br />
fermetures courtoise ou brutale<br />
connexion bidirectionnelle (full duplex)<br />
flux de données dans chaques sens<br />
taille maximum du segment : MSS (Maximun Segment Size)<br />
pipeline<br />
tampons d’émission et de réception<br />
double fenêtre asservie aux contrôles de flux et de congestion<br />
Olivier Fourmaux (olivier.fourmaux@upmc.fr)<br />
U.E. <strong>Architecture</strong> <strong>des</strong> Réseaux (<strong>ARES</strong>) 3/5 : <strong>Couche</strong> <strong>transport</strong><br />
Olivier Fourmaux (olivier.fourmaux@upmc.fr)<br />
U.E. <strong>Architecture</strong> <strong>des</strong> Réseaux (<strong>ARES</strong>) 3/5 : <strong>Couche</strong> <strong>transport</strong><br />
Segment TCP<br />
Service de base<br />
Service fiable<br />
Contrôle de congestion<br />
Principes de transfert de données fiable<br />
TCP : un protocole en mode orienté connexion<br />
TCP : mécanismes de fiabilisation<br />
TCP : Port source<br />
Service de base<br />
Service fiable<br />
Contrôle de congestion<br />
Principes de transfert de données fiable<br />
TCP : un protocole en mode orienté connexion<br />
TCP : mécanismes de fiabilisation<br />
Hlen<br />
Source port<br />
000000<br />
111111<br />
000000<br />
111111<br />
000000<br />
111111<br />
000000<br />
111111<br />
000000<br />
111111<br />
000000<br />
111111<br />
000000<br />
111111<br />
000000<br />
111111<br />
32 bits (4 octets)<br />
Sequence number<br />
Options<br />
Message<br />
(application data)<br />
Destination port<br />
Acknowledgment number<br />
Checksum<br />
U R G<br />
A C K<br />
P S H<br />
R S T<br />
S Y N<br />
F I N<br />
Rcv window size<br />
Urgent data ptr<br />
min 5 lignes (min 20 octets)<br />
max 10 l.<br />
max 65 Koctets<br />
Hlen<br />
Source port<br />
0000000<br />
1111111<br />
0000000<br />
1111111<br />
0000000<br />
1111111<br />
0000000<br />
1111111<br />
0000000<br />
1111111<br />
0000000<br />
1111111<br />
0000000<br />
1111111<br />
0000000<br />
1111111<br />
0000000<br />
1111111<br />
32 bits (4 octets)<br />
Sequence number<br />
Destination port<br />
Acknowledgment number<br />
Checksum<br />
U R G<br />
A C K<br />
P S H<br />
R S T<br />
S Y N<br />
F I N<br />
Options<br />
Rcv window size<br />
Urgent data ptr<br />
min 5 lignes (min 20 octets)<br />
16 bits (65535 ports)<br />
multiplexage à la source<br />
identification partielle du socket<br />
(demi-association locale)<br />
allocation généralement<br />
dynamique (dans le cas d’un<br />
client)<br />
répartition espace <strong>des</strong> ports :<br />
0 ≤ numPort ≤ 1023 :<br />
accessible à l’administrateur<br />
socket usuel <strong>des</strong> serveurs<br />
1024 ≤ numPort :<br />
accessible aux utilisateurs<br />
socket usuel <strong>des</strong> clients<br />
Olivier Fourmaux (olivier.fourmaux@upmc.fr)<br />
U.E. <strong>Architecture</strong> <strong>des</strong> Réseaux (<strong>ARES</strong>) 3/5 : <strong>Couche</strong> <strong>transport</strong><br />
Olivier Fourmaux (olivier.fourmaux@upmc.fr)<br />
U.E. <strong>Architecture</strong> <strong>des</strong> Réseaux (<strong>ARES</strong>) 3/5 : <strong>Couche</strong> <strong>transport</strong>
Service de base<br />
Service fiable<br />
Contrôle de congestion<br />
TCP : Port <strong>des</strong>tination<br />
Principes de transfert de données fiable<br />
TCP : un protocole en mode orienté connexion<br />
TCP : mécanismes de fiabilisation<br />
Service de base<br />
Service fiable<br />
Contrôle de congestion<br />
TCP : Numéro de séquence (1)<br />
Principes de transfert de données fiable<br />
TCP : un protocole en mode orienté connexion<br />
TCP : mécanismes de fiabilisation<br />
Hlen<br />
Source port<br />
000000<br />
111111<br />
000000<br />
111111<br />
000000<br />
111111<br />
000000<br />
111111<br />
000000<br />
111111<br />
000000<br />
111111<br />
000000<br />
111111<br />
000000<br />
111111<br />
000000<br />
111111<br />
32 bits (4 octets)<br />
Sequence number<br />
Destination port<br />
Acknowledgment number<br />
Checksum<br />
U R G<br />
A C K<br />
P S H<br />
R S T<br />
S Y N<br />
F I N<br />
Options<br />
Rcv window size<br />
Urgent data ptr<br />
min 5 lignes (min 20 octets)<br />
16 bits (65535 ports)<br />
démultiplexage au niveau de la<br />
<strong>des</strong>tination<br />
identification partielle du socket<br />
(demi-association distante)<br />
<strong>des</strong>tinataire à l’écoute sur ce<br />
port lors de la création<br />
négociation du port ou<br />
well-known ports (réservés) :<br />
Unix> cat \etc\services|grep tcp telnet 23/tcp<br />
tcpmux 1/tcp smtp 25/tcp<br />
chargen 19/tcp gopher 70/tcp<br />
ftp-data 20/tcp finger 79/tcp<br />
ftp 21/tcp www 80/tcp<br />
ssh 22/tcp .. kerberos 88/tcp ....<br />
Olivier Fourmaux (olivier.fourmaux@upmc.fr)<br />
U.E. <strong>Architecture</strong> <strong>des</strong> Réseaux (<strong>ARES</strong>) 3/5 : <strong>Couche</strong> <strong>transport</strong><br />
Hlen<br />
Source port<br />
0000000<br />
1111111<br />
0000000<br />
1111111<br />
0000000<br />
1111111<br />
0000000<br />
1111111<br />
0000000<br />
1111111<br />
0000000<br />
1111111<br />
0000000<br />
1111111<br />
0000000<br />
1111111<br />
32 bits (4 octets)<br />
Sequence number<br />
Destination port<br />
Acknowledgment number<br />
Checksum<br />
U R G<br />
A C K<br />
P S H<br />
R S T<br />
S Y N<br />
F I N<br />
Options<br />
Rcv window size<br />
Urgent data ptr<br />
Olivier Fourmaux (olivier.fourmaux@upmc.fr)<br />
min 5 lignes (min 20 octets)<br />
32 bits<br />
associé à chaque octet (et non<br />
pas à un segment)<br />
numérote le premier octet<br />
<strong>des</strong> data<br />
numérotation implicite <strong>des</strong><br />
octets suivants<br />
boucle au bout de 4 Goctets<br />
détection <strong>des</strong> pertes<br />
ordonnancement<br />
U.E. <strong>Architecture</strong> <strong>des</strong> Réseaux (<strong>ARES</strong>) 3/5 : <strong>Couche</strong> <strong>transport</strong><br />
Service de base<br />
Service fiable<br />
Contrôle de congestion<br />
TCP : Numéro de séquence (2)<br />
Principes de transfert de données fiable<br />
TCP : un protocole en mode orienté connexion<br />
TCP : mécanismes de fiabilisation<br />
Service de base<br />
Service fiable<br />
Contrôle de congestion<br />
TCP : Numéro d’acquittement (1)<br />
Principes de transfert de données fiable<br />
TCP : un protocole en mode orienté connexion<br />
TCP : mécanismes de fiabilisation<br />
Numérotation de chaque octet du flot continu de données<br />
Hôte A<br />
Hôte B<br />
32 bits (4 octets)<br />
Seq=4000<br />
Seq=4200<br />
Seq=4400<br />
200<br />
200<br />
200<br />
Hlen<br />
Source port<br />
0000000<br />
1111111<br />
0000000<br />
1111111<br />
0000000<br />
1111111<br />
0000000<br />
1111111<br />
0000000<br />
1111111<br />
0000000<br />
1111111<br />
0000000<br />
1111111<br />
0000000<br />
1111111<br />
0000000<br />
1111111<br />
Sequence number<br />
Destination port<br />
Acknowledgment number<br />
Checksum<br />
U R G<br />
A C K<br />
P S H<br />
R S T<br />
S Y N<br />
F I N<br />
Options<br />
Rcv window size<br />
Urgent data ptr<br />
min 5 lignes (min 20 octets)<br />
32 bits<br />
piggybacking<br />
indique le numéro du prochain<br />
octet attendu<br />
cumulatif, indique le premier<br />
octet non reçu (d’autres<br />
peuvent avoir été reçus avec <strong>des</strong><br />
numéros de séquence supérieurs)<br />
1er octet = 4400<br />
Dernier octet = 4599<br />
Olivier Fourmaux (olivier.fourmaux@upmc.fr)<br />
U.E. <strong>Architecture</strong> <strong>des</strong> Réseaux (<strong>ARES</strong>) 3/5 : <strong>Couche</strong> <strong>transport</strong><br />
Olivier Fourmaux (olivier.fourmaux@upmc.fr)<br />
U.E. <strong>Architecture</strong> <strong>des</strong> Réseaux (<strong>ARES</strong>) 3/5 : <strong>Couche</strong> <strong>transport</strong>
Service de base<br />
Service fiable<br />
Contrôle de congestion<br />
TCP : Numéro d’acquittement (2)<br />
Principes de transfert de données fiable<br />
TCP : un protocole en mode orienté connexion<br />
TCP : mécanismes de fiabilisation<br />
Service de base<br />
Service fiable<br />
Contrôle de congestion<br />
TCP : Numéro d’acquitement (3)<br />
Principes de transfert de données fiable<br />
TCP : un protocole en mode orienté connexion<br />
TCP : mécanismes de fiabilisation<br />
Acquittement de chaque octet du flot continu de données<br />
Hôte A<br />
Hôte B<br />
Seq=4000<br />
200<br />
Ack=4200<br />
Seq=4200<br />
ACK<br />
Piggybacking<br />
Hôte A<br />
Seq=4000 Ack=11200<br />
Seq=4200 Ack=11200<br />
ACK 200<br />
ACK 200<br />
ACK100<br />
Hôte B<br />
Seq=11200 Ack=4200<br />
Seq=4400<br />
200<br />
200<br />
ACK<br />
Ack=4400<br />
Ack=4600<br />
Seq=4400 Ack=11300<br />
Seq=4400 Ack=11300<br />
ACK<br />
ACK 200<br />
ACK100<br />
ACK100<br />
Seq=11300 Ack=4400<br />
Seq=11400 Ack=4600<br />
Olivier Fourmaux (olivier.fourmaux@upmc.fr)<br />
U.E. <strong>Architecture</strong> <strong>des</strong> Réseaux (<strong>ARES</strong>) 3/5 : <strong>Couche</strong> <strong>transport</strong><br />
Olivier Fourmaux (olivier.fourmaux@upmc.fr)<br />
U.E. <strong>Architecture</strong> <strong>des</strong> Réseaux (<strong>ARES</strong>) 3/5 : <strong>Couche</strong> <strong>transport</strong><br />
Service de base<br />
Service fiable<br />
Contrôle de congestion<br />
TCP : Exemple TELNET (1)<br />
Principes de transfert de données fiable<br />
TCP : un protocole en mode orienté connexion<br />
TCP : mécanismes de fiabilisation<br />
Service de base<br />
Service fiable<br />
Contrôle de congestion<br />
TCP : Exemple TELNET (2)<br />
Principes de transfert de données fiable<br />
TCP : un protocole en mode orienté connexion<br />
TCP : mécanismes de fiabilisation<br />
Emission d’un caractère frappé et renvoi par le serveur pour<br />
l’affichage<br />
Hôte A<br />
Hôte B<br />
Seq=80 Ack=210<br />
l’utilisateur tape "a"<br />
Seq=81 Ack=211<br />
ACK<br />
ACK<br />
ACK<br />
data="a"<br />
data="a"<br />
le serveur recoit "a"<br />
Seq=210 Ack=81<br />
et renvoie "a"<br />
Les acquittements peuvent être plus rapide que l’application<br />
Hôte A<br />
Hôte B<br />
Seq=80 Ack=210<br />
l’utilisateur tape "a"<br />
Seq=81 Ack=211<br />
ACK<br />
ACK<br />
ACK<br />
data="a"<br />
ACK<br />
data="a"<br />
Seq=210 Ack=81<br />
le serveur recoit "a"<br />
Seq=210 Ack=81<br />
...et renvoie "a"<br />
Olivier Fourmaux (olivier.fourmaux@upmc.fr)<br />
U.E. <strong>Architecture</strong> <strong>des</strong> Réseaux (<strong>ARES</strong>) 3/5 : <strong>Couche</strong> <strong>transport</strong><br />
Olivier Fourmaux (olivier.fourmaux@upmc.fr)<br />
U.E. <strong>Architecture</strong> <strong>des</strong> Réseaux (<strong>ARES</strong>) 3/5 : <strong>Couche</strong> <strong>transport</strong>
Service de base<br />
Service fiable<br />
Contrôle de congestion<br />
TCP : Acquittements temporisés<br />
Principes de transfert de données fiable<br />
TCP : un protocole en mode orienté connexion<br />
TCP : mécanismes de fiabilisation<br />
Service de base<br />
Service fiable<br />
Contrôle de congestion<br />
TCP : Longueur de l’entête<br />
Principes de transfert de données fiable<br />
TCP : un protocole en mode orienté connexion<br />
TCP : mécanismes de fiabilisation<br />
Delayed ACK (attente de deux segments ou 500 ms max.)<br />
Hôte A<br />
Hôte B<br />
Seq=21000 Ack=677<br />
ACK 1000 octets<br />
Seq=667 Ack=22000<br />
Seq=22000 Ack=677<br />
ACK<br />
ACK 1000 octets<br />
Seq=23000 Ack=677<br />
ACK 1000 octets<br />
Seq=24000 Ack=677<br />
ACK<br />
Seq=667 Ack=24000<br />
Seq=25000 Ack=677<br />
ACK 1000 octets<br />
ACK 1000 octets<br />
Seq=667 Ack=26000<br />
ACK<br />
Hlen<br />
Source port<br />
000000<br />
111111<br />
000000<br />
111111<br />
000000<br />
111111<br />
000000<br />
111111<br />
000000<br />
111111<br />
000000<br />
111111<br />
000000<br />
111111<br />
000000<br />
111111<br />
32 bits (4 octets)<br />
Sequence number<br />
Destination port<br />
Acknowledgment number<br />
Checksum<br />
U R G<br />
A C K<br />
P S H<br />
R S T<br />
S Y N<br />
F I N<br />
Options<br />
Rcv window size<br />
Urgent data ptr<br />
4 bits (valeur 15 max)<br />
nombre de lignes de 32 bits<br />
dans l’entête TCP<br />
nécessaire car le champ option<br />
est de longueur variable<br />
valeur 5...<br />
pas d’options<br />
entête TCP de 20 octets<br />
minimum<br />
... à 15<br />
10 lignes d’options<br />
40 octets d’options max<br />
entête TCP de 60 octets<br />
maximum<br />
Olivier Fourmaux (olivier.fourmaux@upmc.fr)<br />
U.E. <strong>Architecture</strong> <strong>des</strong> Réseaux (<strong>ARES</strong>) 3/5 : <strong>Couche</strong> <strong>transport</strong><br />
Olivier Fourmaux (olivier.fourmaux@upmc.fr)<br />
U.E. <strong>Architecture</strong> <strong>des</strong> Réseaux (<strong>ARES</strong>) 3/5 : <strong>Couche</strong> <strong>transport</strong><br />
Service de base<br />
Service fiable<br />
Contrôle de congestion<br />
TCP : Indicateurs (flags)<br />
Principes de transfert de données fiable<br />
TCP : un protocole en mode orienté connexion<br />
TCP : mécanismes de fiabilisation<br />
Service de base<br />
Service fiable<br />
Contrôle de congestion<br />
TCP : Taille de la fenêtre de réception<br />
Principes de transfert de données fiable<br />
TCP : un protocole en mode orienté connexion<br />
TCP : mécanismes de fiabilisation<br />
Chacun sur 1 bit indique :<br />
Hlen<br />
Source port<br />
000000<br />
111111<br />
000000<br />
111111<br />
000000<br />
111111<br />
000000<br />
111111<br />
000000<br />
111111<br />
000000<br />
111111<br />
000000<br />
111111<br />
000000<br />
111111<br />
32 bits (4 octets)<br />
Sequence number<br />
Destination port<br />
Acknowledgment number<br />
Checksum<br />
U R G<br />
A C K<br />
P S H<br />
R S T<br />
S Y N<br />
F I N<br />
Options<br />
Rcv window size<br />
Urgent data ptr<br />
min 5 lignes (min 20 octets)<br />
URG : données urgentes<br />
ACK : le champ acquittement<br />
est valide<br />
PSH : envoi immédiat avec<br />
vidage <strong>des</strong> tampons<br />
RST : terminaison brutale de la<br />
connexion<br />
SYN : synchronisation lors de<br />
l’ouverture<br />
FIN : echanges terminaux lors<br />
d’une fermeture courtoise<br />
<br />
il y en a d’autres récents ➠ U.E. ING<br />
Hlen<br />
Source port<br />
0000000<br />
1111111<br />
0000000<br />
1111111<br />
0000000<br />
1111111<br />
0000000<br />
1111111<br />
0000000<br />
1111111<br />
0000000<br />
1111111<br />
0000000<br />
1111111<br />
0000000<br />
1111111<br />
0000000<br />
1111111<br />
32 bits (4 octets)<br />
Sequence number<br />
Destination port<br />
Acknowledgment number<br />
Checksum<br />
U R G<br />
A C K<br />
P S H<br />
R S T<br />
S Y N<br />
F I N<br />
Options<br />
Rcv window size<br />
Urgent data ptr<br />
min 5 lignes (min 20 octets)<br />
16 bits<br />
le récepteur peut annoncer<br />
jusqu’à 64 Koctets<br />
piggybacking<br />
contrôle de flux<br />
indique le nombre d’octets<br />
disponibles du coté du<br />
récepteur<br />
dimentionne la taille de la<br />
fenêtre d’anticipation de<br />
l’émetteur<br />
Olivier Fourmaux (olivier.fourmaux@upmc.fr)<br />
U.E. <strong>Architecture</strong> <strong>des</strong> Réseaux (<strong>ARES</strong>) 3/5 : <strong>Couche</strong> <strong>transport</strong><br />
Olivier Fourmaux (olivier.fourmaux@upmc.fr)<br />
U.E. <strong>Architecture</strong> <strong>des</strong> Réseaux (<strong>ARES</strong>) 3/5 : <strong>Couche</strong> <strong>transport</strong>
Service de base<br />
Service fiable<br />
Contrôle de congestion<br />
TCP : Somme de contrôle du segment<br />
Principes de transfert de données fiable<br />
TCP : un protocole en mode orienté connexion<br />
TCP : mécanismes de fiabilisation<br />
Service de base<br />
Service fiable<br />
Contrôle de congestion<br />
TCP : Pointeur sur les données urgentes<br />
Principes de transfert de données fiable<br />
TCP : un protocole en mode orienté connexion<br />
TCP : mécanismes de fiabilisation<br />
32 bits (4 octets)<br />
Hlen<br />
Source port Destination port<br />
Sequence number<br />
Acknowledgment number<br />
0000000<br />
1111111<br />
0000000<br />
1111111<br />
0000000<br />
1111111<br />
0000000<br />
1111111<br />
0000000<br />
1111111<br />
0000000<br />
1111111<br />
0000000<br />
1111111<br />
0000000<br />
1111111<br />
Checksum<br />
U R G<br />
A C K<br />
P S H<br />
R S T<br />
S Y N<br />
F I N<br />
Rcv window size<br />
Urgent data ptr<br />
Options<br />
Data<br />
00000000 Protocol Segment Lenght<br />
IP source address<br />
min 5 lignes (min 20 octets)<br />
16 bits<br />
idem UDP<br />
émetteur :<br />
ajout pseudo-header<br />
checksum<br />
récepteur :<br />
ajout pseudo-header<br />
recalcul de ∑ mot 16bits<br />
= 0 : Ok<br />
≠ 0 : <strong>des</strong>truction<br />
Hlen<br />
Source port<br />
0000000<br />
1111111<br />
0000000<br />
1111111<br />
0000000<br />
1111111<br />
0000000<br />
1111111<br />
0000000<br />
1111111<br />
0000000<br />
1111111<br />
0000000<br />
1111111<br />
0000000<br />
1111111<br />
32 bits (4 octets)<br />
Sequence number<br />
Destination port<br />
Acknowledgment number<br />
Checksum<br />
U R G<br />
A C K<br />
P S H<br />
R S T<br />
S Y N<br />
F I N<br />
Options<br />
Rcv window size<br />
Urgent data ptr<br />
min 5 lignes (min 20 octets)<br />
16 bits<br />
permet l’envoi de données<br />
spéciales (et non hors bande)<br />
délimite <strong>des</strong> données traitées en<br />
priorité<br />
indique la fin <strong>des</strong> données<br />
urgentes<br />
interprétation de la quantité<br />
de données et de leur rôle par<br />
l’application<br />
IP <strong>des</strong>tination address<br />
Olivier Fourmaux (olivier.fourmaux@upmc.fr)<br />
U.E. <strong>Architecture</strong> <strong>des</strong> Réseaux (<strong>ARES</strong>) 3/5 : <strong>Couche</strong> <strong>transport</strong><br />
Olivier Fourmaux (olivier.fourmaux@upmc.fr)<br />
U.E. <strong>Architecture</strong> <strong>des</strong> Réseaux (<strong>ARES</strong>) 3/5 : <strong>Couche</strong> <strong>transport</strong><br />
TCP : Options<br />
Service de base<br />
Service fiable<br />
Contrôle de congestion<br />
Principes de transfert de données fiable<br />
TCP : un protocole en mode orienté connexion<br />
TCP : mécanismes de fiabilisation<br />
Service de base<br />
Service fiable<br />
Contrôle de congestion<br />
TCP : Gestion de la connexion<br />
Principes de transfert de données fiable<br />
TCP : un protocole en mode orienté connexion<br />
TCP : mécanismes de fiabilisation<br />
Hlen<br />
Source port<br />
000000<br />
111111<br />
000000<br />
111111<br />
000000<br />
111111<br />
000000<br />
111111<br />
000000<br />
111111<br />
000000<br />
111111<br />
000000<br />
111111<br />
000000<br />
111111<br />
000000<br />
111111<br />
32 bits (4 octets)<br />
Sequence number<br />
Destination port<br />
Acknowledgment number<br />
Checksum<br />
U R G<br />
A C K<br />
P S H<br />
R S T<br />
S Y N<br />
F I N<br />
Options<br />
Rcv window size<br />
Urgent data ptr<br />
min 5 lignes (min 20 octets)<br />
Les options sont de la forme TLV ou<br />
Type, Length (octets), Value :<br />
END : fin de liste d’options<br />
(T=0, non obligatoire)<br />
NOOP : pas d’opération<br />
(T=1, bourrage)<br />
MSS : négociation du MSS<br />
(T=2, L=4, V=MSS)<br />
WSIZE : mise à l’échelle de la fenêtre<br />
par le facteur 2 N<br />
(T=3, L=3, V=N)<br />
SACK : demande d’acquit. sélectif<br />
(T=4,L=2, à l’ouverture)<br />
SACK : acquittement sélectif de n<br />
blocs (T=5, L=2 + 8n, 2n numéros de<br />
séquences) ...<br />
Ourverture de la connexion préalable à l’échange <strong>des</strong> données :<br />
initialisation <strong>des</strong> variables TCP<br />
synchronisation <strong>des</strong> numéros de séquence<br />
création <strong>des</strong> tampons<br />
initiation du controle de flot<br />
client : initiateur de la connexion<br />
serveur : en attente de la demande de connexion<br />
Fermeture de la connexion après l’échange <strong>des</strong> données :<br />
attente ou non de l’émission <strong>des</strong> données restantes<br />
libération <strong>des</strong> tampons<br />
Olivier Fourmaux (olivier.fourmaux@upmc.fr)<br />
U.E. <strong>Architecture</strong> <strong>des</strong> Réseaux (<strong>ARES</strong>) 3/5 : <strong>Couche</strong> <strong>transport</strong><br />
Olivier Fourmaux (olivier.fourmaux@upmc.fr)<br />
U.E. <strong>Architecture</strong> <strong>des</strong> Réseaux (<strong>ARES</strong>) 3/5 : <strong>Couche</strong> <strong>transport</strong>
Service de base<br />
Service fiable<br />
Contrôle de congestion<br />
TCP : Three-Way Handshake (1)<br />
Principes de transfert de données fiable<br />
TCP : un protocole en mode orienté connexion<br />
TCP : mécanismes de fiabilisation<br />
Service de base<br />
Service fiable<br />
Contrôle de congestion<br />
TCP : Three-Way Handshake (2)<br />
Principes de transfert de données fiable<br />
TCP : un protocole en mode orienté connexion<br />
TCP : mécanismes de fiabilisation<br />
Echange initial en 3 segments (Three-Way Handshake)<br />
1 client ➠ serveur : segment TCP avec le bit SYN<br />
indique le numéro de séquence initial (ISN) choisi par le client<br />
l’emission du SYN incrémentera le futur numéro de séquence<br />
pas de données<br />
2 serveur ➠ client : segment TCP avec les bits SYN + ACK<br />
la réception du SYN à incrémenté le numéro de d’aquittement<br />
indique le numéro de séquence initial (ISN) choisi par le serveur<br />
l’emission du SYN incrémentera le futur numéro de séquence<br />
allocation <strong>des</strong> tampons du serveur<br />
3 client ➠ serveur : segment TCP avec le bit ACK<br />
la réception du SYN à incrémenté le numéro de d’aquittement<br />
peut contenir <strong>des</strong> données<br />
Echange initial en 3 segments<br />
Hôte A<br />
S=3000<br />
S=3001 A=7001<br />
SYN<br />
ACK<br />
SYN + ACK<br />
200<br />
ACK<br />
300<br />
ACK 100<br />
Hôte B<br />
S=7000 A=3001<br />
S=7001 A=3201<br />
S=7301 A=3201<br />
Olivier Fourmaux (olivier.fourmaux@upmc.fr)<br />
U.E. <strong>Architecture</strong> <strong>des</strong> Réseaux (<strong>ARES</strong>) 3/5 : <strong>Couche</strong> <strong>transport</strong><br />
Olivier Fourmaux (olivier.fourmaux@upmc.fr)<br />
U.E. <strong>Architecture</strong> <strong>des</strong> Réseaux (<strong>ARES</strong>) 3/5 : <strong>Couche</strong> <strong>transport</strong><br />
Service de base<br />
Service fiable<br />
Contrôle de congestion<br />
TCP : Three-Way Handshake (3)<br />
Principes de transfert de données fiable<br />
TCP : un protocole en mode orienté connexion<br />
TCP : mécanismes de fiabilisation<br />
Service de base<br />
Service fiable<br />
Contrôle de congestion<br />
TCP : Gracefull Release (1)<br />
Principes de transfert de données fiable<br />
TCP : un protocole en mode orienté connexion<br />
TCP : mécanismes de fiabilisation<br />
Gestion <strong>des</strong> ouvertures simultanées<br />
Time<br />
Host 1 Host 2<br />
SYN (SEQ = x)<br />
SYN (SEQ = y, ACK = x + 1)<br />
(SEQ = x + 1, ACK = y + 1)<br />
Host 1 Host 2<br />
SYN (SEQ = x)<br />
SYN (SEQ = y)<br />
SYN (SEQ = y, ACK = x + 1)<br />
SYN (SEQ = x , ACK = y + 1)<br />
1 le client émet un segment TCP avec FIN<br />
l’émission du FIN incrémentera le futur numéro de séquence<br />
peut contenir <strong>des</strong> données<br />
2 le serveur recoit le segment avec FIN<br />
la réception du FIN incrémente le numéro d’aquittement<br />
émet un segment TCP avec ACK<br />
termine la connexion (envoie les données restantes)<br />
émet un segment TCP avec FIN<br />
l’émission du FIN incrémentera le futur numéro de séquence<br />
3 le client recoit le segment avec FIN<br />
la réception du FIN incrémente le numéro d’aquittement<br />
emet un segment TCP avec ACK<br />
termine la connexion<br />
déclanche une temporisation d’attente (FIN dupliquées)<br />
(a) (b) pictures from Tanenbaum A. S. Computer Networks 3rd edition<br />
4 le serveur recoit le segment avec FIN<br />
Olivier Fourmaux (olivier.fourmaux@upmc.fr)<br />
U.E. <strong>Architecture</strong> <strong>des</strong> Réseaux (<strong>ARES</strong>) 3/5 : <strong>Couche</strong> <strong>transport</strong><br />
Olivier Fourmaux (olivier.fourmaux@upmc.fr)<br />
U.E. <strong>Architecture</strong> <strong>des</strong> Réseaux (<strong>ARES</strong>) 3/5 : <strong>Couche</strong> <strong>transport</strong>
Service de base<br />
Service fiable<br />
Contrôle de congestion<br />
TCP : Gracefull Release (2)<br />
Principes de transfert de données fiable<br />
TCP : un protocole en mode orienté connexion<br />
TCP : mécanismes de fiabilisation<br />
TCP : Shutdown<br />
Service de base<br />
Service fiable<br />
Contrôle de congestion<br />
Principes de transfert de données fiable<br />
TCP : un protocole en mode orienté connexion<br />
TCP : mécanismes de fiabilisation<br />
Déconnexion : terminaison courtoise<br />
Hôte A<br />
S=4000 A=11200<br />
S=4200 A=11200<br />
fermeture<br />
S=4301 A=11700<br />
S=4301 A=12200<br />
S=4301 A=12701<br />
fermé<br />
ACK<br />
ACK 200<br />
ACK +FIN 100<br />
ACK<br />
temporisation<br />
fermeture<br />
ACK<br />
ACK<br />
ACK + FIN 500<br />
ACK<br />
500<br />
500<br />
Hôte B<br />
S=11200 A=4301<br />
S=11700 A=4301<br />
S=12200 A=4301<br />
fermeture<br />
fermé<br />
Déconnexion : terminaison unilatérale<br />
(pour tout comportement anormal ou indésiré)<br />
Hôte A<br />
cas 1)<br />
S=4000<br />
SYN<br />
ACK + RST<br />
S=2200 A=7300<br />
cas 2)<br />
ACK 200<br />
RST<br />
Hôte B<br />
S=0 A=4000<br />
S=7300<br />
Olivier Fourmaux (olivier.fourmaux@upmc.fr)<br />
U.E. <strong>Architecture</strong> <strong>des</strong> Réseaux (<strong>ARES</strong>) 3/5 : <strong>Couche</strong> <strong>transport</strong><br />
Olivier Fourmaux (olivier.fourmaux@upmc.fr)<br />
U.E. <strong>Architecture</strong> <strong>des</strong> Réseaux (<strong>ARES</strong>) 3/5 : <strong>Couche</strong> <strong>transport</strong><br />
Service de base<br />
Service fiable<br />
Contrôle de congestion<br />
TCP : Automate d’états finis<br />
Principes de transfert de données fiable<br />
TCP : un protocole en mode orienté connexion<br />
TCP : mécanismes de fiabilisation<br />
Service de base<br />
Service fiable<br />
Contrôle de congestion<br />
<strong>ARES</strong> : Plan du cours 3/5<br />
Principes de transfert de données fiable<br />
TCP : un protocole en mode orienté connexion<br />
TCP : mécanismes de fiabilisation<br />
CLOSE/FIN<br />
ACK/–<br />
SYN<br />
RCVD<br />
FIN<br />
WAIT 1<br />
FIN<br />
WAIT 2<br />
SYN/SYN + ACK<br />
RST/–<br />
ACK/–<br />
(Active close)<br />
FIN/ACK<br />
LISTEN/–<br />
FIN + ACK/ACK<br />
FIN/ACK<br />
(Start)<br />
CLOSED<br />
LISTEN<br />
ESTABLISHED<br />
CLOSING<br />
TIME<br />
WAIT<br />
ACK/–<br />
CONNECT/SYN<br />
SEND/SYN<br />
SYN/SYN + ACK (simultaneous open)<br />
CLOSE/FIN<br />
(Data transfer state)<br />
CLOSED<br />
CLOSE/–<br />
(Timeout/)<br />
(Go back to start)<br />
CLOSE/–<br />
ACK/–<br />
SYN<br />
SENT<br />
SYN + ACK/ACK<br />
(Step 3 of the three-way handshake)<br />
<br />
FIN/ACK<br />
(Passive Close)<br />
CLOSE<br />
WAIT<br />
LAST<br />
ACK<br />
CLOSE/FIN<br />
1 Service de base<br />
Rappels sur la couche <strong>transport</strong><br />
Multiplexage et démultiplexage<br />
UDP : un protocole en mode non connecté<br />
2 Service fiable<br />
Principes de transfert de données fiable<br />
TCP : un protocole en mode orienté connexion<br />
TCP : mécanismes de fiabilisation<br />
3 Contrôle de congestion<br />
Principes généraux<br />
Mécanismes de TCP<br />
Olivier Fourmaux (olivier.fourmaux@upmc.fr)<br />
U.E. <strong>Architecture</strong> <strong>des</strong> Réseaux (<strong>ARES</strong>) 3/5 : <strong>Couche</strong> <strong>transport</strong><br />
Olivier Fourmaux (olivier.fourmaux@upmc.fr)<br />
U.E. <strong>Architecture</strong> <strong>des</strong> Réseaux (<strong>ARES</strong>) 3/5 : <strong>Couche</strong> <strong>transport</strong>
Service de base<br />
Service fiable<br />
Contrôle de congestion<br />
Principes de transfert de données fiable<br />
TCP : un protocole en mode orienté connexion<br />
TCP : mécanismes de fiabilisation<br />
Service de base<br />
Service fiable<br />
Contrôle de congestion<br />
Principes de transfert de données fiable<br />
TCP : un protocole en mode orienté connexion<br />
TCP : mécanismes de fiabilisation<br />
Transmission fiable de TCP<br />
TCP : Calcul du RTT<br />
TCP est un protocole fiable de transfert sur le service IP non fiable<br />
mécanismes de base :<br />
pipeline<br />
ACK cumulatifs<br />
temporisateur de retransmission unique<br />
retransmissions déclanchées par :<br />
expiration de temporisation (timeout)<br />
duplication d’ACK<br />
dans la suite...<br />
émetteur TCP simplifié :<br />
pas d’ACK dupliqué<br />
pas de contrôle de flux<br />
pas de contrôle de congestion<br />
Round Trip Time<br />
Estimation de la temporisation de retransmission :<br />
supérieure au RTT... mais le RTT varie !<br />
trop petit : retransmissions inutiles<br />
trop grand : réaction lente aux pertes<br />
Estimation du RTT :<br />
RTT mesure = ∆ (envoi segment, reception ACK correspondant)<br />
RTT mesure peut varier rapidement ➠ lissage<br />
RTT = αRTT mesure + (1 − α)RTT ancien<br />
avec α usuel = 1/8<br />
moyenne glissante à décroissance exponentielle<br />
Olivier Fourmaux (olivier.fourmaux@upmc.fr)<br />
U.E. <strong>Architecture</strong> <strong>des</strong> Réseaux (<strong>ARES</strong>) 3/5 : <strong>Couche</strong> <strong>transport</strong><br />
Olivier Fourmaux (olivier.fourmaux@upmc.fr)<br />
U.E. <strong>Architecture</strong> <strong>des</strong> Réseaux (<strong>ARES</strong>) 3/5 : <strong>Couche</strong> <strong>transport</strong><br />
Service de base<br />
Service fiable<br />
Contrôle de congestion<br />
TCP : Exemple de calcul de RTT<br />
Principes de transfert de données fiable<br />
TCP : un protocole en mode orienté connexion<br />
TCP : mécanismes de fiabilisation<br />
Service de base<br />
Service fiable<br />
Contrôle de congestion<br />
TCP : Temporisations<br />
Principes de transfert de données fiable<br />
TCP : un protocole en mode orienté connexion<br />
TCP : mécanismes de fiabilisation<br />
ms<br />
500<br />
450<br />
400<br />
350<br />
300<br />
250<br />
200<br />
150<br />
100<br />
0 20 40 60 80 100 120<br />
temps (ACK)<br />
"RTT_calcul"<br />
"RTT_mesure"<br />
Gestion de multiples temporisations (timers) :<br />
retransmission timer (détecte les pertes)<br />
RTO = RTT + δD<br />
avec δ = 4 et une valeur initiale du RTT élevée (3 secon<strong>des</strong>)<br />
D = β(|RTT mesure − RTT ancien |) + (1 − β)D ancien<br />
calcul de l’écart moyen avec β usuel = 1/4<br />
algorithme de Karn<br />
ne pas tenir compte <strong>des</strong> paquets retransmis et doubler le RTO<br />
à chaque échec (exponential backoff)<br />
persistence timer (évite les blocages)<br />
envoi d’un acquittement avec une fenêtre à 0<br />
keep alive timer (vérifie s’il y a toujours un <strong>des</strong>tinataire)<br />
closing timer (terminaison)<br />
Olivier Fourmaux (olivier.fourmaux@upmc.fr)<br />
U.E. <strong>Architecture</strong> <strong>des</strong> Réseaux (<strong>ARES</strong>) 3/5 : <strong>Couche</strong> <strong>transport</strong><br />
Olivier Fourmaux (olivier.fourmaux@upmc.fr)<br />
U.E. <strong>Architecture</strong> <strong>des</strong> Réseaux (<strong>ARES</strong>) 3/5 : <strong>Couche</strong> <strong>transport</strong>
Service de base<br />
Service fiable<br />
Contrôle de congestion<br />
Principes de transfert de données fiable<br />
TCP : un protocole en mode orienté connexion<br />
TCP : mécanismes de fiabilisation<br />
Service de base<br />
Service fiable<br />
Contrôle de congestion<br />
Principes de transfert de données fiable<br />
TCP : un protocole en mode orienté connexion<br />
TCP : mécanismes de fiabilisation<br />
Évènements émetteur TCP<br />
Retransmission TCP (1)<br />
réception <strong>des</strong> données de la couche supérieure<br />
création d’un segment avec numSeq<br />
numSeq est le numéro dans le flux d’octet du premier octet de<br />
donnée du segment<br />
démarrer la temporisation si elle n’est pas déjà en cours<br />
la temporisation correspond au segment non acquitté le plus<br />
ancien<br />
expiration de temporisation (timeout)<br />
retransmission du segment associé à la temporisation<br />
redémarrer la temporisation<br />
réception d’aquittement (ACK)<br />
si acquitte <strong>des</strong> segments non acquités :<br />
actualiser la base de la fenêtre de transmission (base emis)<br />
redémarrer la temporisation si d’autres ACK sont attendus<br />
Scénario avec ACK perdu<br />
Hôte A<br />
S=4000 A=1100<br />
RTO<br />
retrans. S=4000 A=1100<br />
S=4200 A=1100<br />
ACK 200<br />
ACK<br />
ACK 200<br />
ACK<br />
ACK 50<br />
Hôte B<br />
S=1100 A=4200<br />
S=1100 A=4200<br />
Olivier Fourmaux (olivier.fourmaux@upmc.fr)<br />
U.E. <strong>Architecture</strong> <strong>des</strong> Réseaux (<strong>ARES</strong>) 3/5 : <strong>Couche</strong> <strong>transport</strong><br />
Olivier Fourmaux (olivier.fourmaux@upmc.fr)<br />
U.E. <strong>Architecture</strong> <strong>des</strong> Réseaux (<strong>ARES</strong>) 3/5 : <strong>Couche</strong> <strong>transport</strong><br />
Service de base<br />
Service fiable<br />
Contrôle de congestion<br />
Principes de transfert de données fiable<br />
TCP : un protocole en mode orienté connexion<br />
TCP : mécanismes de fiabilisation<br />
Service de base<br />
Service fiable<br />
Contrôle de congestion<br />
Principes de transfert de données fiable<br />
TCP : un protocole en mode orienté connexion<br />
TCP : mécanismes de fiabilisation<br />
Retransmission TCP (2)<br />
Retransmission TCP (3)<br />
Scénario avec temporisation sous-estimée<br />
Hôte A<br />
Hôte B<br />
Scénario avec ACK cumulatifs<br />
Hôte A<br />
Hôte B<br />
S=4000 A=1100<br />
S=4200 A=1100<br />
RTO<br />
retrans. S=4000 A=1100<br />
ACK 200<br />
ACK 200<br />
ACK 200<br />
ACK<br />
ACK<br />
ACK<br />
S=1100 A=4200<br />
S=1100 A=4400<br />
S=1100 A=4400<br />
S=4000 A=1100<br />
S=4200 A=1100<br />
RTO<br />
ACK 200<br />
ACK 200<br />
ACK<br />
ACK<br />
S=1100 A=4200<br />
S=1100 A=4400<br />
S=4400 A=1100<br />
ACK 200<br />
S=4400 A=1100<br />
ACK 200<br />
Olivier Fourmaux (olivier.fourmaux@upmc.fr)<br />
U.E. <strong>Architecture</strong> <strong>des</strong> Réseaux (<strong>ARES</strong>) 3/5 : <strong>Couche</strong> <strong>transport</strong><br />
Olivier Fourmaux (olivier.fourmaux@upmc.fr)<br />
U.E. <strong>Architecture</strong> <strong>des</strong> Réseaux (<strong>ARES</strong>) 3/5 : <strong>Couche</strong> <strong>transport</strong>
Service de base<br />
Service fiable<br />
Contrôle de congestion<br />
Évènement récepteur TCP<br />
Principes de transfert de données fiable<br />
TCP : un protocole en mode orienté connexion<br />
TCP : mécanismes de fiabilisation<br />
Service de base<br />
Service fiable<br />
Contrôle de congestion<br />
TCP : Fast Retransmit (1)<br />
Principes de transfert de données fiable<br />
TCP : un protocole en mode orienté connexion<br />
TCP : mécanismes de fiabilisation<br />
Génération d’ACKs (actions du récepteur)<br />
arrivée d’un segment dans l’ordre avec le numSeq attendu :<br />
les segments précédents sont déjà acquittés<br />
ACK retardé (delayed ACK), attente jusqu’à 500 ms<br />
si pas d’autre segments, envoi d’un ACK<br />
un autre segment est en attente d’acquittement<br />
envoi immédiat d’un ACK cumulatif pour ces deux segments<br />
dans l’ordre<br />
arrivée d’un segment dans le désordre :<br />
numSeq supérieur à celui attendu (intervalle détecté)<br />
envoi immédiat d’un ACK dupliqué<br />
rappel du prochain numSeq attendu<br />
rempli partiellement ou totalement un intervalle<br />
envoi immédiat d’un ACK<br />
nouveau numSeq attendu suite au remplissage de l’intervalle<br />
Optimisation du mécanisme de retransmission<br />
temporisation souvent relativement élevée<br />
délai important avant une retransmission<br />
détection <strong>des</strong> segments perdus grâce aux ACKs dupliqués<br />
ensemble de segments souvents envoyés cote-à-cote<br />
si un segment est perdu ➠ nombreux ACKs dupliqués<br />
si l’émetteur reçoit 3 ACK dupliqués (4 ACKs identiques)<br />
TCP suppose que le segment suivant celui acquité est perdu<br />
fast retransmit : retransmission du segment avant l’expiration<br />
de la temporisation<br />
Olivier Fourmaux (olivier.fourmaux@upmc.fr)<br />
U.E. <strong>Architecture</strong> <strong>des</strong> Réseaux (<strong>ARES</strong>) 3/5 : <strong>Couche</strong> <strong>transport</strong><br />
Olivier Fourmaux (olivier.fourmaux@upmc.fr)<br />
U.E. <strong>Architecture</strong> <strong>des</strong> Réseaux (<strong>ARES</strong>) 3/5 : <strong>Couche</strong> <strong>transport</strong><br />
Service de base<br />
Service fiable<br />
Contrôle de congestion<br />
TCP : Fast Retransmit (2)<br />
Principes de transfert de données fiable<br />
TCP : un protocole en mode orienté connexion<br />
TCP : mécanismes de fiabilisation<br />
Service de base<br />
Service fiable<br />
Contrôle de congestion<br />
TCP : Asservissement au récepteur<br />
Principes de transfert de données fiable<br />
TCP : un protocole en mode orienté connexion<br />
TCP : mécanismes de fiabilisation<br />
Hôte A<br />
Hôte B<br />
S=4000 A=1100<br />
RTO ACK 200<br />
S=4200 A=1100<br />
ACK 200<br />
S=1100 A=4200<br />
ACK<br />
S=4400 A=1100<br />
ACK 200<br />
S=4600 A=1100<br />
S=1100 A=4200 (dup. 1)<br />
ACK 200 ACK<br />
S=4800 A=1100<br />
S=1100 A=4200 (dup. 2)<br />
ACK 200 ACK<br />
S=5000 A=1100<br />
S=1100 A=4200 (dup. 3)<br />
ACK 200 ACK<br />
retrans. S=4200 A=1100 S=1100 A=4200 (dup. 4)<br />
ACK 200 ACK<br />
S=5200 A=1100 S=1100 A=5200<br />
ACK 200 ACK<br />
contrôle de flux<br />
l’émetteur ne doit pas dépasser les capacités du récepteur<br />
récupération de la taille de la place disponible du tampon de<br />
réception du récepteur :<br />
TailleFen<br />
Lecture <strong>des</strong> données<br />
par l’application<br />
Données <strong>des</strong><br />
segments<br />
place<br />
disponible<br />
Tampon de réception<br />
Données<br />
TCP<br />
dans le<br />
tampon<br />
TailleFen = TailleTampon - DernierOctetRecu +<br />
DernierOctetLu<br />
Olivier Fourmaux (olivier.fourmaux@upmc.fr)<br />
U.E. <strong>Architecture</strong> <strong>des</strong> Réseaux (<strong>ARES</strong>) 3/5 : <strong>Couche</strong> <strong>transport</strong><br />
Olivier Fourmaux (olivier.fourmaux@upmc.fr)<br />
U.E. <strong>Architecture</strong> <strong>des</strong> Réseaux (<strong>ARES</strong>) 3/5 : <strong>Couche</strong> <strong>transport</strong>
Service de base<br />
Service fiable<br />
Contrôle de congestion<br />
TCP : Limitation de l’émetteur<br />
Principes de transfert de données fiable<br />
TCP : un protocole en mode orienté connexion<br />
TCP : mécanismes de fiabilisation<br />
Service de base<br />
Service fiable<br />
Contrôle de congestion<br />
TCP : Contrôle de flux<br />
Principes de transfert de données fiable<br />
TCP : un protocole en mode orienté connexion<br />
TCP : mécanismes de fiabilisation<br />
Sliding window : l’emetteur limite la transmission de ses données<br />
non acquittées<br />
Envoi de donnée par l’application<br />
Application<br />
does a 2K<br />
write<br />
Sender<br />
2K SEQ = 0<br />
Receiver Receiver's<br />
buffer<br />
0 4K<br />
Empty<br />
TailleFen<br />
ACK = 2048 WIN = 2048<br />
2K<br />
Données Données Données<br />
émises et émises et non émises<br />
acquittées non acquittées en attente<br />
base_émis<br />
proch_seqNum<br />
Données<br />
non<br />
utilisable<br />
Application<br />
does a 3K<br />
write<br />
Sender is<br />
blocked<br />
Sender may<br />
send up to 2K<br />
2K SEQ = 2048<br />
ACK = 4096 WIN = 0<br />
ACK = 4096 WIN = 2048<br />
Full<br />
Application<br />
reads 2K<br />
2K<br />
ACK du récepteur<br />
Données émises vers le récepteur<br />
1K SEQ = 4096<br />
1K 2 K<br />
pictures from Tanenbaum A. S. Computer Networks 3rd edition<br />
Olivier Fourmaux (olivier.fourmaux@upmc.fr)<br />
U.E. <strong>Architecture</strong> <strong>des</strong> Réseaux (<strong>ARES</strong>) 3/5 : <strong>Couche</strong> <strong>transport</strong><br />
Olivier Fourmaux (olivier.fourmaux@upmc.fr)<br />
U.E. <strong>Architecture</strong> <strong>des</strong> Réseaux (<strong>ARES</strong>) 3/5 : <strong>Couche</strong> <strong>transport</strong><br />
Service de base<br />
Service fiable<br />
Contrôle de congestion<br />
Principes de transfert de données fiable<br />
TCP : un protocole en mode orienté connexion<br />
TCP : mécanismes de fiabilisation<br />
TCP : temporisation de ré-ouverture de la fenêtre<br />
Service de base<br />
Service fiable<br />
Contrôle de congestion<br />
TCP : Optimisation du contrôle de flux<br />
Principes de transfert de données fiable<br />
TCP : un protocole en mode orienté connexion<br />
TCP : mécanismes de fiabilisation<br />
Persistence timer<br />
évite que la taille de la fenêtre reste à 0<br />
possible si perte du ACK annonçant une fenêtre non nulle<br />
évité grâce à l’envoi d’un paquet sonde après une<br />
temporisation<br />
tempo. initiée à RTT puis double à chaque expiration jusqu’à<br />
60s (puis reste à 60s)<br />
le paquet sonde est un segment avec 1 octet de données<br />
Send-side silly window syndrome<br />
Algorithme de Nagle (RFC 896)<br />
agrégation de petits paquets (nagling)<br />
attente d’un acquittement ou d’un MSS avant d’envoyer un<br />
segment<br />
TELNET : évite d’envoyer un paquet par caractère tapé<br />
désactivable avec l’option TCP NODELAY <strong>des</strong> sockets<br />
Receiver silly window syndrome<br />
Algorithme de Clark<br />
limiter les annonces de fenêtre trop petites<br />
fermeture de la fenêtre en attendant d’avoir suffisamment de<br />
place pour un segment complet<br />
Olivier Fourmaux (olivier.fourmaux@upmc.fr)<br />
U.E. <strong>Architecture</strong> <strong>des</strong> Réseaux (<strong>ARES</strong>) 3/5 : <strong>Couche</strong> <strong>transport</strong><br />
Olivier Fourmaux (olivier.fourmaux@upmc.fr)<br />
U.E. <strong>Architecture</strong> <strong>des</strong> Réseaux (<strong>ARES</strong>) 3/5 : <strong>Couche</strong> <strong>transport</strong>
Service de base<br />
Service fiable<br />
Contrôle de congestion<br />
TCP : exemples d’applications<br />
Principes de transfert de données fiable<br />
TCP : un protocole en mode orienté connexion<br />
TCP : mécanismes de fiabilisation<br />
Service de base<br />
Service fiable<br />
Contrôle de congestion<br />
TCP : utilisation spécifiques<br />
Principes de transfert de données fiable<br />
TCP : un protocole en mode orienté connexion<br />
TCP : mécanismes de fiabilisation<br />
TCP doit s’adapter à <strong>des</strong> flots de qqs bps à plusieurs Gbps :<br />
Les applications suivantes reposent typiquement sur TCP :<br />
connexion à distance (TELNET, rlogin et ssh)<br />
transfert de fichiers (FTP, rcp, scp et sftp)<br />
protocole de routage externe (BGP)<br />
messageries instantanées (IRC, ICQ, AIM...)<br />
web (HTTP)<br />
nouvelles applications utilisent HTTP comme service d’accès<br />
au réseau<br />
permet de passer les firewalls<br />
LFN (Long Fat Network)<br />
capacité du réseau = bande passante * délai de<br />
propagation<br />
limitation de taille de la fenêtre (option WSIZE, jusqu’à un<br />
facteur 2 14 )<br />
rebouclage <strong>des</strong> numéros de séquence (PAWS, Protect Against<br />
Wrapped Sequence, utilise l’option TIMESTAMP)<br />
acquittements sélectifs pour éviter <strong>des</strong> retransmissions<br />
importantes inutiles (option SACK)<br />
satellites<br />
fibres transatlantiques<br />
réseaux asymétriques (ADSL, Cable)<br />
sous-utilisation du lien rapide<br />
Olivier Fourmaux (olivier.fourmaux@upmc.fr)<br />
U.E. <strong>Architecture</strong> <strong>des</strong> Réseaux (<strong>ARES</strong>) 3/5 : <strong>Couche</strong> <strong>transport</strong><br />
Olivier Fourmaux (olivier.fourmaux@upmc.fr)<br />
U.E. <strong>Architecture</strong> <strong>des</strong> Réseaux (<strong>ARES</strong>) 3/5 : <strong>Couche</strong> <strong>transport</strong><br />
Service de base<br />
Service fiable<br />
Contrôle de congestion<br />
Principes de transfert de données fiable<br />
TCP : un protocole en mode orienté connexion<br />
TCP : mécanismes de fiabilisation<br />
Service de base<br />
Service fiable<br />
Contrôle de congestion<br />
Principes généraux<br />
Mécanismes de TCP<br />
TCP : Interface socket<br />
<strong>ARES</strong> : Plan du cours 3/5<br />
#include <br />
#include <br />
# create a <strong>des</strong>criptor and bind local IP and port<br />
int socket(int domain, int type, int protocol);<br />
# domain : PF_INET for IPv4 Internet Protocols<br />
# type : SOCK_STREAM Provi<strong>des</strong> sequenced, reliable, 2-way, connection-based byte streams.<br />
# An out-of-band data transmission mechanism may be supported.<br />
# protocol : TCP (/etc/protocols)<br />
int bind(int s, struct sockaddr *my_addr, socklen_t addrlen);<br />
# Server : passive queuing mode and connection acceptance<br />
int listen(int s, int backlog);<br />
int accept(int s, struct sockaddr *addr, socklen_t *addrlen);<br />
# Client : active connection<br />
int connect(int sockfd, const struct sockaddr *serv_addr, socklen_t addrlen);<br />
# Send and receive data<br />
int send(int s, const void *msg, size_t len, int flags);<br />
int recv(int s, void *buf, size_t len, int flags);<br />
# End : dealocate<br />
int close(int s);<br />
1 Service de base<br />
Rappels sur la couche <strong>transport</strong><br />
Multiplexage et démultiplexage<br />
UDP : un protocole en mode non connecté<br />
2 Service fiable<br />
Principes de transfert de données fiable<br />
TCP : un protocole en mode orienté connexion<br />
TCP : mécanismes de fiabilisation<br />
3 Contrôle de congestion<br />
Principes généraux<br />
Mécanismes de TCP<br />
Olivier Fourmaux (olivier.fourmaux@upmc.fr)<br />
U.E. <strong>Architecture</strong> <strong>des</strong> Réseaux (<strong>ARES</strong>) 3/5 : <strong>Couche</strong> <strong>transport</strong><br />
Olivier Fourmaux (olivier.fourmaux@upmc.fr)<br />
U.E. <strong>Architecture</strong> <strong>des</strong> Réseaux (<strong>ARES</strong>) 3/5 : <strong>Couche</strong> <strong>transport</strong>
Service de base<br />
Service fiable<br />
Contrôle de congestion<br />
Principes généraux<br />
Mécanismes de TCP<br />
Service de base<br />
Service fiable<br />
Contrôle de congestion<br />
Principes généraux<br />
Mécanismes de TCP<br />
Contrôle de congestion<br />
Congestion : scénario 1a<br />
A<br />
C<br />
Congestion<br />
Application<br />
Transport<br />
d_in (data)<br />
d_out<br />
Application<br />
Transport<br />
trop de flots de données saturent un ou plusieurs éléments du<br />
réseau<br />
différent du contrôle de flux<br />
TCP n’a pas accès à l’intérieur du réseau<br />
manifestation :<br />
longs délais<br />
attente dans les tampons <strong>des</strong> routeurs<br />
pertes de paquets<br />
saturation <strong>des</strong> tampons <strong>des</strong> routeurs<br />
B<br />
Application<br />
Transport<br />
2 émetteurs, 2 récepteurs<br />
1 routeur<br />
tampons infinis<br />
file d’attente<br />
illimitée<br />
D<br />
Application<br />
Transport<br />
pas de retransmission<br />
➠ Que ce passe-t-il quand d in augmente ?<br />
Olivier Fourmaux (olivier.fourmaux@upmc.fr)<br />
U.E. <strong>Architecture</strong> <strong>des</strong> Réseaux (<strong>ARES</strong>) 3/5 : <strong>Couche</strong> <strong>transport</strong><br />
Olivier Fourmaux (olivier.fourmaux@upmc.fr)<br />
U.E. <strong>Architecture</strong> <strong>des</strong> Réseaux (<strong>ARES</strong>) 3/5 : <strong>Couche</strong> <strong>transport</strong><br />
Service de base<br />
Service fiable<br />
Contrôle de congestion<br />
Principes généraux<br />
Mécanismes de TCP<br />
Service de base<br />
Service fiable<br />
Contrôle de congestion<br />
Principes généraux<br />
Mécanismes de TCP<br />
Congestion : scénario 1b<br />
Congestion : scénario 2a<br />
A<br />
C<br />
d_out<br />
C/2<br />
delai<br />
Application<br />
Transport<br />
d_in (data)<br />
d’_in (data + retransmissions)<br />
d_out<br />
Application<br />
Transport<br />
d_in C/2<br />
d_in C/2<br />
B<br />
Application<br />
Transport<br />
file d’attente<br />
limitée<br />
D<br />
Application<br />
Transport<br />
coût de la congestion :<br />
débit maximum atteignable<br />
d in = C/2<br />
delai très élévé proche du maximum<br />
croissance infinie <strong>des</strong> tampons<br />
2 émetteurs, 2 récepteurs<br />
1 routeur<br />
tampons infinis<br />
retransmission <strong>des</strong> segments perdus<br />
➠ Que ce passe-t-il quand d’ in augmente ?<br />
Olivier Fourmaux (olivier.fourmaux@upmc.fr)<br />
U.E. <strong>Architecture</strong> <strong>des</strong> Réseaux (<strong>ARES</strong>) 3/5 : <strong>Couche</strong> <strong>transport</strong><br />
Olivier Fourmaux (olivier.fourmaux@upmc.fr)<br />
U.E. <strong>Architecture</strong> <strong>des</strong> Réseaux (<strong>ARES</strong>) 3/5 : <strong>Couche</strong> <strong>transport</strong>
Service de base<br />
Service fiable<br />
Contrôle de congestion<br />
Principes généraux<br />
Mécanismes de TCP<br />
Service de base<br />
Service fiable<br />
Contrôle de congestion<br />
Principes généraux<br />
Mécanismes de TCP<br />
Congestion : scénario 2b<br />
Congestion : scénario 3a<br />
C/2<br />
A<br />
d_in (data)<br />
d’_in (data + retransmissions)<br />
C<br />
d_out<br />
B<br />
D<br />
d’_in<br />
C/2<br />
d_out<br />
toujours d in = d out (goodput)<br />
coût <strong>des</strong> retransmissions<br />
retransmissions utiles : seulement pour <strong>des</strong> pertes<br />
d’ in supérieur à d out<br />
retransmissions inutiles : segments en retard<br />
d’ in encore plus supérieur à d out<br />
coût de la congestion :<br />
beaucoup plus de trafic pour un d out donné<br />
dupplications de segment inutile<br />
4 émetteurs, 4 récepteurs<br />
4 routeurs<br />
chemins multi-saut<br />
tampons finis<br />
retransmission<br />
➠ Que ce passe-t-il quand d’ in augmente ?<br />
Olivier Fourmaux (olivier.fourmaux@upmc.fr)<br />
U.E. <strong>Architecture</strong> <strong>des</strong> Réseaux (<strong>ARES</strong>) 3/5 : <strong>Couche</strong> <strong>transport</strong><br />
Olivier Fourmaux (olivier.fourmaux@upmc.fr)<br />
U.E. <strong>Architecture</strong> <strong>des</strong> Réseaux (<strong>ARES</strong>) 3/5 : <strong>Couche</strong> <strong>transport</strong><br />
Service de base<br />
Service fiable<br />
Contrôle de congestion<br />
Principes généraux<br />
Mécanismes de TCP<br />
Service de base<br />
Service fiable<br />
Contrôle de congestion<br />
Principes généraux<br />
Mécanismes de TCP<br />
Congestion : scénario 3b<br />
Contrôle de congestion<br />
Deux approches :<br />
d_out C/2<br />
d’_in<br />
coût supplémentaire de la congestion :<br />
lors de la perte d’un paquet, toute la capacité amont est<br />
gachée<br />
contrôle de congestion géré par le réseau<br />
les routeurs informent les extrémités<br />
bit d’indication de la congestion (SNA, DECbit, ATM,<br />
TCP/IP ECN...)<br />
indication explicte du débit disponible (ATM ABR,<br />
TCP/IP RSVP + IntServ...)<br />
contrôle de congestion aux extrémités (end-to-end)<br />
aucune indication explicite du réseau<br />
inférence à partir <strong>des</strong> observations faites aux extrémités<br />
pertes<br />
délais<br />
approche choisie dans TCP<br />
Olivier Fourmaux (olivier.fourmaux@upmc.fr)<br />
U.E. <strong>Architecture</strong> <strong>des</strong> Réseaux (<strong>ARES</strong>) 3/5 : <strong>Couche</strong> <strong>transport</strong><br />
Olivier Fourmaux (olivier.fourmaux@upmc.fr)<br />
U.E. <strong>Architecture</strong> <strong>des</strong> Réseaux (<strong>ARES</strong>) 3/5 : <strong>Couche</strong> <strong>transport</strong>
Service de base<br />
Service fiable<br />
Contrôle de congestion<br />
Principes généraux<br />
Mécanismes de TCP<br />
Service de base<br />
Service fiable<br />
Contrôle de congestion<br />
Principes généraux<br />
Mécanismes de TCP<br />
<strong>ARES</strong> : Plan du cours 3/5<br />
TCP : Contrôle AIMD<br />
1 Service de base<br />
Rappels sur la couche <strong>transport</strong><br />
Multiplexage et démultiplexage<br />
UDP : un protocole en mode non connecté<br />
2 Service fiable<br />
Principes de transfert de données fiable<br />
TCP : un protocole en mode orienté connexion<br />
TCP : mécanismes de fiabilisation<br />
Additive Increase, Multiplicative Decrease<br />
augmentation progressive du débit de transmission (fenCong)<br />
tant qu’il n’y a pas de perte<br />
Additive Increase<br />
augmenter fenCong de 1 MSS à chaque RTT tant qu’il n’y a<br />
pas de perte détectée<br />
Multiplicative Decrease<br />
diviser fenCong par 2 après une perte<br />
comportement en dent de scie :<br />
3 Contrôle de congestion<br />
Principes généraux<br />
Mécanismes de TCP<br />
fenCong<br />
30Ko<br />
20Ko<br />
10Ko<br />
temps<br />
Olivier Fourmaux (olivier.fourmaux@upmc.fr)<br />
U.E. <strong>Architecture</strong> <strong>des</strong> Réseaux (<strong>ARES</strong>) 3/5 : <strong>Couche</strong> <strong>transport</strong><br />
Olivier Fourmaux (olivier.fourmaux@upmc.fr)<br />
U.E. <strong>Architecture</strong> <strong>des</strong> Réseaux (<strong>ARES</strong>) 3/5 : <strong>Couche</strong> <strong>transport</strong><br />
Service de base<br />
Service fiable<br />
Contrôle de congestion<br />
TCP : Contrôle de congestion<br />
Principes généraux<br />
Mécanismes de TCP<br />
TCP : Slow Start<br />
Service de base<br />
Service fiable<br />
Contrôle de congestion<br />
Principes généraux<br />
Mécanismes de TCP<br />
basé sur la limitation de l’émission de l’émetteur<br />
dernierOctetEmis - dernier0ctetAcq ≤ fenCong<br />
approximation du débit :<br />
d TCP = fenCong<br />
RTT<br />
fenCong = fonction dynamique de la congestion perçue<br />
perception de la congestion par le récepteur :<br />
expiration de temporisation (RTO)<br />
triple ACK<br />
3 mécanismes :<br />
AIMD<br />
Slow Start<br />
prudence après l’expiration d’une temporisation<br />
RTT<br />
démarre lentement (slow start)<br />
mais croit très vite !!<br />
au démarrage de la connexion<br />
fenCong = 1 MSS<br />
d init = MSS<br />
RTT<br />
croissance exponentielle<br />
jusqu’à la première perte<br />
fenCong double / RTT<br />
implémenté par :<br />
fenCong ++ / ACK<br />
d potentiel ≫ MSS<br />
RTT<br />
Olivier Fourmaux (olivier.fourmaux@upmc.fr)<br />
U.E. <strong>Architecture</strong> <strong>des</strong> Réseaux (<strong>ARES</strong>) 3/5 : <strong>Couche</strong> <strong>transport</strong><br />
Olivier Fourmaux (olivier.fourmaux@upmc.fr)<br />
U.E. <strong>Architecture</strong> <strong>des</strong> Réseaux (<strong>ARES</strong>) 3/5 : <strong>Couche</strong> <strong>transport</strong>
Service de base<br />
Service fiable<br />
Contrôle de congestion<br />
Principes généraux<br />
Mécanismes de TCP<br />
Service de base<br />
Service fiable<br />
Contrôle de congestion<br />
Principes généraux<br />
Mécanismes de TCP<br />
TCP : Optimisation<br />
TCP : Inférence <strong>des</strong> pertes<br />
fenCong<br />
16<br />
14<br />
12<br />
10<br />
8<br />
6<br />
4<br />
2<br />
limite ss<br />
TCP Tahoe<br />
TCP Reno<br />
limite ss<br />
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18<br />
aller−retour<br />
19 20<br />
passage de la croissance exponentielle à lineaire<br />
fenCong ≥ ancienne valeur de fenCong juste avant la perte<br />
implémenté par une limite variable :<br />
limiteSS = fenCong avant la derniere perte<br />
/2<br />
limiteSS est précisément calculé avec les segments non acquittés<br />
(flightsize)/2<br />
Les ACK dupliqués sont moins graves que les expirations de<br />
temporisation<br />
suite 3 ACK dupliqués :<br />
indique que le réseau continue à transmettre <strong>des</strong> segments<br />
fenCong divisé par 2<br />
fenCong croit ensuite linéairement<br />
suite expiration temporisation :<br />
indique que le réseau se bloque<br />
fenCong = 1 MSS<br />
Slow Start (croissance exponentielle)<br />
à limiteSS = fenCong/2 (croissance linéaire)<br />
Olivier Fourmaux (olivier.fourmaux@upmc.fr)<br />
U.E. <strong>Architecture</strong> <strong>des</strong> Réseaux (<strong>ARES</strong>) 3/5 : <strong>Couche</strong> <strong>transport</strong><br />
Olivier Fourmaux (olivier.fourmaux@upmc.fr)<br />
U.E. <strong>Architecture</strong> <strong>des</strong> Réseaux (<strong>ARES</strong>) 3/5 : <strong>Couche</strong> <strong>transport</strong><br />
Service de base<br />
Service fiable<br />
Contrôle de congestion<br />
Principes généraux<br />
Mécanismes de TCP<br />
Contrôle de congestion TCP : synthèse<br />
Service de base<br />
Service fiable<br />
Contrôle de congestion<br />
TCP : équité entre flots ?<br />
Principes généraux<br />
Mécanismes de TCP<br />
RFC 5681<br />
quand fenCong < limiteSS :<br />
émetteur en phase Slow Start<br />
fenCong croit exponentiellement<br />
quand fenCong ≥ limiteSS :<br />
émetteur en phase Congestion Avoidance<br />
fenCong croit linéairement<br />
quand 3 ACK dupliqués apparaissent :<br />
limiteSS = dernière fenCong / 2<br />
fenCong = limiteSS<br />
quand la temporisation expire :<br />
limiteSS = dernière fenCong / 2<br />
fenCong = 1 MSS<br />
cwin (Ko)<br />
tcpduo1.cwnd<br />
100.0000<br />
tcpduo2.cwnd<br />
90.0000<br />
80.0000<br />
70.0000<br />
60.0000<br />
50.0000<br />
40.0000<br />
30.0000<br />
20.0000<br />
10.0000<br />
0.0000<br />
t(s)<br />
0.0000 10.0000 20.0000 30.0000 40.0000 50.0000 60.0000<br />
oscillation de deux flots en phase de congestion<br />
Olivier Fourmaux (olivier.fourmaux@upmc.fr)<br />
U.E. <strong>Architecture</strong> <strong>des</strong> Réseaux (<strong>ARES</strong>) 3/5 : <strong>Couche</strong> <strong>transport</strong><br />
Olivier Fourmaux (olivier.fourmaux@upmc.fr)<br />
U.E. <strong>Architecture</strong> <strong>des</strong> Réseaux (<strong>ARES</strong>) 3/5 : <strong>Couche</strong> <strong>transport</strong>
Service de base<br />
Service fiable<br />
Contrôle de congestion<br />
Principes généraux<br />
Mécanismes de TCP<br />
Service de base<br />
Service fiable<br />
Contrôle de congestion<br />
Principes généraux<br />
Mécanismes de TCP<br />
Implémentations<br />
TCP : Tahoe<br />
A trip to Nevada :<br />
TCP Tahoe 1988<br />
slow start + congestion avoidance + multiplicative decrease<br />
fast retransmit (déclenche la retransmission d’un segment<br />
après 3 acquit. dupliqués, avant l’expiration de la tempo.)<br />
décrit précédement... pb lorsque seulement 1 seg. est perdu<br />
TCP Reno 1990 (RFC 2582)<br />
idem TCP Tahoe<br />
fast recovery (pas de slow start après un fast retransmit)<br />
TCP newReno 1996 (RFC 3782)<br />
idem TCP Reno<br />
pas de slow start à la première congestion et ajustement de<br />
fenCong<br />
SACK (RFC 2018)<br />
TCP Vegas...<br />
évite la congestion en anticipant les pertes selon les variations<br />
du RTT<br />
seq (Ko) / cwin (Ko/10)<br />
800.0000<br />
700.0000<br />
600.0000<br />
500.0000<br />
400.0000<br />
300.0000<br />
200.0000<br />
100.0000<br />
0.0000<br />
0.0000 2.0000 4.0000 6.0000 8.0000<br />
tcptahoe.seq<br />
tcptahoe.cwnd<br />
t (s)<br />
slow start + congestion avoidance + multiplicative decrease<br />
+ fast retransmit<br />
Olivier Fourmaux (olivier.fourmaux@upmc.fr)<br />
U.E. <strong>Architecture</strong> <strong>des</strong> Réseaux (<strong>ARES</strong>) 3/5 : <strong>Couche</strong> <strong>transport</strong><br />
Olivier Fourmaux (olivier.fourmaux@upmc.fr)<br />
U.E. <strong>Architecture</strong> <strong>des</strong> Réseaux (<strong>ARES</strong>) 3/5 : <strong>Couche</strong> <strong>transport</strong><br />
Service de base<br />
Service fiable<br />
Contrôle de congestion<br />
Principes généraux<br />
Mécanismes de TCP<br />
Service de base<br />
Service fiable<br />
Contrôle de congestion<br />
Principes généraux<br />
Mécanismes de TCP<br />
TCP : Reno<br />
TCP : newReno<br />
seq (Ko) / cwin (Ko/10)<br />
700.0000<br />
tcpreno.seq<br />
tcpreno.cwnd<br />
seq (Ko) / cwin (Ko/10)<br />
600.0000<br />
550.0000<br />
tcpnewreno.seq<br />
tcpnewreno.cwnd<br />
600.0000<br />
500.0000<br />
450.0000<br />
500.0000<br />
400.0000<br />
350.0000<br />
400.0000<br />
300.0000<br />
300.0000<br />
250.0000<br />
200.0000<br />
200.0000<br />
150.0000<br />
100.0000<br />
100.0000<br />
50.0000<br />
0.0000<br />
t (s)<br />
0.0000 2.0000 4.0000 6.0000 8.0000<br />
fast recovery (pas de slow start après un fast retransmit)<br />
0.0000<br />
0.0000 2.0000 4.0000 6.0000 8.0000<br />
pas de slow start à la première congestion et ajustement de<br />
fenCong<br />
t (s)<br />
Olivier Fourmaux (olivier.fourmaux@upmc.fr)<br />
U.E. <strong>Architecture</strong> <strong>des</strong> Réseaux (<strong>ARES</strong>) 3/5 : <strong>Couche</strong> <strong>transport</strong><br />
Olivier Fourmaux (olivier.fourmaux@upmc.fr)<br />
U.E. <strong>Architecture</strong> <strong>des</strong> Réseaux (<strong>ARES</strong>) 3/5 : <strong>Couche</strong> <strong>transport</strong>