Communication en mode message asynchrone



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

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

Travaux Pratiques Introduction aux réseaux IP

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

Le protocole TCP. Services de TCP

Communication par sockets

Introduction. Adresses

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

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

II/ Le modèle OSI II.1/ Présentation du modèle OSI(Open Systems Interconnection)

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

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

Cours de sécurité. Pare-feux ( Firewalls ) Gérard Florin -CNAM - - Laboratoire CEDRIC -

UDP/TCP - Protocoles transport

Le modèle client-serveur

Réseaux et protocoles Damien Nouvel

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

Alexis Lechervy Université de Caen. M1 Informatique. Réseaux. Filtrage. Bureau S3-203

Internets. Informatique de l Internet: le(s) Internet(s) Composantes de l internet R3LR RENATER

Configuration automatique

NOTIONS DE RESEAUX INFORMATIQUES

DHCP et NAT. Cyril Rabat Master 2 ASR - Info Architecture des réseaux d entreprise

Dynamic Host Configuration Protocol

Cahier des charges. driver WIFI pour chipset Ralink RT2571W. sur hardware ARM7

L annuaire et le Service DNS

18 TCP Les protocoles de domaines d applications

Installation et configuration d un serveur DHCP (Windows server 2008 R2)

Introduction à la Programmation Parallèle: MPI

Firewall. Souvent les routeurs incluent une fonction firewall qui permet une première sécurité pour le réseau.

Réseaux IUP2 / 2005 IPv6

Services OSI. if G.Beuchot. Services Application Services Présentation - Session Services Transport - Réseaux - Liaison de Données - Physique

Ch2 La modélisation théorique du réseau : OSI Dernière maj : jeudi 12 juillet 2007

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

Chapitre 1: Introduction générale

Devoir Surveillé de Sécurité des Réseaux

Couche Transport TCP et UDP

Rappels réseaux TCP/IP

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

Résolution des problèmes de connexion XDMCP aux hôtes UNIX et Linux

Programmation Réseau. Anthony Busson IUT Info Lyon 1

Cisco Certified Network Associate

Windows Vista, Windows Server 2008, IPv6 et les applications. Bernard Ourghanlian Chief Technology & Security Officer Microsoft France

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

Plan. Programmation Internet Cours 3. Organismes de standardisation

Formateurs : Jackie DAÖN Franck DUBOIS Médiapôle de Guyancourt

Cours CCNA 1. Exercices

Domain Name System. F. Nolot

Mr. B. Benaissa. Centre universitaire Nâama LOGO

Administration UNIX. Le réseau

TP Linux : Firewall. Conditions de réalisation : travail en binôme. Fonctionnement du parefeu Netfilter. I Qu est ce qu'un firewall?

Tunnels. Plan. Pourquoi? Comment? Qu est-ce? Quelles solutions? Tunnels applicatifs ESIL INFO 2005/2006. Sophie Nicoud

Réseaux IUP2 / 2005 DNS Système de Noms de Domaine

Les messages d erreur d'applidis Client

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

Introduction aux Technologies de l Internet

ETI/Domo. Français. ETI-Domo Config FR

Communication sous UNIX les sockets

Chapitre : Les Protocoles

Algorithmique des Systèmes Répartis Protocoles de Communications

INTERNET & RESEAUX. Dino LOPEZ PACHECO lopezpac@i3s.unice.fr

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

Algorithmique et langages du Web

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

TABLE DES MATIERES. I. Objectifs page 2. II. Types de réseaux page 2. III. Transmission page 2. IV. Câbles page 3. V.

Chap.9: SNMP: Simple Network Management Protocol

Résolution de noms. Résolution de noms

Sécurité des réseaux Firewalls

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

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

OS Réseaux et Programmation Système - C5

Architectures Client-Serveur

Protocoles réseaux. Abréviation de Binary Digit. C'est la plus petite unité d'information (0, 1).

Installation d'un serveur DHCP sous Windows 2000 Serveur

MODULE I1. Plan. Introduction. Introduction. Historique. Historique avant R&T 1ère année. Sylvain MERCHEZ

Messagerie asynchrone et Services Web

