20.07.2014 Views

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

SHOW MORE
SHOW LESS

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>

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!