Travaux Pratiques Réseaux Programmation réseau - Sockets, Modèle Client-serveur Septembre 2007. Eléments de programmation avec les sockets



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

Programmation Réseau. Anthony Busson IUT Info Lyon 1

Communication par sockets

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

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

Communication sous UNIX les sockets

Introduction. Adresses

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

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

Programmation client-serveur sockets - RPC

Programmation système de commandes en C

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

Programmation Internet en Java

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

Exercice sur les Dockers

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

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

Partie 1 : Architecture et communications Client/Serveur

Programmation Réseau en C sous Unix

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

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

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

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

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

SSL ET IPSEC. Licence Pro ATC Amel Guetat

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

Intérêt du NAT (Network Address Translation) Administration Réseau Niveau routage. Exemple d Intranet. Principe NAT

Chapitre : Les Protocoles

Chapitre 1: Introduction générale

Résolution de noms. Résolution de noms

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

Copyright. Partie 1 : Architecture et communications Client/Serveur. Plan de la première partie. Remerciements. Les modules SPAI/AdminSR

1.Introduction - Modèle en couches - OSI TCP/IP

GESTION DES FICHIERS C/UNIX

Plan. Programmation Internet Cours 3. Organismes de standardisation

Cours de Système : Gestion de Fichiers

Introduction à la Programmation Parallèle: MPI

Configuration automatique

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

Algorithmique des Systèmes Répartis Protocoles de Communications

Master d'informatique 1ère année. Réseaux et protocoles. Architecture : les bases

le minimum pour communiquer par réseau (sans toutefois y comprendre grand chose)

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

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

Chapitre I. La couche réseau. 1. Couche réseau 1. Historique de l Internet

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

Les Réseaux Privés Virtuels (VPN) Définition d'un VPN

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

18 TCP Les protocoles de domaines d applications

2. DIFFÉRENTS TYPES DE RÉSEAUX

UDP/TCP - Protocoles transport

Introduction aux Technologies de l Internet

VLAN Virtual LAN. Introduction. II) Le VLAN. 2.1) Les VLAN de niveau 1 (Port-based VLAN)

Computer Networking: A Top Down Approach Featuring the Internet, 2 nd edition. Jim Kurose, Keith Ross Addison-Wesley, July ENPC.

//////////////////////////////////////////////////////////////////// Administration systèmes et réseaux

Le modèle client-serveur

Cisco Certified Network Associate

Ethernet Industriel Réseaux Ethway Coupleur Ethernet sur Automates Programmables. Plan. Contexte

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

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

Fonctionnement Kiwi Syslog + WhatsUP Gold

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

Cours 6 : Tubes anonymes et nommés

Configurer ma Livebox Pro pour utiliser un serveur VPN

Le protocole TCP. Services de TCP

Outils d'analyse de la sécurité des réseaux. HADJALI Anis VESA Vlad

Le Client/Serveur avec Enterprise Miner version 4

Chap.9: SNMP: Simple Network Management Protocol

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

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

Les Serveurs sous Linux

Network musical jammin

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

ADSL. Étude d une LiveBox. 1. Environnement de la LiveBox TMRIM 2 EME TRIMESTRE LP CHATEAU BLANC CHALETTE/LOING NIVEAU :

OS Réseaux et Programmation Système - C5

Architecture TCP/IP. Protocole d application. client x. serveur y. Protocole TCP TCP. TCP routeur. Protocole IP IP. Protocole IP IP.

La sécurité des réseaux. 9e cours 2014 Louis Salvail

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

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

Plan Général Prévisionnel (1/2) Internet et Outils L1/IO François Armand. Plan Général Prévisionnel (2/2) Unix, Réseau: Plan

Cours des réseaux Informatiques ( )

Saisie sur un ordinateur OS/390 Ici sur jedi.informatik.uni-leipzig.de ou

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

PROGRAMME DETAILLE. Parcours en première année en apprentissage. Travail personnel CC + ET réseaux

Tout sur les Réseaux et Internet

Cisco Certified Network Associate

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

