M3101 Principes des systèmes d exploitation. Les sockets



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

Travaux Pratiques Introduction aux réseaux IP

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

Communication par sockets

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

Programmation Réseau. Anthony Busson IUT Info Lyon 1

Communication sous UNIX les sockets

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

Programmation Réseau en C sous Unix

Le protocole TCP. Services de TCP

Introduction. Adresses

Programmation Internet en Java

GESTION DES FICHIERS C/UNIX

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

Exercice sur les Dockers

Internet - Outils. Nicolas Delestre. À partir des cours Outils réseaux de Paul Tavernier et Nicolas Prunier

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

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

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

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

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

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

Vue d'ensemble de NetFlow. Gestion et Supervision de Réseau

Rappels réseaux TCP/IP

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

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

Skype (v2.5) Protocol Data Structures (French) Author : Ouanilo MEDEGAN

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

Nmap (Network Mapper) Outil d exploration réseau et scanneur de ports/sécurité

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

Programmation système de commandes en C

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

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

pare - feu généralités et iptables

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

Cours de Système : Gestion de Fichiers

Fonctionnement Kiwi Syslog + WhatsUP Gold

Playing with ptrace() for fun and profit

Cours 6 : Tubes anonymes et nommés

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

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

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

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

CREER UN ENREGISTREMENT DANS LA ZONE DNS DU DOMAINE

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

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

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

Gestion et Surveillance de Réseau

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

Analyse de sécurité de logiciels système par typage statique

Algorithmique des Systèmes Répartis Protocoles de Communications

Sécurisation du réseau

EPREUVE PRATIQUE DES TECHNIQUES INFORMATIQUES ACTIVITE N 1. Thème de l activité : Configuration d un firewall

Programmation client-serveur sockets - RPC

Pour plus de détails concernant le protocole TCP conférez vous à la présentation des protocoles Internet enseignée pendant.

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

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

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

DIGITAL NETWORK. Le Idle Host Scan

UDP/TCP - Protocoles transport

ALOHA LOAD BALANCER METHODE DE CONTROLE DE VITALITE

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

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

OS Réseaux et Programmation Système - C5

Programmation impérative

Sécuriser son réseau. Sécuriser son réseau Philippe Weill (IPSL/LATMOS) Frédéric Bongat (SSI/GOUV/FR)

SSH, le shell sécurisé

Master 1 ère année. UE Réseaux Avancés I. Corrections décembre Durée : 2h Documents autorisés

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

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

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

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

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

Développement d applications Internet et réseaux avec LabVIEW. Alexandre STANURSKI National Instruments France

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

Couche Transport TCP et UDP

Les clés d un réseau privé virtuel (VPN) fonctionnel

Outils de l Internet

Le modèle client-serveur

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

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3.

Network musical jammin

Supervision de réseau

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

Cours 6 : Programmation répartie

L3 informatique TP n o 2 : Les applications réseau

La collecte d informations

TP4 : Firewall IPTABLES

Programmation système I Les entrées/sorties

Réseaux et protocoles Damien Nouvel

Internet et Multimédia Exercices: flux multimédia

Conventions d écriture et outils de mise au point

Plan. Programmation Internet Cours 3. Organismes de standardisation

La VOIP :Les protocoles H.323 et SIP

SSL ET IPSEC. Licence Pro ATC Amel Guetat

L annuaire et le Service DNS

Installation du client

Chapitre : Les Protocoles

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

Transcription:

M3101 Principes des systèmes d exploitation Les sockets IUT d Orsay DUT Informatique 2015 / 2016

Les sockets Une interface de communication bidirectionnelle entre les processus résidant dans le même système (domaine Unix) résidant dans des systèmes distants (domaine Internet) manipulés à l aide de descripteurs de fichiers Sockets datagramme «boîte aux lettres» échange de messages individuels pas de connexion UDP : pas de garantie de réception, ni d ordre Sockets stream «appel téléphonique» échange de flux de données nécessite une connexion TCP : assure la réception dans le bon ordre 2 / 17

