Cours de Réseau et communication Unix n 4



Documents pareils
Cours 6 : Tubes anonymes et nommés

Programmation système de commandes en C

1. Fonctionnement de l Internet 2. Protocoles applicatifs 3. Programmation réseau

Applications client/serveur TCP/IP - Sockets Rappels. C.Crochepeyre Applications CS 1

GESTION DES FICHIERS C/UNIX

Le système de gestion des fichiers, les entrées/sorties.

Plan global. Programmation système II. Socket du domaine UNIX. Plan. Socket UNIX, Terminaux, Async IO, Mémoire, ELF.

Cours de Système : Gestion de Fichiers

Communication sous UNIX les sockets

Communication par sockets

LA COUCHE TRANSPORT CONTRÔLE LE FLOT DE DONNEES TRANSMISES par la couche Réseau

Travaux Pratiques Introduction aux réseaux IP

Programmation Réseau. Anthony Busson IUT Info Lyon 1

Cours Programmation Système

Programmation système en C/C++

Communication inter-processus (IPC) : tubes & sockets. exemples en C et en Java. F. Butelle

Playing with ptrace() for fun and profit

3IS - Système d'exploitation linux - Programmation système

Exécutif temps réel Pierre-Yves Duval (cppm)

LEs processus coopèrent souvent pour traiter un même problème. Ces

Unix/Linux I. 1 ere année DUT. Université marne la vallée

Programmation Internet en Java

Dans le chapitre 1, nous associions aux fichiers ouverts des descripteurs de fichiers par lesquels nous accédions aux fichiers.

Programmation Réseau en C sous Unix

Introduction aux Systèmes et aux Réseaux

Programmation système I Les entrées/sorties

6 - Le système de gestion de fichiers F. Boyer, UJF-Laboratoire Lig, Fabienne.Boyer@imag.fr

TRAVAUX PRATIQUES Programmation Système Langage C / Système UNIX. 2 e année Génie Informatique

École Polytechnique de Montréal. Département de Génie Informatique et Génie Logiciel. Cours INF2610. Contrôle périodique.

Introduction. Adresses

Gestion répartie de données - 1

Programmation Réseau. ! UFR Informatique ! Jean-Baptiste.Yunes@univ-paris-diderot.fr

C.M. 1 & 2 : Prise en main de Linux

Arguments d un programme

Les processus. Système L3, /39

DUT Informatique Module Système S4 C Département Informatique 2009 / Travaux Pratiques n o 5 : Sockets Stream

Protocoles DHCP et DNS

VoIP et "NAT" VoIP et "NAT" 1/ La Traduction d'adresse réseau. 1/ La traduction d'adresse réseau. 1/ La traduction d'adresse réseau

03/04/2007. Tâche 1 Tâche 2 Tâche 3. Système Unix. Time sharing

Archivage Messagerie Evolution pour usage HTML en utilisant Hypermail

Programmation impérative

OS Réseaux et Programmation Système - C5

Projet gestion d'objets dupliqués

Service FTP. Stéphane Gill. Introduction 2

Mise en route et support Envision 10 SQL server (Avril 2015) A l'intention de l'administrateur SQL Server et de l administrateur Envision

STS SE. FreeRTOS. Programmation réseau WIFI. Programmation réseau. Socket Tcp. FlyPort smart Wi-Fi module

Développement d un logiciel de messagerie instantanée avec Dotnet (version simplifiée)

Couche application. La couche application est la plus élevée du modèle de référence.

Sauvegarde des données au LAAS

Systèmes d exploitation

Architecture d un système d exploitation

Bon ben voilà c est fait!

1 Mesure de la performance d un système temps réel : la gigue

Processus! programme. DIMA, Systèmes Centralisés (Ph. Mauran) " Processus = suite d'actions = suite d'états obtenus = trace

Comment configurer Kubuntu

Tunnels et VPN. 22/01/2009 Formation Permanente Paris6 86

SYSTÈME DE GESTION DE FICHIERS SGF - DISQUE

TP : Introduction à TCP/IP sous UNIX

Capture, Filtrage et Analyse de trames ETHERNET avec le logiciel Wireshark. Etape 1 : Lancement des machines virtuelles VMWARE et de Wireshark

