Looking for Computer Science  & Information Technology online courses ?
Check my new web site: https://www.yesik.it !

Contrairement à une idée répandue, Internet n'est pas un réseau centralisé auquel tous les autres réseaux seraient connectés. En fait, c'est l'interconnexion de l'ensemble des réseaux qui forme Internet. Avec cette architecture, il devient non seulement possible de faire communiquer deux machines situées sur des réseaux directement connectés entre eux. Mais aussi d'assurer la communication entre machines situées n'importe où sur le réseau global, en faisant transiter les données qu'elles s'échangent par un ou plusieurs réseaux intermédiaires.

Les machines spécifiquement chargées d'assurer les échanges de données entre réseaux sont appelées des routeurs. Le travail principal d'un routeur est d'examiner les paquets de données qu'il reçoit pour en extraire l'adresse de réseau du destinataire et déterminer s'il est arrivé à destination, ou s'il doit encore continuer sa route. Remarquez qu'il peut exister plusieurs routes vers la même destination. Le travail d'un routeur est donc aussi de choisir la meilleure route, en fonction d'impératifs techniques (équilibrage de bande passante, débit, etc.), économiques (coût de la bande passante) ou politiques (par exemple pour éviter de transiter par certains pays ou par des réseaux contrôlés par des sociétés concurrentes).

Internet.png

Dans cet exemple, on peut voir que les Universités de Californie (UCSB et UCLA) ainsi que l'Université de l'Utah sont interconnectées par leurs fournisseurs d'accès Internet (CENIC et UEN). Ainsi quand un paquet est émis depuis un ordinateur de l’Université de l'Utah à destination de l'Université de Californie de Los Angeles, celui-ci doit d'abord être routé vers le réseau de l'UEN. Arrivé là, le paquet est routé vers le réseau du CENIC. Et enfin, de là, il part vers le réseau de l'UCLA.

Réseau IP

Pour mettre en œuvre cette idée d'interconnexion de réseaux, il a fallut définir un protocole capable assurer le transit des données entre eux. Le protocole historique d'Internet est IPv4 (Internet Protocol version 4). Même si son successeur IPv6 est en phase de déploiement depuis quelques années, son adoption est plus lente qu'on aurait pu l'espérer, et IPv4 est sans doute encore présent pour un long moment.

Sur un réseau IP (v4 ou v6), chaque ordinateur possède (au moins) une adresse IP qui permet de l'identifier. C'est un principe général qu'on retrouve avec d'autres protocoles de réseau. Sur un réseau local, le nombre de machines, les distances et les délais sont suffisamment réduits pour que la seule adresse suffise pour qu'un paquet atteigne son destinataire. Ainsi on peut imaginer diffuser un paquet à l'ensemble des machines du réseau local, permettant de fait au destinataire de voir passer le paquet qui lui est transmis (cas des réseaux bus comme l'Ethernet non-commuté). Ou encore, on peut imaginer que les dispositifs d’interconnexion soient suffisamment intelligents pour mémoriser automatiquement la liste des machines qui leurs sont reliées et donc aiguiller les paquets vers la bonne ligne (cas de l'Ethernet commuté).

Mais, sur un réseau global comme Internet, nous ne sommes pas à la même échelle: même à l'origine, il s'agissait tout de même d'interconnecter des dizaines de réseaux, contenant des centaines de machines sur des milliers de kilomètres. Un des défis à relever sur un tel réseau est le routage des paquets de données. C'est à dire l'opération qui permet de déterminer quel chemin un paquet doit emprunter pour aller de son émetteur à son destinataire. En effet, l'émetteur et le destinataire d'un paquet ne sont plus nécessairement sur le même réseau local. Ils ne sont pas non plus forcément sur deux réseaux voisins. En fait, pour atteindre sa destination, il est courant qu'un paquet doive transiter par plusieurs réseaux intermédiaires. Si l'on ajoute à cela qu'un même réseau peut être connecté à plusieurs de ses voisins, on comprend que des règles doivent être mises en place pour permettre d'aiguiller efficacement les données vers leur destination.

La solution retenue par IPv4 est d’intégrer dans les 32 bits (4 octets) de l'adresse IP deux informations:

De cette manière, quand un paquet atteint un routeur (un ordinateur chargé d'acheminer des paquets entre réseau), celui-ci peut immédiatement savoir en examinant l'adresse du réseau du destinataire si le paquet est arrivé sur le bon réseau , ou s'il doit être acheminé vers un autre réseau. Dans ce dernier cas, le routeur examine ses tables de routage pour déterminer par où le paquet doit sortir.

Classes d'adresses

Classfull network.png

Les classes d'adresses IP utilisées jusqu'au milieu des années 90 permettaient d'encoder dans les premiers bits de l'adresse la position de la limite entre adresse de réseau et numéro d'hôte. Cette limite avait toujours lieu sur une frontière d'octet: après le premier en classe A, après le second en classe B ou le troisième en classe C. Remarquez qu'avec la notation décimale pointée habituellement utilisée avec les adresses IPv4, la limite tombait donc toujours sur un point.

Historiquement, la limite entre l'adresse de réseau et le numéro d'hôte était encodée dans les bits de poids forts de l'adresse. Ce codage avait été conçu pour répartir les adresses en 5 classes:

0RRRRRRR HHHHHHHH HHHHHHHH HHHHHHHH
Quand le bit de poids fort de l'adresse est à 0, on a une adresse de classe A, avec les 7 bits suivants donnant l'adresse du réseau et les autres bits dédiés au numéro de l'hôte. Cela permet 126 réseaux pouvant être dotés chacun de plus de 16 millions d'hôtes (224).
10RRRRRR RRRRRRRR HHHHHHHH HHHHHHHH
Quand les deux bits de poids forts de l'adresse valent 10, on a une adresse de classe B, dont les 14 bits suivants définissent le numéro de réseau, et les 16 derniers bits le numéro de l'hôte. Cela permet 16382 réseaux dotés chacun de plus de 65500 hôtes.
110RRRRR RRRRRRRR RRRRRRRR HHHHHHHH
Avec les 3 bits de poids forts valant 110, on arrive sur la classe C, où 24 bits codent l'adresse de réseau et 8 seulement le numéro d'hôte dans le réseau. Ce qui mêne à plus de 2 millions de réseaux avec chacun un peu plus de 250 hôtes.
1110XXXX XXXXXXXX XXXXXXXX XXXXXXXX
1111XXXX XXXXXXXX XXXXXXXX XXXXXXXX
Ces deux formats constituent respectivement les classes D et E. Je n'en parlerai pas ici car ces adresses sont utilisées pour des applications particulières (multicast pour la classe D, et applications expérimentales pour la classe E).
Classes d'adresses IP.png

En IPv4, les adresses sont codées sur 32 bits. L'architecture originale héritée d'ARPANET assignait le premier octet à l'adresse de réseau, et le reste au numéro de l'hôte dans son réseau. Avec seulement 254 réseaux possibles, ce choix a été remis en cause en 1981 dans la RFC791Internet Protocol. Celle-ci répartit les adresses en différentes classes identifiées par les premiers bits de l'adresse. La signification des bits restants étant interprétée en fonction de la classe de l'adresse. Cependant, ce système était encore trop rigide, et à cause de l'épuisement rapide des adresses de réseaux dans certaines classes, il a lui-même été remplacé en 1993 par un modèle sans classe appelé CIDR (Classless Inter-Domain Routing).

Remarque:

Je donne un nombre approximatif pour les nombres de réseaux et de machines. Pourtant il ne devrait pas être difficile de déterminer le nombre exact: ainsi, avec par exemple 8 bits pour l'hôte, cela devrait donner 28 soit 256 numéros d'hôtes possibles. Le calcul est correct, mais parmi ces combinaisons, certaines valeurs ont une signification réservée. Ainsi quand l'adresse de l'hôte possède tous ses bits à 1, cette adresse forme l'adresse de broadcast (diffusion) qui signifie tous les ordinateurs de ce réseau. De la même manière, il existe quelques valeurs magiques pour les adresses de réseau. Mais pour cette introduction, je ne vais pas rentrer dans les détails.

Masque de sous-réseau

Subnet mask.png

Le masque de sous-réseau est une quantité sur 32 bits associée à l'adresse IP pour déterminer la frontière entre adresse de réseau et numéro d'hôte. Tous les bits de l'adresse IP correspondants à des bits à 1 du masque forment l'adresse du réseau. Tous les bits de l'adresse correspondants à des bits à 0 du masque forment le numéro d'hôte. Plus formellement, on extrait l'adresse du réseau en appliquant un et binaire entre l'adresse IP et son masque. Avec ce système, la séparation entre adresse de réseau et numéro d'hôte peut donc tomber sur n'importe quel bit de l'adresse et plus nécessairement sur une frontière d'octet.

Assez rapidement, l'idée d'utiliser des frontières rigides de 8, 16 ou 24 bits pour l'adresse de l'hôte s'est révélée peu compatible avec la croissance d'Internet. En effet, l'allocation des adresses avec ce système était plutôt inefficace: la classe C, avec un maximum de 254 hôtes était trop restrictive pour de nombreux clients. A l'inverse, la classe B, avec sa limite de 65534 hôtes dépassait largement les besoins de beaucoup d'entre eux.

Dès le milieu des années 80, des propositions se sont faites jour pour assouplir ce système:

L'idée commune à ces propositions est de remplacer le système de classes implicites définies par les premiers bits de l'adresse, par un système explicite dans lequel on adjoint à l'adresse IP une valeur pour indiquer quels bits font partis de l'adresse réseau, et lesquels désignent l'hôte dans son réseau. Cette valeur supplémentaire est le masque de sous-réseau.

Le masque de sous-réseau est une quantité sur 32 bits tout comme l'adresse IP. Tous les bits de l'adresse IP correspondants à des bits à 1 du masque forment l'adresse du réseau. Tous les bits de l'adresse correspondants à des bits à 0 du masque forment le numéro d'hôte. Plus formellement, on extrait l'adresse du réseau en appliquant un et binaire entre l'adresse IP et son masque. Avec ce système, la séparation entre adresse de réseau et numéro d'hôte peut donc tomber sur n'importe quel bit de l'adresse et plus nécessairement sur une frontière d'octet. Remarquez qu'originellement (per-RFC950Internet Standard Subnetting Procedure), rien n'obligeait les bits à 1 du masque à être les bits de poids fort, ni à être contigüe. Cependant dans la pratique c'est quasiment toujours le cas. Et cela a été imposé avec la normalisation ultérieure de la notation CIDR dont je parlerai dans la section suivante.

Extraction adresse réseau.png

Un et binaire entre une adresse IP et son masque permet d'extraire l'adresse du réseau. Le choix d'une opération aussi simple a été fait pour permettre aux routeurs de traiter efficacement de grandes quantités de données. En effet, cette opération doit être faite pour chaque paquet arrivant sur un routeur, et souvent pour plusieurs règles de la table de routage.

CIDR

En 1993 l'idée d'utiliser des masques conjointement aux adresses IP a été formalisé dans les RFC1518An Architecture for IP Address Allocation with CIDR et RFC1519Classless Inter-Domain Routing (CIDR): an Address Assignment and Aggregation Strategy. Cette dernière ayant été clarifiée en 2006 par la RFC4632Classless Inter-domain Routing (CIDR): The Internet Address Assignment and Aggregation Plan.

Si tout ce qui a été dit précédemment pour les masques de sous-réseau est vrai, ces RFC ont aussi introduit une notation supplémentaire pour désigner le masque. Au lieu d'exprimer le masque de réseau sous la notation décimale pointée utilisée pour les adresses IP, il est désormais possible d'indiquer simplement la taille (en bit) du masque après l'adresse en les séparant pas un slash.

Notation CIDR.png

La notation CIDR permet de définir de manière compacte le masque de réseau associé à une adresse IP.

Concrètement, les deux notations suivantes sont donc identiques:

Notation avec masque
169.232.134.25 (adresse IP)
255.255.192.0 (masque)
Notation CIDR
169.232.134.25/18

Remarque:

Avec ce système, il est implicite que les bits à 1 du masque sont les bits de poids fort de celui-ci.