Subnetting TCP/IP

c m i c 

 

Pourquoi un subnet sur un LAN ou WAN, MAN ?

Sous-réseaux TCP/IP

Pourquoi un subnet sur un LAN, WAN ou MAN ?
Quelles adressses utiliser ?
Les adresses TCP/IP réservées.
Le masque de réseau.
La création d'un sous-réseau.
Les nouveaux masques de réseau.
L'adressse de diffusion (broadcast).
Le cas du réseau de classe B.
Le cas du réseau de classe A.
Plus de classe : le CIDR.
Le programme subip.exe.
Dans un réseau local Ethernet TCP/IP il peut y avoir des problèmes de charge de réseau qui apparaissent pour plusieurs raisons : Dans un réseau local, par sécurité, on peut vouloir isoler certains utilisateurs de certaines ressources.
Dans un réseau MAN ou WAN, les phénomènes de diffusion sont à éviter pour des problèmes de coût. Pour des questions de sécurité, il est préférable d'isoler certaines portions de réseau. Dans tout ces cas de figure, tout en gardant les mêmes adresses TCP/IP, le découpage en sous-réseaux (subnetting) associé à l'utilisation de routeurs peut être une solution.

Quelles adresses TCP/IP utiliser ?

L'utilisation de TCP/IP oblige traditionnellement à choisir une classe d'adressse. Chaque classe proposée offre un compromis entre le nombre maximum de réseaux et le nombre de machines. Il existe à ce jour 5 classes d'adresses possibles :

Nom de la classe
Numéros TCP/IP
Nombre max de réseaux pour la classe
Nombre maxi de machines
par réseau
Classe A 0.x.x.x 127.x.x.x 127 16 777 216
Classe B 128.x.x.x 191.x.x.x 16383 65534
Classe C 192.x.x.x 223.x.x.x 2 031 616 254
Classe D 224.x.x.x 239.x.x.x N.A N.A
Classe E 240.x.x.x 247.x.x.x N.A N.A

Les adressses de la classe D sont réservées au muticasting. Les adressses de la classe E sont réservées à un usage futur (...). Les seules classes vraiment utiles sont les classes A, B et C.

On le voit, plus le nombre de réseaux par classe est important, moins le nombre possible de machines est important.

Note : Dans la classe A, le réseau 127 tient une place à part. Conventionnellement, il désigne l'adresse de la machine (moi même) dans le contexte TCP/IP. La table /etc/host de toute machine UN*X comporte par exemple la mention "127.0.0.1    localhost". Tout autre numéro de ce réseau peut être utilisé pour cet usage.

On peut alors choisir, à partir du nombre de machines que l'on compte mettre en oeuvre, le type de classe le plus approprié.

Pour trouver à quelle classe appartient une machine donnée, il suffit de repérer la valeur du premier octet de l'adresse TCP/IP. L'adresse 174.23.2.45 est par exemple une adressse de classe B, car le premier octet, 174, est compris entre 128 et 191. L'adresse 5.6.7.8 est une adressse de classe A

Les adressses TCP/IP réservées ("privées").

Il existe aussi, à l'intérieur de chaque classe, un sous-ensemble d'adresses qui sont destinées à un usage privé. Ce qui signifie que tout routeur du marché ne routera pas, par défaut, ces adresses sur Internet. Plusieurs réseaux locaux utilisent donc ces adresses pour leur usage interne. Il n'y a pas de conflit, puisque ce sont des réseaux privés dont les adresses ne sont pas accessibles depuis Internet. Ces adresses sont définies dans la RFC1918 :

  1. pour la classe A les adresses 10.x.x.x
  2. pour la classe B les adresses 172.16.x.x à 172.31.x.x
  3. pour la classe B les adresses 192.168.x.x

Le masque de réseau.

Un masque réseau TCP/IP est un ensemble de 4 octets qui permet de distinguer, dans une adresse TCP/IP, la partie réseau de la partie machine.

Exemple : 184.23.3.67, masque 255.255.0.0; l'adresse de la machine est bien 184.23.3.67. Cette machine appartient au réseau 184.23.0.0.

