Uploaded by enjoyteamunder

Cours RE218 2020 2021

advertisement
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
Related documents
Download