Cours de Réseau et communication Unix n 5

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

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

Programmation Réseau. Anthony Busson IUT Info Lyon 1

Programmation Réseau en C sous Unix

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

Communication par sockets

Travaux Pratiques Introduction aux réseaux IP

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

UDP/TCP - Protocoles transport

Programmation client-serveur sockets - RPC

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

GESTION DES FICHIERS C/UNIX

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

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

Programmation système de commandes en C

Cours 6 : Tubes anonymes et nommés

Playing with ptrace() for fun and profit

Programmation Internet en Java

Introduction à la Programmation Parallèle: MPI

OS Réseaux et Programmation Système - C5

TD n o 8 - Domain Name System (DNS)

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

Cours de Système : Gestion de Fichiers

Fonctionnement Kiwi Syslog + WhatsUP Gold

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

FTP-SSH-RSYNC-SCREEN au plus simple

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

Communication sous UNIX les sockets

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

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

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

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

Réseaux IUP2 / 2005 IPv6

Cours de Systèmes d Exploitation

FILTRAGE de PAQUETS NetFilter

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

Partie 1 : Architecture et communications Client/Serveur

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

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

Analyse du réseau local

Programmation Réseau SSH et TLS (aka SSL)

Introduction aux Technologies de l Internet

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

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

Déclarer un serveur MySQL dans l annuaire LDAP. Associer un utilisateur DiaClientSQL à son compte Windows (SSO)

Dynamic Host Configuration Protocol

Introduction. Adresses

Couche Transport TCP et UDP

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

Travaux pratiques. Compression en codage de Huffman Organisation d un projet de programmation

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

Déclarer un serveur MySQL dans l annuaire LDAP. Associer un utilisateur DiaClientSQL à son compte Windows (SSO)

Le modèle client-serveur

Projet gestion d'objets dupliqués

Java et les bases de données

L outil Nmap-Stateful. Olivier Courtay Thomson R&D / IRISA

Formation Iptables : Correction TP

COMMANDES RÉSEAUX TCP/IP WINDOWS.

IPv6 et EGEE: Migration d un système d information complexe vers IPv6, glite

Gestion distribuée (par sockets) de banque en Java

Service de noms des domaines (Domain Name System) Cours administration des services réseaux M.BOUABID,

INF8007 Langages de script

Année Universitaire session 1 d automne Parcours : CSB5 Licence 3 STS Informatique

Introduction aux Systèmes et aux Réseaux

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

Windows Internet Name Service (WINS)

Brefs rappels sur la pile et le tas (Stack. / Heap) et les pointeurs

Administration UNIX. Le réseau

Auto-évaluation Programmation en Java

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

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

18 TCP Les protocoles de domaines d applications

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

Le Tunneling DNS. P.Bienaimé X.Delot P.Mazon K.Tagourti A.Yahi A.Zerrouki. Université de Rouen - M2SSI. 24 février 2011

Les firewalls libres : netfilter, IP Filter et Packet Filter

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

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

Chap III : Les tableaux

Architecture des ordinateurs

Compromettre son réseau en l auditant?

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

Poker. A rendre pour le 25 avril

ARDUINO DOSSIER RESSOURCE POUR LA CLASSE

Cours 1: Java et les objets

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

Sommaire Introduction... 3 Le but du projet... 3 Les moyens utilisés... 3 Informations sur le client FTP... 4 Pourquoi une version Linux et

Le service de nom : DNS

Conventions d écriture et outils de mise au point

CONFIGURATION DES GRAPPES DE SERVEURS D APPLICATIONS ADOBE DIGITAL ENTERPRISE PLATFORM DOCUMENT SERVICES A L AIDE DE JBOSS

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

Configuration des grappes de serveurs d applications ADOBE LIVECYCLE ES3 à l aide de JBOSS

L annuaire et le Service DNS

Les structures de données. Rajae El Ouazzani

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

Le protocole TCP. Services de TCP

CONFIGURATION FIREWALL

PROJET ALGORITHMIQUE ET PROGRAMMATION II

Les structures. Chapitre 3

Le routeur de la Freebox explications et configuration

MANUEL D INSTALLATION

Transcription:

Cours de Réseau et communication Unix n 5 Faculté des Sciences Université d Aix-Marseille (AMU) Septembre 2013 http://pageperso.lif.univ-mrs.fr/~laurent.braud/reseau/ 1/26

Plan du cours n 5 1. La communication par datagrammes 2. La communication en mode connecté 2/26

1 - La communication par datagrammes Sockets de type SOCK_DGRAM, protocole UDP (User Datagram Protocol). 3/26

