Architecture Client/Serveur

Transcription

Architecture Client/Serveur
Architecture
Client/Serveur
[email protected]
1
Architecture Client/Serveur
Qu'est-ce qu'un serveur ?
• un « logiciel serveur » offre un service sur le réseau,
• le « serveur » est la machine sur laquelle s'exécute le logiciel serveur,
• le serveur doit être sur un site avec accès permanent
et s'exécuter en permanence. Un site peut offrir plusieurs services.
Le serveur accepte des requêtes, les traite
et envoie le résultat au demandeur.
• Un service est fourni sur un Port de communication identifié par un numéro.
• Certains numéros de Port (internationalement définis) identifient le service quelque soit le site
ex :
- le service FTP est offert sur les ports numéros 21 (contrôle) et 20 (données),
- le service TELNET (émulation terminal) sur le port 23,
- le service SMTP (mail) sur le port 25,
- etc.
• Pour accéder à un service, il faut l'adresse du site et le numéro du port.
Qu'est-ce qu'un client ?
[email protected]
2
Architecture Client/Serveur
Qu'est-ce qu'un client ?
• un « logiciel client » utilise le service offert par un serveur,
• le « client » est la machine sur laquelle s ’exécute le logiciel client,
• Le client est raccordé par une liaison temporaire.
Le client envoie des requêtes
et reçoit des réponses.
Quelle architecture client/serveur ?
client
[email protected]
serveur
3
Architecture Client/Serveur
Architecture client/serveur ?
description du fonctionnement coopératif entre le serveur et le client.
Un serveur peut être utilisé par plusieurs clients,
ceux-ci pouvant être développés sur différents systèmes : Unix, Mac ou PC par ex.
Mais obligation de respecter le protocole entre les deux processus communicants.
Pile de protocoles TCP/IP très souvent utilisée (Internet par ex.)
L ’Application Program Interface (API) utilisée est l'API Sockets.
(dans notre cas)
API = un ensemble de primitives pour l'accès à la pile de protocoles TCP/IP.
Notion de Sockets (et principales primitives)
[email protected]
4
Architecture Client/Serveur
Notion de Sockets (prises de raccordement)
Processus
d ’Application
Socket
Transfert
des données
Ce n ’est ni une norme de communication
ni une couche de protocole
C ’est une interface entre
le programme d'application et
les protocoles de communication
mécanisme de communication bidirectionnel interprocessus
(dans un environnement distribué)
Socket
[email protected]
API (ensemble de primitives de programmation)
et
Extrémités de la communication {Add IP, numéro Port}
Cf. modèle TCP/IP
5
Architecture Client/Serveur
Principe de programmation
Processus
d ’Application
Socket
Transfert
des données
Un socket s'utilise comme un fichier :
1. Création/Définition/Ouverture
2. Communication
3. Fermeture/Libération.
• Création/Définition/Ouverture
- réservation des ressources pour l ’interface de communication
- création d ’un descripteur du socket (similaire descripteur de fichier)
seulement une extrémité de connexion
• Communication
- utilisation des primitives read (réception), write (émission) … (idem fichier)
- plusieurs variantes de primitive d ’émission et de réception
• Fermeture/Libération
- utilisation de la primitive close (fermeture de la communication)
[email protected]
6
Architecture Client/Serveur
Primitives de programmation (API)
SERVEUR
Processus
d ’Application
Socket
Processus
d ’Application
Socket
193.49.108.49
21
Processus
d ’Application
Socket
21
193.49.108.49
Berkeley Sockets (UNIX)
CLIENT
Processus
d ’Application
- socket() crée le socket (extrémité de connexion) en définissant :
- domaine (ex: Internet)... AF_INET
(adressage IP)
- type (service utilisé)… SOCK_STREAM (mode connecté)
- protocole...
IPPROTO_TCP
(TCP/IP)
pas nécessaire
- bind() associe le descripteur crée par socket()
à l'adresse et au port du serveur
Socket
Processus
d ’Application
Socket
193.49.108.87
Rem : c ’est un socket découte, i.e. non associé précisément
- listen() spécifie le nombre de demandes de connexions max
acceptées (mises en attente si le serveur est occupé)
Rem: pour pouvoir traiter plusieurs connexions (n>1), un processus fils doit être créé
après chaque accept() permettant de traiter cette communication,
tandis que le processus père traite les demandes de connexion (listen()).
…/...
[email protected]
7
Architecture Client/Serveur
Primitives de programmation (API)
SERVEUR
Processus
d ’Application
Socket
21
193.49.108.49
Processus
d ’Application
Socket
- accept() traite une demande de connexion dans la file des demandes,
si aucune demande de connexion alors blocage (i.e. inactivité)
CLIENT
Processus
d ’Application
- connect() émet une demande de connexion au serveur
Socket
et attend une réponse de connexion avant de continuer
• Précisions sur les paramètres de connect():
2065
- indiquer l ’adresse IP et le Port du serveur,
193.49.108.87
i.e. l ’extrémité de connexion souhaitée {193.49.108.49, 21}
- automatique pour l ’extrémité locale (i.e. client)
le système attribue un numéro de port (pas encore utilisé)
et récupère l ’adresse IP de la machine Þ {193.49.108.87,2065}
Processus
d ’Application
accept() débloqué et création d ’un nouveau socket
associé à cette communication
{193.49.108.49, 21}
Socket
{193.49.108.87, 2065}
…/...
[email protected]
8
Architecture Client/Serveur
SERVEUR
Processus
d ’Application
Primitives de programmation (API)
Communication établie
(deux extrémités de connexion couplées)
… échanges de données possibles.
Socket
Transfert
des données
CLIENT
Processus
d ’Application
Socket
write() ou send().
read() ou recv()
Transfert
des données
write() ou send().
read() ou recv()
{193.49.108.49, 21}
{193.49.108.87, 2065}
Rupture de la communication
(connexions relatives aux sockets sont fermées)
Processus
d ’Application
- Close() -
Processus
d ’Application
• La fermeture d'un socket n'implique pas la perte des données
restant à acheminer.
• Le système tient compte des différents processus utilisant le socket et
le transport des données en attente est assuré avant la fermeture réelle.
• La terminaison d ’un processus (normalement ou non) ferme d’autorité les sockets.
[email protected]
9
Architecture Client/Serveur
Primitives de programmation (API)
Processus
d ’Application
Primitives d ’échanges de données
Socket
Processus
d ’Application
Socket
write() ou send().
read() ou recv()
Transfert
des données
Transfert
des données
int read(int sockd, char *ptampon, int lgtampon);
int recv(int sockd, char *ptampon, int lgtampon, int drapeaux);
descripteur
du socket
pointeur vers le buffer
d'émission (ou de réception)
int write (int sockd, char *ptampon, int lgtampon);
int send (int sockd, char *ptampon, int lgtampon, int drapeaux);
nombre d'octets
à émettre (ou à recevoir)
Retour : int nombre d'octets transmis (ou reçus)
en cas de succès, ou -1 en cas d'échec,
ou 0 si application distante arrêtée
(réception seulement)
[email protected]
indicateur pour le contrôle de l'échange :
0 dans les cas courants,
MSG_OOB pour message express ,
MSG_DONTROUTE pour inhiber le routage,
MSG_PEEK pour consulter les données reçues
sans les prélever.
10
Architecture Client/Serveur
Algorithmes
Demande le droit d'utiliser
l'identificateur de port réservé 21
Programme serveur pour un seul client
(illustré pour FTP)
Non
Autorisé
Initialisation du serveur
Fin échec
Attente connexion
Oui
Attente CLIENT sur le port 21
Arrivée CLIENT sur le port 21
Service rendu au client
Fin connexion
(pour ce client)
[email protected]
Servir CLIENT
11
Architecture Client/Serveur
Algorithmes
Demande le droit d'utiliser
l'identificateur de port réservé 21
Concept de serveur multi-clients
(programmation concurrente)
Non
Autorisé
(illustré pour FTP)
Fin échec
Connexion d ’un client Ci,
le serveur génère un processus fils
(duplication du prog. serveur)
pour répondre à la demande
du client Ci.
Ainsi, le programme serveur
peut-il attendre un autre client.
Attente CLIENT sur le port 21
Arrivée CLIENT sur le port 21
Oui
Nbre client > N
refus connexion
connexion refusée pour cause
de saturation du serveur
(nombre max de clients atteint )
[email protected]
création d'un
Non processus serveur fils p
Nbre client++
12
Architecture Client/Serveur
Concept de serveur multi-clients
(programmation concurrente)
Algorithmes
serveur fils i
Prog. serveur dupliqué (fork()) à
chaque connexion
d ’un client Ci .
serveur fils j
servir client i
serveur fils k
servir client j
serveur fils p
Arrêt connexion
servir client k
Arrêt connexion
indication au processus père
Arrêt connexion
de la fin de la connexion
indication au processus père
de la fin de la connexion
Arrêt connexion
indication au processus père
destruction du processus
de la fin de la connexion
serveur fils i
destruction du processus
indication au processus père
serveur fils j
de la fin de la connexiondestruction du processus
servir client p
serveur fils k
destruction du processus
serveur fils p
[email protected]
13
Architecture Client/Serveur
Primitives de programmation (API) pour WINDOWS
Les Windows Sockets = API WinSock, appelée aussi WSA (Windows Sockets API)
interface de programmation Sockets pour l'environnement Microsoft Windows
primitives Berkeley Sockets (quelques différences avec API Windows)
et un ensemble de routines spécifiques Windows
(gestion des messages sous Windows)
API WinSock
winsock.h (fichier entête contenant toutes les structures, définitions, prototypes...).
wsock32.dll contenant toutes les fonctions nécessaires dans une librairie dynamique;
wsock32.lib contenant les points d'entrée des fonctions sockets dans les dll respectives.
Deux primitives particulières :
- WSAStartup()
- WSACleanup()
Inévitable appel à WSAStartup() au début, pour vérifier
si l'API Winsock utilisée est bien supportée par la winsock.dll
implantée sur le système
Appel à WSACleanup() à la fin, pour libérer les ressources.
[email protected]
14

Documents pareils