Journée Josy/PLUME. Outils logiciels libres utiles à tout ASR CUPS. Maurice Libes. Centre d'océanologie de Marseille UMS 2196 CNRS

Services Réseaux - Couche Application. TODARO Cédric

Aide-Mémoire unix. 9 février 2009

Introduction à la Programmation Parallèle: MPI

20/09/11. Réseaux et Protocoles. L3 Informatique UdS. L3 Réseaux et Protocoles. Objectifs du cours. Bibliographie

Gestion des fichiers. Telecom-ParisTech BCI Informatique

Administration UNIX. Le réseau

SYSTÈME DE GESTION DE FICHIERS

L3 informatique Réseaux : Configuration d une interface réseau

Cours 6 : Programmation répartie

Introduction aux Technologies de l Internet

L annuaire et le Service DNS

Présentation du modèle OSI(Open Systems Interconnection)

Initiation à la Programmation en Logique avec SISCtus Prolog

Rapport final. Mise en place du réseau d'une entreprise de taille moyenne. Date de rendu : 18/07/2011 Promotion : 4PPA SRS

Filtrage IP MacOS X, Windows NT/2000/XP et Unix

CREER UN ENREGISTREMENT DANS LA ZONE DNS DU DOMAINE

Réseaux et protocoles Damien Nouvel

DE L ALGORITHME AU PROGRAMME INTRO AU LANGAGE C 51

Les structures. Chapitre 3

VPN TLS avec OpenVPN. Matthieu Herrb. 14 Mars 2005

Serveurs de noms Protocoles HTTP et FTP

Plan. Le système de transfert de fichiers d'internet. Introduction aux systèmes de transfert de fichiers Le protocole FTP.

Université Pierre Mendès France U.F.R. Sciences de l Homme et de la Société Master IC²A. TP réseau firewall

ClariLog - Asset View Suite

TP SECU NAT ARS IRT ( CORRECTION )

Réalisation d un portail captif d accès authentifié à Internet

DNS Server RPC Interface buffer overflow. Céline COLLUMEAU Nicolas BODIN

Réseau - VirtualBox. Sommaire

Exercice sur les Dockers

Le protocole TCP. Services de TCP

2. MAQUETTAGE DES SOLUTIONS CONSTRUCTIVES. 2.2 Architecture fonctionnelle d un système communicant.

TP1 - Prise en main de l environnement Unix.

Qu'est-ce qu'un processus: Définitions

Python Les fondamentaux du langage

Internet Protocol. «La couche IP du réseau Internet»

TP2 - Conguration réseau et commandes utiles. 1 Généralités. 2 Conguration de la machine. 2.1 Commande hostname

Système de Gestion de Fichiers

Enoncé du TP 7 Réseaux

FTPS AVEC UNE APPLIANCE FAST360 EN COUPURE. Table des matières

Le service FTP. M.BOUABID, Page 1 sur 5

Transcription:

Cours de Réseau et communication Unix n 4 Edouard THIEL Faculté des Sciences Université d Aix-Marseille (AMU) Septembre 2014 Les transparents de ce cours sont téléchargeables ici : http://pageperso.lif.univ-mrs.fr/~edouard.thiel/ens/rezo/ Lien court : http://j.mp/rezocom Edouard.Thiel@univ-amu.fr Cours de Réseau et communication Unix n 4 CC BY-NC 1/28

Plan du cours n 4 1. Les tubes nommés 2. Les sockets 3. Les sockets dans le domaine Unix Edouard.Thiel@univ-amu.fr Cours de Réseau et communication Unix n 4 CC BY-NC 2/28

1 - Les tubes nommés Points de communication du Système de Gestion de Fichiers. Edouard.Thiel@univ-amu.fr Cours de Réseau et communication Unix n 4 CC BY-NC 3/28

Tubes Tube anonyme Pour communiquer par un tube anonyme, deux processus ont besoin d une relation de parenté pour connaître les descripteurs. Disparaît avec les processus Tube nommé Type spécial de fichier Persistant dans le SGF Plus de parenté nécessaire Droits avec chmod Le buffer est en mémoire, pas sur le disque Edouard.Thiel@univ-amu.fr Cours de Réseau et communication Unix n 4 CC BY-NC 4/28

