APPLICATIONS RÉPARTIES
Les Sockets
PLAN
Socket
Définition
Propriétés
Les modes de connexion
Implémentation
sockets en mode connecté
sockets en mode non connecté
Définition
Le terme “ socket ” désigne à la fois une
bibliothèque d’interface réseau et l’extrémité d’un
canal de communication (point de communication)
par lequel un processus peut émettre ou recevoir
des données. Ce point de communication est
représenté par une variable entière, similaire à un
descripteur de fichier.
Définition
L’interface socket est un ensemble de primitives qui
permettent de gérer l’échange de données entre
processus, que ces processus soient exécutés ou non
sur la même machine.
La bibliothèque socket masque l’interface et les
mécanismes de la couche transport : un appel
socket se traduit par plusieurs requêtes transport
Propriétés
Sockets : interface (point de communication) client/serveur
utilisée à l’origine dans le monde UNIX et TCP/IP
Étendue aux PCs (Winsock) et mainframes
Primitives pour le support de communications reposant sur les
protocoles (TCP/IP, UDP/IP)
Les applications client/serveur ne voient les couches de
communication qu’à travers l’API socket (abstraction)
Propriétés
Sockets / OSI
Propriétés
Modèle client / serveur et sockets
Application Application
CLIENT SERVEUR
SOCKETS SOCKETS
Protocole Transport Protocole Transport
Protocole Réseau Protocole Réseau
couches physiques et couches physiques et
liaison de données liaison de données
Les modes de connexion
Le mode connecté correspond au protocole TCP. Le protocole
établit une connexion virtuelle et se charge alors de maintenir
l'intégrité de la communication et de gérer les erreurs de
transmission.
Le mode non connecté correspond au protocole UDP. Ce
protocole fait l'envoi au mieux ("best effort"). C'est à
l'application de maintenir la qualité de la transmission. UDP est
une "couche mince" au-dessus de IP.
Les modes de connexion
TCP
Garantie d’arrivée dans l’ordre de paquets de données
Fiabilité de transmission
Lenteur des transmissions (http par exemple)
Vu comme un «service téléphonique»
UDP
Arrivée dans le bon ordre non garantie
Non fiabilité des transmissions
Rapidité des transmissions
Applications audio/vidéo
Vu comme un «service postal»
Implémentation
sockets en mode connecté
sockets en mode non connecté
Principes de base
Chaque machine crée une socket,
Chaque socket sera associée à un port de sa machine hôte,
Les deux sockets seront explicitement connectées si on utilise un
protocole en mode connecté …,
Chaque machine lit et/ou écrit dans sa socket,
Les données vont d’une socket à une autre à travers le réseau,
Une fois terminé chaque machine ferme sa socket.
Notion de port
Un service est rendu par un programme serveur sur une machine. Ce service
est accessible à travers un réseau TCP/IP par un port. Un port est identifié
par un entier (16 bits).
Les ports numérotés de 0 à 511 sont les "well known ports" de l'architecture
TCP/IP. Ils donnent accès aux services standard de l'interconnexion:
transfert de fichiers (FTP port 21), terminal (Telnet port 23), courrier (SMTP
port 25),serveur web (HTTP port 80)
De 512 à 1023, on trouve les services Unix.
Au delà, (1024 ...) ce sont les ports "utilisateurs" disponibles pour placer un
service applicatif quelconque.
sockets en mode connecté
SERVEUR :
Crée une socket
Associe une adresse socket (adresse Internet et numéro de port)
Se met à l’écoute des connexions entrantes ;
Pour chaque connexion entrante:
Accepte la connexion (une nouvelle socket est créée avec les mêmes
caractéristiques que la socket d’origine, ce qui permet de lancer un
thread ou un processus fils pour gérer cette connexion).
Lit et/ou écrit sur la nouvelle socket
Ferme la nouvelle socket
sockets en mode connecté
CLIENT :
Crée une socket
Se connecte au serveur en donnant l’adresse socket distante
(adresse Internet du serveur et numéro de port du service).
Le système d'exploitation attribue pour cette connexion
automatiquement un numéro de port local au client
Lit et/ou écrit sur la socket
Ferme la socket
sockets en mode connecté
CLIENT SERVEUR "serv"
ServerSocket(PORT)
Socket(ip,PORT) Nouvelle socket et
.accept()
éventuellement nouveau thread
in = new BufferedReader(
in = new BufferedReader(...( new InputStreamReader(
socket.getInputStream())) cxion.getInputStream()))
out = new PrintWriter(…( out = new PrintWriter(
socket.getOutputStream())) new BufferedOutputStream(
cxion.getOutputStream()))
out.println(…);out.flush() Transfert in.readLine();
in.readLine(); de out.println(…);out.flush()
données
socket.close() cxion.close()
Implémentation des algorithmes
Client/Serveur en mode connecté
sockets en mode connecté
class ServerSocket : (coté serveur)
Constructeur :
ServerSocket(int port) : creation d’une socket TCP connectée sur le
port spécifié de la machine hôte.
Méthodes :
close() : ferme la socket.
Socket accept() : écoute la socket et attend une requête de
connection, retourne une nouvelle socket sur laquelle écouter le
nouveau client (et lui seul)
sockets en mode connecté
class OutputStream :
Méthodes :
write(…) : écrit dans le flux.
close() : ferme flux.
class InputStream :
Méthodes :
read(…) : lit le flux.
close() : ferme le flux
sockets en mode non connecté
CLIENT (émetteur) :
Crée une socket
Associe une adresse socket (opération qui n’est nécessaire que si le
Processus va recevoir des données)
Lit et/ou écrit sur la socket
SERVEUR (récepteur) :
Crée une socket
Associe une adresse socket
Lit et/ou écrit sur la socket
sockets en mode non connecté
CLIENT SERVEUR
DatagramSocket () DatagramSocket (port)
DatagramPacket(..) DatagramPacket (...)
sock.send()
sock.receive()
: appel pouvant être
DatagramPacket (...) bloquant
: appel non bloquant
DatagramPacket(..)
sock.send ()
sock.receive()
Implémentation des algorithmes
Client/Serveur en mode non connecté
sockets en mode non connecté
Sockets UDP en Java (une démarche possible) :
class DatagramSocket : (coté client et coté serveur)
Constructeur :
DatagramSocket() : creation d’une socket UDP, libre
Méthodes :
close() : ferme la socket.
receive(DatagramPacket p) :reçoit un « DatagramPacket
» de cette socket.
send(DatagramPacket p):envoit un « DatagramPacket »
sur cette socket.
sockets en mode non connecté
class DatagramPacket :
Constructeur :
DatagramPacket(byte[ ] buf, int length,InetAddress address,
int port) :creation d’un packet à destination d’une machine
et d’un port spécifiés