Communication via les sockets datagramme Client Créer la socket sclient = socket(...) Serveur Créer la socket sserveur = socket(...) Attacher la socket à une adresse bind(sserveur,...) Communiquer sendto(sclient,...) recvfrom(sclient,...) Fermer la socket close(sclient) Communiquer recvfrom(sserveur,...) sendto(sserveur,...) Fermer la socket close(sserveur) 3 / 17

Communication via les sockets stream Client Créer la socket sclient = socket(...) Serveur Créer la socket secoute = socket(...) Attacher la socket à une adresse bind(secoute,...) Passer la socket en mode écoute listen(secoute,...) Demander une connexion connect(sclient,...) Communiquer write(sclient,...) read(sclient,...) Fermer la connexion shutdown(sclient,...) close(sclient) Accepter une connexion sservice = accept(secoute,...) Communiquer read(sservice,...) write(sservice,...) Fermer la connexion shutdown(sservice,...) close(sservice) Fermer la socket d écoute close(secoute) 4 / 17

Créer une socket int socket(int domaine, int type, int protocole); domaine portée de communication AF_UNIX ou AF_LOCAL dans le même système AF_INET ou AF_INET6 via les réseaux Internet type type de communication SOCK_DGRAM sockets datagramme SOCK_STREAM sockets stream protocol protocole de communication 0 valeur par défaut Renvoie le descripteur de la nouvelle socket ou 1 en cas d erreur 5 / 17

Nécessaire pour les serveurs, possible pour les clients Attacher la socket à une adresse int bind( int sockfd, /* descripteur de la socket */ struct sockaddr* adresse, /* pointeur vers l adresse */ socklen_t longueur_adresse); /* longueur de l adresse */ Le type réel d adresse varie selon le domaine de la socket AF_UNIX struct sockaddr_un nom d un fichier AF_INET struct sockaddr_in adresse IPv4 + port AF_INET6 struct sockaddr_in6 adresse IPv6 + port Conversion de types (type casting) est nécessaire au moment de l appel Renvoie 0 en cas de succès et 1 en cas d erreur par exemple, si le port demandé est déjà utilisé 6 / 17

La structure d adresse AF_INET struct sockaddr_in { unsigned short sin_family; /* domaine : AF_INET */ uint16_t sin_port; /* numéro de port */ struct in_addr sin_addr; } /* structure d adresse IP */ struct in_addr { uint32_t s_addr; } /* adresse IPv4 sur 32 bit */ Adresse et port sont stockés en format réseau (network byte order) : XXxx Également, toutes données numériques sont transmises en format réseau Les nombres entiers sont en format hôte (host byte order) : xxxx ou XXxx La traduction est nécessaire : ntohs() network-to-host 16 bit htons() host-to-network 16 bit ntohl() network-to-host 32 bit htonl() host-to-network 32 bit 7 / 17

Attacher la socket à une adresse unsigned short port = 80; // par exemple HTTP struct sockaddr_in addr = {0}; // initialiser à zéro addr.sin_family = AF_INET; // domaine IPv4 addr.sin_port = htons(port); // port en format réseau addr.sin_addr.s_addr = htonl(inaddr_any); // toute // adresse locale int se = socket(af_inet, SOCK_STREAM, 0); // socket d écoute if (se == -1) { perror("error socket()"); exit(1); } int ok = bind(se, (struct sockaddr*) &addr, sizeof(addr)); if (ok == -1) { perror("error bind()"); exit(1); } INADDR_ANY attacher la socket à toutes les interfaces réseau locales 8 / 17

Passer la socket en mode écoute Sockets stream côté serveur : int listen(int sockfd, int nbpendants); sockfd descripteur de la socket d écoute nbpendants nombre maximal de demandes en attente d acceptation Renvoie 0 en cas de succès et 1 en cas d erreur 9 / 17

Demander une connexion Sockets stream côté client : int connect( int sockfd, /* descripteur de la socket */ struct sockaddr* adresse, /* pointeur vers l adresse */ socklen_t longueur_adresse); /* longueur de l adresse */ Le type réel d adresse varie selon le domaine de la socket Conversion de types (type casting) est nécessaire au moment de l appel Appel bloquant : connect() attend la réponse du serveur la demande de connexion acceptée par le serveur renvoie 0 la demande refusée ou le délai maximum dépassé renvoie 1 TCP : un paquet SYN est envoyé au serveur distant 10 / 17

