Title: Rseaux
1Réseaux
INSA - 07.12.2005 Vasile-Marian SCUTURICI
2Rappel Modèle de référence OSI
émetteur
récepteur
Données
Données
AH
Données
PH
Données
SH
Données
TH
Données
NH
Données
DH
DT
bits
3Modèle de référence TCP/IP (INET)
OSI
INET
telnet, http, ftp, dns, smtp
application
absentes
transport
TCP, UDP
Internet
IP
hôte au réseau
4Plan - INET
- Couche transport
- TCP, UDP
- Programmation réseau
- Couche application
- http, smtp, ftp, telnet, snmp, dns
- (?) Compléments IP routage, NAT, PAT,
5Le protocole TCP
- Transmission Control Protocol
- Transport fiable des données - contrôle des
messages ordre, erreurs détectées et corrigées - Orienté connexion connexion entre émetteur et
récepteur - Utilise IP
- 95 du trafique Internet
6Principe de fonctionnement
- Connexion bidirectionnelle et point à point
- Utilisation de deux points de connexion
(sockets) - Chaque socket adresse IP nombre sur 16 bits
(port) - IP communication machine machine
- TCP et UDP communication application -
application
Émetteur (adresse IP)
Récepteur (adresse IP)
port
port
port
port
port
port
64K ports
7Principe de fonctionnement
- Connexion TCP transmission dun flot doctets,
et non de messages - La délimitation précise de messages nest pas
conservé de bout en bout
8En-tête TCP
4 octets
Port destination
Port source
Numéro de séquence (SEQ)
Numéro daccusé de réception (ACK)
Taille de fenêtre
Long. en- -tête TCP
Réservé
U R G
A C K
P S H
R S T
S Y N
F I N
Somme de contrôle
Pointeur durgence
Options (0, 1 ou plusieurs mots de 32 bits)
Données (optionnelles)
9En-tête TCP
- Port source, port destination identifient les
extrémités de la connexion - Ports disponibles 65536
- Les ports 0-1023 réservés
- http 80
- ftp 20, 21
- http//www.iana.org/assignments/port-numbers
10Exemples des connexions TCP
192.168.0.11
192.168.0.12
2243
1245
2244
1246
1247
192.168.0.18
5243
5244
5245
11En-tête TCP
- Longueur de len-tête TCP combien de mots de 32
bits contient len-tête - Longueur variable (à cause du champ Options)
- Mesuré en mots de 4 octets
- Somme de contrôle assure la fiabilité
- Émetteur
- Met à 0 le champ somme de contrôle
- Additionne tous les mots de 16 bits en complément
à 1 - Somme de contrôle le complément à 1 de la somme
obtenue - Récepteur
- Effectue le calcul précèdent sur le segment en
entier - Le résultat doit être nul
12Numéro de séquence
- C'est un nombre qui identifie la position des
données à transmettre par rapport au segment
original. - Au démarrage de chaque connexion, ce champ
contient une valeur non nulle et non facilement
prévisible - TCP numérote chaque octet transmis en
incrémentant ce nombre (32 bits non signé). Il
repasse à 0 après avoir atteint 232 - 1. - Pour chaque octet des données transmis ce nombre
est incrémenté (1).
13Numéro daccusé de réception
- Indique le prochain octet attendu
- Accompagne le drapeau ACK
- ACK 1 -gt le champ Numéro daccusé de réception
doit être exploité
D
S
14Mécanisme dacquittement
D
S
segment i
horloge
RTT
ACK
segment i
durée limite pour recevoir lacquittement (MSL)
le délai dépassé -gt segment renvoyé
durée dun aller/retour round trip time RTT ltlt
MSL
15Etablissement dune connexion
D
S
16Etablissement dune connexion initialisation en
trois étapes
D
S
Note le segment SYN est considéré comme un
segment contenant un octet!
17Libération dune connexion
- FIN 1 -gt lémetteur na plus des données Ã
transmettre - Réinitialisation dune connexion RST
- pour rejeter une connexion
- signaler une erreur
18Transfert des données
- Une machine a un espace limité pour la réception
des données - Utilisation dune fenêtre des données
S
D
4k
19Transfert des données
S
D
App -gt 2k
4k - vide
App -gt 2k
App -gt 1k
20Gestion de la fenêtre
- Problème le mécanisme dacquittement
sous-emploie la bande passante du réseau
1Gbps, RTT 100 ms, MSS 1460
Pour envoyer un segment avec 1500 octets
temps_transfert(segment)RTT 0.001ms
100ms 0.1 s gt Débit utile 120 kbps sur un
réseau à 1Gbps!
21Gestion de la fenêtre technique de la fenêtre
glissante
Fenêtre possible pour le destinataire
0
1
2
3
4
5
6
7
8
9
déjà envoyés, ACK reçus
peuvent être envoyés
Ne peuvent pas être envoyés, il faut attendre
que la fenêtre se déplace
envoyés, ACK non-reçus
22Transmission de données Algorithme de Nagle
- Problème une application envoie les données
octet par octet ? pour envoyer N octets des
données on utilise - N(1en-tête TCPen-tête IP)
- N(12020) N(41)
S
D
1 octet
App -gt 1 octet
ACK
-gt 1
-gt 1
-gt 1
3 octets
-gt 1
23Transmission de données Syndrome de la fenêtre
stupide
- Problème le récepteur lit octet par octet
- Solution de Clark obliger le récepteur
dattendre une taille de fenêtre décente avant de
lannoncer
S
D
-gt 1
-gt 1
ACK window 3
-gt 1
3 octets
24Données urgentes
- Pointeur durgence décalage en octets à partir
du nombre de séquence courant pour indiquer où on
retrouvent les données urgentes. - Drapeau URG
S
D
URG1 Pt. URG x
x
25État dune connexion TCP
connect/SYN
fermée
close/-
listen/-
close/-
SYN/SYNACK
écoute
send/SYN
RST/-
SYN reçu
SYN émis
SYN/SYNACK
SYNACK/ACK
ACK/-
établie
close/ FIN
close/FIN
FIN/ACK
attente fermeture
FIN attente 1
FIN/ACK
fermeture en cours
ACK/-
close/FIN
FINACK/ACK
attente temporisée
FIN attente 2
dernier ACK
FIN/ACK
Expiration temporisateur
ACK/-
fermée
26État dune connexion TCP - en
connect/SYN
CLOSED
close/-
listen/-
close/-
SYN/SYNACK
LISTEN
send/SYN
RST/-
SYN RECEICVED
SYN SENT
SYN/SYNACK
SYNACK/ACK
ACK/-
ESTABLISHED
close/ FIN
close/FIN
FIN/ACK
CLOSE WAIT
FIN WAIT_1
FIN/ACK
CLOSING
ACK/-
close/FIN
FINACK/ACK
TIME WAIT
FIN WAIT_ 2
LAST ACK
FIN/ACK
Expiration temporisateur
ACK/-
CLOSED
27Etat dune connexion TCP
- FERMÉE aucune connexion nest active
- Écoute le serveur attend un appel entrant
- SYN reçu une demande de connexion est arrivée
attente dun ACK - SYN émis lapplication a commencée à ouvrir une
connexion - Établie état normal pour le transfert de
données - FIN attente 1 lapplication a indiqué quelle a
terminé - FIN attente 2 lautre extrémité à accepté la
libération - Temporisation attente que tous les paquets
aient disparu - Fermeture en cours les deux extrémités ont
essayé de fermer simultanément - Attente fermeture lautre extrémité à initié la
libération - Dernier ACK attente que tous les paquets aient
disparu
28netstat
- Affiche des informations sur les connexions TCP
(UDP, ) actives - Exemple
- Proto Adresse locale Adresse distante
Etat - TCP if-41514608
pop.wanadoo.frpop3 TIME_WAIT - TCP if-41514612
chirouble.univ-lyon2.frpop3 TIME_WAIT - TCP if-41514613
pop.wanadoo.frpop3 TIME_WAIT - TCP if-41514614 66.102.9.147http
ESTABLISHED - TCP if-41514618
oas-eu.247realmedia.comhttp TIME_WAIT - TCP if-41514621
servif-baie.insa-lyon.frmicrosoft-ds SYN_SENT
29État dune connexion TCP - client
connect/SYN
fermée
close/-
listen/-
close/-
SYN/SYNACK
écoute
send/SYN
RST/-
SYN reçu
SYN émis
SYN/SYNACK
SYNACK/ACK
ACK/-
établie
close/ FIN
close/FIN
FIN/ACK
attente fermeture
FIN attente 1
FIN/ACK
fermeture en cours
ACK/-
close/FIN
FINACK/ACK
attente temporisée
FIN attente 2
dernier ACK
FIN/ACK
Expiration temporisateur
ACK/-
fermée
30État dune connexion TCP - serveur
connect/SYN
fermée
close/-
listen/-
close/-
SYN/SYNACK
écoute
send/SYN
RST/-
SYN reçu
SYN émis
SYN/SYNACK
SYNACK/ACK
ACK/-
établie
close/ FIN
close/FIN
FIN/ACK
attente fermeture
FIN attente 1
FIN/ACK
fermeture en cours
ACK/-
close/FIN
FINACK/ACK
attente temporisée
FIN attente 2
dernier ACK
FIN/ACK
Expiration temporisateur
ACK/-
fermée
31Options TCP
- mss La taille maximale du segment de données
applicatives que l'émetteur accepte de recevoir.
Au moment de l'établissement d'une connexion,
chaque partie annonce sa taille de MSS. - timestamp utilisé pour calculer la durée d'un
aller/retour (RTT) - wscale pour spécifier des tailles de fenêtre
supérieures à 64k (window_size 64k2wscale) - nop pour aligner les données sur 4 octets
32Les primitives socket de TCP
- Socket création dun nouveau point terminal
- Bind attache une adresse locale au socket
- Listen annonce la volonté daccepter des
connexions - Accept bloque lappelant jusquà larrivée
dune tentative de connexion - Connect tentative détablissement dune
connexion - Send envoie de données sur la connexion
- Receive réception des données sur la connexion
- Close libération de la connexion
33Utilisation des primitives TCP
- Exemple envoyer des messages entre deux
ordinateurs. - le serveur attend des connexions sur le port
5000 - le client se connecte sur le port 5000 il
envoie des messages de type - GET filename
- le serveur lui répond avec des messages
- LENGTH n
- fichier
34Utilisation des primitives TCP - serveur
- créer un socket (socket)
- associer le socket à une interface réseau (bind)
- passer le socket dans létat LISTEN (listen)
- accepter une connexion (accept)
- recevoir une commande (recv)
- envoyer la réponse (send)
- fermer la connexion (close)
35Utilisation des primitives TCP - client
- créer un socket (socket)
- optionnel - associer le socket à une adresse
locale interface réseau port (bind) - se connecter au serveur (connect)
- envoyer une commande (send)
- recevoir la réponse (recv)
- fermer la connexion (close)
36Correspondance client-serveur
Client
Serveur
création (socket)
création (socket)
bind
bind (optionnel)
listen
accept
connect
recv, send
send, recv
close
close
37Serveur primitives en C
Création
38Serveur primitives en C
Passer dans létat LISTEN
39Serveur primitives en C
Traiter un message
- Problèmes
- réception dun message partiel
- réception de plusieurs messages
- envoie partiel du réponse
40Serveur primitives en C
41Client primitives en C
Création
42Client primitives en C
Connexion au serveur
43Client primitives en C
Échanger des messages
44Différents options des sockets
Désactiver lalgorithme de Nagle
45Communication TCP exemple
C
S
connexion
envoie GET /
envoie MSG_0
envoie MSG_1
envoie MSG_2
46Communication TCP exemple
Client
Server
création (socket)
création (socket)
bind
bind
listen(80)
47Communication TCP exemple
Client
Server
création (socket)
Port source 4983 Port dest 80 SEQ
1763038791 AckNo 0 Data offset 28 SYN
1 Window 16384 Options MSS 1460
NOP NOP
création (socket)
bind
bind
listen(80)
connect
48Communication TCP exemple
Client
Server
création (socket)
Port source 80 Port dest 4983 SEQ
4127728857 AckNo 1 Data offset 28 SYN 1
ACK 1 Window 5840 Options MSS 1460
NOP NOP
création (socket)
bind
bind
listen(80)
connect
accept
valeurs relatives
49Communication TCP exemple
Client
Server
création (socket)
création (socket)
bind
bind
SEQ 1 AckNo 1 Data offset 20 ACK
1 Window 17520 Options
listen(80)
connect
accept
50Communication TCP exemple
Client
Server
création (socket)
création (socket)
bind
bind
listen(80)
connect
SEQ 1 AckNo 1 Data offset 20 ACK 1
accept
send
7 octets
51Communication TCP exemple
Client
Server
création (socket)
création (socket)
bind
bind
listen(80)
connect
SEQ 1 AckNo 8 Data offset 20 ACK 1
accept
send
recv
52Communication TCP exemple
Client
Server
création (socket)
création (socket)
bind
bind
listen(80)
connect
SEQ 1 AckNo 8 Data offset 20 ACK 1
accept
send
recv
send
recv
1460 octets
53Communication TCP exemple
Client
Server
création (socket)
création (socket)
bind
bind
listen(80)
connect
SEQ 1461 AckNo 8 Data offset 20 ACK 1
accept
send
recv
send
recv
1460 octets
54Communication TCP exemple
Client
Server
création (socket)
création (socket)
bind
bind
listen(80)
connect
SEQ 8 AckNo 2921 Data offset 20 ACK 1
accept
send
recv
send
recv
55Communication TCP exemple
Client
Server
création (socket)
création (socket)
bind
bind
listen(80)
connect
SEQ 8 AckNo 2921 Data offset 20 ACK
1 FIN 1
accept
send
recv
recv
send
close
56Communication TCP exemple
Client
Server
création (socket)
création (socket)
bind
bind
listen(80)
connect
SEQ 2921 AckNo 8 Data offset 20 ACK 1
accept
send
recv
recv
send
close
close
57Outils pour la visualisation des connexions TCP
- netstat
- tcpdump
- Sniffers
- Ethereal (www.ethereal.com)
- Microsoft Network Monitor
58UDP
- User Datagram Protocol
- Protocole de transport sans connexion
- En-tête UDP
4 octets
Port UDP destination
Port UDP source
Longueur
Somme de contrôle
Données
59Utilisation des primitives UDP - serveur
- créer un socket (socket)
- associer le socket à une interface réseau (bind)
- recevoir un message (recvfrom)
60Utilisation des primitives UDP - client
- créer un socket (socket)
- optionnel - associer le socket à une adresse
locale interface réseau port (bind) - envoyer un message à une adresse - IPport
(sendto)
61UDP Correspondance client-serveur
Client
Serveur
création (socket)
création (socket)
bind
bind (optionnel)
recvfrom, sendto
sendto, recvfrom
close
close
62Serveur UDP primitives en C
Création
63UDP envoyer des données primitives en C
64UDP recevoir des données primitives en C
65Messages multi-destination IP Multicast
66Messages multi-destination IP Multicast
67Adresses IP de classe D
- 224.0.0.0 - 239.255.255.255
- adresse de group
- Réservées
- 224.0.0.0
- 224.0.0.1 tous les systèmes situés dans le même
réseau physique - 224.0.0.2 tous les routers situés dans le même
réseau physique - 224.0.1.1 utilisée pour synchroniser le temps
dans un group des ordinateurs - 224.0.0.9, 224.0.1.24
68Messages multi-destination IP Multicast
- Création, bind UDP
- Limiter la distance parcourue par les paquets
69Messages multi-destination
- Envoyer des données (vers des adresses IP de
classe D)
70Messages multi-destination
Recevoir des données avant de recevoir
joindre un group
recvfrom voir UDP
71Messages multi-destination
Quitter un group
72Bibliographie
- Bibliothèque
- Andrew Tanenbaum, Réseaux
- Guy Pujolle, Réseaux
- Douglas Comer, TCP/IP Architecture, protocoles
et applications - Internet
73Questions
- Comment trouver la taille des données dans un
segment TCP ?
74Performance