Datagrammes Deux processus qui veulent dialoguer avec des sockets de type SOCK_DGRAM s échangent des datagrammes : des messages de taille limitée. La taille limite d un message est le MTU : Maximum Transfert Unit Si un message est trop grand, son envoie échoue (ou selon système : le message peut être tronqué). Pour les socket internet, le MTU est en général 1500 octets. Pour les socket Unix, MTU beaucoup plus grand : 163808 linux 3.2.0 i386 124896 linux 2.6.32 x86 64 2048 macos 10.6.8 i386 4/26

Sockets non connectés Chaque demande d envoi d un datagramme s accompagne de l adresse du destinataire. Chaque réception d un datagramme s accompagne de l adresse de l expéditeur. Avantage : permet un nombre de correspondants illimité Inconvénient : pour chaque message reçu il faut retrouver le contexte à partir de l adresse de l expéditeur. On peut simplifier envoi et réception en réalisant une pseudo-connexion. 5/26

Protocole UDP L émetteur ne sait pas si le message est arrivé à destination. Dans le domaine AF_UNIX, il sait si l adresse de destination est valide et si une socket lui est associée ; le message n est pas dupliqué. Si plusieurs messages sont envoyés à la suite, l émetteur ne sait pas si ils seront délivrés dans le bon ordre. Si le récepteur reçoit un datagramme, son intégrité est garantie. 6/26

Envoi de datagrammes Le processus qui envoie le datagramme (l émetteur) doit : créer une socket locale ; l attacher à une adresse locale ; construire l adresse du destinataire ; envoyer le message en spécifiant les 2 adresses. Ceci exclut a priori write. 7/26

sendto #include <sys/types.h> #include <sys/socket.h> ssize_t sendto ( int sockfd, // socket const void *buf, // message size_t len, // longueur message int flags, // 0 const struct sockaddr *dest_addr, // caster socklen_t addrlen ); // du struct Renvoie : > 0 le nombre de caractères envoyés -1 erreur Si len > MTU, sendto échoue avec errno = EMSGSIZE sendto est non bloquant en UDP. 8/26

Réception de datagrammes Le processus qui veut recevoir un datagramme (le récepteur) doit : créer une socket locale ; l attacher à une adresse locale ; se mettre en attente bloquante d un message. Il recevra en même temps le message et l adresse de l émetteur. Ceci exclut a priori read. 9/26

recvfrom 10/26 #include <sys/types.h> #include <sys/socket.h> ssize_t recvfrom ( int sockfd, // socket void *buf, // buffer size_t len, // taille buffer int flags, // 0 struct sockaddr *src_addr, // caster socklen_t *addrlen ); // initialiser Renvoie : > 0 le nombre de caractères reçus -1 erreur Avant l appel, il faut initialiser *addrlen à la taille du struct de l adresse ; après l appel, il contient la taille véritable. recvfrom est bloquant en UDP.

Pseudo-connection Il est possible de mémoriser dans une socket une adresse distante permanente : on peut alors utiliser read et write ; on peut continuer à utiliser sendto vers d autres adresses ; mais on ne reçoit plus que de cette adresse (filtre). Faire la pseudo-connexion : #include <sys/types.h> #include <sys/socket.h> int connect (int sockfd, const struct sockaddr *addr, socklen_t addrlen); Défaire : nouvel appel avec addr = NULL ou avec addr->sun_family = AF_UNSPEC Récupérer l adresse distante : getpeername 11/26

2 - La communication en mode connecté Sockets de type SOCK_STREAM, protocole TCP (Transmission Control Protocol). 12/26

socket connectées Permet à deux processus d échanger un flux de caractères (comme dans un tube). Les étapes : 1. établissement de la connexion ; 2. dialogue avec read et write ; 3. déconnexion. 13/26

Étapes 1. Établissement : un processus se met en attente (le serveur) ; un autre processus demande la connexion (le client) ; le serveur accepte ou refuse. 2. Dialogue : chacun peut lire ou écrire ; le protocole TCP est fiable. 3. Déconnexion : l un des processus se déconnecte (ou se termine) ; l autre processus détecte la fin. 14/26

Établissement de la connexion : côté serveur 1. Création socket : socket 2. Attachement à une adresse connue : bind 3. Ouverture du service : listen La socket devient une socket d écoute 4. Attente bloquante d une demande de connexion, puis obtention d une socket de service : accept Puis : dialogue sur la socket de service : read et write 15/26

Établissement de la connexion : côté client 1. Création socket client : socket 2. Attachement à une adresse quelconque : bind 3. Construction adresse serveur 4. Demande bloquante de connexion au serveur : connect Puis dialogue sur la socket avec le serveur : read et write 16/26