Étapes Les étapes de l existence d un tube nommé : 1. Création 2. Ouverture 3. Lecture ou écriture 4. Fermeture 5. Suppression Edouard.Thiel@univ-amu.fr Cours de Réseau et communication Unix n 4 CC BY-NC 5/28

Création d un tube nommé en bash Commande : mkfifo [-m mode] fichier1... Crée un tube nommé pour chacun des fichiers en argument En option : les droits (syntaxe chmod) Droits par défaut : 0666 - umask Exemple : <> mkfifo -m u=rw,go=r tube0 <> ls -l tube0 prw-r--r-- 1 thiel thiel 0 oct. 2 18:29 tube0 Edouard.Thiel@univ-amu.fr Cours de Réseau et communication Unix n 4 CC BY-NC 6/28

Création d un tube nommé en C #include <sys/types.h> #include <sys/stat.h> int mkfifo(const char *pathname, mode_t mode); Crée un tube nommé de nom pathname, avec les droits en octal : mode & ~umask Renvoie 0 succès, -1 erreur Une fois créé, un tube nommé persiste tant que l on ne l efface pas explicitement (rm ou unlink). Edouard.Thiel@univ-amu.fr Cours de Réseau et communication Unix n 4 CC BY-NC 7/28

Ouverture d un tube nommé Un tube nommé peut être ouvert en lecture ou écriture : une ou plusieurs fois ; par tout processus disposant des droits suffisants. Ouverture par open : int open(const char *pathname, O_RDONLY) O_WRONLY) Renvoie le descripteur 0, sinon -1 erreur. en lecture en écriture open bloquant s il n y a pas au moins 1 lecteur et 1 écrivain synchronisation Rendre l ouverture non bloquante : open (..,.. O_NONBLOCK) Edouard.Thiel@univ-amu.fr Cours de Réseau et communication Unix n 4 CC BY-NC 8/28

Lecture ou écriture En théorie, les 2 extrémités d un tubes doivent avoir été ouverte avant de passer des données. #include <unistd.h> ssize_t read (int fd, void *buf, size_t count); ssize_t write(int fd, const void *buf, size_t count); Même comportement que pour les tubes anonymes : buffer de taille limitée, peut être vide ou plein ; caractères agglutinés ; write sur un tube sans lecteur SIGPIPE et renvoie -1. read sur un tube vide sans écrivain renvoie 0. (En mode non bloquant, comportement différent) Edouard.Thiel@univ-amu.fr Cours de Réseau et communication Unix n 4 CC BY-NC 9/28

Fermeture d un tube nommé Idem tube anonyme : #include <unistd.h> int close(int fd); Si le dernier lecteur fait close, du côté écrivain : write SIGPIPE, renvoie -1, errno=epipe Si le dernier écrivain fait close, du côté lecteur : read réussit tant que le buffer du tube n est pas vide tous les read suivants renvoient 0 (fin de tube) si on fait close, read renvoie -1 avec errno = EBADF Edouard.Thiel@univ-amu.fr Cours de Réseau et communication Unix n 4 CC BY-NC 10/28

Exemple avec cat Terminal 1 Terminal 2 mkfifo tube0 cat > tube0 cat < tube0 ez-draw ez-draw ^D cat > tube0 helium ^D cat < tube0 helium Edouard.Thiel@univ-amu.fr Cours de Réseau et communication Unix n 4 CC BY-NC 11/28

Suppression d un tube nommé En bash : rm pathname En C : #include <unistd.h> int unlink(const char *pathname); Renvoie 0 succès, -1 échec. Effet commun : supprime ce nom dans le répertoire décrémente le compteur de liens matériels dans le i-node correspondant sur le disque. Si le compteur de liens matériels est à 0 et si le compteur de référence dans TIM est à 0, alors le i-node est libéré. Edouard.Thiel@univ-amu.fr Cours de Réseau et communication Unix n 4 CC BY-NC 12/28

Remarques Si 2 processus dialoguent via un tube nommé, la suppression du tube est sans effet sur le dialogue (Il disparaitra physiquement après les close). On peut supprimer un tube nommé temporaire après open Les tubes nommés ne sont pas bidirectionnels Il faut 2 tubes pour dialoguer Si on ouvre un tube nommé plusieurs fois en écriture : concaténation en lecture : bagarre On peut utiliser cat pour déboguer un programme Edouard.Thiel@univ-amu.fr Cours de Réseau et communication Unix n 4 CC BY-NC 13/28