Mais d'abord, un rappel :

Quand un ordinateur cherche a communiquer avec un autre ordinateur ou avec un périphérique réseau quelconque en utilisant le protocole TCP/IP, la procédure suivante se déroule :

    1. Le nom de la machine est transformé en une adresse TCP/IP. Ceci est effectué par le resolver qui utilise un service de nommage (table hosts, DNS)..
    2. Les routines des couches TCP/IP associent ce numéro et le masque de réseau pour déterminer si la machine à atteindre fait ou non partie de même réseau.
      1. Si oui, l'adressse TCP/IP est résolue en une adressse Ethernet; une trame est alors formée avec cette dernière et est envoyée sur le réseau.
      2. Sinon, et si il existe une table de routage, l'adressse ethernet du routeur est utilisée pour former une trame qui est envoyée sur le réseau (donc vers le routeur approprié).
    3. Sinon, un message d'erreur est renvoyé vers le programme utilisateur (celui qui cherchait à envoyer des données). Ce message indique que l'adresse de la machine destinataire est impossible à joindre.

Pour réaliser le masquage, on utilise l'opération AND binaire. Tout d'abord, les differentes classes d'adresses utilisables peuvent être représentées comme suit; chaque adresse ayant une largeur totale de 4 octets, soit 32 bits (ici, seule les valeurs des bits de poids fort du premier octet sont détaillées) :




Dans le cas d'une machine dont le numéro TCP/IP est 12.2.3.4 et le masque de 255.0.0.0, on a alors les valeurs de masque et d'adresse hôte ci-dessous :


Si on somme bit à bit ces deux valeurs (opération 'OU binaire'), on obtient l'adresse du réseau qui est indispensable pour savoir comment expédier le paquet TCP/IP, c'est à dire : 12.0.0.0.

Autre exemple, si on a un réseau de classe B (sans sous-réseau), le masque est de 255.255.0.0. La machine dont l'adresse TCP/IP est 171.21.36.12 appartient au réseau 171.21.0.0 (AND binaire entre 171.21.36.12 et 255.255.0.0).

La création d'un sous-réseau.

On comprend bien maintenant tout l'intérêt de diviser de grands réseaux en sous-réseaux plus faciles à gérer. Pour ce faire, l'espace d'adressage alloué va être re-découpé. Le (ou les) dernier(s) octet(s) va donc être utilisé pour "coder" un sous-réseau et une adresse de machine. Une contrainte va apparaître : chacun des sous-réseaux formé devra avoir une adresse de réseau et une adressse de diffusion (broadcast). Ces deux adresses ne pourront pas être allouées à des machines.

Raisonnons sur un exemple. L'espace d'adressage 204.34.57.0 de classe C nous a été allouée avec un masque de 255.255.255.0. Si on ne découpe pas en sous-réseaux, la totalité du dernier octet sert à numéroter les machines. Mais on désire créer des sous-réseaux. On va donc re-découper l'espace fourni par les 8 bits du dernier octet.

On peut par exemple allouer les bits de la facon suivante :



Les 3 bits de poids 32, 64 et 128 (jaunes) seront utilisés pour déterminer le sous-réseau et les 5 bits de poids 1, 2, 4, 8 et 16 (verts) pour définir les adresses des hôtes au sein des sous-réseaux. En groupant les bits de sous-réseau avec les bits de réseau, on va définir les sous réseaux suivants :

204.34.57.0 (bits de sous-réseau = 000)
204.34.57.32 (bits de sous réseau = 001 )
204.34.57.64 (bits de sous-réseau = 010 )
204.34.57.96 (bits de sous-réseau = 011 )
204.34.57.128 (bits de sous-réseau = 100 )
204.34.57.160 (bits de sous-réseau = 101 )
204.34.57.192 (bits de sous-réseau = 110 )
204.34.57.224 (bits de sous-réseau = 111)

