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