Outils de l Internet

Projet gestion d'objets dupliqués

NOTIONS DE RESEAUX INFORMATIQUES

Cours 6 : Programmation répartie

L annuaire et le Service DNS

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

Rappel: Le routage dans Internet. Contraintes. Environnement et contraintes. La décision dans IP du routage: - Table de routage:

Serveur FTP. 20 décembre. Windows Server 2008R2

Réseaux. DNS (Domaine Name System) Master Miage 1 Université de Nice - Sophia Antipolis. (second semestre )

Transcription:

Master INFORMATIQUE / MIAGE Réseaux Faculté des Sciences - Université de Nantes 2007/2008 Travaux Pratiques Réseaux Programmation réseau - Sockets, Modèle Client-serveur Septembre 2007 Eléments de programmation avec les sockets 1 Généralités sur les sockets Un socket constitue un mécanisme de communication entre processus du système Unix (mais pas exclusivement). Il sert d interface entre les applications et les couches réseau. Il existe pour cela une bibliothèque (ensemble de fonctions/primitives) permettant de gérer les services de communication offerts par les sockets. Ces fonctions sont décrites dans la suite. Le principe général de la communication entre applications (dites serveur et client ) est illustré dans la figure??. Machine 1 Machine 2 Application client Application serveur lire/ecrire socket de communication avec le client processus fils lire/ecrire? socket à l écoute d autres clients FIG. 1 Principe général de la communication avec des sockets Il y a plusieurs types de socket. Le type de socket dépend des caractéristiques de la communication que l on souhaite établir à l aide du socket : unicité des envois (pas de doublons), respect de la séquentialité des envois, efficacité de distribution et sécurité, autorisation de messages hors-normes (out-of-bande), c est un message délivré hors du flux normal des données, support de mode connecté, possibilité de rendez-vous entre les processus communicants par l intermédiaire des sockets. Un socket est toujours dans un domaine de communication et son type est défini par rapport aux propriétés du domaine de communication. 1

Un domaine de communicaton est une famille abstraite qui définit un mode d adressage (standard d adressage) et un ensemble de protocoles utilisables par les sockets. Il existe une variété de domaines : UNIX, INTERNET, X25, DECNET, APPLETALK, ISO, SNA, On retrouve tous les domaines dans le fichier <socket.h> : #define AF_UNIX 1 #define AF_INET 2 Modes de communication On distingue : les sockets en mode connecté (protocole TCP sous IP). Ces sockets ouvrent une liaison bidirectionnelle sécurisée et séquentielle antre deux processus, et garantissent l unicité des transferts. Le mode séquentiel établit un circuit virtuel de communication point à point. les sockets à base de datagramme en mode non connecté (protocole UDP sous IP). Ces sockets permettent le transfert de fichiers de façon bidirectionnelle mais de garantissent ni l unicité, ni la séquentialité des transferts. Ce mode n est pas fiable, il peut y avoir des pertes. les sockets en mode caractère (raw socket). Ce type de socket fonctionne en mode datagramme et est destiné aux utilisateurs qui développent de nouveaux protocoles. Mise en œuvre L approche courante de mise en œuvre des sockets consiste à utiliser le modèle client/serveur illustré par la figure??. Client Serveur Sockets Sockets Protocole transport Protocole réseau Driver FIG. 2 Modèle client/serveur 2 Principales fonctions Tous les applications réseaux utilisant les sockets ont un squelette type selon le mode avec connexion ou sans connexion. La figure?? illustre l architecture d une application en mode connecté. La figure?? illustre l architecture d une application en mode connecté. 2