2 - Les sockets Descripteurs de fichiers spéciaux pour le réseau. Edouard.Thiel@univ-amu.fr Cours de Réseau et communication Unix n 4 CC BY-NC 14/28

Introduction aux sockets Littéralement prises (de courant) Mécanisme général de communication entre processus locaux (sur une même machine) distants (sur machines différentes) Introduit dans BSD 4.2 en 1981 Entre processus locaux : sockets dans le domaine Unix via un nom de socket dans le SGF (à l instar des tubes nommés). Entre processus distants : sockets dans le domaine Internet avec une adresse IP et un numéro de port. Edouard.Thiel@univ-amu.fr Cours de Réseau et communication Unix n 4 CC BY-NC 15/28

Différences par rapport aux tubes nommés Un tube nommé est un point de rendez-vous, connu des 2 processus. Une socket est une adresse unique : pour que 2 processus dialoguent, chacun crée sa propre socket, puis s adresse à l autre socket. Par analogie : numéro de téléphone, ou adresse postale Communication bidirectionnelle Un dialogue = 2 sockets Edouard.Thiel@univ-amu.fr Cours de Réseau et communication Unix n 4 CC BY-NC 16/28

Autres propriétés Une socket est représentée par un descripteur peut être hérité, dupliqué, redirigé, scruté, etc On fait d abord l ouverture d une socket, puis son nommage. l ouverture crée un descripteur de type socket, sans adresse le nommage le rattache à une adresse Edouard.Thiel@univ-amu.fr Cours de Réseau et communication Unix n 4 CC BY-NC 17/28

Domaines Une socket se spécialise dans un domaine de communication. Les domaines définis dans <sys/socket.h> pour Linux : Nom Description Man page AF_UNIX Communications locales unix AF_INET Internet IPv4 ip AF_INET6 Internet IPv6 ipv6 AF_IPX Novell IPX AF_NETLINK Communication avec le noyau netlink AF_X25 X25 (minitel, etc ; désuet) x25 AF_AX25 AF_ATMPVC AF_APPLETALK Appletalk Radio amateur AX.25 Raw ATM Permanent Virtual Conn. ddp AF_PACKET Interface bas niveau (root) packet Edouard.Thiel@univ-amu.fr Cours de Réseau et communication Unix n 4 CC BY-NC 18/28

Types de sockets Il existe différents types de sockets, selon la nature des communications que l on veut réaliser. Les propriétés en jeu sont : P1 Fiabilité : tout message envoyé arrive au destinataire P2 Séquencement : les messages arrivent dans l ordre d envoi P3 Non duplication : un message envoyé n arrive qu une fois P4 Datagramme : un message de taille limitée, reçu en 1 fois, sans troncature ni concaténation (vs flux) P5 Connexion : nécessité d établir une connexion P6 Priorité : possibilité d envoyer des messages prioritaires Edouard.Thiel@univ-amu.fr Cours de Réseau et communication Unix n 4 CC BY-NC 19/28

Principaux types de sockets Constantes symboliques dans <sys/socket.h> SOCK_RAW SOCK_DGRAM SOCK_STREAM datagrammes, bas niveau (root) datagrammes, non connecté, non fiable flux, connecté, fiabilité max (P1+P2+P3) SOCK_RDM Reliable Delivery Messages : datagrammes, non connecté, fiabilité max SOCK_SEQPACKET datagrammes, connecté, fiabilité max SOCK_DCCP Datagram Congestion Control Protocol : bas niveau (linux only) Edouard.Thiel@univ-amu.fr Cours de Réseau et communication Unix n 4 CC BY-NC 20/28

Création d une socket Pour créer une socket : #include <sys/types.h> #include <sys/socket.h> int socket(int domain, int type, int protocol); Renvoie 0 le descripteur de la socket, sinon -1 erreur domain type AF_UNIX, AF_INET, etc SOCK_DGRAM, SOCK_STREAM, etc protocol 0 pour le protocole par défaut : protocole UDP pour SOCK_DGRAM protocole TCP pour SOCK_STREAM Fermeture d une socket : avec close Edouard.Thiel@univ-amu.fr Cours de Réseau et communication Unix n 4 CC BY-NC 21/28

