# R3.05 # Programmation système 2024 Pomme Pompeani CC-BY-SA-NC --- ## Inter Process Communication ---- Moyen d'échanger de l'information entre des processus s'exécutant éventuellement sur des machines distantes ---- ## Cas d'utilisation - Coordination / Synchronisation - Calculs parallèles - Modularité - Sécurité : séparation des privilèges ---- ## Exemples - Internet - Site web - Jeu en ligne - Partage de fichiers ---- ## Principales difficultés - Type des données - Comment mettre d'accord les processus ? - Processus codés - par des personnes différentes - à des moments différents - dans des langages différents - Sérialisation / Désérialisation ---- ## Principales difficultés - Identification des destinataires - Comment savoir à qui envoyer les données ? - Comment rester efficace ? - Latence et débit à l'exécution - Configuration des destinataires ---- ### Bas niveau - Orienté "octet" - Flux d'information direct - Lecture/écriture d'octets ### Haut niveau - Orienté "message" - Envoie/reçoit des structures de données - Passe par l'usage de bibliothèques ---- ## Transport - Local : - Tubes - Unix Domain Sockets - Distant : - Sockets (TCP / UDP) --- ## Sockets --- ## À quoi ça sert ? - À utiliser l'internet - Communication Inter Processus (IPC) - Architecture client-serveur ---- ## C'est quoi ? - Un fichier ! - Un objet donné par le noyau aux programmes utilisateur - L'objet qui permet de communiquer via le réseau ---- ## Vue générale
--- ## Vue réseau Une socket, c'est : - Une adresse locale - Une adresse IP - Un numéro de port - Un protocole de transport (TCP, UDP, ...) ---- ## Vue réseau Exemples : - le serveur DNS de Google →
8.8.8.8
:
53
/UDP - le site web cours.ppom.fr →
54.37.74.51
:
80
/TCP - le serveur mail de l'IUT →
194.254.119.195
:
25
/TCP --- ## Vue applicative Une socket, c'est : - Un fichier ouvert - Un *socket descriptor* / *file descriptor* ---- ## Types de socket - **TCP** : Socket réseau, mode connecté - **UDP** : Socket réseau, mode non connecté - **Raw** : Socket réseau, sans protocole transport - **Unix domain** : Socket locale, entre processus locaux --- ## Architecture Client-Serveur Modèle d'interaction inter-processus le plus répandu ---- ## Architecture Client-Serveur Le serveur - "Écoute" sur un port : attend 1-N connexions - Répond aux requêtes des clients - Après établissement d'une connexion (TCP) - Une par une (UDP) ---- ## Architecture Client-Serveur Le client - Doit connaitre l'adresse et le port du serveur - Se connecte au serveur (TCP) - Envoie ses requêtes - Reçoit des réponses ---- ## Algorithmes - Client UDP - Serveur UDP - Client TCP - Serveur TCP ---- ## Client UDP
---- ## Serveur UDP
---- ## Client-Serveur UDP
---- ## Client TCP
---- ## Serveur TCP
---- ## Client-Serveur TCP
--- ## Ordre des octets *Endianness*
- Internet utilise l' encodage *big endian* - CPUs x86 : encodage *little endian* - CPUs ARM : plus souvent encodage *big endian* ---- #### Fonctions de conversion
16 bits
32 bits
`h`ost `to n`etwork
`htons`
`htonl`
`n`etwork `to h`ost
`ntohs`
`ntohl`