Académique Documents
Professionnel Documents
Culture Documents
80
Transfert fiable sur un canal non-fiable ?
• rdt = “reliable data transfer” (fiable)
• udt = “unreliable data transfer” (non-fiable)
• rdt_send() ∈ couche 5
• udt_send() ∈ couche 3 (IP Best effort)
• Comment construire rdt à partir de udt ?
Processus Processus
Couche Expéditeur Destinataire Processus Processus
Application Expéditeur Destinataire
Données Données
Côté Protocole de
transfert fiable
Protocole de
transfert fiable
Côté
expéditeur Expéditeur Destinataire destinataire
udt_send() Paquet Paquet udt_rcv()
Canal non-
fiable
udt_send : sollicité par udt_rcv : sollicité
rdt pour transférer les lorsqu’un paquet arrive
paquets au destinataire du canal côté
sur un canal non-fiable destinataire
Les événements
L’état suivant est causent les
déterminé Événement
transitions d’état
uniquement par Etat 1 Actions Etat 2
le prochain
événement
Événement Événement Les actions sont
Etat 3 prises lors des
Actions Actions transitions d’état
rdt1.0 : transfert fiable sur canal fiable
rdt_send(data) udt_rcv(packet)
Attendre Attendre
appel du packet=make_pkt(data) appel du extract(packet,data)
dessus udt_send(packet)
dessous rdt_rcv(data)
Expéditeur 84 Destinataire
rdt2.0 : canal avec erreurs binaires
• Hypothèse : canal introduit des erreurs binaires dans les paquets
• Comment se rétablir de ces erreurs ?
(a) Détection d’erreurs
• Somme de contrôle
(b) Accusé de réception
• ACK : acquittement - le destinataire informe l’expéditeur que le paquet a
été bien reçu
• NAK : acquittement négatif - le destinataire informe l’expéditeur que le
paquet comporte une erreur
• Boucle de retour
(c) Retransmission des paquets erronés
• À la réception d’un NAK
snkpkt=make_pkt(data,checksum)
udt_send(snkpkt)
Destinataire
udt_rcv(rcvpkt) udt_rcv(rcvpkt)
&& isNAK(rcvpkt)
Attendre Attendre && corrupt(rcvpkt)
appel du ACK ou
dessus NAK udt_send(snkpkt)
udt_send(NAK)
udt_rcv(rcvpkt)
&& isACK(rcvpkt)
Attendre
appel du
dessous
Expéditeur
udt_rcv(rcvpkt)
&& notcorrupt(rcvpkt)
extract(rcvpkt,data)
rdt_rcv(data)
udt_send(ACK)
86
rdt2.0 : fonctionnement sans erreur
rdt_send(data)
snkpkt=make_pkt(data,checksum)
udt_send(snkpkt)
Destinataire
udt_rcv(rcvpkt) udt_rcv(rcvpkt)
&& isNAK(rcvpkt)
Attendre Attendre && corrupt(rcvpkt)
appel du ACK ou
dessus NAK udt_send(snkpkt)
udt_send(NAK)
udt_rcv(rcvpkt)
&& isACK(rcvpkt)
Attendre
appel du
dessous
Expéditeur
udt_rcv(rcvpkt)
&& notcorrupt(rcvpkt)
extract(rcvpkt,data)
rdt_rcv(data)
udt_send(ACK)
87
rdt2.0 : fonctionnement avec erreur
rdt_send(data)
snkpkt=make_pkt(data,checksum)
udt_send(snkpkt)
Destinataire
udt_rcv(rcvpkt) udt_rcv(rcvpkt)
&& isNAK(rcvpkt)
Attendre Attendre && corrupt(rcvpkt)
appel du ACK ou
dessus NAK udt_send(snkpkt)
udt_send(NAK)
udt_rcv(rcvpkt)
&& isACK(rcvpkt)
Attendre
appel du
dessous
Expéditeur
udt_rcv(rcvpkt)
&& notcorrupt(rcvpkt)
extract(rcvpkt,data)
rdt_rcv(data)
udt_send(ACK)
88
rdt2.0 : quel est le problème ?
• Si un segment de données arrive erroné
90
rdt2.1 : numéro de séquence (2)
Expéditeur Destinataire Expéditeur Destinataire
Expéditeur rdt_send(data)
snkpkt=make_pkt(0,data,checksum)
udt_send(snkpkt)
udt_rcv(rcv_pkt)
&& (corrupt(rcvpkt)
||isNAK(rcvpkt))
Attendre Attendre udt_send(snkpkt)
appel du ACK ou
dessus, 0 NAK, 0
udt_rcv(rcvpkt) udt_rcv(rcvpkt)
&& notcorrupt(rcvpkt) && notcorrupt(rcvpkt)
&& isACK(rcvpkt) && isACK(rcvpkt)
Attendre Attendre
ACK ou appel du
NAK, 1 dessus, 1
udt_rcv(rcv_pkt)
&& (corrupt(rcvpkt) rdt_send(data)
||isNAK(rcvpkt)) snkpkt=make_pkt(1,data,checksum)
udt_send(snkpkt) udt_send(snkpkt)
rdt2.1 : destinataire gère les ACK/NAK erronés
udt_rcv(rcvpkt)
&& notcorrupt(rcvpkt)
&& has_seq0(rcvpkt)
udt_rcv(rcvpkt) udt_rcv(rcvpkt)
extract(rcvpkt,data) && corrupt(rcvpkt)
&& corrupt(rcvpkt)
rdt_rcv(data)
sndpkt=make_pkt(NAK,checksum) sndpkt=make_pkt(NAK,checksum)
sndpkt=makepkt(ACK,checksum)
udt_send(sndpkt) udt_send(sndpkt) udt_send(sndpkt)
Destinataire Attendre
appel du
Attendre
appel du
dessous, 0 dessous, 1
udt_rcv(rcvpkt)
udt_rcv(rcvpkt) && notcorrupt(rcvpkt) udt_rcv(rcvpkt)
&& notcorrupt(rcvpkt) && has_seq1(rcvpkt) && notcorrupt(rcvpkt)
u
&& has_seq1(rcvpkt)
extract(rcvpkt,data)
&& has_seq0(rcvpkt)
sndpkt=make_pkt(ACK,checksum) rdt_rcv (data) sndpkt=make_pkt(ACK,checksum)
udt_send(sndpkt) sndpkt=makepkt(ACK,checksum) udt_send(sndpkt)
udt_send(sndpkt)
duplicata ! (l’acquittement du
paquet précédent a été erronné) 93
rdt2.2 : un protocole sans NAK
94
rdt3.0 : canal avec erreurs et pertes
• Hypothèse : canal peut perdre des paquets (données et ACKs)
- somme de contrôle, #séquence, ACK, retransmission : pas suffisants !
• Que faut-il de plus ?
- Temporisateur (“timer” )
- L’expéditeur attend le retour de l’ACK
- Si le temporisateur expire avant (“timeout” ) il retransmet
Expéditeur
rdt_send(data)
rdt_rcv(rcvpkt) &&
sndpkt = make_pkt(0, data, checksum) ( corrupt(rcvpkt) ||
udt_send(sndpkt) isACK(rcvpkt,1) )
rdt_rcv(rcvpkt) start_timer
96
rdt3.0 en action (1)
99
Performances de rdt3.0
• rdt3.0 protocole fonctionnel mais performances ☹
- à cause de l’approche “send and wait”
• Exemple
- lien 1Gb/s→C, délai propagation 15ms, paquet 1Ko→L
- U : utilisation du lien (proportion de temps à émettre) → efficacité
- Dutile : débit utile
- témission = 8L/C = 8μs
- U= témission / (témission + 2 x dpropag) = 2.7 10-4
- Dutile = U × C = 270 000 bps = 270 Kbps
• A comparer avec les 1 Gbps !
2'9B#1>9C7)
•!4')2,$,".1):'"5%)':)&.&,/.$,0)&"'('1'/%3)
Taille supposée de la fenêtre d’anticipation ?
%,/,1(.A,)",&,#(
1 34
!!"#$%&'"()*#+," !"#!
101
Protocoles à anticipation (2)
Fenêtre W = 3
Fenêtre glissante (≠sautante)
m
es
sa
ge
1. message à envoyer
4
3
2
1
2. divisé en 4 segments
2 3. la fenêtre bloque le
4
3 1
4ème segment
3 4. les segments se
4
A1 A2
“transforment” en ACK
4 5. l’arrivée de ACK 1
déclenche le départ du
A2 A3 segment 4
• Mais ...
buffer buffer
pas de buffer
1 2 4 3 8 6 5 7 1 2 4 3 4 8 6 5 6 7 8
OU
App App
temps temps
Rejet sélectif Rejet simple
• Rejet Sélectif (“Selective Repeat” )
- La couche Transport maintient un buffer par connexion TCP
• les paquets peuvent entrer déséquencés
• et attendent jusqu’à être transmis dans l’ordre à la couche
Application
• Rejet Simple (“Go-Back N” )
- La couche Transport ne maintient pas de buffer
• Seuls les paquets bien séquencés sont acceptés
Plan
105
Problématique
• Ressources du réseau sont limitées
- Capacité d’émission des liaisons
- Capacité de traitement des nœuds
- Capacité de stockage (buffers) des nœuds
• Lorsque le trafic soumis (charge) est trop important
- Contention sur les ressources
- Des files se forment dans les routeurs
- Retards et pertes de paquets ↗
- Phénomène de congestion
• Contrôle de congestion en 3 étapes
1. Comment détecter une congestion ?
2. Comment réguler le débit d’une source TCP ?
3. À combien réguler son débit TCP ?
106
Étape 1 : détecter une congestion
• Comment détecter une congestion ?
• Hypothèse fondamentale
107
Étape 2 : comment réguler son débit ?
Réduction de
Détection Réduction
la taille de la
d’une du débit
fenêtre
congestion TCP
d’anticipation
108
Étape 3 : à quel niveau réguler son
débit ?
• À combien réguler le débit d’une source TCP ?
• Exemple 1 : un lien dédié de capacité C
source TCP
Trafic concurrent
- débit souhaitable pour la source ?
- capacité résiduelle (capacité disponible)
• Problème : quantité inconnue et dynamique. Comment la
découvrir ?
109
Hausse additive, baisse multiplicative
• Principe : détecter la capacité disponible sur le chemin
- augmenter progressivement le débit de TCP en agrandissant la taille
de sa fenêtre d’anticipation jusqu’à atteindre le débit max supporté
- comment savoir qu’on a atteint le max ? une perte se produit
• Hausse additive : augmenter la taille de la fenêtre d’anticipation d’1
segment après chaque RTT
Taille de la
fenêtre 16 ko Evolution en
d’anticipation dents de scie
8 ko
temps
Synthèse : vue d’ensemble de TCP
[RFCs: 793, 1122, 1323, 2018, 2581]
• Orienté connexion
- échange d’information (“handshaking” )
- expéditeur et destinataire fixent les paramètres du transfert
• Mode duplex
- les données peuvent circuler dans les deux sens
• Point-à-point
- entre un expéditeur & un destinataire
• Livraison fiable et séquencée des données
- buffers d’émission et de réception
- taille des segments fixée par
• MSS : “Maximum Segment Size” (hors en-tête)
• Pipeliné
- la fenêtre d’anticipation est dynamique
111
Exemple 3
serveur DNS
serveur web Noeuds
UCBL Terminaux serveur
routeur
mobile
point d’accès commutateur
Internet
Alice
Alice
Résolution DNS : Requête DNS : segment UDP - Quelle adresse IP pour www.youtube.com/watch?v=9Y29TXdrBM4 ?
113
SSL : Secure Sockets Layer
• Apporte des services de sécurité à TCP
• Services fournis
- Confidentialité
• messages seulement compris par la source et la
destination
- Intégrité
• messages ne sont pas modifiés durant la
communication
Kurose et al.
- Authentification
• la source et la destination sont bien ce qu’elles
prétendent être
114
SSL simplifié : handshake
clé publique KA+/ clé privée KA-
Bob certificat (clé publique, identité)
Alice
Connexion TCP
Échange d’une
clé secrète
= clé de session
Kurose et al.
115
SSL simplifié : génération de clés
• 4 clés
116
SSL simplifié : transfert des données
données
applicatives
découpées en
records
118
Couche Réseau
Plan
1. Introduction
2. IP : Internet Protocol
3. Tables d’acheminement
4. Algorithmes de routage
5. Le routage dans Internet
6. IPsec : sécurité au niveau de la couche Réseau
120
La couche Réseau
Application
Transport
Réseaux Réseaux
Réseaux
Liaison Liaison
Liaison
• Expéditeur Physique
…
- encapsule les segments à émettre Réseaux Réseaux
dans des datagrammes Liaison Liaison
• Physique Physique
Récepteur
Application
- transmet les segments reçus à la Réseaux
Transport
couche Transport Réseaux
Réseaux
Liaison Réseaux
Liaison Physique
• Liaison Liaison
Tous les terminaux et routeurs Physique
Physique Physique
121
Les services essentiels de
la couche Réseau
• Adressage
- Adresse = identifiant topologique d’un noeud
• Dépend de la position dans le réseau
• Utile pour router
• (En principe) unique
- Exemple : 140.77.13.89
• Acheminement (Forwarding )
- Commuter un paquet d’une interface à une autre
- Interroger une table d’acheminement (table de routage)
• Routage
- Déterminer le chemin de bout-en-bout à suivre pour un
paquet depuis la source jusqu’à la destination
- Algorithme de routage
Plan
1. Introduction
2. IP : Internet Protocol
3. Tables d’acheminement
4. Algorithmes de routage
5. Le routage dans Internet
6. IPsec : sécurité au niveau de la couche Réseau
123
Datagramme IPv4 (1)
• Format d’un datagramme
• En-tête de 20 octets
En-tête
- sans option, HLen = 5 mots (5×32bits = 20 octets) TTL Protocol Checksum
- comprend l’en-tête
Payload
- codé sur 16 bits
• Protocol
- Identifier le protocole encapsulé dans IP
• 06 : TCP
125
Datagramme IPv4 (3)
• Checksum : somme de contrôle
- détection des erreurs de transfert
- calculé sur l’en-tête IP seulement
- complément à 1 de la somme de l'entête
- en cas d’erreur, le paquet est supprimé
126
Adresses IPv4
• Adresse IP sur 32 bits
sous-réseau 140.1.1.0/24
- identifiant d’une interface réseau
• Interface réseau 140.1.1.1
- connexion entre un noeud et un lien 140.1.2.1
- un routeur a plusieurs interfaces 140.1.1.2
- un terminal a une ou plusieurs interfaces 140.1.1.4 140.1.2.9
- chaque interface a son adresse IP
• Adresse IP
140.1.1.3
140.1.3.7
- partie réseau : bits de poids fort 140.1.2.2
140.1.3.1 140.1.3.2
- partie hôte : bits de poids faible
- masque : taille de la partie réseau
- a.b.c.d/x où
• x = masque de sous-réseau 10001100 01001101 00000001 00000000
• x indique le nombre de bits dans la Partie réseau Partie hôte
partie réseau 127
Sous-réseaux
• Sous-réseaux (“Subnets” )
- Ensemble des interfaces dont les adresses ont la même partie réseau
- Les interfaces d’un même sous-réseau peuvent communiquer directement
(sans l’intervention d’un routeur)
- a démarré en 2003
1. Introduction
2. IP : Internet Protocol
3. Tables d’acheminement
4. Algorithmes de routage
5. Le routage dans Internet
6. IPsec : sécurité au niveau de la couche Réseau
131
Table de d’acheminement (1)
m0 180.70.65.135/25
R1
m1 m3
201.4.16.0/22 201.4.22.0/24
201.4.16.2/22 201.4.22.3/24
m2 180.70.65.194/26
180.70.65.192/26
Accessible
180.70.65.200/26
sans routeur
Internet
Noté aussi
Table de routage de R1
0.0.0.0
Adresse réseau Adresse du prochain Interface de
saut sortie
180.70.65.192/26 ——— m2
180.70.65.128/25 ——— m0
201.4.22.0/24 ——— m3
201.4.16.0/22 ——— m1
0.0.0.0/0 133
180.70.65.200 m2
Table d’acheminement (3)
• Que se passe-t-il si une adresse IP vérifie plusieurs adresses de
sous-réseau ?
• Exemple : 192.168.0.7
- on choisit la première qui apparaît dans la table de routage ?
- on tire au hasard ?
- on choisit l’entrée la plus récente dans la table d’acheminement ?
Table d’acheminement (4)
135
Table d’acheminement (5)
• Donc, seuls les préfixes suffisent dans les tables
0.0.0.0/0 - 192.168.0.1 0
1. Introduction
2. IP : Internet Protocol
3. Tables d’acheminement
4. Algorithmes de routage
5. Le routage dans Internet
6. IPsec : sécurité au niveau de la couche Réseau
137
Pourquoi router ? (1)
A B
1 câble
138
Pourquoi router ? (2)
Interface 1 → B
Interface 2 → C
Interface 3 → D
Q R S etc.
P A
O
B
N
C
Ne passe pas à l’échelle :
M • # Interfaces D
• # Câbles
L E
K F
J
I 139
H G
Pourquoi router ? (3)
D
B
Je sais
communiquer avec B et
C mais pas avec D !
C
A
Il faut trouver
un chemin !
140
Problème de plus court chemin (1)
• Théorie des graphes • Coût d’un chemin
• Un graphe comprend - Composition des coûts des
liens qui le composent
- des noeuds
- des liens - Par ex.
• Coût (A→C→B→D→E) =
• Coûts des liens
c(A,C) + c(C,B) + c(B,D) +
- identiques c(D,E) = 6
• tous égaux à 1 • Comment trouver le chemin d'un
noeud à un autre de coût
- différents (mais constants) minimal ?
• par ex. inversement
proportionnels à leur 1
3 B E
capacité d’émission A
(exemple Cisco) 1 5 3
1
1
- dynamiques C
F
2 D
• liés à une mesure de
congestion 141
Problème de plus court chemin (2)
• À la main
- Uniquement pour de petits graphes
- Sinon, grâce à un algorithme (automatisable)
• Deux grandes approches pour le routage dynamique
- Algorithmes par états de lien
• Chaque noeud a une connaissance complète du réseau
- Algorithmes à vecteur de distance
• Chaque noeud connait uniquement ses voisins et le coût
de ses liens
142
Routage par états de lien
• Hypothèse
143
Routage par vecteur de distance (1)
• Notations
- dX(Y) : coût du plus court chemin de X vers Y
- Vx = {V1,V2,... ,VM} : l’ensemble des noeuds voisins de X
• Equation de Bellman-Ford
- dX(Y) = min ( c(X,Vi)+dVi(Y) )
Vx
- Table d’acheminement
• Destination Coût Saut suivant
- Vecteur de distance
• Destination Coût
• Exercice en TD
145