Attachement à une adresse Après sa création, une socket n est qu un descripteur, relié à aucune adresse, et connu que du processus. Attachement à une adresse = étape nécessaire pour qu un autre processus puisse dialoguer (il doit avoir sa propre socket). #include <sys/types.h> #include <sys/socket.h> int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen); Renvoie 0 succès, -1 erreur. sockfd la socket addr adresse d un struct contenant l adresse de la socket casté en (struct sockaddr*) addrlen taille du struct effectivement passé Edouard.Thiel@univ-amu.fr Cours de Réseau et communication Unix n 4 CC BY-NC 22/28

3 - Les sockets dans le domaine Unix Sockets identifiées par un nom dans le SGF. Edouard.Thiel@univ-amu.fr Cours de Réseau et communication Unix n 4 CC BY-NC 23/28

Communication locale Réservées à la communication sur une même machine. Ne passe pas par la pile réseau du système efficacité 1) Création : int socket (AF_UNIX, int type, 0); 2) Attachement avec bind à une adresse dans le SGF, de type struct sockaddr_un bind crée un fichier de type socket dans le SGF Visible avec ls -l : s en premier Suppression : par rm ou unlink Edouard.Thiel@univ-amu.fr Cours de Réseau et communication Unix n 4 CC BY-NC 24/28

Type struct sockaddr_un Le struct sockaddr est générique, il faut lui substituer un type d adresse propre au domaine : #include <sys/socket.h> #include <sys/un.h> #define UNIX_PATH_MAX 108 /* sous Linux */ struct sockaddr_un { sa_family_t sun_family; /* AF_UNIX */ char sun_path[unix_path_max]; /* pathname */ }; Le champ sun_path contient le nom dans le SGF que l on veut donner à la socket ; ne doit pas déjà exister. Edouard.Thiel@univ-amu.fr Cours de Réseau et communication Unix n 4 CC BY-NC 25/28

Exemple complet /* Inclure stdio.h, stdlib.h, unistd.h, string.h, sys/types.h, sys/socket.h, sys/un.h */ int sockfd; struct sockaddr_un adr; sockfd = socket (AF_UNIX, SOCK_DGRAM, 0); if (sockfd < 0) { perror ("socket"); exit (1); } adr.sun_family = AF_UNIX; strncpy (adr.sun_path, "/tmp/sock0", UNIX_PATH_MAX); adr.sun_path[unix_path_max-1] = 0; if (bind (sockfd, (struct sockaddr *) &adr, sizeof(adr)) < 0) { perror ("bind"); exit (1); } /*... */ close (sockfd); unlink (adr.sun_path); Edouard.Thiel@univ-amu.fr Cours de Réseau et communication Unix n 4 CC BY-NC 26/28

Liste des socket unix La commande netstat affiche la liste des sockets du système et leur état. netstat -x netstat -f unix Linux MacOS <> netstat -x head -8 Sockets du domaine UNIX actives (sans serveurs) Proto Type State I-Node Chemin unix DGRAM 1903 /var/run/wpa_supplicant/eth1 unix DGRAM 8326 /dev/log unix STREAM CONNECTE 70892 /tmp/.x11-unix/x0 unix STREAM CONNECTE 70225 unix STREAM CONNECTE 68411 /tmp/dbus-z7bolyfuin Edouard.Thiel@univ-amu.fr Cours de Réseau et communication Unix n 4 CC BY-NC 27/28

Sous Windows Sous Windows, l équivalent des sockets existe sous le nom de winsocks. #include <winsock2.h> SOCKET WSAAPI socket( _In_ int af, // AF_INET,.. mais pas AF_UNIX _In_ int type, // SOCK_DGRAM, SOCK_STREAM,.. _In_ int protocol // 0 ); int bind( _In_ SOCKET s, _In_ const struct sockaddr *name, // à caster _In_ int namelen ); Edouard.Thiel@univ-amu.fr Cours de Réseau et communication Unix n 4 CC BY-NC 28/28