Les primitives : listen #include <sys/types.h> #include <sys/socket.h> int listen (int sockfd, int backlog); Permet à un processus de déclarer un service ouvert auprès de l OS. La socket ouverte sockfd devient une socket d écoute. backlog est la taille maximale de la file d attente des connexions SOMAXCONN (128 pour linux) Renvoie 0 succès, -1 erreur. 17/26

Les primitives : accept #include <sys/types.h> #include <sys/socket.h> int accept (int sockfd, struct sockaddr *addr, socklen_t *addrlen); Appel bloquant ; revient lorsqu il y a au moins une connexion pendante. addr reçoit l adresse du client en attente de connexion ; ce client est retiré de la liste des connexions pendantes. *addrlen doit être initialisé à la taille du struct passé en paramètres ; puis il contient la longueur réelle. Renvoie : 0 socket de service connectée au client -1 erreur 18/26

Les primitives : connect #include <sys/types.h> #include <sys/socket.h> int connect (int sockfd, const struct sockaddr *addr, socklen_t addrlen); Appel bloquant, revient lorsque le serveur a fait accept, ou au bout d un certain délai ETIMEDOUT Renvoie 0 succès, -1 erreur connect ne doit être appelée qu une fois pour une socket de type SOCK_STREAM. 19/26

Déconnexion Comme pour les tubes : l un des processus fait close : le client sur sa socket le serveur sur la socket de service l autre processus détectera la fermeture lors d un read retour 0 lors d un write SIG_PIPE et EPIPE 20/26

Refus de connexion Le serveur peut refuser une connexion : 1. il doit faire accept pour connaitre l adresse du client ; 2. il décide un refus (mauvais client,...) ; 3. il ferme la socket avec close. Côté client : connect réussit, puis read 0 write SIGPIPE et EPIPE 21/26

Scrutation Côté serveur, la socket d écoute et les sockets de service peuvent être scrutées : si la socket d écoute est éligible, alors on peut faire un accept immédiat ; si une socket de service est éligible, alors on peut faire un read ou write immédiat. 22/26

Serveurs UDP ou TCP Pour dialoguer avec n clients : En UDP : simple boucle recvfrom / sendto En TCP : scruter socket d écoute + n sockets de services père accept socket d écoute puis délègue la socket de service à un nouveau fils n fils solution mixte : père scrute socket d écoute et jusqu à k sockets de services ; si la liste est pleine, il délègue ces k sockets à un nouveau fils n/k fils. 23/26

Surveiller l état des sockets avec netstat netstat -a affiche toutes les sockets et sockets d écoute netstat -t affiche les sockets TCP/IP <> netstat -at Connexions Internet actives (serveurs et établies) Proto Recv-Q Send-Q Adresse locale Adresse distante Etat tcp 0 0 *:ssh *:* LISTEN tcp 0 0 localhost:ipp *:* LISTEN tcp 0 0 localhost:smtp *:* LISTEN tcp 0 0 capri.lidil.univ-:35638 we-in-f16.1e100.n:imaps CLOSE_WAIT tcp 0 0 capri.lidil.univ-:33619 wi-in-f16.1e100.n:imaps CLOSE_WAIT tcp 0 0 capri.lidil.univ-:44491 61.128.17.93.rev.:imap2 CLOSE_WAIT tcp 0 0 localhost:ssh localhost:36570 ESTABLISHED tcp 0 0 localhost:53623 localhost:ssh ESTABLISHED tcp 0 0 capri.lidil.univ-:52134 bureau-imapp2.uni:imaps ESTABLISHED tcp 0 0 capri.lidil.univ-:58713 129.128.17.93.rev:imap2 CLOSE_WAIT tcp 0 0 localhost:36570 localhost:ssh ESTABLISHED tcp 0 0 capri.lidil.univ-:52028 bureau-imapp2.uni:imaps ESTABLISHED tcp 0 0 localhost:ssh localhost:53623 ESTABLISHED tcp6 0 0 [::]:www [::]:* LISTEN tcp6 0 0 [::]:ssh [::]:* LISTEN tcp6 0 0 localhost:ipp [::]:* LISTEN 24/26

Sous Windows Mêmes fonctions avec les winsocks ; les erreurs sont différentes. int listen ( _In_ SOCKET s, _In_ int backlog ); SOCKET accept ( _In_ SOCKET s, _Out_ struct sockaddr *addr, _Inout_ int *addrlen ); int connect ( _In_ SOCKET s, _In_ const struct sockaddr *name, _In_ int namelen ); 25/26

Petites différences sous Windows int closesocket ( _In_ SOCKET s ); // au lieu de close int send ( // idem Unix ; au lieu de write _In_ SOCKET s, _In_ const char *buf, _In_ int len, _In_ int flags ); int recv ( _In_ SOCKET s, _Out_ char *buf, _In_ int len, _In_ int flags ); // idem Unix ; au lieu de read 26/26