18 KiB
title | date | tags | categories | mathjax | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Réseaux et Protocole: couche réseau | 2024-02-21 |
|
|
true |
Le but de cette partie et de comprendre ce qui se passe dans la couche réseaux matérialisée la quasi-totalité du temps par le protocole IP. Comme pour les autres couches vue jusqu'à présent, il est encore question d'encapsulation et de décapsulation.
C'est la couche qui se trouve dans les équipements Internet pour faire du routage: le routeur examine les entêtes des paquets IP afin de déterminer leur destination. Deux notions apparaissent alors:
- le forwarding qui consiste à récupérer les paquets sur une interface et les renvoyer vers une autre;
- le routage qui consiste à déterminer la route de la source vers la destination (le chemin complet donc).
Dans ce chapitre nous aborderons les notions de data plane, control plan ou encore de software defined network (SDN).
Le data plane
C'est la partie responsable du mouvement "réel" des données à travers les périphériques réseaux. La logique de routage est implémenter dans chacun des périphérique composant le réseau.
Les routeurs
Pierre angulaire de l'acheminement des paquets. ils prenne des pacquets sur des interfaces en entrée qu'il redirigent vers des interfaces en corties en fonction de critères établis. En définitive chaque routeur est indépendant et composé d'un data plane et d'un control plane contenant la table de routage.
Pour schématiser, le control plane représente le logiciel et le data plane le matériel.
Switch fabric
Le data plane se compose des ports en entrée et en sortie, au milieu se trouve la switch fabric. C'est cette partie qui est charger d'acheminer les paquets des entrées vers les sorties en fonction de ce que le control plane veut. Le temps de traitement d'un datagramme est de l'ordre de la nanoseconde 1.
ports d'entrée
Ils reçoivent les trames de la couche liaison. Les entêtes de la couche reseaux sont extraites. Deux traitements sont alors possibles:
- forwarding basé sur la destination basé uniquement sur l'adresse de destination;
- forwarding généralisé basé sur les valeurs de l'entête (une, quelques unes ou toutes).
Pour les correspondances sur les adresses, la règle du longuest prefix match s'applique. La correspondance se fait sur le prefixe le plus détaillé.
Le switching rate est donné par le rapport entre le nombre de paquet en entrée et en sorties. Idéaliement il est de 1 ou plus, ce qui signifie que les datagrammes en entrée sont traités directement. si ce nombre est inférieur à 1 alors il y a engorgement à l'entrée. Dans ce cas les paquets sont mis en file d'attente dans un buffer (à l'entrée).
Il peuvent l'être aussi si les paquets reste bloqués pour diverses raison comme par exemple un buffer de sortie plein.
En cas de remplissage du buffer alors des paquets peuvent être perdus.
ports de sortie
Ils reçoivent les datagrammes en provenance de la switch fabric et les acheminent vers leur destination. Là encore nous avons un buffer* où les paquets en attente sont stocké par exemple si les paquets arrivent plus vite que le lien ne peut les transmettre.
Ici encore des paquets pevent être perdus en cas de buffer overflow.
Les paquets évincés dépendent alors de la stratégie définie :
tail drop
pour refuser les nouveaux datagrammes qui arrivent;priority
pour supprimer des datagrammes en fonction des priorités.
Ordonnancement
Il est possible de définir l'ordonnancement des datagrammes et ainsi d;organiser une stratégie de priorisation en fonction des besoins. Le plus simple reste FIFO pour First In First Out2 où ils sont acheminés en fonction de leur ordre d'arrivé.
Il est aussi possible d'ordonnancer suivant la priorité, par round-robbin, par poids attribués aux paquets ...
Le protocole IP
C'est un ensemble de règle définissant:
- un format de datagrammes;
- l'adressage;
- les conventions d'action sur les paquets;
- le protocole ICMP (report d'erreur et signalement de routeurs);
- les algorithme de sélection de chemins pour router les paquets (BGP, OSPF).
L'entête d'un datagramme IP fait 20 octets pour sa version v4, elle se compose:
- version du protocole (4 bits);
- longueur de l'entête -- nombre de mots de 32 bits -- par défaut 5 (4 bits);
- type de services (8bits);
- longueur totale du datagramme en octets (16 bits);
- données utilisé pour la fragmentation :
- identifiant ( 16 bits);
- drapeau (4 bits);
- décallage (12 bits);
- adresse source (32 bits);
- adresse destination (32 bits);
- options si besoin (32 bits);
L'adresse IP
C'est un identifiant codé sur 32 bits et attribué à chacune des interface des hôtes connectés au réseau. Une interface représente une connexion entre un hôte (ou un routeur) et un lien physique (issu de la couche liaison que nous verrons plus tard)
Il existe deux façons de classifier les adresse IP:
- L'adressage par classes représenté par des classes d'adresses allant de A à E en fonction des préfixes (1.0.0.0 - 126.255.255.255 pour la classe A par exemple);
- CIDR pour Classless Inter Domain Routing ou les sous-réseaux peuvent avoir des adresses d'une taille arbitraire.
Dasn le second cas, les adresses sont découpés entre le préfixe de sous-réseau et la part réserver aux hôtes, par exemple
192.168.23.0/23
Il existe aussi les adresses publiques et privées (utilisable dans un réseaux local). Pour ces dernière 3 classes sont disponibles:
- 10.0.0.0/8
- 172.16.0.0/12
- 192.168.0.0/16
le sous-réseau
Nous avons parlé de sous-réseaux, c'est la portion d'un réseau ou les hôtes peuvent se contacter les uns les autres sans que les datagrammes passent par un routeur. Ainsi chaque portion isolée d'un réseau est un sous-réseau. NMous pouvons alors créer des "îles".
Obtenir une adresse IP
Plusieurs moyens sont à la disponision des administrateurs réseaux afin d'assigner une adresse IP à une interface.
- Adresse codée directement "en dur" sur l'interface via, par exemple, le
fichier
/etc/network/interfaces
. - Assignée dynamiquement par un serveur DHCP Dynamic Host Configuration Protocol.
Pour ce dernier, voici les étapes:
- l'hôte envoie un message de broadcast de type
DHCP discover
; - les serveurs DHCP disponibles répondent avec le message
DHCP Offer
et fait une proposition; - l'hôte répond avec avec un message
DHCP request
au serveur qu'il a retennu avec comme charge utile l'adresse IP qui lui a été proposée; - le serveur retenu répond alors avec un message
DHCP ack
.
Le DHCP fait bien plus qu'assigner des adresses IP, il peut aussi définit l'adresse de la passerelle (routeur de premier niveau), les adresses des serveurs de nom, le masque de réseau etc.
NAT, Network Address Translation
Il est question ici de "partager" une adresse IP publique. L'agent responsable de la translation d'adresse. Il est question de remplacer le port et l'adresse IP source. Notre agent responsable -- équipement effectuant la translation -- une table de translation est disponible afin de connaitre l'état des connexions en cours.
Le NAT n'est utile que pour l'IP v4 dont les adresses routables sont au bord de l'epuisement. Il est utilisé intensivement pour les connexions domestiques et les réseaux cellulaires. Cependant les problèmes de pénurie ont leur solution: IPV6.
Problème supplémentaire, c'est le routeur qui se charge de faire le NAT, cependant il ne ddevrai pas aller farfouller dans la couche 4 du modèle OSI et se cantonner sa couche 3.
Forwarding généralisé (SDN)
Chaque routeur contient une table de forwarding. Lors du forwarding généralisé, la correspondance ne se fait pas seulement sur l'adresse de destination mais sur l'ensemble de l'entête. Le routeur utilise alors la correspondance (match), les actions et la priorité.
- Les match se font sur les couches lien, réseau et * transport.
- Les actions possibles sur les paquets sont drop, copy, modify et log.
- Les priorité afin de savoir quoi faire lorsque plusieurs match arrivent.
- Enfin, les couteurs sont là afin d'acoir des metriques sur les bits et les paquets qui passent.
Le principe du SDN est d'unifier routage, pare-feu, NAT, switching en allant chercher dans toutes les entêtes de ces couches.
Control plane
Comme nous l'avons vu au début de cette partie, le control plane est responsable du routage : il détermine le chemin pris par les paquets. Deux possibilités s'offre alors à nous:
- un control plane dans chaque routeur (ce que nous avons jusqu'ici);
- un control plane centralisé qui pilote un ensemble de routeurs.
Dans le premier cas il est nécessaire d'implémenter le routage par équipement individuellement, ce qui peut vite se réveller fastidieux. Dans le second cas, les routeurs utilisent un control place distant définis par logiciel. ainsi la configuration de tous les routeurs est unifiée.
Pour rappel, le routage a pour objectif de déterminer le meilleur chemin à prendre pour un paquet donné. Le chemin est en fait un ensemble de routeur par lequel le paquet va passer. Le meilleur chemin peut avoir plusieurs sens, parlons nous de moins cher, de plus rapide, moins congestionné?
Algorithme de routage
Il existe bien évidemment plusieurs algorithme de routage avec chacuns avantages et inconvénients par exemple :
- statique, les routes changent peu et lentement
- dynamique, les routes changent rapidement soit périodiquement soit en réponse à des incidents;
- algorithme link-state ou chaque routeur voit la topologie complète avec les coûts des différents liens;
- algorithme décentralisé distant vector ou les routeurs ne connaissent au départ que les coûts des liens vers leurs voisins directs. C'est un algorithme dynamique basé sur le calcul, et l'échange d'informations entre routeurs voisins.
Algorithme de Dijkstra
C'est un algorithme centralisé ou les coûts vers tous les nœuds sont connus à
l'avance via des messages de type link-state broadcast
. Tous les nœuds
détiennent les mêmes informations.
Avec ces informations, nous pouvons alors calculer les chemins les moins chers" depuis un nœud vers tous les autres. Nous obtenons alors une table de forwarding complète.
Le processus est *itératif, ainsi après un nombre \(K\) d'itérations., nous connaissons le meilleurs chemin vers \(k\) destinations. Voici cet algorithme:
// c(x,y) coût entre lien direct entre x et y
// D[v] estimation du coût du meilleur chemin vers v depuis la source
// p(v) nœud précédent sur le chemin de la source vers v
// N`` ensemble de nœuds que notre algorithme connais via least-cost path
/* Init */
N` = u; //compute least-cost path from u to all others nodes}
for all_node v
if v in all_node()
D[v] = c(u,v);
else
D[v] = INFINITE;
do
find w not_in N` such D[w] is minimal
add w to N`
update D[v] for all v adjacent tow and not in N`:
D[v] = min(D[v], D[w] + c(w,v))
until all node in N`
Algorithme de Bellman-Ford
Chaque nœud envoie régulièrement sa table de vecteur de distance et leurs coûts associés à ses voisins. Lorsque notre nœud reçoit les information de ses voisins, il mets à jour sa propre table de vecteurs de distances en réalisant des calculs. C'est un algorithme asynchrone, itératif et sans notification de l'extérieur.
Routage intra-ISP: OSPF
Pour l'instant, tout ce que nous avons vu relève du monde idéal et ne passe pas à l'échelle pour Internet:
- tout le réseau est identique;
- le réseau est "plat".
Dans la vrai vie l existe des milliards de destinations et tout un tas de réseaux autonomes. Il est donc impossible de stocker toutes ces information dans une sable de routage ni de gérer de façon unifiés tout ce beau monde. Il est donc nécessaire d'agréger des régions appelées systèmes autonomes abrégé AS. nous avons alors deux types de routages:
- intra-AS ou intra-domaine pour tout ce qui se trouve dans notre système autonome, le protocole utilisé est forcément le même sur tous les routeurs de notre domaine
- inter-AS ou inter-domaine qui représentens les liens entre différents AS
Les liens entre les AS sont réalisés par les routeurs de bordures.
Protocoles intra-AS
Les protocoles les plus communs sont:
- RIP pour Routing Information Protocol, les routeurs échange des distant vectors classique toutes les 30 secondes -- n'est plus utilisé aujourd'hui;
- EIGRP pour Enhanced Interior Gateway Procolol qui est lui aussi basé sur les distant vectors, c'est à l'origine un protocole propriétaire de Cisco mais ouvert en 2013;
- OSPF pour Open Short Path First qui est un protocole de type link-state
Dans le cadre de ce cours nous ne verrons qu'OSPF qui est le plus utilisé aujourd'hui.Chaque routeur annonce l'état de ces liens directement en utilisant le protocole IP (pas d'encapsulation de segment de la couche transport) à tous les autre routeur de l'AS. Les informations de coûts peuvent provenir de différentes métriques comme la bande passante, la latence etc.
Au niveau sécurité ds échanges, tous les messages OSPF peuvent être authentifiés.
OSPF propose deux niveau de hiérarchie :
- backbone interconnectant plusieurs zones;
- local area représentant une zone en particulier, plus localisée.
L'état des liens, comprenant le couple IP/masque est enregistré dans une base
de données. Cette ase est ensuite utilisée pour les calculs. La mise à jour se
fait par des messages multicasts link-state-advertisement
. Plusieurs types de
paquets existent.
hello
pour la découverte des voisins, l'entetien des relations de voisinages. Ces paquets sont envoyés toutes les 10 secondes, si aucune de reponse n'est effectuées au bouts de 4hello
, alors l'hote est considéré comme downn.database description
pour synchroniser les bases de données avec ses voisins.link-state-request
pour demander des informations aux voisins.link-state-advertisement
pour mettre à jour l'état des liens, il en existe 11 types différents de paquets:- type 1: décrire les interfaces du routeur;
- type 2: décription ds routeur conectés à un segment (dans une même *area OSPF);
- type 3: résumés des information envoyées depuis une autre area.
- etc.
link-state-update
qui contient plusieursLSA
link-state-ack
pour l'acquitement d'unLSR
ou d'unLSA
OSPF est basé sur l'algorithme de Dijkstra: le plus court chemin. Il est calculé en fonction de la bande passante du lien. 100Mbit/s a un poind de 1, 10Mbit/s un poid de 10 (100/10) et 1000Mbit/s 0.1 (100/1000). Cependant le poind ne peut être inférieur à 1, donc 0,1 devient 1. Pour poivoir profiter des poids sur les liens suppieur à 100Mbit/s, il faut alors modifier manuellement la valeur de base.
Protocole inter-AS: BGP
BGP pour Border Gateway Protocol annonce l'existance d'un réseau, d'une destination. Il permet d'obtenir des informations de routage de ses voisins via eBGP, de déterminer les routes vers les autres réseaux en fonction des information de disponibilités et des politiques ou encore d'avertir ses voisins de ses propres réseaux / disponibilités. Par le biais d'iBGP il propage les information obtenues de ses voisins à tous les routeur intra-domaine.
BGP* utilise les sessions établies via TCP pour communiquer. Plusieurs type de messages sont disponibles:
- open pour ouvrir une connexion TCP vers un hôte BGP distant et s'authentifier;
- update pour avertir de changement que se soit suppression, ajout ou modification;
- keepalive pour maintenir la session ouverte;
- notification pour notifier d'une erreur ou fermer une session.
Une annonce contient un préfixe plus un attribut. Les deux attributs les plus importants sont:
- as-path qui représente le chemin;
- next-hop qui indique le routeur spécifique pour arriver à une destination définie.
BGP utilise des politique de routage pour déterminer les chemins à annoncer.
Principe de la patate chaude: BGP choisira de faire sortir le paquet le plus vite possible de son infrastructure, ne prenant pas en comptes les coûts intra=domaines
SDN *Software Defined Network
Depuis 2005, des recherches sont menées afin de trouvwr de nouvelles approches réseaux. Le control plane et le data plane se faisaient traditionnellement sur les routeurs. Maintenant le controle est éloigné et installe à distance les tables de routages. Ainsi la gestion du réseau est facilitée (configuration en un seul point, plus de flexibilité, contrôle openflow et architcture indépendate du vendeur --interopérable).
Le SDN controller prend alors trois fonctions:
- interface layer offrant l'accès aux API;
- network state management prenant en compte les information des liens, du *switching;
- les communication via les API (Openflow, SNMP).
le protocole Openflow
Il s'intercate entre les controlleurs et les switches et utilise TCP. Il comporte trois types de messages:
controller
vers lesswitch
pour demander des information, envoyer des configurations etc.;- asynchrone avec par exemple les paquets à traiter par le conrolleurs, notifier la suppression d'une entrée dans la table de forwarding
- symetrique
ICMP Internet Control Message Protocol
C'est un protoboe de contrôle utilisé pour obtenir des informations au niveau du réseau (unreachable host|protocol|port, ping). Il s'intercate entre les couches réseau et transport.