Demander une connexion unsigned short port = 80; // par exemple HTTP struct sockaddr_in addr = {0}; // initialiser à zéro addr.sin_family = AF_INET; // domaine IPv4 addr.sin_port = htons(port); // port en format réseau addr.sin_addr.s_addr = inet_addr("127.0.0.1"); // par exemple // localhost int sc = socket(af_inet, SOCK_STREAM, 0); // socket de client if (sc == -1) { perror("error socket()"); exit(1); } int ok = connect(sc, (struct sockaddr*) &addr, sizeof(addr)); if (ok == -1) { perror("error bind()"); exit(1); } uint32_t inet_addr(char *adresse) chaîne vers adresse IP 11 / 17

Accepter une demande de connexion Sockets stream côté serveur : int accept( int sockfd, /* descripteur de la socket */ struct sockaddr* adresse, /* pointeur vers l adresse */ socklen_t* longueur_adresse); /* pointeur vers la longueur */ Écrit l adresse du client connecté dans *adresse Si on ne s y intéresse pas : accept(sockfd, NULL, NULL); Appel bloquant : accept() attend une demande de connexion Renvoie le descripteur de la nouvelle socket de service ou 1 si erreur TCP : le noyau établit la connexion même si on n appelle pas accept() finalisation du three-way handshake : SYN SYN+ACK ACK accept() renvoie les descripteurs pour les connexions établies 12 / 17

Recevoir des données sockets stream int read(int sockfd, const void *tampon, size_t nboct); Renvoie le nombre d octets lus ( nboct) ou 1 en cas d erreur Les données lues disparaissent de la socket il n y pas de lseek() Appel bloquant : si le tampon de réception est vide read() attend l arrivée de nouvelles données Si la connexion est fermée ou semi-fermée (voir shutdown()) read() renvoie 0 (end-of-file) 13 / 17

Envoyer des données sockets stream int write(int sockfd, const void *tampon, size_t nboct); Renvoie le nombre d octets envoyés ou 1 en cas d erreur Appel bloquant : si le tampon d envoi est plein write() attend que l interlocuteur consomme les données envoyées Si la connexion est fermée ou semi-fermée (voir shutdown()) le processus reçoit un signal SIGPIPE et write() renvoie 1 14 / 17

Recevoir des données sockets datagramme int recvfrom( int sockfd, /* descripteur de la socket */ void* tampon, /* zone de réception */ size_t nboct, /* taille max du message */ int drapeaux, /* défaut : 0 */ struct sockaddr* adresse, /* pointeur vers l adresse */ socklen_t* longueur_adresse); /* pointeur vers la longueur */ Renvoie le nombre d octets lus ( nboct) ou 1 en cas d erreur Si nboct < la taille du message reçu le reste du message est perdu Appel bloquant : si le tampon de réception est vide recvfrom() attend l arrivée de nouveaux datagrammes 15 / 17

Envoyer des données sockets datagramme int sendto( int sockfd, /* descripteur de la socket */ const void* tampon, /* adresse du message */ size_t nboct, /* taille du message */ int drapeaux, /* défaut : 0 */ struct sockaddr* adresse, /* pointeur vers l adresse */ socklen_t longueur_adresse); /* longueur de l adresse */ Renvoie le nombre d octets envoyés ou 1 en cas d erreur Appel bloquant : si le tampon d envoi est plein sendto() attend que le noyau décharge le tampon 16 / 17

Terminer la connexion Sockets stream : int shutdown(int sockfd, int sens); sockfd descripteur de la socket sens SHUT_RD fermer en lecture SHUT_WR fermer en écriture SHUT_RDWR fermer dans les deux sens Renvoie 0 en cas de succès et 1 en cas d erreur TCP : fermeture de connexion en lecture le système répond par un paquet RST à tout octet reçu en écriture le système envoie un paquet FIN à l interlocuteur Ne pas oublier de fermer le descripteur : close(sockfd); 17 / 17