Cours des réseaux Informatiques ( )

2. DIFFÉRENTS TYPES DE RÉSEAUX

Partie 1 : Architecture et communications Client/Serveur

Serveurs de noms Protocoles HTTP et FTP

Programmation Internet en Java

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

Partie II PRATIQUE DES CPL

Institut Supérieure Aux Etudes Technologiques De Nabeul. Département Informatique

Cours d'informatique «Internet» Session 1

Le Protocole DHCP. Définition. Références. Fonctionnement. Les baux

Module 1 : Introduction à TCP/IP

Plan. École Supérieure d Économie Électronique. Plan. Chap 9: Composants et systèmes de sécurité. Rhouma Rhouma. 21 Juillet 2014

TAGREROUT Seyf Allah TMRIM

Administration des ressources informatiques

SYSTÈME DE GESTION DE FICHIERS

Protocoles IP (2/2) M. Berthet. Les illustrations sont tirées de l ouvrage de Guy Pujolle, Cours réseaux et Télécom Contributions : S Lohier

RESEAUX TCP/IP: NOTIONS AVANCEES. Preparé par Alberto EscuderoPascual

Programmation client-serveur sockets - RPC

SYSTEME DE GESTION DES ENERGIES EWTS EMBEDDED WIRELESS TELEMETRY SYSTEM

Réseaux Locaux. Objectif du module. Plan du Cours #3. Réseaux Informatiques. Acquérir un... Réseaux Informatiques. Savoir.

Systèmes et Réseaux (ASR 2) - Notes de cours Cours 14

SYSTÈME DE GESTION DE FICHIERS SGF - DISQUE

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

Organisation du module

TR2 : Technologies de l'internet. Chapitre VII. Serveur DHCP Bootp Protocole, Bail Relais DHCP

Transcription:

Communication en mode message asynchrone Interfaces de mode message asynchrone Exemple de l interface socket Berkeley Anas ABOU EL KALAM - CNAM 1

Introduction: interfaces de mode message dans les réseaux Deux approches principales (++approches annexes) Comme interface d un service de niveau transport Comme interface d un service de niveau application mode unifié de communication par messages pour des applications Offrant des extensions plus ou moins significatives par rapport au niveau transport Anas ABOU EL KALAM - CNAM 2

Introduction: interfaces de mode message dans les réseaux Anas ABOU EL KALAM - CNAM 3

Les interfaces de "transport" en mode message asynchrone Communication de bout en bout : "End to end communication" Existence piles de protocoles de couches basses résumées au niveau transport NetBIOS ==> IPX/SPX ==> TCP/IP,... Existence d'interfaces logicielles pour l'accès à des piles de protocoles : API utilisable de préférence pour plusieurs piles Sockets, TLI, NetBEUI, APPC/CPI-C,... Transport Réseau Liaison Physique NetBEUI NetBIOS Anas ABOU RéseauEL KALAM - CNAM 4 Réseau Sockets TLI TCP IP Local Tubes nommés SPX IPX LU 6.2 APPN IEEE 802-2 - PPP MAC LLC / SNAP CPI-C APPC Voie point à point