socket() socket() bind() connect() listen() Connexion Accept() write() Echange de données read() read() write() close() close() FIG. 3 Architecture des programmes avec connexion Création d un scocket #include <types.h> /* relativement au répertoires <linux> ou <sys> pour unix. */ /* idem, et dans toute la suite du document */ int socket(int domaine, int type, int protocole); La fonction retourne -1 en cas d erreur sinon un descripteur du socket créé. La fonction socket crée un nouveau socket en précisant son type de protocole avec les paramètres domaine et type. Le paramètre domaine désigne la famille de protocoles auquel appartient le socket ; par exemple AF_UNIX pour le protocole interne à unix et AF_INET pour le protocole IP (Internet). Le paramètre type identifie le type de protocole ; par exemple SOCK_STREAM pour le mode connecté, c est TCP pour le protocole IP) ou SOCK_DGRAM pour le mode non connecté (connectionless), c est d UDP pour le protocole IP. Le paramètre protocole est généralement initialisé à 0. Il faut noter que seule la partie protocole associée au socket est initialisée. Les autres le seront par d autres appels système. descrsoc = socket(pf_inet, SOCK_STREAM, 0); Ce fragment de programme crée, lorsque la fonction s est bien terminée, un nouveau socket de type PF_INET et retourne son descripteur dans la variable descrsoc. 3

socket() socket() bind() sendto() recvfrom() Echange de données recvfrom() sendto() close() close() FIG. 4 Architecture des programmes sans connexion Liaison d un socket à une machine (adr. IP) La fonction bind lie un socket déjà créé à l adresse d une machine. int bind(int soc, const struct sockaddr *stradsoc, int longstradsoc); La fonction bind définit l adresse locale et le port local de l association. Pour TCP/IP, le second argument est const struct sockaddr_in * stradsoc. longstradsoc est la taille effective de la structure d adresse pointée par le second argument. local_addr->sin_family = AF_INET; local_addr->sin_addr.s_addr = htonl(inaddr_any); local_addr->sin_port = htons(numport); bind(soc, (struct sockaddr *)local_addr, sizeof(struct sockaddr_in)); Ce fragment de programme initialise l adresse locale local_addr à celle d une interface de la machine dans le doamine AF_INET et le port local de l association à numport. Les primitives htonl et htons permettent de faire les conversions nécessaires à la portabilité du code. La fonction de connexion à une machine via un socket Dans le mode connecté, un client doit se connecté au serveur avant les traitements. 4

int connect(int soc, struct sockaddr *stradsocdist, int longsrtadsoc); La fonction connect établit une connexion avec un serveur. Elle retourne 0 si tout s est bien terminé sinon -1 en cas d erreur. soc est le socket local du client. stradsocdist pointe sur l adresse du socket avec lequel la connexion sera établie (les champs IP distant, port distant étant préalablement renseignés). La fonction connect est blocante. Elle ne rend la main que lorsque la connexion est effectivement établie ou s il y a une erreur de connexion. char *nomhote = "leserveur"; struct sockaddr_in distant; /* pour préparer l adressage de la machine distante struct hostent *infodistant; /* va contenir les infos sur la machine distante infodistant = gethostbyname(nomhote); /* recup des infos sur la machine distante /* créez d abord un socket, soc = socket() */ distant->sin_family = AF_INET; distant->sin_addr.s_addr = *(u_long *)infodistant->h_addr[0]; distant->sin_port = htonl(numport); /* numport etant connu */. connect(soc, (struct sockaddr *)&distant, sizeof(struct sockaddr_in)); Ce fragment de programme connecte le socket soc du processus client sur le port numport de l hôte (distant) nommé "leserveur". La fonction d écoute int listen(int soc, int taillequeue); La fonction listen retourne -1 en cas d erreur sinon 0 si tout s est bien terminée. Elle est utilisée par un serveur pour se mettre à l écoute des connexions venant des clients. taillequeue indique le nombre maximum de demandes de connexion pouvant être en attente de traitement (acceptation) pour le serveur. listen(s,7); Permet de fixer à 7 le nombre de connexions en attente d être acceptées par le serveur. La fonction d acceptation des connexions Après avoir effectué listen, le serveur en mode connecté peut attendre une demande de connexion des clients (avec la focntion accept). 5

