Академический Документы
Профессиональный Документы
Культура Документы
! Certains transparents sont basés sur des ! Organisation pratique et contenu du module
supports de cours de : ! Bibliographie
Olivier Aubert (LYON 1)
!
! Quelques rappels : Internet et le modèle TCP/IP
! Bénédicte Le Grand (UPMC)
! Architecture Client/Serveur
! Des figures sont issues des livres cités en
! Communications inter-processus
bibliographie
! Les sockets
! Les appels de procédures distantes
Olivier Glück - © 2017 M2 SRIV - Applications Systèmes et Réseaux 3 Olivier Glück - © 2017 M2 SRIV - Applications Systèmes et Réseaux 4
Admin. Windows)
du module
! Travaux pratiques :
! Salles Réseaux : TPR1, TPR2, TPR3 (Linux/Windows 2000)
! pas d’accès extérieur
! possibilité de câblage
! root sur les machines
! AppliSR : un contrôle de fin de module (2 sessions)
! AdminSR : plusieurs TPs notés + un petit contrôle (contrôle
continu donc pas de deuxième session)
Olivier Glück - © 2017 M2 SRIV - Applications Systèmes et Réseaux 6
1
Les modules AppliSR/AdminSR : objectifs Le module AppliSR : contenu (1)
! Dans Admin. Systèmes (SIR) : une partie ! Les serveurs multi-protocoles et multi-services
spécifiquement Windows ! Les appels de procédures distantes, l’exemple des
! Jacques Delmas : 12h de cours et 18h de TPs RPC
Olivier Glück - © 2017 M2 SRIV - Applications Systèmes et Réseaux 7 Olivier Glück - © 2017 M2 SRIV - Applications Systèmes et Réseaux 8
Bibliographie
2
Le visage de l'Internet (1) Le visage de l'Internet (2)
! Un réseau de réseaux
! Une construction à partir du « bas »
! Un ensemble de logiciels et de protocoles ! réseau local (laboratoire, département)
! Basé sur l’architecture TCP/IP ! réseau local (campus, entreprise)
! Fonctionne en mode Client/Serveur ! réseau régional
! Offre un ensemble de services (e-mail, transfert ! réseau national
de fichiers, connexion à distance, WWW, …) ! réseau mondial
! Une somme « d’inventions » qui s’accumulent ! 3 niveaux d’interconnexion
! mécanismes réseau de base (TCP/IP) ! postes de travail (ordinateur, terminal...)
! gestion des noms et des adresses ! liaisons physiques (câble, fibre, RTC...)
! des outils et des protocoles spécialisés ! routeurs (équipement spécialisé, ordinateur...)
! le langage HTML
Olivier Glück - © 2017 M2 SRIV - Applications Systèmes et Réseaux 13 Olivier Glück - © 2017 M2 SRIV - Applications Systèmes et Réseaux 14
Modèle Client/Serveur
Hétérogénéité
S'articule autour de Facteur d'échelle
plusieurs backbone
ISP aux US
Olivier Glück - © 2017 M2 SRIV - Applications Systèmes et Réseaux 15 Olivier Glück - © 2017 M2 SRIV - Applications Systèmes et Réseaux 16
Olivier Glück - © 2017 M2 SRIV - Applications Systèmes et Réseaux 17 Olivier Glück - © 2017 M2 SRIV - Applications Systèmes et Réseaux 18
3
L’architecture de TCP/IP (3) L’architecture de TCP/IP (4)
! Deux machines sur un même sous réseau IP ! Prise en compte de l'hétérogénéité
Ordinateur A Ordinateur B Ordinateur A Ordinateur B
Protocole FTP Protocole FTP
Client FTP Serveur FTP Client FTP Serveur FTP
Réseau logique IP
trames trames
Protocole Ethernet
Pilote Pilote Pilote Ethernet Token Ring Pilote
NIC Ether Token NIC
Ethernet Sous-réseau de type
Ethernet Ethernet Token Ring
Ethernet sous-réseau de type sous-réseau de type
Ethernet Token Ring
Olivier Glück - © 2017 M2 SRIV - Applications Systèmes et Réseaux 19 Olivier Glück - © 2017 M2 SRIV - Applications Systèmes et Réseaux 20
Serveur FTP HTTP FTP TELNET SMTP DNS SNMP BOOTP ...
4
Identification des protocoles (2) Identification des protocoles (3)
! UDP (RFC 768) - User Datagram Protocol ! Performance sans garantie de délivrance
! protocole de transport le plus simple ! Souvent utilisé pour les applications multimédias
! service de type best-effort (comme IP) ! tolérantes aux pertes
! les datagrammes UDP peuvent être perdus
! sensibles au débit
! les datagrammes UDP peuvent arriver dans le désordre
! Autres utilisations d'UDP
! mode non connecté : chaque segment UDP est traité
indépendamment des autres ! applications qui envoient peu de données et qui ne
nécessitent pas un service fiable
! Pourquoi un service non fiable sans connexion ? ! exemples : DNS, SNMP, BOOTP/DHCP
simple donc rapide (pas de délai de connexion, pas d'état
!
entre émetteur/récepteur)
! Transfert fiable sur UDP
! ajouter des mécanismes de compensation de pertes
! petit en-tête donc économie de bande passante
(reprise sur erreur) au niveau applicatif
! sans contrôle de congestion donc UDP peut émettre aussi
rapidement qu'il le souhaite ! mécanismes adaptés à l'application
Olivier Glück - © 2017 M2 SRIV - Applications Systèmes et Réseaux 27 Olivier Glück - © 2017 M2 SRIV - Applications Systèmes et Réseaux 28
5
Exemples de protocole applicatif (1) Exemples de protocole applicatif (2)
6
Protocoles de la couche Applications Le modèle Client / Serveur
! Le protocole applicatif définit : ! Idée : l'application est répartie sur différents
! le format des messages échangés entre les processus sites pour optimiser le traitement, le stockage...
émetteur et récepteur
! Le client
! les types de messages : requête, réponse, …
! effectue une demande de service auprès du serveur
! l'ordre d'envoi des messages
(requête)
! Exemples de protocoles applicatifs : ! initie le contact (parle en premier), ouvre la session
HTTP pour le Web, POP/IMAP/SMTP pour le courrier
!
! Le serveur
électronique, SNMP pour l'administration de réseau, …
! est la partie de l'application qui offre un service
! Ne pas confondre le protocole et l'application !
! est à l'écoute des requêtes clientes
! Application Web : un format de documents (HTML),
! répond au service demandé par le client (réponse)
un navigateur Web, un serveur Web à qui on
demande un document, un protocole (HTTP)
Olivier Glück - © 2017 M2 SRIV - Applications Systèmes et Réseaux 37 Olivier Glück - © 2017 M2 SRIV - Applications Systèmes et Réseaux 38
7
Exemple d'application client/serveur Exemple d'application client/serveur
! Le client lit une ligne à partir de l'entrée standard ! DAYTIME (RFC 867) permet au client d'obtenir la
(clavier) et l'envoie au serveur date et l'heure du serveur
! Le serveur lit la ligne reçue et la convertit en ! Le protocole spécifie
majuscules ! l'échange des messages :
! dès qu'un serveur reçoit un message d'un client, il
! Le serveur renvoie la ligne au client renvoie une chaîne de caractères contenant la date et
! Le client lit la ligne reçue et l'affiche sur la sortie l'heure
! le contenu du message client n'est même pas regardé
standard (écran)
! le format de la chaîne renvoyée : 1 ligne ASCII
! Par exemple "Weekday, Month Day, Year Time-Zone "
Olivier Glück - © 2017 M2 SRIV - Applications Systèmes et Réseaux 43 Olivier Glück - © 2017 M2 SRIV - Applications Systèmes et Réseaux 44
! devenus le standard de fait Une socket : interface locale à l'hôte, créée par l'application, contrôlée par l'OS
! les RPC : Remote Procedure Call - appel de Porte de communication entre le processus client et le processus serveur
procédures distantes
Olivier Glück - © 2017 M2 SRIV - Applications Systèmes et Réseaux 45 Olivier Glück - © 2017 M2 SRIV - Applications Systèmes et Réseaux 46
8
Le Middleware Fonctions d’un Middleware
Architecture of a Grid
Conception d'une application C/S
Portals
en clients et serveurs ?
Workflow Data replication and --------
! gestion de l’affichage…
Resource Uniform
Services
and functionality and functionality and functionality and functionality and functionality
Resources
supercomputer
of
workstations
Olivier Glück - © 2017 M2 SRIV - Applications Systèmes et Réseaux 51 Olivier Glück - © 2017 M2 SRIV - Applications Systèmes et Réseaux 52
job initiation, event generators, GridFTP servers
Données Logique
Présentation Données
telnetd
Données
Applets, JavaScript, … Logique Données
Logique
Données Présentation
Olivier Glück - © 2017 M2 SRIV - Applications Systèmes et Réseaux 53 Olivier Glück - © 2017 M2 SRIV - Applications Systèmes et Réseaux 54
9
Conception d'une application C/S Conception d'une application C/S
! Modèle de Gartner pour les systèmes à 2 niveaux ! Modèle de Gartner pour les systèmes à 3 niveaux
(2-tiers) : (3-tiers) :
Client Présentation Présentation Présentation Présentation
Présentation Présentation Présentation Présentation Présentation
Client Logique Logique
Logique Logique Logique
Données
Données
Présentation
Serveur de milieu Logique Logique Logique Logique
Logique Logique Logique
Données
Serveur Données Données Données Données Données
Logique Logique
BD Données Transactions Présentations Présentations
réparties distantes réparties distantes réparties
Classe 1 Classe 2 Classe 3 Classe 4 Classe 5 Serveur Données Données Données Données
Olivier Glück - © 2017 M2 SRIV - Applications Systèmes et Réseaux 55 Olivier Glück - © 2017 M2 SRIV - Applications Systèmes et Réseaux 56
10
Clusters
Olivier Glück - © 2017 M2 SRIV - Applications Systèmes et Réseaux 63 Olivier Glück - © 2017 M2 SRIV - Applications Systèmes et Réseaux 64
! Dès lors qu'une application est répartie, elle se ! Les processus se partagent une zone de
décompose en plusieurs processus qui doivent mémoire commune dans laquelle ils peuvent lire
communiquer (échanges de données) et/ou écrire
Zone de mémoire partagée
! Deux grands types de schéma de communication write() entre P1 et P2 read()
! communication par mémoire partagée (ou fichier) P1 P2
read() write()
communication par passage de messages
Intérêt : communications transparentes,
!
!
! On retrouve ces deux schémas de communication limitation des copies mémoire
! dans des communications locales : entre processus ! Problème : gestion de l'accès à une ressource
s'exécutant sur le même hôte
partagée
! problème si deux écritures simultanées (ordre
! dans des communications distantes : entre d’ordonnancement, atomicité des opérations)
processus s'exécutant sur des hôtes distants ! les processus P1 et P2 doivent se synchroniser pour
accéder au tampon partagé (verrou, sémaphore, …)
Olivier Glück - © 2017 M2 SRIV - Applications Systèmes et Réseaux 65 Olivier Glück - © 2017 M2 SRIV - Applications Systèmes et Réseaux 66
11
Communication par mémoire partagée Les tubes de communication (pipes)
communes write P2
read/write read/write
! Ils communiquent en s'échangeant des messages P1 P2 P1
! au moins deux primitives : send() et recv() read P3
! des zones de mémoire locales à chaque processus read
permettent l'envoi et la réception des messages ! Pour se ramener à des communications point-à-
! l'émetteur/récepteur doit pouvoir désigner le récepteur/ point
émetteur distant ! --> dissocier le tampon d'émission et de réception
--> avoir autant de tampons de réception que
Problèmes
!
! d'émetteurs potentiels
! zones d'émission et réception distinctes ? ! --> il ne reste plus alors au protocole qu'à s'assurer
! nombre d'émetteurs/récepteurs dans une zone ? que deux émissions successives (d'un même émetteur)
n'écrasent pas des données non encore lues (contrôle
! opérations bloquantes/non bloquantes ? de flux)
Olivier Glück - © 2017 M2 SRIV - Applications Systèmes et Réseaux 69 Olivier Glück - © 2017 M2 SRIV - Applications Systèmes et Réseaux 70
depuis le tampon de réception local (le tampon de tampon de réception distant (le tampon d'émission
réception est de nouveau libre) local est de nouveau libre)
! quand le destinataire a consommé les données (le
Olivier Glück - © 2017 M2 SRIV - Applications Systèmes et Réseaux 71 Olivier Glück - © 2017 M2 SRIV - Applications Systèmes et Réseaux 72
12
Opérations bloquantes Opérations non bloquantes
! Le processus WOULDBLOCK
Appel système
! indique les signaux qu'il souhaite capter (provoquant read()
son interruption) Recopie
Retour
! met en place un handler (fonction particulière) qui sera
exécuté quand l'événement se produira
Attente active
! Exemple : arrivée de données urgentes sur une
socket
Olivier Glück - © 2017 M2 SRIV - Applications Systèmes et Réseaux 75 Olivier Glück - © 2017 M2 SRIV - Applications Systèmes et Réseaux 76
Application Middleware
Application
Données
signal() Activer SIGIO
Retour
Copie
Attente des
données
Attente passive
Carte réseau
Envoi Retransmission
Olivier Glück - © 2017 M2 SRIV - Applications Systèmes et Réseaux 77 Olivier Glück - © 2017 M2 SRIV - Applications Systèmes et Réseaux 78
13
Emission non-bloquante Réception bloquante
Application
Données Application
Tampon Données
Copie
Appel système
MPI Soumission Notification
Noyau sk_buff
Noyau
Interruption
Carte réseau
Carte réseau
Envoi Retransmission Début du message Fin
Olivier Glück - © 2017 M2 SRIV - Applications Systèmes et Réseaux 79 Olivier Glück - © 2017 M2 SRIV - Applications Systèmes et Réseaux 80
Olivier Glück - © 2017 M2 SRIV - Applications Systèmes et Réseaux 81 Olivier Glück - © 2017 M2 SRIV - Applications Systèmes et Réseaux 82
14
Les sockets - adressage Les sockets en pratique
! Le serveur doit utiliser un numéro de port fixe vers ! Une socket est un fichier virtuel avec les opérations
lequel les requêtes clientes sont dirigées d'ouverture, fermeture, écriture, lecture, …
! Les ports inférieurs à 1024 sont réservés : ! Ces opérations sont des appels système
! "well-known ports"
! ils permettent d'identifier les serveurs d'applications ! Il existe différents types de socket associés aux
connues différents services de transport :
! ils sont attribués par l'IANA ! stream sockets (connection-oriented) - SOCK_STREAM
! Les clients n'ont pas besoin d'utiliser des well- ! utilise TCP qui fournit un service de transport d'octets
known ports fiable, dans l'ordre, entre le client et le serveur
! ils utilisent un port quelconque entre 1024 et 65535 à
condition que le triplet <transport/@IP/port> soit unique ! datagram sockets (connectionless) - SOCK_DGRAM
! ils communiquent leur numéro de port au serveur lors de ! utilise UDP (transport non fiable de datagrammes)
15
En mode connecté... En mode connecté...
Paramètres en entrée Paramètres en sortie Au retour
d'accept()
socket() type, domaine, protocole sock_id
File des connexions
Processus en attente
bind() sock_id, port client (pendantes) id=xxx id=xxx1 id=xxx2
sock_id=xxx
16
En mode non connecté... Serveur itératif en mode connecté
socket()
Processus Le processus serveur :
Processus Processus bind() serveur - attend une connexion cliente
client serveur
sock_id=xxx sock_id=zzz - lit la requête
listen() - traite la requête
UDP UDP - envoie la réponse
socket buffers socket buffers
accept() - ferme la connexion cliente
…
port=yyy port=53 read()
IP IP Traitement de la requête cliente
write()
Internet close()
Olivier Glück - © 2017 M2 SRIV - Applications Systèmes et Réseaux 97 Olivier Glück - © 2017 M2 SRIV - Applications Systèmes et Réseaux 98
17
Paramétrage des sockets Les serveurs multi-protocoles
! Les sockets sont paramétrables ! Un serveur qui offre le même service en mode
! fonctions setsockopt() et getsockopt() connecté et non connecté
! options booléennes et non booléennes ! exemple : DAYTIME (RFC 867) port 13 sur UDP et sur
TCP qui permet de lire la date et l'heure sur le serveur
! Exemples d'options booléennes ! 13/TCP : la demande de connexion du client
! diffusion (dgram uniquement ; remplace l'@IP déclenche la réponse (à une requête donc implicite) :
destinataire par l'@ de diffusion de l'interface) le client n’émet aucune requête
! keepalive : teste régulièrement la connexion (stream) ! 13/UDP : la version UDP de DAYTIME requiert une
requête du client : cette requête consiste en un
! tcpnodelay : force l'envoi des segments au fur et à datagramme arbitraire qui n‘est pas lu par le serveur
mesure des écritures dans le tampon mais qui déclenche l’émission de la donnée côté
! Exemples d'options non booléennes serveur
! taille du tampon d'émission, taille du tampon de ! Le serveur écoute sur 2 sockets distinctes pour
réception, type de la socket rendre le même service
Olivier Glück - © 2017 M2 SRIV - Applications Systèmes et Réseaux 103 Olivier Glück - © 2017 M2 SRIV - Applications Systèmes et Réseaux 104
bloquantes de manière à gérer les communications à le serveur ferme la socket "cliente" et réitère son
la fois en mode connecté et en mode non-connecté attente sur les deux sockets initiales
! si une requête UDP arrive
! deux implémentations possibles : en mode itératif et
! le serveur reçoit et émet des messages avec le client
en mode concurrent ! lorsque les échanges sont terminés, le serveur réitère
son attente sur les deux sockets initiales
Olivier Glück - © 2017 M2 SRIV - Applications Systèmes et Réseaux 105 Olivier Glück - © 2017 M2 SRIV - Applications Systèmes et Réseaux 106
18
Les serveurs multi-services Les serveurs multi-services
fork()
! Fonctionnement : lancement d'un programme serveur processus
différent selon la requête entrante fils
processus
le serveur ouvre une socket par service offert, attend fork()
! fils
une connexion entrante sur l’ensemble des sockets exec()
exec()
ouvertes
code
! lorsqu’une demande de connexion arrive, le serveur dédié code
dédié
crée un processus fils qui prend en compte la
connexion
! le processus fils exécute (via exec() sur système
UNIX) un programme dédié réalisant le service sockets : une
demandé par service sockets : une par connexion
Olivier Glück - © 2017 M2 SRIV - Applications Systèmes et Réseaux 109 Olivier Glück - © 2017 M2 SRIV - Applications Systèmes et Réseaux 110
19
La scrutation de plusieurs sockets La scrutation de plusieurs sockets
! Deuxième solution
! créer un fils par socket pour la scrutation d'un service ! La primitive select() rend la main quand une
! inconvénient : lourd, gaspillage de ressources de ces conditions se réalise :
! mais avantage conservé d'activation à la demande
! l'un des événements attendus sur un descripteur de
! Troisième solution : la primitive select()
l'un des ensembles se réalise : les descripteurs sur
! permet de réaliser un multiplexage d'opérations
bloquantes (scrutation) sur des ensembles de lesquels l'opération est possible sont dans un
descripteurs passés en argument : paramètre de sortie
! descripteurs sur lesquels réaliser une lecture
Olivier Glück - © 2017 M2 SRIV - Applications Systèmes et Réseaux 117 Olivier Glück - © 2017 M2 SRIV - Applications Systèmes et Réseaux 118
environnement mono-machine
! subdivision de l’application en plusieurs modules qui
20
Principe général Principe général
! Souvent, quand un client envoie une requête (des ! L'objectif des RPC est de faire en sorte qu'un
paramètres), il est bloqué jusqu'à la réception appel distant ressemble le plus possible à un
d'une réponse appel local
! Analogie avec un appel de fonction ! Le processus client (l'appelant) est lié à une
! la fonction ou procédure ne rend la main au programme petite procédure de bibliothèque, appelée stub
appelant qu'une fois le traitement (calcul) terminé
client, qui représente la procédure du serveur
! RPC - Remote Procedure Call dans l'espace d'adressage du client
permettre à un processus de faire exécuter une fonction
!
par un autre processus se trouvant sur une machine ! Le processus serveur (l'exécutant) est lié à un
distante stub serveur qui représente l'exécution du client
! se traduit par l'envoi d'un message contenant
! Dissimule le fait que l'appel de la procédure n'est
l'identification de la fonction et les paramètres
! une fois le traitement terminé, un message retourne le
pas local : le programmeur de l'application utilise
résultat de la fonction à l'appelant un appel de procédure "normal" !
Olivier Glück - © 2017 M2 SRIV - Applications Systèmes et Réseaux 121 Olivier Glück - © 2017 M2 SRIV - Applications Systèmes et Réseaux 122
Client Serveur
Procédure
Application
RPC
Application
Client
Interface RPC
Serveur ! Pas de passage de paramètres par adresse :
impossible de passer des pointeurs (ou
RPC/XDR Client stub Server stub références)
API socket Message RPC ! en effet, les espaces d'adressage du client et du
au format XDR (call) serveur sont différents donc aucun sens de passer
socket Librairie RPC Librairie RPC
TCP UDP
(reply) une adresse
Sockets TCP ou UDP
! La procédure distante n'a pas accès aux
! Intérêts : variables globales du client, aux périphériques
! l'application n'a pas à manipuler directement les sockets d'E/S (affichage d'un message d'erreur !)
(le transport des données est transparent)
! l'implémentation des RPC est indépendante de l'OS ! Un appel de procédure obéit à fonctionnement
! Inconvénient : synchrone : une instruction suivant un appel de
! l'utilisation des RPC est moins performante que l'utilisation
procédure ne peut pas s’exécuter tant que la
directe des sockets (couches supplémentaires) procédure appelée n’est pas terminée
Olivier Glück - © 2017 M2 SRIV - Applications Systèmes et Réseaux 125 Olivier Glück - © 2017 M2 SRIV - Applications Systèmes et Réseaux 126
21
Le protocole RPC L'implémentation de SUN
! Sun Microsystems a développé une technologie RPC
! Il doit définir le format du call (message du dite « Sun RPC » devenue aujourd’hui un standard
client vers le serveur), le format des arguments de fait
de la procédure, le format du reply (résultats) ! NFS (Network File Sytem) repose sur les Sun RPC
! Il doit permettre d'identifier la procédure à ! Les Sun RPC définissent :
exécuter par le serveur quand un call arrive ! le format des messages que l’appelant (stub client) émet
pour déclencher la procédure distante sur un serveur
! Il doit permettre d'authentifier la demande ! le format des arguments de la procédure
(problèmes de sécurité) ! le format des résultats de la procédure
! Quelles machines distantes sont autorisées à exécuter ! Possibilité d'utiliser UDP ou TCP pour les
la procédure ? communications
! Quels utilisateurs sont autorisés à exécuter la ! XDR assiste les RPC pour assurer le fonctionnement
procédure ? dans un environnement hétérogène (représentation
standard des arguments et résultats…)
Olivier Glück - © 2017 M2 SRIV - Applications Systèmes et Réseaux 127 Olivier Glück - © 2017 M2 SRIV - Applications Systèmes et Réseaux 128
La sémantique "au moins une fois" La sémantique "au moins une fois"
! Le concepteur d'une application RPC utilisant UDP doit
! Les RPC sur un protocole de transport non fiable prendre en compte le fait que la non réception d'un
(UDP) reply ne signifie pas que la procédure distante n'a
! si un appel de procédure distante s’exécutant sur UDP ne pas été exécutée...
retourne pas, l’appelant ne peut pas savoir si la procédure ! Exemple :
a été exécutée ou si la réponse a été perdue
! lecture dans un fichier distant : pas gênant si une demande
! du côté de l'appelant : la réception d'un reply signifie de lecture a généré deux exécutions de la procédure
uniquement que la procédure distante a été exécutée au ! écriture dans un fichier distant : gênant s'il s'agit d'un ajout
moins une fois en fin de fichier ; la chaîne peut être ajoutée deux fois au
! du côté de serveur : un serveur recevant plusieurs fois la lieu d'une seule…
même requête ne peut pas savoir si le client s'attend à une ! Les procédures doivent être idempotentes :
unique exécution de la procédure ou bien s'il s'agit ! --> pas de procédure d'ajout en fin de fichier mais une
effectivement de N exécutions distinctes de la même proc. procédure d'écriture à telle position (ajout d'un paramètre
précisant où écrire dans le fichier)
Olivier Glück - © 2017 M2 SRIV - Applications Systèmes et Réseaux 131 Olivier Glück - © 2017 M2 SRIV - Applications Systèmes et Réseaux 132
22
Communications client/serveur Communications client/serveur
! Les sockets utilisent un well-known port pour ! Le numéro de port du processus serveur est
contacter un serveur distant (ex: telnet=port 23) attribué dynamiquement quand il démarre
! Les clients RPC ne connaissent que l'identifiant ! --> car le nombre de programmes RPC (identifiant sur
du programme RPC distant et le numéro de 32 bits) est potentiellement supérieur au nombre de
well-known ports (numéro de port sur 16 bits, ports
procédure (ex: 100003 pour NFS) réservés entre 0 et 1023)
! Pourtant, les communications sous-jacentes se ! Un processus spécial, le démon portmap (ou
font en mode client/serveur : l’appelant doit rpcbind) maintient une base de données
connaître l’adresse (IP, port) utilisée par le
renseignant les associations locales entre
programme RPC distant (ex: nfsd) numéro de port et programme RPC
Olivier Glück - © 2017 M2 SRIV - Applications Systèmes et Réseaux 133 Olivier Glück - © 2017 M2 SRIV - Applications Systèmes et Réseaux 134
Olivier Glück - © 2017 M2 SRIV - Applications Systèmes et Réseaux 135 Olivier Glück - © 2017 M2 SRIV - Applications Systèmes et Réseaux 136
Olivier Glück - © 2017 M2 SRIV - Applications Systèmes et Réseaux 137 Olivier Glück - © 2017 M2 SRIV - Applications Systèmes et Réseaux 138
23
Le format des messages RPC Les réponses possibles
Message ID Numérotation des CALL/REPLY
! Plusieurs types de réponses possibles :
Message type CALL ou REPLY
! SUCCESS : les résultats de la procédure sont renvoyés
RPC version number Version de la librairie RPC au client
REMOTE program
! RPC_MISMATCH : les versions RPC du client et du
REMOTE program version Identifie la procédure distante serveur ne sont pas compatibles
REMOTE procedure ! AUTH_ERROR : problème d'authentification
Plusieurs types possibles (par ex.
Authentification fields UNIX : uid, gid, …) ! PROG_MISMATCH : la procédure demandée n'est pas
Procedure arguments disponible (problème de version du programme, …)
Nombre variable
(call) or results (reply)
Olivier Glück - © 2017 M2 SRIV - Applications Systèmes et Réseaux 139 Olivier Glück - © 2017 M2 SRIV - Applications Systèmes et Réseaux 140
le réseau (paramètres de la procédure distante) à dire avec les Most Significant Bytes ayant les adresses
! permet d’échanger des données entre machines basses et les LSB ayant les adresses hautes
ayant des représentations internes différentes ! 40100000h sur une machine de type "little endian"
24
La représentation XDR La représentation XDR
Type Taille Description ! Une donnée avant d'être envoyée est codée au
int 32 bits entier signé de 32 bits format XDR mais aucune information dans
unigned int 32 bits entier non signé de 32 bits
bool 32 bits valeur booléenne (0 ou 1) l'encodage ne donne le type de la donnée
enum arb. type énuméré ! si une application utilise un entier de 32 bits, le résultat
hyper 64 bits entier signé de 64 bits de l’encodage occupera exactement 32 bits et rien
unsigned hyper 64 bits entier non signé de 64 bits
float 32 bits virgule flot. simple précision
n’indiquera qu’il s’agit d’un type entier
double 64 bits virgule flot. double précision ! Cette forme d’encodage implique que clients et
opaque
fixed array
arb.
arb.
donnée non convertie (sans type)
tableau de longueur fixe de n’importe quel
serveurs doivent s’entendre sur le format exact
autre type des données qu’ils échangent
structure arb. agrégat de données
discriminated union arb. structure implémentant des formes alternatives
! La bibliothèque de fonctions de conversion XDR
symbolic constant arb. constante symbolique permet simplement aux concepteurs d’applications
void 0 utilisé si pas de données RPC de ne pas se soucier de la représentation
string arb. chaîne de car. ASCII
locale des données
Olivier Glück - © 2017 M2 SRIV - Applications Systèmes et Réseaux 145 Olivier Glück - © 2017 M2 SRIV - Applications Systèmes et Réseaux 146
Olivier Glück - © 2017 M2 SRIV - Applications Systèmes et Réseaux 147 Olivier Glück - © 2017 M2 SRIV - Applications Systèmes et Réseaux 148
25
Génération de programme RPC Génération de programme RPC
! rpcgen est un outil de génération de programme ! rpcgen produit quatre fichiers source dont les
RPC produisant automatiquement le code pour : noms sont dérivés du nom du fichier de
! les procédures « stub » client et serveur spécification en entrée
un squelette de serveur
!
! Si le fichier en entrée est serv.x, les fichiers
les procédures XDR d'encodage/décodage des
!
générés sont :
paramètres et des résultats
! serv.h : déclarations des constantes et types
! l'envoi et la réception des messages RPC
utilisés dans le code généré pour le client et le serveur
! Le concepteur du programme RPC doit fournir un ! serv_xdr.c : procédures XDR utilisées par le client
fichier spécifiant et le serveur pour encoder/décoder les arguments
! la description des structures de données des ! serv_clnt.c : procédure « stub » côté client
paramètres et des résultats ! serv_svc.c : procédure « stub » côté serveur
! les fonctions réalisant le service désiré
Olivier Glück - © 2017 M2 SRIV - Applications Systèmes et Réseaux 151 Olivier Glück - © 2017 M2 SRIV - Applications Systèmes et Réseaux 152
26
Les RPC sous UNIX Les RPC sous UNIX
root@192.168.69.1# rpcinfo -p 192.168.90.2
! Sur le client (192.168.69.1)
program vers proto port
root@192.168.69.1# rpcinfo -u 192.168.69.2 nfs
100000 2 tcp 111 portmapper
100000 2 udp 111 portmapper rpcinfo: RPC: le programme n'est pas enregistré
100004 2 udp 954 ypserv Le programme 100003 n'est pas disponible.
100004 1 udp 954 ypserv root@192.168.69.1# rpcinfo -p 192.168.69.2
100004 2 tcp 957 ypserv Aucun programme enregistré sur l'hôte cible
100004 1 tcp 957 ypserv ! Sur le serveur (192.168.69.2)
100007 2 udp 959 ypbind root@192.168.69.2# rpcinfo -p 192.168.69.2
100007 1 udp 959 ypbind
No remote programs registered.
100007 2 tcp 962 ypbind
100007 1 tcp 962 ypbind root@192.168.69.2# rpcinfo -p | grep nfs
root@192.168.69.1# rpcinfo -u 192.168.90.2 ypserv 100003 2 udp 2049 nfs
program 100004 version 1 ready and waiting 100003 3 udp 2049 nfs
program 100004 version 2 ready and waiting ! Il faut autoriser les connexions RPC extérieures
Olivier Glück - © 2017 M2 SRIV - Applications Systèmes et Réseaux 157 Olivier Glück - © 2017 M2 SRIV - Applications Systèmes et Réseaux 158
27
Exemple de programmation C/S Un mini-inetd
icro
M
! 1. Quel est le service proposé par cette application client/serveur ? ! Voici la page man du programme mini-inetd ainsi que son code.
Combien d’arguments sont nécessaires au lancement du client ? ! 1. Complétez la partie DESCRIPTION de la page man. Représentez
Quels sont-ils ?
à l’aide d’un schéma/diagramme la structure algorithmique du
! 2. Quel port utilise le serveur ? Aurait-on pu choisir une autre
valeur ? Quel port utilise le client ? Comment est-il attribué et par programme.
quelle primitive ? S’agit-il d’une connexion en mode connecté ou ! 2. Dans le code ci-après, le code de la fonction tcp_listen() a
non et est-ce justifié ? volontairement été omis. Quelles sont les paramètres et la valeur de
! 3. A quoi correspondent les constants BUF_SIZE et QUEUE_SIZE ? retour de cette fonction ? Quelles sont les opérations qui doivent y
! 4. Quand est-ce que le serveur s’arrête ? Que fait le serveur une être réalisées et où les paramètres interviennent-ils ?
fois les initialisations terminées (décrire le cas où il y a des
connexions pendantes et le cas inverse) ? ! 3. Commentez le nom du programme. Quelles sont les différences et
! 5. Que se passe t-il si le client est lancé avant que le serveur n’ait similitudes entre mini-inetd et inetd ?
démarré ? ! 4. Comment modifieriez vous la structure donnée à la question 1
! 6. Quand est-ce que le client s’arrête si la connexion a réussi ? Que pour que mini-inetd puisse traiter plusieurs couples (port,
fait le client une fois la connexion établie ?
program) passés en arguments ?
! 7. Que pensez-vous de la structure actuelle du serveur ? Peut-il
satisfaire un grand nombre de connexions ? Expliquez. Proposez une
solution plus adaptée.
Olivier Glück - © 2017 M2 SRIV - Applications Systèmes et Réseaux 163 Olivier Glück - © 2017 M2 SRIV - Applications Systèmes et Réseaux 164
28