Sockets Les API de "transport" (1) Interface de programmation pour la suite TCP/IP. 1981. Berkeley BSD. Le standard UNIX de facto. L'API sockets sous Windows est baptisée WinSock. TLI ("Transport Layer Interface") Proposition AT&T d'une interface TCP/IP pour System V, plus performante et plus indépendante du réseau sous-jacent (1986, 25 primitives). NetBEUI "NetBios Extended Basic Input Output System" Interface de programmation introduite en 1984 pour le PC Network (utilisé pour la pile NetBIOS") pile de protocoles pour les réseaux locaux (IBM et Microsoft). Utilisé pour la pile de communication SPX/IPX de Novell ("Sequenced Packed Exchange/ Internet Packet Exchange"). Anas ABOU EL KALAM - CNAM 5

Les API de "transport" (2) Les tubes nommés ("Named pipes") Interface d'échange entre processus IPC ("InterProcessCommunication") introduite sous UNIX BSD pour étendre la notion de tube. permettent de considérer les échanges réseaux comme des accès fichiers (disponibles sur TCP/IP, SPX/IPX). APPC et CPI-C "Advanced Program to Program Communication" et "Common Programming Interface for Communication. Pour architecture réseau incorporant tout type de matériels grands, moyens et petits systèmes sous le nom d'appn ("Advanced Peer to Peer Network"). CPI-C (40 primitives) simplifie l'interface APPC et masque les différences. Anas ABOU EL KALAM - CNAM 6

Interfaces d'application en mode message : notion de MOM MOM : "Message Oriented Middleware" 1993 : Consortium autour de IBM puis normalisation (OSI). A) Interface universelle pour des échanges en mode message asynchrone (qui cache les différentes API transport). B) Notion de files d'attentes de messages ("Message queues"): Les files d attente sont persistantes (sur disque) ou non persistantes. Avec file non persistante : comportement est celui du transport. Avec file persistante : un site qui n'est pas opérationnel sera atteint lors de son réveil (fonctionnement asynchrone similaire au courrier électronique) Produits commerciaux MQ series : Message Queues Series IBM. MSMQ : Microsoft Message Queueing. Autres produits: TIBCO, SUN. Anas ABOU EL KALAM - CNAM 7

Interfaces en mode message asynchrone Exemple d un service pour TCP et UDP : les sockets Berkeley Anas ABOU EL KALAM - CNAM 8

Généralités interface "socket" 1982 : API réseaux pour la version UNIX BSD. Deux programmes différents» Le serveur se met en attente de demandes (passif)» Le client initie le dialogue par une demande (actif) Objectifs Fournir des moyens de communications entre processus (IPC) utilisables en toutes circonstances: échanges locaux ou réseaux. Pour programmeur offre moyen d'utiliser des fonctions du SE semblables à celles qui régissent l'accès aux fichiers, e.g., lire&écrire données sur réseau comme il ferait sur système fichiers Pour usagers cacher détails d'implantation des couches transport. Si possible, cacher les différences entre protocoles de transport hétérogènes sous Anas une ABOU même interface EL KALAM (TCP, - Novell CNAM 9 XNS, OSI)

Analogie avec le téléphone Socket = point d accès au réseau pour couches transport désigne souvent l'ensemble min des infos permettant à un logiciel d'écouter les tentatives d'établissement de connexion réseau, e.g., @IP, protocole (souvent UDP ou TCP) et port... Comparable à un téléphone C est l extrémité d un canal de communication permettant l échange de donnée entre deux entités (les utilisateurs du téléphone) utilisateurs des téléphones Utilisateur demandeur applis/process qui utilisent ces sockets c est le client, c est lui qui compose num Utilisateur en attente coup fil c est le serveur, il décroche Anas ABOU EL KALAM - CNAM 10 Une fois la communication établie, elle est bi-directionnelle et symétrique

Exemple d utilisation d une application /etc/services client/serveur : appli SSH ssh 22/udp # SSH Remote Login Protocol ssh 22/tcp ssh toto.titi.fr # SSH Remote Login Protocol lance client en lui donnant nom DNS ou @ du serveur à connecter L appli consulte l annuaire DNS : toto.titi.fr -> 195.221.225.6 demande connexion avec socket du serveur (195.221.225.6, 22) socket côté client est (192.1.1.2, 3400) numéro port libre sur machine où tourne client (192.1.1.2) Il faut qu 1 serveur (process/demon) ssh soit lancé sur machine destination sshd (ps -aux grep sshd) Anas ABOU EL KALAM - CNAM 11

Exemple d utilisation d une application client/serveur : appli SSH /etc/services ssh 22/udp # SSH Remote Login Protocol ssh 22/tcp # SSH Remote Login Protocol ssh toto.titi.fr lance client en lui donnant nom DNS ou @ du serveur à connecter L appli consulte l annuaire DNS : toto.titi.fr -> 195.221.225.6 demande connexion avec socket du serveur (195.221.225.6, 22) socket côté client est (192.1.1.2, port libre, e.g., 3400) Serveur ssh (sshd) doit être lancé sur machine dest. (ps -aux grep sshd) Client Ssh toto.titi.fr Serveur Sshd Anas ABOU EL KALAM - CNAM 12

Exemple d utilisation d une application client/serveur : appli SSH Client Ssh toto.titi.fr Serveur Sshd Une fois communication établie, le flux de donnée peut être bi-directionnel NSAP,TSAP ==> communication est identifiée par le quadruplet: (@IP source, port source, @IP destination, port destination) Une adresse Internet: identifie la machine dans le réseau Un numéro de port: identifie l application sur la machine Anas ABOU EL KALAM - CNAM 13

Exemple d utilisation d une application client/serveur : annuaires Local Nom/adresses internet: fichier système (/etc/hosts) sur machine Global Nom/adresses internet: DNS (C/S, distribué) Local Application/numéro port: fichier système (/etc/services) sur machine Numéro port attribués aux applications standards (réservés<1024) Gestion num ports par l IANA A) Numéros de ports réservés pour des services généraux "well-known ports" (< 1023) Ex ports UDP : Echo server: 7, TFTP: 69 Ex ports TCP : Telnet: 23, DNS: 53, HTTP: 80. A) Numéros de ports enregistrés ( registered ) 1024<.<49151 : pour applis ayant fait une demande A) Numéros de ports privés ( private ) Anas ABOU EL KALAM - CNAM 14 49152<.<65535 : attribués dynamiquement aux sockets utilisateurs (clients)