int accept(int soc, struct sockaddr *adr, int *longadr); La fonction accept retourne -1 en cas d erreur sinon le descripteur d un nouveau socket. La fonction accept prend à chaque fois la première demande de connexion en attente. Elle crée un nouveau socket ayant les mêmes propriétés que soc. S il n y a pas de demande en attente, accept est blocante. Le descripteur du nouveau socket créé est retourné comme résultat. Le socket soc passé en paramètre a déjà ses champs (protocole, adresse locale et port local) renseignés. adr est le résultat qui contient l adresse du client connecté. longadr pointe sur la taille de la structure retournée. /* préparez une structure adrcl pour garder les infos sur le client */ longstrcli = sizeof(struct sockaddr_in); nouvsoc = accept(soc, (struct sockaddr *)adrcl, &longstrcli)) ; retourne dans nouvsoc, un nouveau descripteur de socket (ayant les mêmes propriétés que soc) et dans adrcl, les informations concernant le client qui vient d établir la connexion. Les fonctions de transfert de données int write(int soc, char *pbuf, int nreste); int read(int soc, char *pbuf, int noct); /* pbof : pnteur sur un buffer de caractères, nreste : taille du buffer */ int send(int soc, const char *mesg, int longmesg, int flags); int recv(int soc, char *buffer, int longmesg, int flags); int sendto(int soc, const char *mesg, int longmesg, int flags, const struct sockaddr *vers, int longvers); int recvfrom(int soc, char *buffer, int longmesg, int flags, struct sockaddr *de, int *longde); Toutes ces fonctions systèmes retournent -1 en cas d erreur ; sinon elles retournent la taille des données effectivement envoyées ou lues. Les fonctions read et write marchent en mode connecté. Elles sont semblables aux focntions d écriture lecture de fichiers. Les fonctions send et sendto sont utilisées pour envoyer un message mesg de taille longmesg à un destinataire.utilisées pouir les messages hors normes. La fonction sendto est utilisé pour le mode sans connexion. Le paramètre vers de taille longvers désigne le destinataire. Les fonctions recv et recvfrom sont utilisées pour recevoir des messages à travers les sockets. recvfrom est utilisée dans le mode sans connexion 6

La fonction de fermeture de socket int close(int descrsoc); La fonction close permet de fermer un socket dont on donne le descripteur. Dans le cas du mode TCP (protocole avec transmission fiable), le système essaie d envoyer les données restantes avant de fermer le socket. Divers appels système htonl, htons, ntohl, ntohs Les fonctions htonl, htons, ntohl, ntohs permettent de s affranchir des problèmes de différence entre architectures d ordinateurs, systèmes d exploitation et réseaux. Ces différences se manifestent à travers des formats de données. Ces fonctions réalisent donc les conversions de format entre l architecture de la machine courante et le format utilisé sur le réseau (avec les protocoles Internet ou autres, ). getsockname #include <types.h> #include <socket.h> int getsockname(int soc, struct sockaddr *nom, int *longnom); Cette fonction retourne -1 en cas d erreur ; sinon elle retourne 0 et dans nom, le nom du socket soc et dans longnom, sa longueur. getpeername int getpeername(int soc, struct sockaddr *strsoc, int *longstrsoc); Cette fonction système retourne -1 en cas d erreur sinon 0 et dans strsoc, la structure associée au socket auquel le socket soc est connecté et dans longstrsoc, la longueur de ce nom. setsockopt, getsockopt, ioctl, fcntl Ce sont diverses fonctions système qui permettent de consulter et de modifier des options d un socket. Quelques références bibliographiques et "webographiques" Il y a une littérature abondante sur le sujet. Ici nous donnons juste quelques points d entrée. M. Gabassi L informatique répartie sous unix, Eyrolles, 1992 L. Toutain, Réseaux locaux et Internet, Hermès J-M. Rifflet, La communication sous Unix, MacGraw Hill, 1990 R.F. Tong Tong, Les communications sous Unix, Eyrolles, 1993 R. Stoeckel, Communication et Unix, Armand Colin, 1990 Brian Hall, Beej s Guide to Network Programming Using Internet Sockets, site web Jan Newmarch, Socket-level Programming, site web 7