Programmation Réseaux sous Linux 2023/2024 PDF
Document Details
Sup MTI
2024
EL MARGAE SAMIRA
Tags
Summary
This document is a lecture on network programming using Linux, focusing on fundamental concepts, protocols (TCP/IP, HTTP), and socket programming. It discusses network programming roles, network models, and communication methods.
Full Transcript
07/01/2024 Programmation réseaux sous Linux EL MARGAE SAMIRA [email protected] 3ème année ISI/ISRT...
07/01/2024 Programmation réseaux sous Linux EL MARGAE SAMIRA [email protected] 3ème année ISI/ISRT 1A GI Année universitaire 2023/2024 Objectifs du cours Objectif du module: ⇒ Compréhension des concepts de base : acquérir une compréhension solide des concepts fondamentaux tels que les protocoles de communication, les adresses IP, les ports, les serveurs, les clients, etc. ⇒ Connaitre les principaux protocoles utilisés dans une architecture client-serveur comme HTTP pour les applications web simples, TCP et UDP pour la communication réseau ⇒ Apprendre l’utilisation des sockets en détails pour établir des connexions réseau basiques entre applications. ⇒ Programmation côté client et serveur : développer des applications simples côté client et côté serveur, en comprenant comment ces deux entités communiquent. 07/01/2024 2 1 07/01/2024 Objectifs du cours À quelles questions ce cours répond? 07/01/2024 3 Introduction et généralités Qu’est ce qu’un programmateur réseau? Son rôle? Comment communiquer? Modes de communication? Modèle OSI et Modèle TCP/IP Service de résolution des noms Commandes de programmation réseau sous linux 07/01/2024 4 2 07/01/2024 Introduction et généralités Qu’est ce qu’un programmateur réseau? Son rôle? Un programmeur réseau = développeur réseau, un professionnel de l'informatique spécialisé dans le développement d'applications et de logiciels qui nécessitent une communication à travers les réseaux informatiques. Rôle: ⇒ Concevoir des protocoles de communication et des algorithmes ⇒ Implémentation de la Communication Réseau ⇒ Sécurité Réseau ⇒ Développement d'Applications Client-Serveur ⇒ Utilisation de Protocoles et d’API (Interfaces de Programmation d'Applications) réseau ⇒ Gestion des Erreurs et de la Redondance ⇒ etc 07/01/2024 5 Introduction et généralités Qu’est ce qu’un programmateur réseau? Son rôle? Rôle: - Conception de Protocoles et d'Algorithmes : Concevoir des protocoles de communication et des algorithmes permettant aux applications de transférer des données de manière efficace et fiable à travers un réseau. - Implémentation de la Communication Réseau : Écrire le code nécessaire pour établir des connexions réseau, envoyer et recevoir des données, et gérer la communication entre différentes entités logicielles. - Sécurité Réseau : Mettre en œuvre des mécanismes de sécurité pour protéger les données pendant la transmission: l'authentification et la gestion des autorisations. 07/01/2024 6 3 07/01/2024 Introduction et généralités Qu’est ce qu’un programmateur réseau? Son rôle? Rôle: - Utilisation de Protocoles et d'API Réseau : Travailler avec des protocoles standard tels que TCP/IP, HTTP, FTP, et des API (Interfaces de Programmation d'Applications) réseau pour intégrer la communication réseau dans les applications. - Gestion des Erreurs et de la Redondance : Mettre en place des mécanismes de gestion des erreurs pour assurer la fiabilité de la communication, y compris la détection et la correction d'erreurs. - Développement d'Applications Web : les programmeurs réseau travaillent sur des applications web, la création d'interfaces utilisateur interactives, la gestion de sessions, et la manipulation des données via des requêtes HTTP. 07/01/2024 7 Introduction et généralités Pour le programmeur, qu’est-ce qu’un réseau ? Réseau = un ensemble d'ordinateurs et de périphériques interconnectés qui peuvent communiquer et échanger des données entre eux. Réseau= représente l'infrastructure permettant la transmission d'informations entre différentes entités logicielles Un moyen de communication (ensemble de machines/applications atteignables) Un ensemble de services 07/01/2024 8 4 07/01/2024 Introduction et généralités Comment communiquer? Comment communiquer? 07/01/2024 9 Introduction et généralités Comment communiquer? Contexte : L'évolution rapide des réseaux informatiques est au cœur de notre ère numérique. La transformation numérique a considérablement intensifié la nécessité d'une communication efficace entre les machines. Importance de la Communication dans les réseaux modernes : La communication est la pierre angulaire des réseaux modernes, facilitant l'échange rapide et sécurisé d'informations. Les réseaux permettent la collaboration, le partage de ressources et l'accès aux données à une échelle mondiale. 07/01/2024 10 5 07/01/2024 Introduction et généralités Comment communiquer? 07/01/2024 11 Introduction et généralités Comment communiquer? NON pour le changement des messages Pour la perte des message parfois 07/01/2024 12 6 07/01/2024 Introduction et généralités Deux modes de communication Il existe au moins deux grands modes de communication : Par paquet (datagram) : la poste en est un bon exemple dans ce mode on est pas connecté (encore que), on est juste atteignable En flux (stream) : la téléphonie en est un bon exemple dans ce mode on est connecté 07/01/2024 13 Introduction et généralités Deux modes de communication Dans le mode flux (Stream Mode) : Caractéristiques : Dans le mode flux, les données sont transmises de manière continue, comme un flux constant d'informations. C'est un mode de transmission en temps réel, souvent utilisé pour des applications telles que la diffusion vidéo en continu, la téléphonie sur IP (VoIP) et le streaming audio. Utilisation : Il convient aux applications qui nécessitent une transmission constante et régulière de données, sans interruption notable. Les données sont généralement envoyées et reçues de manière continue, sans découpage spécifique. 07/01/2024 14 7 07/01/2024 Introduction et généralités Deux modes de communication Mode flux (Stream Mode) : Caractéristiques : Dans le mode flux, les données sont transmises de manière continue, comme un flux constant d'informations. C'est un mode de transmission en temps réel, souvent utilisé pour des applications telles que la diffusion vidéo en continu, la téléphonie sur IP (VoIP) et le streaming audio. Utilisation : Il convient aux applications qui nécessitent une transmission constante et régulière de données, sans interruption notable. Les données sont généralement envoyées et reçues de manière continue, sans découpage spécifique. 07/01/2024 15 Introduction et généralités Deux modes de communication Dans le mode flux: les informations sont reçues dans l’ordre exact de leur émission Il n’y a pas de perte Inconvénient: Nécessité de l’établissement d’une connexion Nécessité de ressources supplémentaire pour la gestion 07/01/2024 16 8 07/01/2024 Introduction et généralités Deux modes de communication Mode Paquet (Packet Mode) : Caractéristiques : Dans le mode paquet, les données sont divisées en petits paquets avant d'être envoyées sur le réseau. Chaque paquet contient une partie des données, ainsi que des informations de contrôle telles que l'adresse de destination, l'adresse source, et un numéro de séquence. Les paquets peuvent suivre des chemins différents à travers le réseau avant d'être réassemblés à leur destination. Utilisation : Le mode paquet est la méthode de transmission de données la plus courante sur les réseaux informatiques, notamment sur Internet. Il permet une transmission efficace des données, une gestion du trafic plus souple et une meilleure tolérance aux erreurs et aux perturbations du réseau. 07/01/2024 17 Introduction et généralités Deux modes de communication Mode Paquet (Packet Mode) : Caractéristiques : Dans le mode paquet, les données sont divisées en petits paquets avant d'être envoyées sur le réseau. Chaque paquet contient une partie des données, ainsi que des informations de contrôle telles que l'adresse de destination, l'adresse source, et un numéro de séquence. Les paquets peuvent suivre des chemins différents à travers le réseau avant d'être réassemblés à leur destination. Utilisation : Le mode paquet est la méthode de transmission de données la plus courante sur les réseaux informatiques, notamment sur Internet. Il permet une transmission efficace des données, une gestion du trafic plus souple et une meilleure tolérance aux erreurs et aux perturbations du réseau. 07/01/2024 18 9 07/01/2024 Introduction et généralités Deux modes de communication Dans le mode paquet (Packet Mode) : Il n’existe pas d’ordre dans la délivrance des paquets => un paquet posté en premier peut arriver en dernier Il n’existe pas non plus de fiabilité => un paquet envoyé peut être perdu Intérêt : souple et léger... 07/01/2024 19 Introduction et généralités Transmission non fiable de données 07/01/2024 20 10 07/01/2024 Introduction et généralités Un système de couche 07/01/2024 21 Introduction et généralités Modèles OSI et TCP/IP Les réseaux informatiques utilisent un modèle composé de plusieurs couches de protocoles. Le modèle OSI correspond à une approche plus théorique en décomposant le fonctionnement en une pile de 7 couches. Modèle TCP/IP est un modèle de protocole, car il décrit les fonctions qui interviennent à chaque couche des protocoles au sein de la suite TCP/IP. 07/01/2024 22 11 07/01/2024 Introduction et généralités Modèle OSI (Open System Interconnection) en 7 couches 07/01/2024 23 Introduction et généralités Modèle OSI (Open System Interconnection) en 7 couches Le modèle de référence inter-réseau le plus connu est le modèle OSI (Open Systems Interconnection) défini par l'ISO (Organisation internationale de normalisation). Il compte 7 couches différentes QUESTION: Définir le rôle de chaque couche du modèle OSI 07/01/2024 24 12 07/01/2024 Introduction et généralités Modèle OSI (Open System Interconnection) en 7 couches 07/01/2024 25 Introduction et généralités Modèle OSI (Open System Interconnection) en 7 couches 07/01/2024 26 13 07/01/2024 Introduction et généralités Modèle Internet: TCP/IP Le modèle Internet est à 4 couches 07/01/2024 27 Introduction et généralités Ce qui va nous intéresser 07/01/2024 28 14 07/01/2024 Introduction et généralités Ce qui va nous intéresser Rappelons que dans le monde Internet la normalisation est disponible sous la forme de RFCs (Request For Comments) Documents officiels recouvrant tous les aspects de l’Internet http://www.ietf.org/rfc.html Les deux couches qui nous intéressent dans le cours de programmation réseau seront: La couche transport : UDP (User Datagram Protocol), RFC 768 TCP (Transmission Control Protocol), RFC 793 La couche application : très variée… 07/01/2024 29 Introduction et généralités Ce qui va nous intéresser - Le couche transport fournit un ou plusieurs services de communication entre applications (par exemple TCP ou UDP) Pour communiquer, ces applications doivent se connaître il existe donc un mécanisme de nommage… - Une application fournit un service particulier sur une machine donnée Le service est identifié par un port La machine est identifiée par une adresse Ces informations sont similaires à celles jouées par un numéro de bureau (port) dans une administration donnée (machine) 07/01/2024 30 15 07/01/2024 Introduction et généralités Ce qui va nous intéresser Sur une machine 07/01/2024 31 Introduction et généralités Ce qui va nous intéresser Sur un réseau 07/01/2024 32 16 07/01/2024 Introduction et généralités Informations pour communiquer Un couple (adresse, port) est un point de communication Toute communication ne peut s’effectuer qu’entre au moins deux points de communications l’émetteur le (ou les) récepteurs (s) Pour communiquer il faut deux points de communication: 1. (adresse1,port1) côté client 2. (adresse2, port2) Coté serveur 07/01/2024 33 Introduction et généralités Informations pour communiquer Exemple : Quand on tape http://www.google.com dans le navigateur Connexion à une des machines correspondant à www.google.com sur le port 80 qui correspond au service HTTP Souvent quand on fera une architecture client-serveur, le port pour le client sera attribué à une valeur automatique 07/01/2024 34 17 07/01/2024 Introduction et généralités Modèle client/serveur: Du côté client, un port et une adresse Du côté serveur, , un port et une adresse Pour certaines applications, le 'programmeur' n'a pas besoin de connaître le port côté client Connaître le port côté serveur est nécessaire pour se connecter 07/01/2024 35 Introduction et généralités Modèle client/serveur: Du côté client, un port et une adresse Du côté serveur, , un port et une adresse Pour certaines applications, le 'programmeur' n'a pas besoin de connaître le port côté client Connaître le port côté serveur est nécessaire pour se connecter 07/01/2024 36 18 07/01/2024 DNS: Domain Name System Service de résolution des noms L’Internet est constitué de réseaux (dizaines de milliers) Les réseaux sont constitués de sous-réseaux Les sous-réseaux sont constitués de machines La technologie de base (TCP/IP) permet d’atteindre les machines par leurs adresses IP. Il est pratiquement devenu impossible aux utilisateurs de connaître les adresses (IP) des machines auxquelles ils veulent accéder. Pour cette raison, des noms de domaine ont été créés pour convertir les adresses numériques en noms simples et explicites. 07/01/2024 37 DNS: Domain Name System Service de nom Le service permettant de faire la translation d’un nom une adresse s’appelle le service de nom, Le système aujourd’hui le plus répandu est le DNS (RFC 882) qui est un service d’annuaire distribué Important : les communications nécessitent la connaissance des adresses Internet des machines concernées On notera au passage qu’il existe aujourd’hui deux types d’adresses : IPv4 et IPv6 (respectivement 4 et 8 octets) 07/01/2024 38 19 07/01/2024 DNS: Domain Name System Nom de domaine Dans un réseau local, les machines peuvent-être identifiées par leurs seuls noms. Par contre, à l‘échelle d'Internet, ces noms doivent être concaténés avec le nom du domaine dans lequel elles sont déclarés. Exemple: Nom du domaine : afnic.fr nom local de la machine : www nom de la machine dans le DNS : www.afnic.fr nom local de la machine : ftp nom de la machine dans le DNS : ftp.afnic.fr 07/01/2024 39 DNS: Domain Name System Domaine Le DNS est organisé sous la forme d’une arborescence inversée, avec une « racine » dont dépendent les différentes « branches ». Au premier niveau de l’arborescence se trouvent les « Top-Level Domains (TLD)» ou domaines de premier niveau, comme les.fr,.com etc. Au second niveau, nous avons les noms de domaine « classiques » comme « afnic.fr ». Deux types de TLD : ⇒ generic TLD:.com,.org,.gov,.net,... ⇒ countries TLD:.fr,.de,.uk,... 07/01/2024 40 20 07/01/2024 DNS: Domain Name System Domaine 07/01/2024 41 DNS: Domain Name System Nom de domaine 07/01/2024 42 21 07/01/2024 DNS: Domain Name System Domaine Pour www.informatique.univ-parisdiderot.fr fr st le domaine national attribué par l'ICANN (Internet Corporation for Assigned Names and Numbers) à la France avec délégation à l'AFNIC (Association Française pour le Nommage Internet en Coopération) univ-paris-diderot est le sous-domaine attribué par l’AFNIC à l’université paris diderot avec délégation à la DSI de l’université informatique est le sous-domaine attribué par la DSI à l’UFR avec délégation au service informatique de l’UFR d’informatique www est le nom d’une des machines sous la responsabilité de l’UFR d’informatique 07/01/2024 43 DNS: Domain Name System Domaine 07/01/2024 44 22 07/01/2024 Outils de programmation réseau sous Linux Outils de programmation réseau sous linux Commandes Linux 07/01/2024 45 Outils de programmation réseau sous Linux Interrogation des services de nom Commande nslookup Permet d’interroger des serveurs DNS afin d'obtenir des informations sur la résolution DNS d'un nom de domaine ou d'une adresse IP. 07/01/2024 46 23 07/01/2024 Outils de programmation réseau sous Linux Interrogation des services de nom Commande nslookup: Exemples d’utilisation 07/01/2024 47 Outils de programmation réseau sous Linux Interrogation des services de nom Commande nslookup 07/01/2024 48 24 07/01/2024 Outils de programmation réseau sous Linux Interrogation des services de nom Commande dig Permet d’interroger le serveur DNS et de diagnostiquer les dysfonctionnements dans la résolution de nom. # dig google.com 07/01/2024 49 Outils de programmation réseau sous Linux Interrogation des services de nom Commande host La commande host interroge les serveurs de noms. Elle peut par exemple être utilisée pour détecter des dysfonctionnement sur un réseau (serveurs hors services). 07/01/2024 50 25 07/01/2024 Outils de programmation réseau sous Linux TP N°1: Outils de programmation réseau sous Linux 07/01/2024 51 Couche transport 1) La couche Transport: Définition 2) Le protocole TCP 3) Le protocole UDP 07/01/2024 52 26 07/01/2024 Couche Transport Introduction 07/01/2024 53 Le protocole TCP La couche Transport (TCP et UDP) utilise les numéros de port comme technique d'adressage des bouts d'une communication. 07/01/2024 54 27 07/01/2024 Le protocole TCP Segment TCP 07/01/2024 55 Le protocole TCP Numéro de port 07/01/2024 56 28 07/01/2024 Le protocole TCP Extraire les données d'un segment 07/01/2024 57 Le protocole TCP Les données d’un segment TCP o Un segment TCP sera transporté au travers du réseau par un paquet IP, lui- même transmis par une trame sur le réseau local. 07/01/2024 58 29 07/01/2024 Le protocole TCP Taille d’un segment TCP 07/01/2024 59 Le protocole TCP Séquencer les données à envoyer (1/2) 07/01/2024 60 30 07/01/2024 Le protocole TCP Séquencer les données à envoyer (2/2) 07/01/2024 61 Le protocole TCP Synchronisation des numéros de séquence 07/01/2024 62 31 07/01/2024 Le protocole TCP Les 6 drapeaux 07/01/2024 63 Le protocole TCP Connexion TCP 07/01/2024 64 32 07/01/2024 Le protocole TCP Connexion TCP 07/01/2024 65 Le protocole TCP Déconnexion TCP Un mécanisme de reset (ag RST) est prévu pour terminer une connexion au plus vite. Ce type d'arrêt est typiquement géré par la couche TCP elle-même quand l'application s'est brutalement interrompue. 07/01/2024 66 33 07/01/2024 Le protocole TCP États d'une communication TCP 07/01/2024 67 Le protocole TCP Données urgentes 07/01/2024 68 34 07/01/2024 Le protocole TCP Résumé 07/01/2024 69 Protocole UDP Introduction 07/01/2024 70 35 07/01/2024 Protocole UDP Datagramme UDP Pour extraire les données (Data), l'opération est simple et rapide car l'en-tête UDP est de taille fixe : il fait 8 octets 07/01/2024 71 Protocole UDP Taille d’un datagramme UDP 07/01/2024 72 36 07/01/2024 Protocole UDP Caractéristiques 07/01/2024 73 Protocole UDP Utilisation 07/01/2024 74 37 07/01/2024 Communication inter-processus Programmation réseaux: Sockets Permettre à des processus de communiquer (échanger des données) avec d’autres processus se trouvant éventuellement sur des ordinateurs distants (connectés par un réseau). Parmi les outils qui permettent la communication entre processus : les sockets. La mise en œuvre de la communication entre processus nécessite des protocoles de communication. 07/01/2024 75 Communication inter-processus Sockets: Notions générales Protocole: La mise en ouvre des communications entre systèmes nécessite des protocoles de communication Protocole = un ensemble d ’accords sur: ⇒ la représentation des bits ⇒ détection de la fin d ’un message ⇒ acheminement des message ⇒ représentation des nombres, des caractères ⇒ etc … Il faut un accord à plusieurs niveaux, depuis les détails de bas niveau de la transmission des bits jusqu' à ceux de plus haut niveau de la représentation des données 07/01/2024 76 38 07/01/2024 Communication inter-processus Sockets: Notions générales Modèle OSI: 07/01/2024 77 Communication inter-processus Sockets: Notions générales Modèle client/serveur: La majorité des applications réseau modernes se fondent sur le modèle client/serveur. ⇒ Serveur : Un programme qui s’exécute sur un réseau d’ordinateurs et qui est capable d ’offrir un service. Le serveur reçoit une requête à travers le réseau, effectue le traitement nécessaire et retourne le résultat de la requête. ⇒ Client : un programme qui envoie la requête au serveur et reçoit la réponse. 07/01/2024 78 39 07/01/2024 Communication inter-processus Sockets: Notions générales Numéro de port: Plusieurs applications réseau peuvent tourner sur la même machine. Le numéro de port permet d’identifier l’application avec laquelle on souhaite communiquer. Un port est un entier sur 16 bits: ⇒ 65536 possibilités. ⇒ Les ports < 1024 sont réservés. Les numéros de ports standards sont définis dans le fichier /etc/services et accessibles via la commande getservbyname(). 07/01/2024 79 Communication inter-processus Sockets: Présentation Définition Une socket est un point de communication par lequel un processus peut émettre ou recevoir des informations. Une socket représente une interface de communication logicielle avec le système d’exploitation qui permet d’exploiter les services d’un protocole réseau et par laquelle une application peut envoyer et recevoir des données. C’est donc un mécanisme de communication bidirectionnelle entre processus (locaux et/ou distants). 07/01/2024 80 40 07/01/2024 Communication inter-processus Sockets: Présentation Analogie: Une socket peut être vue comme une boîte aux lettres ou un poste téléphonique. 07/01/2024 81 Communication inter-processus Sockets Modèle Une socket est un point de communication par lequel un processus peut émettre et recevoir des données. Ce point de communication devra être relié à une adresse IP et un numéro de port 07/01/2024 82 41 07/01/2024 Communication inter-processus Sockets La programmation par les sockets se base sur un modèle client/serveur. Les sockets se situent juste au-dessus de la couche transport du modèle OSI (utilisant les protocoles TCP ou UDP). 07/01/2024 83 Communication inter-processus Sockets Principe de base: Chaque processus crée une socket, Chaque socket sera associée à un port de la machine sur laquelle se déroule le processus qui l’a créée, Les deux sockets seront explicitement connectées si on utilise un protocole en mode connecté , Chaque processus lit et/ou écrit dans sa socket, Les données sont envoyées d’une socket à une autre à travers le réseau, Une fois terminé, chaque processus ferme sa socket. 07/01/2024 84 42 07/01/2024 Communication inter-processus Sockets Caractéristiques: o Une socket est caractérisée par 3 éléments: o ⇒ Domaine o ⇒ Type o ⇒ Protocole o Il faut spécifier le domaine, le type est le protocole au moment de la création de la socket. 07/01/2024 85 Communication inter-processus Sockets 1. Création d’une socket: La bibliothèque socket.h offre un ensemble de primitives qui permettent de manipuler les sockets. 07/01/2024 86 43 07/01/2024 Communication inter-processus Sockets 1. Création d’une socket: Domaine: Il spécifie le format des adresses possibles et par conséquent l’ensemble des sockets qui peuvent être atteintes. AF_UNIX : les sockets sont locaux au système. Elles permettent la communication entre processus appartenant au même système (machine). AF_INET : Permet la communication entre processus appartenant à différentes machines. 07/01/2024 87 Communication inter-processus Sockets 1. Création d’une socket: Type: Il définit la nature des communications supportées par la socket, les deux les plus répandus : SOCK_DGRAM : communication en mode non connecté par l ’envoi de datagrammes (boîte aux lettres). SOCK_STREAM : communication en mode connecté par l ’envoi de flots d ’informations (Téléphone). 07/01/2024 88 44 07/01/2024 Communication inter-processus Sockets: Notions générales 1. Création d’une socket: Protocole: Il spécifie le protocole de Transport utilisé par la socket. Deux protocoles peuvent être utilisés: TCP (Transmission Control Protocol) : Permet d’établir une communication fiable entre deux applications avec gestion d’erreur et contrôle de flux. UDP (User Datagram Protocol): permet d’envoyer des messages en mode non connecté. 07/01/2024 89 Communication inter-processus Sockets: Notions générales 1. Création d’une socket: int socket(int domaine, int type, int protocole) Domaine: AF_INET, AF_UNIX Type: SOCK_DGRAM, SOCK_STREAM Protocole: TCP, UDP ou 0 (laisse le système choisir lui-même le bon protocole) La valeur de retour de la primitive socket est un descripteur qui permet d’accéder à la socket créée. En cas d’échec, la valeur retournée est -1 07/01/2024 90 45 07/01/2024 Communication inter-processus Sockets 1. Création d’une socket: Exemple: int sd; sd=socket(AF_INET, SOCK_STREAM, 0); if (sd