Remarquez bien que l'on utilise les combinaisons 000 et 111 pour ces sous-réseaux. La RFC950 qui stipulait que la première et la dernière adresse d'un réseau ne devaient pas être utilisées, est maintenant obsolète. En effet, la plupart des routeurs modernes savent très bien gérer des adresses réseau dont tous les bits de sous-réseau sont à 1 ou à 0. Pour plus de précision, reportez-vous à la RFC1878 qui propose un découpage en sous-réseaux indépendant des classes (voir également CIDR ci-dessous). Cet aspect "sans classe" se retrouve sur certains routeurs ou l'on peut spéccifier 'ip classless'.(pour les routeurs, voir la RFC1812)
Pour notre exemple, on obtient donc 8 sous-réseaux possibles.
Les bits de poids faibles (les bits verts) vont indiquer, pour chacun de ces sous-réseaux, les adresses à allouer aux machines. Par exemple, dans le réseau 204.34.57.32, la premiere machine portera l'adresse 1. Le dernier octet aura alors la valeur suivante :

soit 33. L'adresse TCP/IP complète sera donc 204.34.57.33. Ainsi de suite jusqu'à 204.34.57.62. On ne peut utiliser l'adresse 204.34.57.63 pour une machine, car elle correspond a l'adresse de broadcast du sous-réseau 204.34.57.32.
Ensuite, dans le réseau 204.34.57.64, la première machine aura pour adresse 204.34.57.65 et ainsi de suite.

En procédant ainsi, on a découpé un espace ou l'on pouvait initialement allouer 254 machines en 8 sous-réseaux dans lesquels on ne peut allouer au total que 8 fois 30 machines. Le tableau ci-dessous montre, en fonction des bits alloués soit au réseau soit aux hôtes, les différentes possibilités envisageables en classe C.

bits réseau/ bits hôte

nb de
sous-réseaux

nb
d'hôtes

masque

1 / 7

2

126

255.255.255.128

2 / 6

4

62

255.255.255.192

3 / 5

8

30

255.255.255.224

4 / 4

16

14

255.255.255.240

5 / 3

32

6

255.255.255.248

6 / 2

64

2

255.255.255.252

7 / 1

128

0

255.255.255.254

La dernière ligne est à écarter, pour des raisons évidentes. Il reste donc 6 possibilités de découpage en classe C. En classe B, ces possibilités sont différentes, mais les contraintes sont les mêmes.

Les nouveaux masques réseau.

Avec ces nouveaux sous-réseaux, on doit également modifier le masque de réseau. Dans le cas ci-dessus, le masque initial fourni pour la classe C était de 255.255.255.0. Mais on a utilisé les trois bits de poids fort du dernier octet pour coder les sous-réseaux. Il faut donc rajouter au masque initial le masque de sous-réseau. Ce dernier vaut 32+64+128, soit 224. Le nouveau masque réseau est donc 255.255.255.0 + 224 = 255.255.255.224.

Ce nouveau masque s'applique à tous les 6 sous-réseaux de l'exemple ci-dessus, puisque les trois bits de poids 32, 64 et 128 sont affectés à la fonction "sous-réseau".

Pour résumer, le masque ne dépend que du nombre de bits affectés au réseau et au sous-réseau : il suffit de positionner ces bits à 1 et de faire une somme binaire (un 'OU binaire') pour obtenir le masque.

Ce masque de réseau est important, car il va déterminer l'adresse de diffusion (broadcast) et, partant, limiter les diffusions aux seules machines faisant partie d'un sous-réseau déterminé.

Les adresses de diffusion (broadcast).

Chaque sous-réseau ainsi constitué doit avoir une adresse réseau, un masque de réseau et une adresse de diffusion (broadcast). L'adresse de diffusion est simple à calculer : elle correspond à l'adressse du réseau ou du sous-réseau plus l'adresse de l'hôte dont tous les bits sont à 1.

Chaque sous-réseau possède une adresse de diffusion propre.

Dans le cas du sous-réseau 204.34.57.32, le numéro d'hôte dont tous les bits (les bits verts de la figure ci-dessus) sont à 1 est 31. Si on ajoute ce nombre à l'adressse du réseau, on obtient 204.34.57.32 + 31 = 204.34.57.63.