Choix de conception des sockets avec TCP TCP : fiable, connexion, bidirectionnel, point à point connexion identifiée par @ socket des 2 extrémités socket TCP peut être utilisée par plusieurs connexions TCP simultanément Un échange TCP est orienté flot d'octets Les zones de données qui correspondent à des envois successifs ne sont pas connues à la réception Pour optimiser TCP peut tamponner les données et les émettre ultérieurement "push" : demander l'émission immédiate d'un segment. "urgent" : permettre l'échange rapide de données exceptionnelles avec signalement d'arrivée Anas ABOU EL KALAM - CNAM 15

Choix de conception des sockets avec UDP UDP : non fiable, sans connexion, bidirectionnel, point à point @ UDP d'une socket (Num port UDP, @ IP) Un échange UDP est sans connexion (échange de datagrammes). Les zones de données qui correspondent à des envois successifs sont respectées à la réception. Anas ABOU EL KALAM - CNAM 16

Exemple des protocoles et services de transport INTERNET Les primitives de l'interface socket Exemple en langage C en UNIX. Anas ABOU EL KALAM - CNAM 17

Choix de conception des sockets Une socket est analogue à un objet (de communication) Type : protocole de transport? sémantique de l'accès au service? Nom : identifiant unique sur chaque site (entier 16 bits) Ensemble de primitives : service pour l'accès aux fonctions de transport Données encapsulées : descriptif (pour sa désignation et sa gestion) files d'attente de messages en entrée et en sortie Anas ABOU EL KALAM - CNAM 18

Primitive socket Création d'un nouveau point d'accès de service transport définition de son type. allocation de l'espace des données. Trois paramètres d'appel Famille d'adresses réseaux utilisées : locale, réseau IP, réseau OSI... Type de la socket (du service) sémantique de la communication. Protocole de transport utilisé. Un paramètre résultat Numéro descripteur socket Profil d'appel de la primitive en C #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> int socket (int famille, int type, int protocole); Anas ABOU EL KALAM - CNAM 19

Primitive socket Récupération de sa propre adresse Permet de définir la socket locale int gethostname (char *nom, int longueur_nom) renseigne le nom de la machine sur laquelle s exécute la procédure On utilise ensuite gethostbyname pour avoir l adresse associée Récupération d un numéro de port alloué dynamiquement int getsockname(int socket, struct sockaddr_in *p_ad_s, int *len) *len doit contenir la longueur de la structure sockaddr_in Anas ABOU EL KALAM - CNAM 20

Socket: Accès à son @ et numéro port Récupération de sa propre adresse Permet de définir la socket locale int gethostname (char *nom, int longueur_nom) renseigne le nom de la machine sur laquelle s exécute la procédure On utilise ensuite gethostbyname pour avoir l adresse associée Récupération d un numéro de port alloué dynamiquement int getsockname(int socket, struct sockaddr_in *p_ad_s, int *len) *len doit contenir la longueur de la structure sockaddr_in Anas ABOU EL KALAM - CNAM 21

