RE218 : Applications TCP/IP 1 Enseignement Réseaux au département Informatique • • • • • RE100 : Introduction aux réseaux (S6) RE202 : Architecture des réseaux TCP/IP (S7) RE218 : Applications TCP/IP (S8) RE203 : Projet réseaux (S8) Option RSR de 3ème année : – RSR: Cyber sécurité, systèmes et réseaux 2 Références Bibliographiques • • • • • • • Réseaux et télécoms, Claude Servin, 2003, Dunod Richard Stevens - TCP/IP illustré - volume 1, Addison Wesley Les Réseaux (Édition 2003 – 4ème édition), Guy Pujolle, 2002, Eyrolles Réseaux (3ème édition), Andrew Tanenbaum 1996, Prentice Hall – 1997, InterÉditions Cours Cicso CCNA,1-4, version 3.1 copyright Cisco Routing Protocols and Concepts – Chapter 10 , Link-State Routing Protocols, copyright Cisco • RFC (Request For Comment) • TD2 : DEA MISI Université de Versailles (UVSQ) 3 Plan du module RE218 • 13h40 : enseignement intégré • Contrôle Continue : exercices et micro évaluation dans chaque séance. • Plan : – – – – Introduction aux couches hautes Etudes DNS, HTTP, SMTP, POP Routage dans IP Programmation socket 4 Modèle OSI et TCP/IP RE218 RE202 5 Couches hautes • Modèle OSI : modèle très utilisé dans certains domaines (signalisation téléphonique, SIP, RTSP, RPC, etc.) – 5 : session – 6 : présentation – 7 : application • Modèle TCP/IP – Une seule « couche application » regroupant les couches hautes du modèle OSI – exemples : DNS, TELNET, SMTP, FTP, HTTP, etc. 6 • Le modèle OSI Couches hautes – applications plus élaborées, mettant plus nettement en jeu des protocoles distincts des différentes couches hautes du modèle OSI • exemples – - session : SIP pour la téléphonie sur IP - présentation : XDR (eXternal Data Representation) pour la représentation des données par encodage (marshalling) et décodage (unmarshalling) - application : RPC (Remote Procedure Call), NFS (Network File System), Remote Method Invocation (Java RMI, JEE, CORBA, SOAP, REST). Identification des services pouvant se fonder sur des services d’annuaire ou autres • Ports standards : HTTP (80), SMTP (25), DNS (53), HTTPS (443) sur TCP ou UDP (sous couche possible exemple QUIC, RTP, …) • Service annuaire : Portmap (111) • Découverte de port via une signalisation ou autres moyens 7 Rappel de la couche session • La couche session est la 1ère couche ne s’occupant pas de la communication entre entités • Objectif : Organisation du dialogue entre entités : – gestion des connexions (sessions) – gestion du tour de parole – synchronisation : sauvegarde du contexte de travail – reprise de dialogue (en cas d’incident, par exemple) – gestion des activités de la session – gestion de la qualité de service – Gestion du transfert des données 8 Correspondance entre session / transport • Une session est différente d’une connexion de transport : • Trois cas possibles : – Correspondance biunivoque : la session et la connexion de transport sont de même durée et superposables Session Transport – Plusieurs sessions successives sont établies sur une même connexion de transport Session Transport – Une même session s’étend sur plusieurs connexions de transport (arrêt/reprise) Session Transport • Le multiplexage de plusieurs sessions sur une même connexion de transport est impossible 9 • La fonction de multiplexage est réservée à la couche transport Les services de la couche session • Etablissement / Libération de connexion et transfert de données c’est la fonction principale de la couche session – Trois phases : • Etablissement de la session • Transfert des données • Libération de la session • Gestion du dialogue par jeton où seul le possesseur du jeton peut transmettre des données, l’autre reste silencieux 10 Synchronisation par la couche session • La synchronisation permet de gérer les incidents et de retrouver la session dans un état connu des deux interlocuteurs en cas d’erreur • Le but de ce service n’est pas de corriger les erreurs de transmission de données (c’est le travail de la couche transport), mais de proposer des outils de reprise sur erreur (erreurs liées aux couches supérieures) • Deux types de synchronisation : – Point de synchronisation majeure – Point de synchronisation mineure 11 Couche présentation • La couche présentation s’intéresse à la syntaxe et à la sémantique des informations : – Représentation des données transférées entre entités d’application – Représentation de la structure des données et représentation de l’ensemble des actions effectuées sur cette structure – Encodage dans une norme agrée permettant à des équipements de communiquer – Exemple la syntaxe abstraite ASN.1 (Abstract Syntax Notation One) 12 Couche présentation • Le rôle principal de la couche présentation est d’assurer le codage et décodage des données • La représentation des données (chaîne de caractères, nombre entiers, nombres flottants) à l’intérieur d’un système réel dépend de son architecture (en particulier de la nature du processeur) • Objectifs : – définir des règles de codage communes permettant en particulier de représenter des nombres dont la taille n’est pas limitée – Le destinataire doit connaître la signification des données en définissant un certain nombre de types de données et en faisant précéder le codage d’une données par une étiquette qui en précise la nature 13 Fonctionnement de la couche présentation • La couche présentation utilise les notions suivantes : – la syntaxe abstraite : elle définit la structure générique des données (les différents types de données traitées) et elle est utilisée pour dialoguer avec la couche application – la syntaxe concrète locale : elle définit la représentation des données sur le système local – la syntaxe de transfert : elle définit la représentation des données échangées entre les couches présentation de deux systèmes par l’intermédiaire de la couche session – les règles de codage qui permettent de passer de la syntaxe concrète locale à la syntaxe de transfert et réciproquement • La combinaison d’une syntaxe abstraite et d’une syntaxe de transfert constitue un contexte de présentation. • Plusieurs contextes de présentation sont possibles 14 Unités fonctionnelles de la couche présentation • La couche présentation comporte trois unités fonctionnelles spécifiques : – le noyau de présentation : il permet d’utiliser le contexte par défaut ou les contextes négociés lors de l’ouverture de la connexion. Cette unité fonctionnelle est toujours utilisée – La gestion de contextes : elle permet d’ajouter ou de supprimer des contextes de représentation durant la connexion – La restauration de contextes : elle permet lors d’une resynchronisation de présentation, de reprendre les contextes antérieurs. L’unité fonctionnelle de gestion de contextes modifie également le fonctionnement des activités 15 Notation de syntaxe abstraite ASN.1 • ASN.1 permet de décrire les types des données qui peuvent être codées et transmises au travers de la couche présentation • Exemple d’utilisation d’ASN.1 : – SNMP (Simple Network Management Protocol) • protocole de la famille internet permettant la gestion de réseaux – recueil d’informations auprès des équipements – modification de l’état des équipements – MIB ( Management Information Base ) • ensemble des objets gérés par SNMP • objets de la MIB référencés grâce par des identificateurs ASN.1 exemple : {iso(1) identified-organization(3) dod(6) internet(1) administration(2) mib-2(1) tcp(6) etc.} 16 Exemple MIB-II - MIB-II est implémentée dans tous les équipements utilisant le protocole TCP/IP - MIB-II est décrite en utilisant la syntaxe ASN.1 17 Couche Application • Elle offre aux processus d’application le moyen d’accéder à l’environnement OSI • Les processus d’application échangent leurs informations par l’intermédiaire des entités d’applications • Exemple – Transfert de fichier, e-mail, Web, annuaire, etc. 18 DNS : Domain Name System 19 Principe de la résolution d’adresses – pour chaque machine / interface : 1. adresse de bas niveau (physique ou MAC) dépendant du médium utilisé 2. adresse de haut niveau (logique) utilisée à des fins d’interconnexion, par exemple grâce à IP 3. adresse de niveau utilisateur (humain), chaîne de caractères significative pour les utilisateurs 1. résolution d’adresse : logique physique ARP pour Ethernet / IP 2. résolution d’adresse inverse : physique logique RARP pour Ethernet / IP / BootP / DHCP 3. résolution de nom IP Utilisation du DNS 20 DNS : Domain Name System – adresse de haut niveau • identificateur utile au traitement des informations (datagrammes IP) par le réseau • peu pratique à manipuler pour les utilisateurs 32 bits pour IPv4, 128 bits (IPv6) • correspondant à la structure logique du réseau (adressage, sous-adressage, etc.) mais rarement à la structure humaine de l’organisation (entreprise, administration, etc.) utilisant ce réseau – nom d’une entité réseau • chaîne de caractères significative pour les utilisateurs • pouvant / devant respecter des conventions pour le bon fonctionnement d’un réseau particulier voire de l’Internet résolution de nom 21 Nommage des hôtes réseau • Nommage des hôtes réseaux : – organisation mondiale de gestion des noms • indispensable pour les hôtes participant à l’Internet • préférable, mais non indispensable, pour les autres – administration des noms d’hôtes par l’Internet Corporation for Assigned Names and Numbers (ICANN) – ICANN est chargée d’allouer l’espace des adresses de protocole Internet (IP), d’attribuer les identificateurs de protocole, de gérer le système de nom de domaine de premier niveau, etc. • Système de noms de domaine : DNS exploite le mode de nommage hiérarchique des entités réseau internet • succession d’étiquettes (labels) composées de caractères et séparées par des • – exemple : www.enseirb-matmeca.fr 22 Hiérarchie des noms de domaine • Niveau hiérarchique des étiquettes croissant : label à droite du point le plus à droite appelé domaine de premier niveau (top-level domain) • Suffixe d’un label aussi appelé nom de domaine • Initialement, les noms d'hôtes Internet étaient limités au jeu de caractères : lettres majuscules et minuscules (A-Z et a-z), des nombres (0-9) et des tirets (-) • Prise en charge des caractères Unicode pour des noms de domaine internationalisés Internationalized domain name (IDN) • Les IDN sont des noms de domaines faisant appel à des caractères de la langue locale. • Les IDN peuvent comporter des caractères avec signes diacritiques qu'exigent la plupart des langues européennes ou des caractères différents de ceux de l'alphabet latin (par exemple arabes ou chinois) 23 Les noms de domaine • La syntaxe des noms de domaine ne permet pas de distinguer un hôte particulier d’un ensemble d’hôtes • Structure hiérarchique organisée en arbre correspondant au schéma de la délégation des responsabilités d’administration des noms • Nom de domaine pouvant être associé à : – hôte, i.e. adresse IP – zone de courrier électronique, i.e. serveur de courrier électronique – zone de responsabilité d’administration domaine enregistrement 24 Domaines de 1er niveau – officiels / non officiels • non officiels : uniquement pour des organisations ne participant pas à l’Internet réseau personnel • officiels : 2 schémas(nom et adresse IP) inclus dans la même hiérarchie – domaines officiels de 1er niveau • géographique – .xx : xx code officiel de pays suivant la norme ISO 3166 code d’état (2 lettres) – .fr , .us, .it, .ma, ( مصرse lit Misr), • organisationnel – – – – – – – – – – – – .com : entreprises commerciales .edu : établissements d’enseignement .gov : établissements gouvernementaux .mil : groupes militaires .net : sites majeurs relatifs aux activités réseau .int : organisations internationales .arpa : domaines ARPANET .org : autres organisations .biz : monde des affaires .info : sites d’information de toute nature .name : individus et particuliers ++ 25 Hiérarchie du DNS et de sa structure arborescente Root Node 26 Exemple 27 Principe de la résolution de noms – but : obtenir l’adresse IP associée à un nom de domaine – moyen : système client / serveur distribué • client : solveur de noms • serveur : serveur de noms – comment : utilisation d’un ensemble hiérarchisé de serveurs de noms communiquant par un réseau TCP/IP – Exemple du protocole DNS : client DNS et Serveur DNS (Port 53 TCP ou UDP) 28 Principe conceptuel de la résolution de noms – un serveur de nom par nœud de l’arbre du DNS – Tout solveur s’adresse au serveur racine 29 Principe de la résolution de noms dans une implémentation réelle – Les solveurs et serveurs de noms peuvent gérer des caches contenant des entrées à durée de vie limitée – Exemple $ipconfig /displaydns – La fraîcheur des réponses est indiquée au client TTL DNS – En principe, un solveur s’adresse au serveur de noms de son domaine. –… – Un serveur de noms qui n’est pas capable de répondre à une requête s’adresse à : • un autre serveur de noms (serveur de noms de niveau supérieur • Ou au serveur racine. – résolution itérative ou récursive 30 Résolution récursive 31 Résolution itérative 32 Ressources DNS • Chaque nœud de l’arbre contient une ou plusieurs ressources • Une ressource est principalement constituée : – Un type qui indique comment interpréter les données associées – Une durée de validité (TTL) – Un objet associé au nom pointé dans l’arbre • Types ou enregistrements DNS : – A : adresse IPv4 – AAAA : adresse IPv6 (ou A6 ) – CNAME : nom canonique, il permet de faire correspondre un alias au nom canonique – MX : liste des serveurs de courrier électronique et préférences – NS : nom du serveur de noms responsable du domaine – SOA : zones de responsabilité gérées par le serveur de noms du domaine. Ce champs permet de décrire le serveur de nom ayant autorité sur la zone – PTR : Pointeur du nom de domaine – SRV : Service mapping (nom machine + numéro port) – TXT : Zone de texte libre – Autres informations : serveurs SIP par exemple, etc. 33 Exemple de ressource DNS – chez OVH .mon-domaine.com .mon-domaine.com .mon-domaine.com .mon-domaine.com .mon-domaine.com .mon-domaine.com www.mon-domaine.com _sip._udp.mon-domaine.com audio.mon-domaine.com ftp.mon-domaine.com ftp2.mon-domaine.com imp.mon-domaine.com jabber.mon-domaine.com mail.mon-domaine.com ox.mon-domaine.com pop3.mon-domaine.com sip.mon-domaine.com smtp.mon-domaine.com vpn.mon-domaine.com NS NS MX MX MX A CNAME CNAME CNAME CNAME CNAME CNAME CNAME CNAME CNAME CNAME CNAME CNAME CNAME ns17.ovh.net dns17.ovh.net 5 mx2.ovh.net 100 mxb.ovh.net 1 mx1.ovh.net 192.168.1.1 mon-domaine.com _sip._udp.720plan.ovh.net audio.ovh.net ftp.business.ovh.net anonymous.ftp.ovh.net imp.ovh.net jab1.720plan.ovh.net ns0.ovh.net ox.ovh.net ns0.ovh.net sip1.720plan.ovh.net ns0.ovh.net vpn.720plan.ovh.net 34 Zone d’autorité • Un serveur de noms définit une zone, c'est-à-dire un ensemble de domaines sur lequel le serveur a autorité • Exemple requête envoyée au serveur de nom • Si celui-ci possède l'enregistrement dans son cache, il l'envoie à l'application, dans le cas contraire il interroge un serveur racine. • Le serveur de nom racine renvoie une liste de serveurs de noms faisant autorité sur le domaine • Par exemple, le serveur DNS de l’ENSEIRB a autorité sur le domaine enseirb-matmeca.fr • Plusieurs serveurs peuvent partager cette autorité, sans faire partie de ce domaine forcément • Exemple le serveur bxnms.u-bordeaux.fr a autorité sur le domaine enseirb-matmeca.fr. 35 Résolution inverse • Le DNS permet la conversion inverse : objet vers noms. Il s’agit par exemple de résoudre le nom pour IP = 209.85.229.104 , réponse www.google.com • Le DNS maintient un sous-arbre particulier sous la zone IN-ADDR.ARPA. • La branche d’adresse 209.85.229.104 devient alors : 104. 229. 85. 209.IN-ADDR.ARPA • La ressource (PTR) se trouve dans la feuille de la branche et pointe alors « www.google.com » 36 Résumé du protocole DNS – utilisation de la couche transport UDP (ou TCP), port 53 – plusieurs requêtes ou réponses possibles dans un message – requête • • • • nom de domaine à résoudre récursive ou non type : normale ou inverse classe : type d’objet demandé – réponse • ressource issue de la résolution • Type • durée de vie 37 Configuration des indications de racine • Lorsque le serveur DNS n'est pas configuré pour utiliser des redirecteurs, il se sert des indications de racine pour résoudre les noms d'hôtes ou les adresses IP appartenant à des zones qu'il n'héberge pas • Les indications de racine sont un ensemble de serveurs hébergeant la zone contenant les enregistrement du domaine racine ou domaine « . » • Les "serveurs DNS racines" sont au nombre de 13 à travers le monde. Il appartiennent tous à un même domaine nommé root-servers.net • Serveur de « a » à « m » exemple C.ROOT-SERVERS.NET ayant une adresse Anycast. • Cela signifie que si le serveur DNS reçoit une requête DNS dont il ignore la réponse, il va contacter un de ces serveurs racine pour l'obtenir la réponse. 38 Configuration des redirecteurs • Lorsque le serveur DNS n'est pas capable de résoudre un nom en adresse IP, il va essayer de contacter un autre serveur DNS DNS redirecteur (attention à la disponibilité du service !) • Il est possible de configurer un ou plusieurs redirecteurs pour un domaine précis • L'utilisation des redirecteurs permet d'utiliser des serveurs DNS locaux pour résoudre les enregistrements de ressources des domaines locaux et des serveurs DNS extérieurs pour résoudre les enregistrements de ressources des domaines Internet 39 Géolocalisation des adresses IP • DNS Leaks : fuite d’informations causée par le DNS – https://www.dnsleaktest.com/ • Correspondance entre une adresse IP et un emplacement géographie (une rue dans une ville par exemple) • Les FAIs (ISP) vendent les correspondances à des entreprises spécialisées dans la géolocalisation des adresses • Exemple de sites offrants la géolocalisation : – http://www.infosniper.net/ 40 Utilisation directe du DNS • Sous Unix – Nslookup (disponible aussi sur windows) • Outil ancien • ligne de commande : nslookup • set <option>=value – dig « domain information groper » – dig enseirb-matmeca.fr. MX – Utiliser la commande whois pour savoir plus sur les enregistrements DNS • whois enseirb-matmeca.fr 41 Configuration d’un client DNS • /etc/resolv.conf : Le fichier de configuration de la bibliothèque resolver • Permet de déterminer quel(s) serveur(s) DNS utiliser pour résoudre un nom de domaine. • Configuration: – – – – nameserver [adresse IP du serveur de nom] Ex: nameserver 8.8.8.8 et 8.8.4.4 (Google) nameserver 1.1.1.1 (CloudFlare) 64.6.64.6 (Verisign) • Open DNS (utilisation d’un autre DNS que celui du domaine de rattachement pour dissimuler son identité), par exemple combiné avec TOR et proxychains – 208.67.222.222 – 208.67.220.220 42 Carte mondiale de DNS Il y a +1000 sites dans 53 pays qui hébergent un serveur racine du DNS 43 Configuration de root DNS server 44 DoH: DNS over HTTPS • Les principaux objectifs sont liés à la sécurité – Garantir la confidentialité en chiffrant le trafic (entre le client, et le résolveur DoH) – Empêcher les resolveurs de modifier les résultats • Nécessite malgré tout de faire confiance au resolveur DoH • Encapsulation des échanges DNS dans le protocole HTTP • Contexte d’application standard: Traffic chiffré DNS DoH client résolveur publique ou privée serveurs d’autorité Exemple de la configuration de Firefox 84 45 Exercices • Feuille de TD – ssh sur ssh.enseirb-matmeca.fr – Puis ssh sur travail64 • http://www.kloth.net/services/dig.php • Certaines manipulations nécessitent d’aller sur (Interroger un autre serveur DNS et récupérer l’adresse IP de www.google.com): – lab-enseirb.atinternet.fr • user: eleve • pass: b00t$Net 46 Contrôle Continue – 10 minutes • Quel est l'adresse IPv4 correspondant à ce nom : www.wikipedia.org • Quel est l'adresse IPv6 correspondant à ce nom : www.wikipedia.org • Trouver avec deux manières différentes le nom correspondant à cette adresse IP : 147.210.19.62 • Ecrire un script bash qui permet retrouver les noms des machines associés à une plage d’adresse réseau. (Nous prenons le réseau 147.210.18.0/24) 47 Garder son anonymat / changer son identité sur Internet • Une adresse IP correspond à une interface réseau identifiable (identification du fournisseur, identification de l’emplacement géographique, …) • Certains fournisseurs offrent des services en fonction de votre lieu géographique (NetFlix) • Pour changer son identité : – Utilisation de proxy – Chaines de proxy • proxychains – Utilisation de VPN 48 Utilisation de TOR • TOR : chaine d’utilisateurs • « Torify an application » : faire passer le trafic d’une application par TOR • Tor empêche un fournisseur de service d'apprendre votre position ou vos habitudes de navigation en vous permettant de communiquer anonymement sur Internet • Combinaison possible avec proxychains 49 Le protocole HTTP (Hypertext Transfer Protocol) 50 HTTP • Protocole de transfert de différents formats de données entre serveur et client : texte, images, vidéo, … • Ressources URL http://enseirb-matmeca.bordeaux-inp.fr:8080/fr/recherche-transfert-transfert Protocole d’accès Serveur Numéro de port ou défaut 80 Chemin de la ressource 51 Fonctionnement global • Le protocole HTTP est basé sur le principe de requête/réponse • Un client HTTP réalise les opérations suivantes : – Etablissement d’une connexion TCP vers un serveur (si nécessaire, il réalise une résolution DNS) identifié par une adresse IP et un numéro de port (par défaut 80) – Transmission d’une requête sous la forme d'une méthode suivi d'une URI, du numéro de version, d’indicateur de la nature et du format du document (MIME type), des informations sur le client, et éventuellement un corps. • Le serveur répond par une ligne d'état, incluant la version de protocole et un message de succès ou d'erreur, suivi de méta données (type MIME, taille de la réponse,…) et éventuellement le corps de la réponse. 52 Requêtes et réponses • • • • • GET HEAD POST PUT etc. • • • • • 1xx 2xx 3xx 4xx 5xx Information Succès Redirection Erreur Client Erreur Serveur 53 Exemples de codes de réponses "200" "204" "301" "302" "400" "401" "403" "404" "500" "501" "502" "503" OK No Content Moved Permanently Moved Temporarily Bad Request Unauthorized Forbidden Not Found Internal Server Error Not Implemented Bad Gateway Service Unavailable OK Pas de contenu Changement d'adresse définitif Changement temporaire Requête incorrecte Non autorisé Interdit Non trouvé Erreur interne serveur Non implémenté Erreur de routeur Indisponible 54 Exemple HTTP • En utilisant l’utilitaire telnet ou nc, simuler le fonctionnement d’un client SMTP • telnet www.buyya.com 80 • GET / HTTP/1.0 • GET / HTTP/1.1 • Host: www.buyya.com 80 55 Trace HTTP d’un navigateur 56 Le courrier électronique 57 Le courrier électronique • Les protocoles de messagerie électronique sont : • Emission : – SMTP : Simple Mail Transfer Protocol (port 25) • Réception : – POP : Post Office Protocol (le plus utilisé POP3 port 110) – IMAP : Internet Message Access Protocol (port 143) 58 le caractère 13 (0x0D) suivi du caractère 10 (0x0A). Le protocole SMTP • Le protocole SMTP fonctionne en mode client / serveur avec des requêtes envoyées par le client auxquelles le serveur doit y répondre • Requête = commande texte suivi de <CRLF> correspond à \r et \n ou le caractère 13 (0x0D) suivi du caractère 10 (0x0A). • Réponse = code numérique sur 3 caractères + un message de description 59 Architecture de courrier électronique receiver@domaine2.org sender@domaine1.com Client SMTP Client POP domaine2.org Domaine1.com Serveur SMTP Internet Serveur SMTP Client SMTP Serveur POP/IMAP Serveur POP/IMAP SMTP POP / IMAP 60 Requêtes SMTP • « HELO » :pour s’identifier auprès sur serveur SMTP. Depuis avril 2001, le RFC 2821, imposent que la commande HELO soit remplacée par la commande EHLO. • « MAIL FROM: » : adresse de l’émetteur du message • « RCPT TO: » : adresse du destinataire • « DATA » : corps du message + fichiers attachés codés en ASCII 7 bits. La fin DATA est identifiée par "<CRLF>.<CRLF>" • « QUIT » : termine la session en cours. 61 Réponses SMTP 62 TP: Utiliser telnet pour expérimenter le protocole SMTP $telnet smtp.enseirb-matmeca.fr 25 Ou utiliser $nc smtp.enseirb-matmeca.fr 25 (commande netcat) $openssl s_client -connect smtp.enseirb-matmeca.fr:465 R: 220 Simple Mail Transfer Service Ready S: HELO enseirb.fr R: 250 smtp.enseirb.fr S: MAIL FROM:<toto@enseirb.fr> R: 250 OK S: RCPT TO:<foo@mit.edu> R: 250 OK S: RCPT TO:<Green@Beta.ARPA> R: 550 No such user here S: RCPT TO:<bar@mit.edu> R: 250 OK S: DATA R: 354 Start mail input; end with <CRLF>.<CRLF> S: Blah blah blah... S: ...etc. etc. etc. S: <CRLF>.<CRLF> R: 250 OK 63 Serveur SMTP enseirb-matmeca.fr. MX 64 Remarques • Le protocole SMTP exige un codage de données sur 7 bits (avec le bit 8 à zéro) • pour envoyer des caractères non ASCII 7 bits (exemple accentués), il faut avoir recours à des algorithmes intégrant les spécifications MIME Multipurpose Internet Mail Extensions (MIME): – Exemple base64 pour les fichiers attachés – Pour un texte ISO latin -1 (ISO-8859-1) appelé aussi ou Europe occidentale • Content-Type: text/plain; charset=ISO-8859-1 • Content-transfer-encoding: base64 65 Exercices • En utilisant l’utilitaire telnet ou nc, simuler le fonctionnement d’un client SMTP • Exemple avec openssl • openssl s_client -connect smtp.enseirbmatmeca.fr:465 • https://www.stevenrombauts.be/2018/12/tes t-smtp-with-telnet-or-openssl/ 66 Le protocole POP3 • Le protocole POP permet de récupérer un courrier sur un serveur POP • Les emails sont généralement reçus hors connexion et sont enregistrés sur le système de fichier du serveur POP. • La version la plus utilisée est POP3 (port 110) • Le protocole POP fonctionne en mode client / serveur avec des requêtes envoyées par le client auxquelles le serveur doit y répondre. • Requête = commande texte suivi de <CRLF> • Réponse = code numérique sur 3 caractères + un message de description 67 Commandes POP3 • USER identifiant : Pour s'authentifier. Elle doit être suivie du nom de l'utilisateur, c'est-à-dire une chaîne de caractères identifiant l'utilisateur sur le serveur. • PASS mot_de_passe : permet d'indiquer le mot de passe de l'utilisateur identifiant. • STAT Information sur les messages contenus sur le serveur • RETR Numéro du message à récupérer • DELE Numéro du message à supprimer 68 POP vs IMAP • POP: • Permet de récupérer les courriers sans connexion permanente à Internet. • Bloque la boîte aux lettres pendant que l’accédez, pas de connexions simultanées. • IMAP: • Les courriers et les dossiers de messages restent sur le serveur. • Synchronisation des messages: Le logiciel affiche une copie de votre boîte aux lettres. 69 Exercices • Etudier la trace POPv3 disponible ici : – http://www.labri.fr/perso/tad/pcap/ • En utilisant l’utilitaire telnet ou nc (netcat), simuler le fonctionnement d’un client POPv3. • openssl s_client -connect pop.enseirbmatmeca.fr:995 70 Le routage dans les réseaux 1 Comment aller de la gare Montparnasse à République 2 Routage des données • Les réseaux sont reliés entre eux par des routeurs caractérisés par plusieurs interfaces • Les routeurs sont chargés de l’acheminement des paquets IP. • Les paquets IP portent dans leur en-tête IP des adresses IP source et de destination • Les routeurs décident de la route à faire suivre aux paquets IP par consultation d’une table de routage • La création / MAJ des tables de routages est une opération importante et cruciale dans les réseaux • La table de routage peut être manuelle, statique ou dynamique 3 Algorithme de routage • Rôle d’un algorithme de routage • Choix du chemin optimal suivi par les paquets à acheminer en utilisant la topologie du sous-réseau et en fonction de critères donnés (métriques) : – coût de l’utilisation des lignes de communication – nombre de sauts (nœuds de transfert traversés) – performances (débit, latence, autres paramètres de QoS, fiabilité, sécurité, etc.) • L'utilisation du chemin optimal, qui n'est pas forcément le plus court : il peut s'agir du chemin au délai le plus court, du chemin le plus sécurisé, du chemin le moins cher, ou tout simplement du chemin utilisant le moins de sauts. 4 Connecté et non connecté au niveau 3 • En mode connecté : – phase d’ouverture de connexion et mise à jour de la table de routage (commutation) par signalisation – chemin identique pour tous les paquets d’une connexion réseau donnée (sauf incident ou reconfiguration) • Mode non connecté : – acheminement indépendant de chaque paquet – calcul nécessaire pour chaque paquet 5 Algorithme de routage • 1) centralisé vs. distribué : – en routage centralisé, un nœud central se charge de collecter les informations sur chaque lien (on/off, utilisation, capacité), et de calculer la table de routage pour chaque nœud du réseau (envisageable lorsque le réseau est administré de façon centralisée et qu'il n'est pas trop grand) – en routage décentralisé, les routeurs coopèrent selon un protocole de routage distribué de façon à construire des tables de routage consistantes – Internet préfère le distribué pour des raisons de taille (scalability) ; 6 Algorithme de routage • 2) à la source vs. saut par saut – en routage à la source, un paquet peut transporter toute sa route (i.e. la liste – éventuellement exhaustive – de tous les nœuds entre sa source et sa destination – Utilisation des options IPv4 et IPv6 = routage à la source lâche et strict – en routage saut par saut, un paquet ne véhicule que l'adresse de la destination 7 Algorithme de routage • 3)déterministe vs. stochastique – en routage déterministe, tous les paquets vers une même destination seront retransmis au même nœud suivant – en routage stochastique, chaque routeur maintient plusieurs nœuds aval pour une même destination, ce qui permet de limiter les oscillations de trafic – Internet utilise le déterministe, car cela permet de minimiser le déséquencement des paquets 8 Algorithme de routage • 4) à chemin unique vs. à chemin multiple – en routage à chemin multiple, chaque routeur maintient une route principale et des routes alternatives qu'il peut utiliser en cas d'indisponibilités de la route principale • 5) statique vs. dynamique – en routage dynamique le choix de la route dépend de l'actuelle mesure de l'état du réseau – le routage dynamique peut donc aider au contrôle de congestion, mais peut aussi introduire des oscillations 9 Les tables de routage • Les tables de routage sont élaborées soit manuellement soit automatiquement par des protocoles utilisant divers algorithmes de routage • Il existe principalement 2 grandes familles d’algorithmes de routage distribué: – Routage par vecteur distance • chaque routeur indique à ses voisins sa table de routage • Quand un routeur reçoit une table de routage d’un voisin, il met à jour la sienne. – Routage par l’état des liaisons • Chaque routeur diffuse à tous les routeurs du réseau la liste de ses voisins actifs ainsi que la distance pour les atteindre • Plusieurs algorithmes permettent la diffusion dans un réseau : inondation, arbre collecteur, etc. • Chaque routeur a ainsi une vue complète de tous les routeurs du réseau et de leur distance respective • Chaque routeur peut calculer le plus court chemin vers n’importe quelle destination du réseau 10 Vecteur de distance vs. Etat de liens • Les algorithmes à vecteur de distance sont équivalents aux panneaux de signalisation pour nous guider vers notre destination • Les panneaux ne donnent que des informations sur la distance et la direction • Les algorithmes à état de liens, sont équivalents à une carte routière pour voir toutes les routes potentielles et déterminer le chemin préféré. 11 Routage dans un réseau • Représentation du réseau par un graphe orienté ou non – nœuds de transfert : routeurs ou commutateurs nœud du graphe – lignes de communication entre les nœuds de transfert arc – hôtes généralement non représentés pour des raisons de simplifications B A C D E J K F G H I L 12 Arbre Collecteur • Toutes les routes optimales d’un nœud vers les autres nœuds forment un arbre collecteur • Il faut construire l’arbre collecteur pour chaque nœud. B B A C D A C D E J K F E J K F G H I L G H I L 13 Algorithme du plus court chemin • Algorithme de Edsger W. Dijkstra (1930-2002) proposé en 1959 se prononce Dykstra – ensemble des nœuds du graphe : N – nœuds source et destination du chemin recherché : S et D – matrice des coûts • A chaque étape: choisir un nouveau nœud atteignable avec le coût minimal et ajouter l’arc, permettant de l’atteindre, à l’arbre. 14 Le principe de Dijkstra sur un graphe • Chaque nœud est étiqueté par sa distance au nœud source en suivant le meilleur chemin connu : • au début, aucun chemin n'est connu, aussi les nœuds sont tous étiquetés avec une valeur « infinie ». • au fur et à mesure que l'algorithme progresse et qu'il trouve les chemins, les étiquettes sont modifiées, indiquant ainsi le meilleur chemin. • une étiquette peut être permanente ou provisoire : • au début, toutes les étiquettes sont provisoires ; • quand il est démontré qu'une étiquette représente le plus court chemin possible entre la source et le nœud, elle devient permanente et n'est plus modifiée. 15 Application de Dijkstra Objectif : recherche du chemin minimal entre S et E A 3 C 3 3 Nœud source S 1 3 1 1 E Nœud Destination 1 B 5 D 16 Application de Dijkstra (+∞,-) (3,S) A 3 C 3 3 S 1 3 1 1 E (+∞,-) 1 B (1,S) 5 D (+∞,-) Nœud permanent Nœud provisoire 17 Application de Dijkstra (+∞,-) (3,S) A 3 C 3 3 S 1 3 1 1 1 B (1,S) Nœud permanent Nœud provisoire E (+∞,-) 5 D (+∞,-) Nœud en cours de traitement 18 Application de Dijkstra (+∞,-) (3,S) A 3 C 3 3 S 1 3 1 1 1 B (1,S) Nœud permanent Nœud provisoire E (+∞,-) 5 D (+∞,-) Nœud en cours de traitement 19 Application de Dijkstra (4,B) (+∞,-) (2,B) (3,S) A 3 C 3 3 S 1 3 1 1 E (+∞,-) 1 B (1,S) 5 D (+∞,-) (6,B) Nœud permanent Nœud provisoire Nœud en cours de traitement 20 Application de Dijkstra (4,B) (+∞,-) (2,B) (3,S) A 3 C 3 3 S 1 3 1 1 E (+∞,-) 1 B (1,S) 5 D (+∞,-) (6,B) Nœud permanent Nœud provisoire Nœud en cours de traitement 21 Application de Dijkstra (5,A) (4,B) (+∞,-) (2,B) (3,S) A 3 C 3 3 S 1 3 1 1 E (+∞,-) 1 B (1,S) 5 D (+∞,-) (6,B) Nœud permanent Nœud provisoire Nœud en cours de traitement 22 Application de Dijkstra (5,A) (4,B) (+∞,-) (2,B) (3,S) A 3 C 3 3 S 1 3 1 1 E (+∞,-) 1 B (1,S) 5 D (+∞,-) (6,B) Nœud permanent Nœud provisoire Nœud en cours de traitement 23 Application de Dijkstra (5,A) (4,B) (+∞,-) (2,B) (3,S) A 3 C 3 3 S 1 3 1 1 E (+∞,-) 1 B (1,S) 5 D (+∞,-) (6,B) Nœud permanent Nœud provisoire Nœud en cours de traitement 24 Application de Dijkstra (5,A) (4,B) (+∞,-) (2,B) (3,S) A 3 C 3 3 S 1 3 (7,C) 1 1 1 B (1,S) Nœud permanent Nœud provisoire E (+∞,-) 5 D (+∞,-) (6,B) (5,C) Nœud en cours de traitement 25 Application de Dijkstra (5,A) (4,B) (+∞,-) (2,B) (3,S) A 3 C 3 3 S 1 3 (7,C) 1 1 1 B (1,S) Nœud permanent Nœud provisoire E (+∞,-) 5 D (+∞,-) (6,B) (5,C) Nœud en cours de traitement 26 Application de Dijkstra (5,A) (4,B) (+∞,-) (2,B) (3,S) A 3 C 3 3 S 1 3 (7,C) 1 1 (1,S) Nœud provisoire E (+∞,-) 1 B Nœud permanent (6,D) 5 D (+∞,-) (6,B) (5,C) Nœud en cours de traitement 27 Application de Dijkstra (5,A) (4,B) (+∞,-) (2,B) (3,S) A 3 C 3 3 S 1 3 (7,C) 1 1 (1,S) Nœud provisoire E (+∞,-) 1 B Nœud permanent (6,D) 5 D (+∞,-) (6,B) (5,C) Nœud en cours de traitement 28 Application de Dijkstra • Table de routage coût Chemin A prochain nœud B 2 SBA B B 1 SB C B 4 SBC D B 5 SBCD E B 6 SBCDE destination 29 Exercice • Ecrire un (pseudo) algorithme permettant de représenter la solution de Dijkstra • Donner une analyse de complexité de l’algorithme de Dijkstra. En déduire le temps de convergence. 30 Routage par le vecteur distance (Bellman-Ford) • Vecteur distance : chaque routeur indique à ses voisins sa table de routage. • Chaque routeur connaît ou estime le coût pour atteindre chacun de ses voisins. • A l’aide de ces informations, chaque routeur peut construire sa propre table de routage. • Quand un routeur reçoit une table de routage d’un voisin, il met à jour la sienne. 31 Temps de convergence • Chaque fois qu'un changement causé par une croissance, une reconfiguration ou une panne se produit dans la topologie d'un réseau, la base de connaissances du réseau doit aussi changer modification de la table de routage • La table de routage doit refléter une vision juste et cohérente de la nouvelle topologie • Cette vision se nomme convergence et on dit du réseau qu'il est convergent • Une convergence rapide est une caractéristique désirable d’un algorithme de routage 32 Vecteur de distance • Chaque routeur reçoit une table de routage de ses voisins immédiats. • Ici B reçoit de l'information du routeur A. • Le routeur B ajoute un nombre de vecteur de distance (comme le nombre de sauts) qui accroît le vecteur de distance, puis passe cette nouvelle table de routage à son voisin, le routeur C • Le même procédé est répété étape par étape dans toutes les directions entre les routeurs adjacents 33 Exercice • Feuille de TD N°02 34 Routage Hiérarchique • Tous les routeurs sont identiques – Réseau plat ou “flat” – pas vrai en pratique (sur internet) • Avec plus de 200 millions de destinations: – Impossibilité de stocker ces destinations dans toutes les tables de routage – échange des tables de routage peut inonder les liens • Autonomie/administration internet = – réseau de réseaux – chaque réseau est administré indépendamment (contrôle de routage interne) 35 Routage Hiérarchique • Regroupement des routeurs en régions, “autonomous systems” (AS) • Internet se compose de milliers de systèmes autonomes (AS) exploités par des fournisseurs de services (ISP) qui opèrent différentes parties de l'infrastructure du réseau. • Les routeurs de même AS exécutent le même algorithme de routage – protocole de routage “intra-AS” • Les routeurs dans des AS différents peuvent exécuter des algorithmes de routage différents • Routeurs spéciaux dans les AS – Exécution de protocole de routage intra-AS avec tous les autres routeurs dans AS, – Exécution de protocole routage inter-AS avec d’autres routeurs / passerelles d’autres AS exemple de BGP 36 Création d’un chemin AS dans BGP 37 BGP • Fonctionnement de BGP • eBGP : c’est le mode utilisé entre deux routeurs BGP appartenant à deux AS différents appelés aussi entité BGP externes. – Les routes reçus depuis un routeur eBGP peuvent être à nouveau communiqués et annoncés à d’autres routeurs eBGP et iBGP • iBGP : c’est le mode utilisé entre deux routeurs BGP d’un même AS (entité BGP interne). – Les routes reçus depuis un routeur iBGP ne peuvent pas être communiqués à d’autres routeurs iBGP mais seulement à des routeurs eBGP. – Chaque entité iBGP doit être connectée à toutes les autres entités pour former un maillage complet. • BGP prévoit l’utilisation des confédérations de BGP ou d’utiliser la notion de « Route Reflectors » 38 Maillage iBGP 14 routeurs = 91 sessions iBGP 39 Affichage des route BGP • BGPPlay : http://bgplay.routeviews.org/ (nécessite Java) 40 Routage Intra-AS et Inter-AS C.b B.a A.a a b A.c C AS b a b B a d c c AS AS network layer inter-AS, intra-AS routing in gateway A.c link layer physical layer 41 Routage Intra-AS et Inter-AS C.b B.a A.a a Machine S b A.c C B a d A b c a c b Machine D Routage Intra-AS dans AS B Routage Intra-AS dans AS A 42 Protocoles de routage Intra-AS • Protocoles de routage Intra-AS sont aussi connu comme protocoles de passerelle intérieure : Interior Gateway Protocols (IGP) – RIP: Routing Information Protocol – OSPF: Open Shortest Path First – IGRP: Interior Gateway Routing Protocol (Cisco) 43 RIP ( Routing Information Protocol) • • • • Algorithme DV (Distance Vector) Inclus dans une distribution BSD-UNIX en 1982 Métrique de Distance : # sauts (max = 15 hops) DV: échangés avec les voisions toutes les 30 sec via Message de Réponse (aussi appelé annonce “advertisement”) • S’il n’y pas d’annonces après 180 sec --> voisin/lien sont déclarés morts – – – – – routes via le voisin sont invalidés nouvelles annonces sont envoyées aux voisins les voisins renvoient des nouvelles annonces (si tables sont changées) l’info de défaillance se propage rapidement dans le réseau entier “poison reverse” utilisée pour prévenir la formation des boucles “pingpong “ (distance infinie= 16 sauts) 44 Contraintes de RIP • • • Inconvénients des techniques Vector-Distance : – taille des informations de routage (proportionnelle au nombre de routeurs) – Métrique difficilement utilisable, limitée à 16, pas de cohérence entre domaine de routage (pas d’universalité entre AS), – Bouclage, éventuellement à l’infini, – Pas de chemins multiples Amélioration apportée par RIP Version 2 – Gestion de sous-réseaux et super-réseaux (Cf CIDR) – utilisation de Multicast IP (224.0.0.9) au lieu de Broadcast IP – Suppression de pics de transmission de messages : supprimer les synchronisations involontaires des émissions de messages : introduction de gestion aléatoire du déclenchement des émissions (14 à 45 secondes). – Authentification des routeurs RIP (sécurité) Problèmes résiduels importants – Métriques non appropriées aux réseaux modernes 45 OSPF • Sécurité: tous les messages sont authentifiés (pour prévenir des intrusions) • Multiple chemins de coût identiques ou différents (un seul chemin dans RIP) • Pour chaque lien, multiple métriques pour différent TOS (Type of Service) • Protocole link state (RFC 1247) destiné à remplacer les protocoles intérieurs propriétaires et RIP. 46 Principe de OSPF • • • • • • OSPF utilise la fonctionnalité “type de service” offerte par IP – permet d’installer plusieurs routes pour une même destination – selon des critères différents (ex : délai court, débit important). – si plusieurs routes vers une même destination sont de coût équivalents, OSPF répartit la charge équitablement parmi ces routes. OSPF supporte l’adressage en sous-réseaux (subnets) Découpage d’un système autonome en AIRES (areas) – isolement des informations de routage à l’intérieur de ces areas – limitation des informations de routage dans le système autonome Des liens virtuels peuvent être établis dans la topologie de l’AS afin de cacher les connexions physiques d’une partie du réseau Les liens extérieurs avec d’autres systèmes autonomes (via EGP par exemple) sont pris en compte Echanges entre routeurs authentifiés l’intégrité des messages 47 Concept de Aires OSPF 48 Concept de base de OSPF • • • Le problème : dans les systèmes de routage, si le réseau est trop grand – overhead du trafic dans le réseau – calculs trop longs – dimensionnement mémoire trop grand La solution : routage hiérarchique – découpage du réseau en parties indépendantes (Areas) – reliées par un BackBone (Area BackBone BB – Aire 0) La fonctionnalité – chaque area constitue un réseau indépendant – la table des liaisons ne contient des liaisons de l’Area, – le protocole d’inondation s’arrête aux frontières de l’Area, – les routeurs ne calculent que des routes internes à l’Area – certains routeurs (area border routers) appartiennent à plusieurs Areas (en général une Area inférieure et une Area BB) et transmettent les informations récapitulatives des Areas qu’ils relient. 49 Fonctionnement de OSPF • Chaque routeur du système autonome où d’une area construit sa propre base d’information décrivant la topologie de l’AS complet ou bien de l’area • Au départ les routeurs utilisent des message "Hello" pour découvrir leurs voisins et une "adjacence" est formée lorsque deux routeurs communiquent pour échanger des informations de routage • L’information élémentaire échangée entre routeurs décrit l’état (link state) des adjacences. Cette information est fournie par un routeur donné puis propagée dans l'area ou l’AS. • A partir de sa base d’information (collection d’états des routeurs), chaque routeur construit un arbre du plus court chemin (SPF : shortest path first tree) dont il est la racine. • Cet arbre indique toutes les routes pour toutes les destinations du système autonome, plus les destinations extérieures. 50 Les sockets de communication du modèle TCP/IP 1 Client / Serveur • Notion Client / Serveur – Client • Entité qui initie une connexion • Entité active – Serveur : • entité recevant les demandes de connexions • Entité passive 2 Mode de fonctionnement • Le client connait l’identificateur de la machine du serveur (nom DNS, @ IP) • Le client connait l’identificateur du service (programme serveur) du serveur (numéro de port) – Dans certains cas, utilisation d’un service d’annuaire qui permet de retrouver le numéro de port – Exemple : portmapper pour RPC • Ouverture d’un canal de communication connecté (TCP) ou non connecté (UDP) • Construction d’un message • Envoie / réception des messages selon un protocole d’application 3 Eléments de programmation • un Socket = extrémité de communication désignée par un descripteur et il représente un canal de communication d’entrée sortie sur lequel le programme écrit et lit • Le descripteur socket est situé dans le même espace que ceux des fichiers et des périphériques avec les mêmes propriétés • Le descripteur de socket est manipulable par la plupart des primitives applicables aux fichiers et par des primitives complémentaires spécifiques 4 API Socket • API générique : – utilisable pour de nombreuses familles de réseaux – utilisable pour tous les protocoles d’une famille – structures de données quelquefois peu simples (support d’adresses de forme et de longueur variable, en particulier) – contrôle de bas niveau possible d’une interface réseau 5 Opérations possibles via l’API socket • création / destruction d’un socket avec choix d’une famille et d’un (type de) protocole • affectation d’une adresse locale et distante à un socket (nommage) pouvant entraîner la connexion suivant le protocole associé au socket • contrôle plus ou moins fin des caractéristiques d’un socket (incluant la mise en mode passif pour TCP) • émission et réception d’informations • fermeture et libération de ressources 6 Etude de fichier /usr/include/sys/socket.h (BSD) /usr/include/bits/socket.h /* * Address families. */ #define AF_UNSPEC #define AF_UNIX #define AF_INET #define AF_IMPLINK #define AF_CCITT #define AF_SNA #define AF_DECnet #define AF_APPLETALK #define AF_802 0 1 2 3 10 11 12 16 18 /* unspecified */ /* local to host (pipes, portals) */ /* internetwork: UDP, TCP, etc. */ /* arpanet imp addresses */ /* CCITT protocols, X.25 etc */ /* IBM SNA */ /* DECnet */ /* Apple Talk */ /* IEEE 802.2, also ISO 8802 */ 7 Protocol families vs. address families /* * Protocol families, same as address families for now. */ #define PF_UNSPEC AF_UNSPEC #define PF_UNIX AF_UNIX #define PF_INET AF_INET #define PF_IMPLINK AF_IMPLINK #define PF_CCITT AF_CCITT #define PF_SNA AF_SNA #define PF_DECnet AF_DECnet #define PF_APPLETALK AF_APPLETALK #define PF_802 AF_802 8 Type de socket /* * Types */ #define SOCK_STREAM 2 #define SOCK_DGRAM 1 #define SOCK_RAW 4 #define SOCK_RDM 5 #define SOCK_SEQPACKET 6 /* stream socket */ /* datagram socket */ /* raw-protocol interface */ /* reliably-delivered message */ /* sequenced packet stream */ 9 Structure générique d’adresse /* * Structure used by kernel to store most addresses. */ struct sockaddr { sa_family_t sa_family; /* address family */ char sa_data[14]; /* up to 14 bytes of direct address */ }; 10 Etude de fichier /usr/include/netinet/in.h Pour la famille PF_INET cette structure se nomme sockaddr_in, elle est définie de la façon suivante : /* * Socket address, internet style. */ struct sockaddr_in { sa_family_t sin_family; in_port_t sin_port; struct in_addr sin_addr; char sin_zero[8]; }; struct in_addr { unsigned long s_addr ; /* 32b Internet */ }; • • sin_addr.s_addr : adresse IP considérée comme un nombre entier non signé de 32 bits nombres entiers écrits suivant le format réseau (ordre big-endian) – poids fort envoyé avant ou stocké avant 11 Diagramme d’interaction Client / Serveur ( mode TCP) socket() connect() Client socket() bind() listen() send() Serveur accept() recv() .. . recv() close() close() Attente de connexion pour les prochains client send() 12 Diagramme d’interaction Client / Serveur ( mode UDP) Client Serveur socket() socket() sendto() bind() En mode UDP, il n’y a pas de listen(), accept() et connect() recvfrom() sendto() recvfrom() close() Attente du prochain datagramme depuis un client quiconque close() 13 Primitive de création de socket : socket • int socket(int domain, int type, int protocol); – paramètres • domain : famille de protocoles • type : type de protocol • protocol : protocole particulier dans le type ou 0 si déductible des deux paramètres précédents • int s_listen = socket(family, type, protocol); – family: AF_INET specifies Ipv4 – type: SOCK_STREAM, SOCK_DGRAM – protocol: 0 (pseudo, IP ). See /etc/protocols 14 Primitive de destruction de socket : close • int close(int s); – Paramètres s : identificateur de socket – Résultat indicateur de succès (=0) ou d’échec (=-1, avec errno contenant le numéro d’erreur) 15 Primitive de nommage local : bind • int bind(int s, const struct sockaddr *localAdd, int addLength); – paramètres • s : identificateur ou descripteur de socket • localAdd : pointeur sur une structure d’adresse • addLength : longueur de la structure d’adresse 16 Exemple d’étapes • • • Déclaration d’une structure adresse – struct sockaddr_in sockAdd; Mise à jour de la famille – sockAdd.sin_family = AF_INET; Mise à jour de l’@IP (2 manières) //specify address to listen to inet_pton() -- convert address from presentation format to network – inet_pton(AF_INET, “127.0.0.1”, &sockAdd.sin_addr.s_addr) //listen to any local address INADDR_ANY= – sockAdd.sin_addr.s_addr = htonl(INADDR_ANY) • Mise à jour du numéro de port // specify port using htons() -- converts the unsigned short integer hostshort from host byte order to network byte order. – sockAdd.sin_port = htons(9999); 17 Primitive de configuration d’attente de connexion : listen () • int listen(int s, int queuelength); – paramètres • s : identificateur ou descripteur de de socket • queuelength : taille de la file d’attente de connexion – status: -1 if error, 0 otherwise – listen est “non- bloquante” retourne immédiatement 18 Primitive d’attente de connexion : accept () • int accept(int s, struct sockaddr *addr, int *addrlen); – paramètres • s : identificateur ou descripteur de de socket – affectations • *addr : structure contenant l’adresse de l’extrémité pair • *addrlen : longueur de la structure *addr – Résultat identificateur du nouveau socket créé pour la connexion acceptée (≠-1) ou indication d’erreur (=-1, avec errno contenant le numéro d’erreur) • accept est “bloquante”, attente de connexion avant un « retourn » 19 Primitive de nommage distant : connect () • int connect(int s, const struct sockaddr * addr, int addrlen) – paramètres • s : identificateur ou descripteur de de socket • *addr : pointeur sur une structure d’adresse • addrlen : pointeur sur la longueur de la structure d’adresse * addr – résultat indicateur de succès (=0) ou d’échec (=-1, avec errno contenant le numéro d’erreur) 20 Primitives de lecture des l’adresses • getsockname(int s, struct sockaddr * addr, int *namelen) • getpeername(int s, struct sockaddr *name, int *namelen) – paramètres • s : identificateur ou descripteur de de socket – affectations • * addr : structure contenant l’adresse recherchée • * addrlen : longueur de la structure d’adresse * addr – Résultat indicateur de succès (=0) ou d’échec (=-1, avec errno contenant le numéro d’erreur) 21 Primitive d’émission / réception : send / recv • int send(int s, const void *buf, int len, int flags); • • • • s : identificateur ou descripteur de de socket buf – pointeur du buffer len – taille du buffer flags – can be safely set to 0 – Résultat : nombre d’octets effectivement émis (≠-1) ou indication d’erreur (=-1, avec errno contenant le numéro d’erreur) • int recv(int s, void *buf, int len, unsigned int flags); • similaire à send • • Résultat : nombre d’octets effectivement lus (≠-1) ou indication d’erreur (=-1, avec errno contenant le numéro d’erreur) La fonction recv() bloque le processus jusqu'à ce qu'elle reçoive des données 22 Primitives de manipulation du nom d’un hôte • #include <netdb.h> • Nom de l’hôte – gethostname – sethostname • Nom du domaine d’appartenance de l’hôte – getdomainname – setdomainname • Primitives de recherche – hôte : nom adresse • gethostbyname • gethostbyaddr – réseau : nom adresse • getnetbyname • getnetbyaddr 23 Primitives de manipulation du nom d’un hôte • protocole : nom numéro – getprotobyname – getprotobynumber • service : nom port – getservbyname – getservbyport – getnetbyaddr 24 Manipulation des entiers • Conversions des entiers entre le format réseau et le format de la machine locale • conventions – – – – n network h host s short l long • primitives – – – – ntohs htons ntohl htonl 25 Manipulation des adresses IP • inet_aton : notation décimale structure in_addr • inet_addr : notation décimale adresse IP binaire dans l'ordre des octets du réseau • inet_network : notation décimale numéro de réseau • inet_ntoa : adresse IP notation décimale • make_addr : numéro de réseau et numéro de machine structure in_addr. Crée une adresse d'hôte Internet dans l'ordre des octets du réseau • inet_netof : structure in_addr renvoie numéro de réseau • inet_lnaof : structure in_addr renvoie numéro de machine 26 Exemple de Serveur TCP #include <stdio.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> void error(char *msg) { perror(msg); exit(1); } int main(int argc, char *argv[]) { int sockfd, newsockfd, portno, clilen; char buffer[256]; struct sockaddr_in serv_addr, cli_addr; int n; if (argc < 2) { fprintf(stderr,"ERROR, no port provided\n"); exit(1); } sockfd = socket(AF_INET, SOCK_STREAM, 0); if (sockfd < 0) error("ERROR opening socket"); bzero((char *) &serv_addr, sizeof(serv_addr)); portno = atoi(argv[1]); serv_addr.sin_family = AF_INET; serv_addr.sin_addr.s_addr = INADDR_ANY; serv_addr.sin_port = htons(portno); if (bind(sockfd, (struct sockaddr *) &serv_addr, sizeof(serv_addr)) < 0) error("ERROR on binding"); listen(sockfd,5); clilen = sizeof(cli_addr); newsockfd = accept(sockfd, (struct sockaddr *) &cli_addr, &clilen); if (newsockfd < 0) error("ERROR on accept"); bzero(buffer,256); n = read(newsockfd,buffer,255); if (n < 0) error("ERROR reading from socket"); printf("Here is the message: %s\n",buffer); n = write(newsockfd,"I got your message",18); if (n < 0) error("ERROR writing to socket"); return 0; } 27 Exemple de Client TCP #include <stdio.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <netdb.h> void error(char *msg) { perror(msg); exit(0); } int main(int argc, char *argv[]) { int sockfd, portno, n; struct sockaddr_in serv_addr; struct hostent *server; char buffer[256]; if (argc < 3) { fprintf(stderr,"usage %s hostname port\n", argv[0]); exit(0); } portno = atoi(argv[2]); sockfd = socket(AF_INET, SOCK_STREAM, 0); if (sockfd < 0) error("ERROR opening socket"); server = gethostbyname(argv[1]); if (server == NULL) { fprintf(stderr,"ERROR, no such host\n"); exit(0); } bzero((char *) &serv_addr, sizeof(serv_addr)); serv_addr.sin_family = AF_INET; bcopy((char *)server->h_addr, (char *)&serv_addr.sin_addr.s_addr, server->h_length); serv_addr.sin_port = htons(portno); if (connect(sockfd,&serv_addr,sizeof(serv_addr)) < 0) error("ERROR connecting"); printf("Please enter the message: "); bzero(buffer,256); fgets(buffer,255,stdin); n = write(sockfd,buffer,strlen(buffer)); if (n < 0) error("ERROR writing to socket"); bzero(buffer,256); n = read(sockfd,buffer,255); if (n < 0) error("ERROR reading from socket"); printf("%s\n",buffer); return 0; } 28 Serveur UDP int main(void) { struct sockaddr_in si_me, si_other; int s, i, slen=sizeof(si_other); char buf[BUFLEN]; Client UDP int main(void) { struct sockaddr_in si_other; int s, i, slen=sizeof(si_other); char buf[BUFLEN]; if ((s=socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP))==-1) error(" erreur de socket"); if ((s=socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP))==-1) error ("socket"); memset((char *) &si_me, 0, sizeof(si_me)); si_me.sin_family = AF_INET; si_me.sin_port = htons(PORT); si_me.sin_addr.s_addr = htonl(INADDR_ANY); if (bind(s, &si_me, sizeof(si_me))==-1) error(" erreur bind"); memset((char *) &si_other, 0, sizeof(si_other)); si_other.sin_family = AF_INET; si_other.sin_port = htons(PORT); if (inet_aton(SRV_IP, &si_other.sin_addr)==0) { fprintf(stderr, "inet_aton() failed\n"); exit(1); } for (i=0; i<NPACK; i++) { if (recvfrom(s, buf, BUFLEN, 0, &si_other, &slen)==-1) error("erreur recvfrom()"); printf("Received packet from %s:%d\nData: %s\n\n", inet_ntoa(si_other.sin_addr), ntohs(si_other.sin_port), buf); } close(s); return 0; } for (i=0; i<NPACK; i++) { printf("Sending packet %d\n", i); sprintf(buf, "This is packet %d\n", i); if (sendto(s, buf, BUFLEN, 0, &si_other, slen)==-1) error("sendto()"); } close(s); return 0; } 29 Programme Java • Les classes – La classe java.net.InetAddress permet de manipuler des adresses IP – La classe java.net.SocketServer permet de programmer l'interface côté serveur en mode connecté – La classe java.net.Socket permet de programmer l'interface côté client et serveur une fois la connexion établie – Les classes java.net.DatagramSocket et java.net.DatagramPacketpermettent de programmer la communication en mode datagramme. 30 Les sockets en Java • La classe ServerSocket implante un objet ayant un comportement de serveur • Programmation des sockets connectés via la classe Socket • Programmation des sockets non connectés via la classe DatagramSocket 31 La classe InetAddress • La classe java.net.InetAddress permet de manipuler des adresses IP • Méthodes permettant de créer des objets adresses IP: – public static InetAddress getLocalHost() – public static InetAddress getByName(String host – public static InetAddress[] getAllByName(String host) 32 La classe InetAddress • Méthodes de la classe InetAddress : • Obtenir le nom correspondant à l'adresse IP: – public static InetAddress getLocalHost() • Obtenir l'adresse IP sous forme numérique : – public static InetAddress getByName(String host) • Obtenir l'adresse IP sous forme d'un tableau d'octets: – public static InetAddress[] getAllByName(String host) 33 La classe ServerSocket • public class java.net.ServerSocket • Le constructeur ServerSocket : – Public ServerSocket(int port) – public ServerSocket(int port, int backlog) – public ServerSocket(int port, int backlog, InetAddress bindAddr) 34 La classe ServerSocket • Les opérations de la classe ServerSocket : – public Socket accept() – retrouver l'adresse IP ou le port d'un socket d'écoute : • public InetAddress getInetAddress() • public int getLocalPort() 35 La classe Socket • La classe java.net.Socket est utilisée pour la programmation des sockets connectés • La communication sur une connexion par socket utilise la notion de flots de données: – public InputStream getInputStream() – public OutputStream getOutputStream() 36 Socket en mode datagramme • La classe java.net.DatagramSocket permet d'envoyer et de recevoir des datagrammes UDP • Émission et réception: – public void send(DatagramPacket p) – public void receive(DatagramPacket p) 37 La classe DatagramPacket – public DatagramPacket(byte[] buf, int length) – public DatagramPacket(byte[] buf, int length, InetAddress address, int port) – – – – – – public InetAddress getAddress() public int getPort() public byte[] getData() public int getLength() public void setAddress(InetAddress iaddr) public void setPort(int iport) public void setData(byte[] buf) public void setLength(int length) 38 Exemple : Serveur 39 Exemple : Client 40 Exercice • Ecrire un programme en C ou en Java pour simuler un site de chat en ligne acceptant plusieurs participants. 41 COUCHE APPLICATIONS 1. DNS 1. dig (domain information groper) est un utilitaire pour l’interrogation des serveurs DNS. N'oubliez pas de terminer les noms de domaine par un point (FQDN) - Trouver l’adresse IP de votre machine - Examiner le fichier local /etc/resolv.conf (configuration des serveurs DNS) - Trouver les serveurs de la zone racine « . » - Que peut-on faire avec la commande dig ? Trouver l’adresse IP de www.google.com - Trouver la configuration de la zone d’autorité sur le domaine enseirb-matmeca.fr - Trouver la configuration du serveur e-mail du domaine enseirb-matmeca.fr - Obtenir les serveurs de noms disponibles pour le domaine fr - La résolution inverse dans le DNS est possible grâce à l’option –x. Quelle est le nom DNS associé à l’adresse IP 68.142.254.15 - Interroger un autre serveur DNS et récupérer l’adresse IP de www.google.com Annexe Essayer les commandes suivantes o dig +nocmd . NS +noall +answer +additional o dig. +trace www.google.com #(trace de résolution ) ; <<>> DiG 9.7.2-P3 <<>> +trace www.google.com ;; global options: +cmd . 21427 IN NS d.root-servers.net. . 21427 IN NS j.root-servers.net. . 21427 IN NS g.root-servers.net. . 21427 IN NS k.root-servers.net. . 21427 IN NS h.root-servers.net. . 21427 IN NS f.root-servers.net. . 21427 IN NS l.root-servers.net. . 21427 IN NS b.root-servers.net. . 21427 IN NS m.root-servers.net. . 21427 IN NS i.root-servers.net. . 21427 IN NS e.root-servers.net. . 21427 IN NS a.root-servers.net. . 21427 IN NS c.root-servers.net. ;; Received 449 bytes from 212.27.40.240#53(212.27.40.240) in 1004 ms com. 172800 IN NS c.gtld-servers.net. com. 172800 IN NS d.gtld-servers.net. com. 172800 IN NS g.gtld-servers.net. com. 172800 IN NS h.gtld-servers.net. com. 172800 IN NS m.gtld-servers.net. com. 172800 IN NS b.gtld-servers.net. com. 172800 IN NS i.gtld-servers.net. com. 172800 IN NS j.gtld-servers.net. com. 172800 IN NS k.gtld-servers.net. com. 172800 IN NS l.gtld-servers.net. com. 172800 IN NS e.gtld-servers.net. com. 172800 IN NS a.gtld-servers.net. com. 172800 IN NS f.gtld-servers.net. ;; Received 492 bytes from 192.112.36.4#53(g.root-servers.net) in 242 ms google.com. 172800 IN NS ns2.google.com. google.com. 172800 IN NS ns1.google.com. google.com. 172800 IN NS ns3.google.com. google.com. 172800 IN NS ns4.google.com. ;; Received 168 bytes from 192.31.80.30#53(d.gtld-servers.net) in 144 ms www.google.com. 604800 IN CNAME www.l.google.com. www.l.google.com. 300 IN A 74.125.230.81 www.l.google.com. 300 IN A 74.125.230.82 www.l.google.com. 300 IN A 74.125.230.84 www.l.google.com. 300 IN A 74.125.230.83 www.l.google.com. 300 IN A 74.125.230.80 ;; Received 132 bytes from 216.239.36.10#53(ns3.google.com) in 42 ms TD 2– Le routage de données Exercice 1 1. Soit le réseau composé des 5 nœuds A, B, C, D et E, et des 6 liaisons Vab, Vad, Vbc, Vbe, Vce et Vde. A chaque liaison, supposée symétrique, est associée une distance égale à 1. L'algorithme utilisé par le protocole de routage est de type Bellman-Ford. A Vab Vad B Vbe D Vde Vbc C Vce E a. On supposera que le réseau vient d'être mis en service et que chaque nœud n'a qu'une connaissance locale de la topologie du réseau (il ne connaît que ses voisins). Donner les tables de routage initiales des différents nœuds. b. On considèrera la séquence d'échange de vecteurs de distance suivante : T1 B, D reçoivent VA (vecteur de distance de A) T2 A, C, E reçoivent VB A, E reçoivent VD T3 T4 B, D reçoivent VA, VE T5 B, E reçoivent VC T6 A reçoit VB C, D reçoivent VE T7 Donnez la table de routage (incluant les distances) de chaque nœud, obtenue une fois que l'algorithme de routage a convergé. c. La liaison Vab est rompue. Montrez comment les tables de routage de chaque nœud sont mises à jour. Que remarquez-vous à l'issue de la séquence d'échanges des vecteurs de distance suivante ? T1 T2 T3 T4 T5 A et B détectent que Vab est rompue D reçoit VA ; C, E reçoivent VB E reçoit VD B, C, D reçoivent VE A reçoit VD 2. On considère le même réseau que dans l’exercice précédent, excepté que la liaison Vce a un coût de 10 (les autres liaisons gardant un coût unitaire). On suppose qu’après convergence des algorithmes de routage, les tables obtenues sont les suivantes : 1 A B C D E dest next dist dest next Dist dest next dist dest next dist dest next dist A - 0 A A 1 A B 2 A A 1 A B 2 B B 1 B - 0 B B 1 B A 2 B B 1 C B 2 C C 1 C - 0 C A 3 C B 2 D D 1 D A 2 D B 3 D - 0 D D 1 E B 2 E E 1 E B 2 E E 1 E - 0 La liaison Vbc est alors rompue. B détecte la rupture, mais avant qu'il n'ait eu le temps d'envoyer son vecteur de distance, A a déjà diffusé le sien. La séquence d'échange est donc la suivante : T1 B détecte que Vbc est rompue B reçoit VA T2 A, E reçoivent VB T3 Que se passe-t-il ? 3. On considère la configuration suivante, où, après convergence de l'algorithme, la liaison BC est tombée. 1 A 1 B C a. On suppose que B envoie son vecteur de distance à A juste après avoir détecté la rupture, mais que, dans un même temps, A envoie spontanément son vecteur de distance à B (avant d’avoir reçu celui de B). Que se passe-t-il alors ? b. Est-il possible d'éviter le phénomène du comptage à l'infini ? 4. On considère le réseau suivant, utilisant la technique de l'horizon partagé avec antidote, et dans lequel la liaison AB étant hors service, B route vers A via C. Supposons maintenant que la liaison AC tombe également. 1 B 1 1 A D 4 C 2 a. Quelle distance pour A, C va-t-il envoyer à B et à D ? b. Avant de recevoir le vecteur de C, D a déjà diffusé le sien. Quelle distance pour A, D envoie-t-il à B ? c. Quelle est la route la plus courte que B va adopter pour A sur réception du vecteur de D? d. Quelle distance pour A, B va-t-il envoyer à C ? e. Que devient la route de C vers A ? 2 f. Qu'indique C à D ? g. Quand ce cycle prend-il fin ? 5. Est-il préférable que les vecteurs de distance soient envoyés de façon synchrone (périodique) ou asynchrone ? 6. La technique de l'horizon partagé permet-elle d'éviter toutes les situations de comptage à l'infini ? 7. En considérant des envois périodiques de vecteurs de distance toutes les 30 secondes, et une valeur de 16 pour représenter l'infini, pendant combien de temps le réseau peut-il se trouver dans une situation instable ? Exercice 2 1. Routage distribué (routage par le vecteur distance Bellman-Ford) On considère la topologie du réseau suivant: A B C D A E F G H A I J K L Considérons le nœud J. Il reçoit les tables de routage de ses voisins immédiats A, I, H et K. Elles sont représentées dans les tableaux ci-dessous: A B C D E F G H I J K L A 0 12 25 40 14 23 18 17 21 9 24 29 Délai JA = 8 I 24 36 18 27 7 20 31 20 0 11 22 33 Délai JI = 10 H 20 31 19 8 30 19 6 0 14 7 22 9 Délai JH = 12 Déterminer la nouvelle table de routage de J. 3 K 21 28 36 24 22 40 31 19 22 10 0 9 Délai JK = 6 Rappel : de l’algorithme du routage distribué: Chaque routeur reçoit la table de routage de ses voisins, c’est à dire un tableau indiquant chaque destination du réseau et le coût associé (nombre de sauts, distance, temps, etc...). Chaque routeur connaît ou estime le coût pour atteindre chacun de ses voisins. A l’aide de ces informations, chaque routeur peut construire sa propre table de routage. 2. Routage par vecteur distance Le protocole RIP s’appuie sur le vecteur distance et est utilisé dans les systèmes autonomes de taille petite ou moyenne. Un inter-réseau est constitué de réseaux locaux Li et de routeurs Gi. Le tableau suivant indique les liaisons entre les réseaux et les routeurs. G1 reliée à L1, L3 et L4 G2 L1 et L2 G3 L4 et L5 G4 L2 et L5 On représentera également une station A sur le réseau L1 et une station B sur L3 1) Faire un schéma du réseau 2) Indiquer l’évolution des tables de routage de chaque routeur. Le coût est calculé en nombre de sauts ; il est nul si le réseau est directement accessible. En cas d’égalité de coût, le chemin vers le routeur de plus petit identificateur sera choisi. 3) Au bout de combien d’itérations le procédé converge-t-il? 4) Comment évoluent les tables si G3 tombe en panne? Routeur 4 Routeur 3 lan 4 lan 3 Routeur 1 lan 2 lan 1 3. Convergence du routage par vecteur distance Soit le réseau suivant à 4 routeurs: Routeur 2 On prendra pour métrique le nombre de sauts. Comment évoluent les tables de routage si R3 tombe en panne ? Quelles solutions sont envisageables pour résoudre le problème ainsi mis en évidence ? Exercice 3 1. Sur le réseau suivant, montrer comment la table de routage de A est obtenue à l'aide de l'algorithme de Dijkstra. 4 A 5 4 E C 2 2 2 10 B 1 3 D 3 1 F 2. Sur le réseau suivant, montrer comment la table de routage de A est obtenue à l'aide de l'algorithme de Dijkstra. A 5 4 E C 2 2 2 10 B 1 3 D 3 1 F 3. Voyez-vous d'autres problèmes posés par les algorithmes à états des liens ? 4. Donner les principaux avantages des algorithmes à vecteurs de distance et à états des liens. Exercice 4 1. Algorithme du plus court chemin de Dijkstra Soit le réseau suivant: B 2 7 C 2 A 3 E 6 2 1 G 3 F D 2 4 2 H Les coûts entre les noeuds peuvent être fonction de la distance, de la longueur moyenne des files d’attente, du débit des liaisons, du coût des liaisons, etc... Déterminer le plus court chemin entre le noeud A et le noeud D. Rappel de l’algorithme du plus court chemin de Dijkstra: 1. On commence avec le noeud source: Il est étiqueté comme permanent et sa distance au noeud source est évidemment nulle. C’est le noeud actif. 2. Tous les noeuds adjacents au noeud actif sont examinés tour à tour. 3. Chaque noeud est étiqueté en indiquant le meilleur chemin connu au noeud source et la liaison à utiliser pour l’atteindre. 4. A chaque tour, le noeud actif est celui qui, parmi tous les noeuds étiquetés du réseau, a la valeur la plus faible vers le noeud source. Son étiquette devient permanente. 5. On recommence au point 2 avec le nouveau noeud actif. 6. L’algorithme s’arrête quand l’étiquette de noeud destination est permanente. 5 2. Comparaison d’algorithmes pour une diffusion Pour établir leur table de routage, les routeurs s’échangent des messages. Dans certains algorithmes de routage, ces messages doivent être diffusés à l’ensemble des routeurs du réseau. L’objet de l’exercice est de comparer plusieurs méthodes de diffusion. En se référant à la figure ci-dessous, construire l’arbre collecteur issu de B. Combien de paquets sont engendrés par une diffusion provenant de B, utilisant successivement: a) Un arbre collecteur. b) Un algorithme de type inondation. B A C D E J K F G H I L 3. Dans un réseau à n routeurs, comparer le nombre de liaisons nécessaires : a) s’il n’y a pas de routeur désigné. b) s’il y a un routeur désigné. Application numérique : n=20. 6