Le cas du réseau de classe B.

Dans le cas d'un réseau de classe B, si il n'y pas de sous-réseau, 2 octets sont utilisés pour numéroter les machines. C'est sur l'ensemble de ces deux octets que vont s'effectuer les re-découpages. Il y a bien sûr plus de possibilités de découpage qu'en classe C, mais la démarche reste identique.

bits réseau/ bits hôte

nb de
sous-réseaux

nb
d'hôtes
masque

1 / 15

2

32766 255.255.128.0

2 / 14

4

16382 255.255.192.0

3 / 13

8

8190 255.255.224.0

4 / 12

16

4094 255.255.240.0

5 / 11

32

2046 255.255.248.0

6 / 10

64

1022 255.255.252.0

7 / 9

128

510 255.255.254.0
8 / 8 255 254 255.255.255.0

On notera que le tableau s'arrête à 8 bits par réseau. Ee effet, on "tombe "ensuite dans le cas d'un réseau de classe C, tout du moins en ce qui concerne le découpage en sous-réseaux.Pour le représentation des sous-réseaux de classe C, la RFC1878 parle d'ailleurs "d'extended class B subnets".

Le cas du réseau de classe A.

Dans le cas d'un réseau de classe A, 3 octets sont utilisés pour numéroter les machines. C'est sur l'ensemble de ces deux octets que vont s'effectuer les re-découpages.

Plus de classe : le CIDR.

Maintenant que vous avez assimilé cette méthode quelque peu complexe, oubliez là. En voici une à la fois plus simple et plus générale.

Vous savez sans doute que l'on va bientôt arriver à une pénurie d'adresses TCP/IP sur Internet. Pourquoi ? Supposons par exemple que vous ayez 300 machines et/ou périphériques à installer sur un réseau connecté à l'Internet. Si vous vous faites allouer un réseau de clase B avec 65535 adresses, la plupart ne seront donc pas utilisées.

Partant de ce constat, les organismes chargé d'allouer les adressses ont décidé d'abandonner ce découpage en classes et de proposer le CIDR (Classless Inter Domain Routing) qui est détaillé dans la RFC1519. Ce procédé vise à :

  1. alléger les tables de routage sur les routeurs Internet
  2. optimiser l'allocation d'adresses en évitant le gaspillage actuel.

Ce procédé consiste à allouer un lot de plusieurs adresses, et un masque de réseau associé qui couvre ces adressses. Par exemple, si on désire 300 adressses, il faut fournir un lot d'adresses correspondant à plusieurs adresses de réseau en classe C :

204.34.50.0 soit 254 hôtes
204.34.51.0 soit 254 hôtes
avec le masque de réseau : 255.255.254.0

Dans ce cas, la notation adoptée est 204.34.50.0/23. Ce qui signifie : adresse de réseau 204.34.50.0 avec un masque de sous réseau de 32 bits dont les 23 bits les plus à gauche (les bits jaunes) sont à 1. Les 9 bits de poids faibles (les bits verts) sont utilisés pour numéroter les 510 hôtes. Les adresses 204.34.50.0 et 204.34.51.255 étant réservées respectivement pour l'adresse du réseau et l'adresse de diffusion.

En utilisant le CIDR, les fournisseurs d'accès se voient allouer de larges espaces d'adressage qu'il répartissent ensuite à leurs clients.

Le programme subip.exe.

Avec le programe subip.exe, on peut déterminer, à partir de données entrées au clavier, les adresses de sous-réseau, les masques et les adresses de diffusion pour des sous-réseaux de classe B ou de classe C. Ce programme fonctionne dans une fenêtre MSDOS sous Windows 9x ou NT. Il suffit de répondre aux questions.

Il existe deux options pour ce programme :

-f <nom de fichier> permet de définir un fichier dans lequel seront écrits les résultats.
-h affiche à l'écran un résumé de l'exposé ci-desssus.

Ce programme est entièrement gratuit et libre de droits. Vous pouvez le télécharger depuis cette page..


 ©2000, 2001 cmic. Mise à jour le 28 janvier 2001