Socket: Installer nouvelle prise téléphone La fonction int socket (int domaine, int mode, int protocole) retourne un identificateur de socket (entier qui est un descripteur de fichier), -1 en cas d erreur domaine mode Identificateur: locale à la machine et n est pas connu par destinataire AF-INET : prise Réseau Internet PF-INET : prise pour utilisation locale (interne à machine entre process) SOCK_STREAM (pour TCP), SOCK_DGRAM (pour UDP), SOCK_RAW (pour IP) Anas ABOU EL KALAM - CNAM 22

Socket: Associer un numéro à la prise de téléphone La fonction int bind( int sock, sockaddr_in *p_adr_s, int lg_struct) sock: identificateur de la socket p_adr_s: pointeur vers structure contenant numéros à associer à socket (@IP et port) lg_struct: la longueur de la structure Structure sockaddr_in (A remplir avant l appel de bind) struct sockaddr_in { short sin_family"; /* famille d adresse"*/ } ushort sin_port"; /* numéro de port */ ulong sin_addr"; /* adresse de niveau 3": IP*/ char sin_zero [8]"; /* inutilisé (mis à zéro) */ Anas ABOU EL KALAM - CNAM 23

Socket: Numéros spéciaux Possibilité de laisser au système le choix d un num port libre au moment de l appel à la fonction bind C est intéressant dans le cas d un client Il suffit de mettre dans la structure sockaddr_in le champ sin_port à 0 Possibilité d associer à une socket l ensemble des adresses IP de la machine dans le cas où elle est connectée à plusieurs réseaux permettre dans le cas d un serveur d être accessible via ces différents réseaux Il suffit de remplir dans la structure sockaddr_in le champ sin_addr par la constante INADDR_ANY Anas ABOU EL KALAM - CNAM 24

Socket: Appel d un numéro et établissement communication par le client Préciser les numéros du destinataire (serveur) Remplir une structure sockaddr_in avec numéros du destinataire Appeler la fonction d établissement de communication qui dépend du protocole (UDP ou TCP) Anas ABOU EL KALAM - CNAM 25

Cas client mode non connecté : établissement de la communication par le client Pas d établissement de connexion préalable on envoie le premier paquet de donnée int sendto (int sock, char *data, int lg_data, struct sockaddr_in *p_ad_s, int flags, int lg_struct) Data: Les données tableau (ou chaîne) de caractères à envoyer Lg_data : leur longueur sockaddr_in : structure contenant les numéros du destinataires Flags : non utilisé, à mettre à 0 Retour : Si erreur ==> -1 Sinon ==> le nombre d octets Anas ABOU EL KALAM - CNAM 26

Cas serveur mode non-connecté : Attente d appel sur un téléphone Mettre en place la prise (socket) et lui affecter des numéros (bind) Se tenir prêt à recevoir des coups de fil des clients Dans cas UDP, cela se manifeste par l envoi d un 1er paquet de donnée int recvfrom (int sock, char *data, int lg_data, struct sockaddr_in *p_ad_s, int flags, int lg_struct) Data: tableau (ou chaîne) de caractères reçu (rempli par la fonction) p_ad_s: structure remplie par recvfrom et qui contient les numéros du client qui vient d envoyer ces données Retour : Si erreur ==> -1 Sinon ==> le nombre d octets Anas ABOU EL KALAM - CNAM 27

Cas UDP : Un appel téléphonique Le récepteur possède un buffer d une taille fixe Une fois le premier paquet émis Le serveur peut aussi envoyer des données au client Anas ABOU EL KALAM - CNAM 28

Cas client TCP : établissement de la communication par le client Il y a l établissement d une connexion préalable les données seront envoyées ensuite int connect (int sock, struct sockaddr_in *p_ad_s, int lg_struct) p_ad_s : structure contenant les numéros du destinataires Retour : Connexion réussie ==> 0 Sinon ==> -1 Anas ABOU EL KALAM - CNAM 29

Cas serveur TCP : Attente d appel sur un téléphone Mettre en place la prise (socket) et lui affecter des numéros (bind) Se tenir prêt à recevoir des coups de fil des clients int listen (int sock, int nb_requete) sock: identificateur socket dont on a renseigné précédemment numéros nb_requete: nombre maximale de requête pouvant être mémorisé en attendant un traitement par le serveur Anas ABOU EL KALAM - CNAM 30

Cas serveur TCP : Acceptation d un appel sur un téléphone Le serveur peut accepter une demande de communication sur une socket précédemment mise en attente (listen) int accept ( int sock, struct sockaddr_in *p_ad_s, int lg_struct) sock : identificateur de la socket en attente p_ad_s: structure qui est remplie par recvfrom et qui contient les numéros du client qui vient d envoyer ces données cette fonction est bloquante si il n y a pas eu de demande de connexion de client ATTENTION: elle retourne un nouvel identificateur de socket mais portant les même numéros (port et adresse). C est sur cette nouvelle socket que peuvent se faire les échanges Anas ABOU EL KALAM - CNAM 31

Cas TCP : Un appel téléphonique Anas ABOU EL KALAM - CNAM 32

Cas TCP : On parle dans le téléphone Une fois la connexion établie le client peut envoyer et recevoir des données, le serveur aussi (après l accept) int write ( int sock, char *data, int lg_data) Data: Le tableau (ou chaîne) de caractères reçu (rempli par la fonction) Lg_data : on précise la taille du tableau Retourne nombre d octets effectivement envoyés, -1 s il y a une erreur int read ( int sock, char *data, int lg_data) Data: Le tableau (ou chaîne) de caractères à envoyer Lg_data : on précise la taille du tableau Retourne le nombre d octets effectivement reçus, -1 s il y a une erreur Anas ABOU EL KALAM - CNAM 33

Le problème de la langue Données ne sont pas représentées de la même façon suivant processeurs ==> Il faut passer par un traducteur avant de les envoyer sur réseau short int htons (short int x) retourne l entier court (2 octets) à la norme réseau de x (passé en norme machine) ===> Home to Network short int htonl (short int x) retourne l entier long (4 octets) à la norme réseau de x short int ntohs (short int x) Retourne l entier court (2 octets) à la norme machine de x (passé en norme réseau) ===> Network to Host short int ntohl (short int x) retourne l entier long (4 octets) à la norme réseau de x Anas ABOU EL KALAM - CNAM 34

Cas de UDP et TCP : Fin communication Il faut maintenant raccrocher le téléphone int close ( int sock) Retourne -1 si il y a une erreur Fermeture complète, on ne peut plus envoyer ou recevoir de données La connexion est complètement fermée et libérée une fois que le client et le serveur on fait close la fermeture est symétrique: client ou serveur peut commencer la fermeture int shutdown ( int sock, int sens) On peut préciser sens fermeture==> connexion pas complètement fermée 0 fermeture en entrée 1 fermeture en sortie 2 fermeture dans les deux sens: équivalent à un close Retourne -1 si il y a une erreur, 0 sinon Anas ABOU EL KALAM - CNAM 35

Les options On peut consulter/modifier des options sur des sockets allouées Exemples Taille du buffer de réception, d émission Définition de socket multicast Réception/émission de paquets broadcast Priorité... Fonction int getsockopt Consultation des options en cours Fonction int setsockopt Modification des options Anas ABOU EL KALAM - CNAM 36

Approfondissement des paramètres de la primitive socket Paramètre Famille AF_UNIX : Communication locale (i-node) AF_INET : Communication Internet AF_ISO : Communication ISO... Paramètre Type SOCK_STREAM : Flot d'octets en mode connecté (ne préserve pas les limites de l'enregistrement) SOCK_DGRAM : Datagramme en mode non connecté (préserve les limites de l'enregistrement) SOCK_RAW : Accès aux couches basses. SOCK_SEQPACKET : Format structuré ordonné (protocoles différents de l'internet) Paramètre Type de protocole Valeur Relation avec le paramètre type IPPROTO_TCP SOCK_STREAM IPPROTO_UDP SOCK_DGRAM IPPROTO_ICMP SOCK_RAW IPPROTO_RAW SOCK_RAW Anas ABOU EL KALAM - CNAM 37

Primitive bind Primitive pour l'attribution d'une adresse de socket à un descripteur de socket. N est pas réalisé lors de la création du descriptif (socket). Un serveur (qui accepte des connexions) doit définir sur quelle adresse. Un client (qui ouvre des connexions) n'est pas forcé de définir une adresse (qui est alors attribuée automatiquement). Profil d'appel de la primitive #include <sys/types.h> #include <sys/socket.h> int bind ( int s, struct sockaddr_in *mon_adresse, int longueur_mon_adresse ) Trois paramètres d'appel Numéro du descriptif de Socket (s). Structure de donnée adresse de socket Pour internet type sockaddr_in. Longueur de la structure Anas d'adresse. ABOU EL KALAM - CNAM 38

Approfondissement concernant la primitive bind Descripteur d'adresse de socket #include <sys/socket.h> struct sockaddr_in { short sin_family; u_short sin_port; struct in_addr sin_addr; char sin_zero[8]; }; Un exemple d'exécution de "bind" pour les protocoles Internet. struct servent *sp struct sockaddr_in sin /* Pour connaître le numéro de port */ if((sp=getservbyname(service,"tcp")==null) /* cas d'erreur */ /* Remplissage de la structure sockaddr */ /* htonl convertit dans le bon ordre */ /* INADDR_ANY adresse IP du site local */ sin.sin_family= AF_INET; sin.sin_port = sp -> s_port; sin.sin_addr.s_addr=htonl(inaddr_any): /* Création d'une socket internet */ if ((s=socket(af_inet,sock_stream,0))<0) /* cas d'erreur */ /* Attribution d'une adresse */ if (bind(s, &sin, sizeof(sin)) < 0) Anas ABOU /* cas d'erreur EL KALAM */ - CNAM 39

Primitive listen s Utilisé dans le mode connecté lorsque plusieurs clients sont susceptibles d'établir plusieurs connexions avec un serveur. Indique le nombre d'appel maximum attendu pour réserver l'espace nécessaire aux descriptifs des connexions. La primitive listen est immédiate (non bloquante). Profil d'appel : int listen (int s, int max_connexion) : Référence du descripteur de socket max_connexion : Nombre maximum de connexions. Anas ABOU EL KALAM - CNAM 40

Primitive accept La primitive accept permet de se bloquer en attente d'une nouvelle demande de connexion (donc en mode connecté TCP). Après accept, la connexion est complète entre les deux processus. Le site qui émet accept exécute une ouverture passive. Pour chaque nouvelle connexion entrante la primitive fournit un pointeur sur un nouveau descriptif de socket qui est du même modèle que le descritif précédemment créé. Profil d'appel #include <sys/types.h> #include <sys/socket.h> int accept ( int ns, struct sockaddr_in *addr_cl, int lg_addr_cl) ns : Référence nouvelle socket addr_cl : L'adresse du client. lg_addr_cl: La longueur de l'adresse. Anas ABOU EL KALAM - CNAM 41

Approfondissement concernant les primitives listen et accept Exemple de code UNIX : pour un serveur qui accepte des connexions successives et qui créé un processus pour traiter chaque client. #include <sys/socket.h> /* Adresse socket du client appelant */ struct sockaddr_in from; quelen =... ; if (listen (s, quelen) <0 ) Cas d'erreur /* On accepte des appels successifs */ /* Pour chaque appel on créé un processus */ if((g=accept(f,&from,sizeof(from)))<0) Cas d'erreur if ( fork... /* Processus traitant de connexion*/ Anas ABOU EL KALAM - CNAM 42

Primitive connect La primitive connect (bloquante) permet à un client de demander l'ouverture (active) de connexion à un serveur. L'adresse du serveur doit être fournie. La partie extrémité locale relative au client est renseignée automatiquement. Ensuite le client ne fournit plus l'adresse du serveur pour chaque appel mais le descriptif de la socket (qui contient l adresses serveur). Profil d'appel #include <sys/types.h> #include <sys/socket.h> int connect ( int s, struct sockaddr_in *addr_serv, int lg_addr_serv) s : La référence de la socket addr_serv : L'adresse du serveur. lg_addr_serv : La longueur de l'adresse. Anas ABOU EL KALAM - CNAM 43

Primitives send, recv Les primitives send, recv (bloquantes) permettent l'échange effectif des données. Le profil d'appel est identique à celui des primitives read et write sur fichiers avec un quatrième paramètre pour préciser des options de communications. Profil d'appel #include <sys/types.h> #include <sys/socket.h> int send (int s, char *zone, int lg_zone, int options_com) int recv (int s,char *zone, int lg_zone, int options_com) s : La référence de la socket zone : La zone à échanger. lg_zone : La longueur de la zone. options_com : Les options (données urgentes,...) Anas ABOU EL KALAM - CNAM 44

Primitives sendto, recvfrom Les primitives sendto, recvfrom permettent l'échange des données dans le mode non connecté UDP. On doit préciser l'adresse destinataire dans toutes les primitives sendto et l'adresse émetteur dans les recvfrom. Profil d'appel #include <sys/types.h> #include <sys/socket.h> int sendto ( int s, char *zone, int lg_zone, int options_com, struct sockaddr_in *addr_dest, int lg_addr) int recvfrom (int s, char *zone, int lg_zone, int options_com, struct sockaddr_in *addr_emet, int *lg_addr) addr_dest : L'adresse du destinataire. addr_emet : L'adresse de l'émetteur. lg_addr : La longueur de l'adresse. Anas ABOU EL KALAM - CNAM 45

Primitives shutdown, close Shutdown permet la terminaison des échanges sur une socket suivi de la fermeture de la connexion : Profil d appel : int shutdown(s, h); Pour la socket s. h = 0 : l usager ne veut plus recevoir de données h = 1 : l usager ne veut plus envoyer de données h = 2 : l usager ne veut plus ni recevoir, ni envoyer. Close : Permet la fermeture d'une connexion et la destruction du descriptif. Profil d'appel #include <sys/types.h> #include <sys/socket.h> int close ( int s ) Anas ABOU EL KALAM - CNAM 46

Résumé : Interface socket Fonctionnement en TCP - Serveur. socket bind listen accept recv, send close - Client. socket connect recv, send close Fonctionnement en UDP socket recvfrom, sendto close Anas ABOU EL KALAM - CNAM 47

En Travaux pratiques : Compilation et debugage client.c et serveur.c prêt à l emploi Récupération des arguments passés au moment du lancement client 192.0.1.1 2200 udp serveur 2200 udp makefile pour compiler fon.c, fon.h avec client.c et serveur.c Commandes: make, make clean Mode debug possible (voir dans le makefile : -DDEBUG) pour avoir des traces d exécution à l écran des primitives des sockets Pour tester votre client indépendamment du serveur, vous pouvez utiliser socklab pour dialoguer avec votre programme Anas ABOU EL KALAM - CNAM 48

Cas TCP : Serveur à traitement itératif des clients demandes de connexion sont mémorisés par TCP en attente de traitement La socket passive est toujours à l écoute Les connexions sont traitées les unes après les autres à travers la socket générée par la fonction accept Anas ABOU EL KALAM - CNAM 49

Cas UDP : Serveur à traitement itératif des clients les paquets reçus sont mémorisés dans un buffer en attente de réception Si le dialogue se résume à l échange de deux paquets (question/ réponse), on traite successivement les demandes Si le dialogue est plus compliqué (dialogue à état) Il va y avoir mélange des demandes de comms et des échanges dans des communications déjà établies Il faut alors créer une nouvelle socket à la main (comme le fait l accept) et continuer le dialogue sur cette nouvelle socket Cette socket est forcément sur un port différent Ce nouveau port doit donc être communiqué au client au moment de sa demande de communication Anas ABOU EL KALAM - CNAM 50

Cas UDP : Serveur à traitement itératif des clients - Question/réponse Anas ABOU EL KALAM - CNAM 51