Licence CC BY-NC-ND

Le subnetting en pratique

Maintenant que vous savez ce qu’est le subnetting, nous allons voir comment cela se fait. Faites chauffer vos méninges, cela demande du calcul ! … Hé ne partez pas ! C’est facile, vous allez voir ! Restez, voyons ! :-°

Pour pouvoir suivre ce chapitre, le binaire doit vous être familier. Si tel n’est pas le cas, consultez cette annexe avant de poursuivre votre lecture.

Comment ?

Considérant que vous maitrisez les conversions d’adresses IP du binaire au système décimal et vice versa, que vous connaissez les puissances de deux et que les yeux fermés vous pouvez dire que 2^3 = 8, que vous savez ce qu’est le subnetting, et que vous comprenez parfaitement cette notion d’économie d’adresses, nous allons voir comment « subnetter », comment avoir un masque de sous-réseau personnalisé.

Cette section n’est que théorique, elle consiste simplement à vous dire comment on fait, et dans la suite de ce chapitre nous allons subnetter ensemble, pas à pas.

Le comment du pourquoi

Pour personnaliser les masques de sous-réseau, il faut emprunter des bits de la partie host (client) de notre adresse IP. Revoyons d’abord en douceur ce que sont le host ID et le network ID. D’abord, host ID signifie identité de l’hôte et network ID signifie identité du réseau. La règle de base à retenir est : plus on « monte » dans les masques (c’est-à-dire qu’on passe de 255.0.0.0 à 255.255.0.0, de 255.255.0.0 à 255.255.255.0,…), plus le network ID devient grand : il gagne un octet de plus à chaque fois, et le host ID en perd un.

Faire du subnetting, c’est subdiviser un réseau en plusieurs sous-réseaux, diminuer le nombre d’adresses IP par sous-réseau.

Avec le masque 255.0.0.0, le premier octet correspond à l’identité du réseau. Avec 255.255.0.0, ce sont les deux premiers octets, et avec 255.255.255.0, les 3 premiers. C’est l’inverse pour l’identité de l’hôte :

Masque de sous-réseau Adresse IP
255.0.0.0 75.10.2.4
255.255.0.0 135.5.0.7
255.255.255.0 220.42.3.6

En gras : network ID, en italique : host ID

Donc, pour subnetter un réseau en plusieurs sous-réseaux, on se sert des bits disponibles du masque de sous-réseau, c’est-à-dire ceux qui valent 0.

Il est possible de procéder de plusieurs manières pour subnetter :

  • En partant du nombre de sous-réseaux désirés ;
  • En partant du nombre d’adresses IP désirées par sous-réseau ;
  • En combinant les deux, c’est-à-dire en prenant en compte le nombre de sous-réseaux désirés et le nombre d’adresses IP désirées par sous-réseau.

Nous ne verrons pas tout de suite cette dernière possibilité, nous allons voir seulement les 2 premières. Ces méthodes sont valables pour toutes les adresses.

À partir du nombre de sous-réseaux désirés

Avant de prendre un exemple concret, vous devez connaitre quelques généralités. Tout d’abord, voici une formule à savoir :

S = 2^n

Dans cette formule, S est le nombre de sous-réseaux désirés. À partir de S, vous devez déterminer n, qui est un nombre entier positif, et qui correspond au nombre de bits devant être masqués.

Masqués ? Comme au bal ?

Pas vraiment… :-° Masquer signifie, en gros, le mettre à 1 pour les besoins du subnetting. Comme vous le savez normalement, le subnetting consiste en l’emprunt des bits de la partie hôte pour créer des sous-réseaux. Ce processus d’emprunt de bits est appelé masquage. Masquer un bit, c’est donc l’emprunter, l’allumer.

En fait, S ne pourra pas toujours être égal au nombre de sous-réseaux désirés, nous verrons dans les exemples comment nous allons faire dans ce cas très courant.

Autrefois, dans ce cours, nous montrions une formule légèrement différente : S = 2^n - 1. Ce « -1 » venait d’une convention selon laquelle l’octet de l’adresse IP définissant le sous-réseau ne pouvait être supérieur ou égal à l’octet modifié du masque de sous-réseau personnalisé. Par exemple, si on avait un réseau 198.15.2.0 et qu’on applique aux hôtes un masque 255.255.255.192, on ne pouvait pas avoir de sous-réseau ayant pour identité 198.15.2.192. Cette pratique étant dépassée, nous ne la prenons plus en compte dans ce cours. Sachez que vous pourriez encore tomber sur de vieux routeurs qui vont vous casser les pieds avec ça.

Au vu de vos têtes sceptiques (enfin, on ne voit pas mais on devine :-° ), nous allons tout de suite faire un exemple, parce que la théorie, ça ne semble pas digeste.

Exemple de subnetting

Passons tout de suite au plus intéressant. Considérons le réseau 40.0.0.0 avec pour masque global 255.0.0.0. Nous voulons le diviser en 20 sous-réseaux. Déterminons le nombre de bits à masquer pour obtenir un masque de sous-réseau personnalisé, qui devra être appliqué à tous les hôtes.

:euh:o_O

Ah oui, on ne peut pas obtenir exactement 20 avec la formule 2^n ! Dans ce cas, nous allons prendre une valeur un peu supérieure pour avoir au moins 20 sous-réseaux. Allons-y doucement :

  • 2^4 = 16
  • 2^5 = 32
  • On a suffisamment de réseaux en masquant 5 bits, on arrête là.

Quand vous avez trop d’adresses IP par sous-réseau, vous devriez empêcher l’assignation des adresses inutilisées. C’est une question de sécurité, pour empêcher qu’un intrus puisse s’octroyer une adresse IP libre. Nous n’entrerons pas dans les détails ici.

On ne peut pas mélanger les 1 et les 0, tous les 1 doivent être à gauche, et les 0 à droite. Cela veut dire le masquage se fait de la gauche vers la droite.

Nous allons donc masquer 5 bits de cette manière. Nous avons les puissances suivantes (les 8 premières puissances de 2) :

  • 2^7 = 128
  • 2^6 = 64
  • 2^5 = 32
  • 2^4 = 16
  • 2^3 = 8
  • 2^2 = 4
  • 2^1 = 2
  • 2^0 = 1

Voilà donc les 8 premières puissances de deux, par ordre décroissant. Nous allons masquer les 5 bits qu’il nous faut pour obtenir 20. Donc, nous allons additionner les valeurs des 5 premières puissances ci-dessus. Cela nous donne donc : 2^7 + 2^6 + 2^5 + 2^4 + 2^3 = 248.

Nous avons masqué 5 bits du 2ème octet de notre masque de sous-réseau. Schématiquement, ça nous donne ceci :

255 248 0 0
ssssssss ssssshhh hhhhhhhh hhhhhhhh

s = subnet ; h = host

La valeur de notre nouveau masque de sous-réseau est à présent 255.248.0.0.

Si vraiment vous n’avez pas compris comment le 248 a été obtenu :

  • 2^7 = 128

  • 2^6 = 64

  • 2^5 = 32

  • 2^4 = 16

  • 2^3 = 8

  • 128 + 64 = 192

  • 192 + 32 = 224

  • 224 + 16 = 240

  • 240 + 8 = 248

Et voilà, soyez très heureux, nous avons réussi à personnaliser un masque de sous-réseau ! ;)

Maintenant il faudrait définir les limites de chaque sous-réseau, sinon ça ne va pas être très utile. Dans le cas présent, nous en avons 31, on va vous donner les 5 premières plages et la dernière, vous allez faire le reste vous-mêmes, il faut bien que vous fassiez quelque chose ! :-°

Comment calculer les plages ?

C’est relativement simple. Pour calculer les plages, il faut retrancher le nombre calculé du nouveau masque de sous-réseau à 256. Ce nombre est 248, 256 - 248 = 8. Donc nos sous-réseaux seront séparés par un intervalle de 8.

Concrètement, reprenons le réseau que nous avions choisi à la base : 40.0.0.0. Le premier sous-réseau est 40.0.0.0, le deuxième est 40.8.0.0, le troisième 40.16.0.0, le quatrième 40.24.0.0, etc. ;)

Pour calculer les plages, il faut savoir que la dernière adresse d’un sous-réseau donné est toujours égale à l’adresse de l’identité du prochain sous-réseau moins 1. :-° Un exemple concret ? Dans notre cas, notre premier sous-réseau est 40.0.0.0. La première adresse IP adressable (pouvant être donnée à un hôte) est donc 40.0.0.1 et la dernière… 40.7.255.254. o_O

Techniquement, la dernière adresse dans un réseau est réservée pour la diffusion dite de broadcast. Cela sert à envoyer la même chose à tous les hôtes du réseau. Ici, l’adresse 40.7.255.255 est réservée pour le broadcast et n’est pas donc pas assignable à un hôte. Nous y reviendrons un peu plus tard.

Nous avons donc :

Ordinal Adresse du sous-réseau Première adresse IP d’hôte Dernière adresse IP d’hôte
1er 40.0.0.0 40.0.0.1 40.7.255.254
2ème 40.8.0.0 40.8.0.1 40.15.255.254
3ème 40.16.0.0 40.16.0.1 40.23.255.254
4ème 40.24.0.0 40.24.0.1 40.31.255.254
5ème 40.32.0.0 40.32.0.1 40.39.255.254
Dernier 40.248.0.0 40.248.0.1 40.255.255.254

Vous êtes capables de faire le reste maintenant. :)

Si vous pouvez encore suivre, nous allons voir comment subnetter à partir du nombre d’adresses IP d’hôtes désiré. N’hésitez pas à faire une pause si vous pensez en avoir déjà beaucoup fait pour le moment.

À partir du nombre d'adresses d'hôtes désirées

Parés à affronter cette méthode ? Dans ce cas, voici une bonne et une mauvaise nouvelle. On commence par la mauvaise ? La formule et la méthode changent ! La bonne nouvelle ? Elles ne changent que très peu, et vous allez comprendre pourquoi !

Explications sur l’adresse de broadcast et l’identité du réseau

La nouvelle formule est :

S = 2^n - 2

Cette fois, S correspond au nombre d’hôtes désiré par sous-réseau. La raison du changement dans la formule est simple : on retranche une première unité pour l’identité du réseau car elle n’est pas assignable. Si l’adresse 40.16.0.0 identifie un réseau, elle ne peut pas identifier un hôte ! Une autre unité est retranchée car on ne peut pas non plus assigner l’adresse de broadcast.

Il est théoriquement possible de supprimer le broadcast dans un réseau, mais dans des cas très particuliers uniquement, que nous ne verrons pas ici. Il est indispensable dans la plupart des cas : par exemple, les requêtes ARP permettant d’établir des correspondances entre adresses IP et MAC sont envoyées en broadcast ! Si vous décidiez de la supprimer et d’utiliser cette adresse pour un hôte, la formule deviendrait 2^n - 1.

Ces explications sont facilement vérifiables lorsqu’on détermine les plages d’un réseau subnetté avec le masque 255.255.255.0, vous aurez l’occasion de le voir. Pour le moment, voyons une application de cette méthode avec un exemple.

Un autre exemple de subnetting

Prenons le réseau 158.37.0.0. Commençons par décider du nombre d’adresses IP que l’on souhaite avoir par sous-réseau.

Si vous choisissez un nombre inférieur à 255, vous vous retrouverez avec un masque sous la forme 255.255.255.xxx. Ce n’est pas interdit, ça reste du subnetting, mais ne soyez pas surpris si le dernier octet du masque est également modifié.

Considérons que nous voulons 1800 hôtes par sous-réseau. Déterminons n :

  • 2^10 - 2 = 1022
  • 2^11 - 2 = 2046

n vaut donc 11. C’est là que ça change : comme nous voulons un nombre précis d’adresses par sous-réseaux, 11 bits doivent être libres pour les hôtes ! Ce qui signifie que 11 bits doivent valoir 0. Il y a 32 bits par masque, pour connaître le nombre de bits devant valoir 1, on fait 32 - 11 = 21. Notre nouveau masque doit donc comporter 21 bits allumés, écrivons-le en binaire :

11111111 . 11111111 . 11111000 . 00000000

Ce qui nous donne en décimal 255.255.248.0. L’intervalle entre chaque sous-réseau est de 256 - 248 = 8.

Dressons maintenant le tableau des plages :

Ordinal Adresse du sous-réseau Première adresse IP d’hôte Dernière adresse IP d’hôte
1er 158.37.0.0 158.37.0.1 158.37.7.254
2ème 158.37.8.0 158.37.8.1 158.37.15.254
3ème 158.37.16.0 158.37.16.1 158.37.23.254
Dernier 158.37.248.0 158.37.248.1 158.37.255.254

Voilà donc un certain nombre de sous-réseaux avec 2046 adresses d’hôtes dans chaque. On n’en voulait que 1800, mais ce n’était pas possible de les avoir précisément, donc on a pris la valeur possible immédiatement supérieure.

Faisons maintenant un autre exemple, mais cette fois, il doit y avoir moins de 254 hôtes par sous-réseau. La méthode reste la même, mais nous allons voir quelques particularités, dont une qui permet de vérifier facilement la formule de départ.

Exemple de subnetting avec moins de 254 hôtes par sous-réseau

Procédons de la même manière. Dans le réseau 203.68.5.0, nous voulons 14 hôtes par sous-réseau.

2^4 - 2 = 14 ! Super, on tombe juste sur 14 ! (Bon d’accord, c’était fait exprès pour éviter de chercher… :-° )

Attention tout de même quand ça tombe juste comme ça… Si par malheur vous deviez rajouter un hôte dans un sous-réseau, vous seriez dans la m bien embêté car vous devrez reconfigurer toutes les machines du réseau !

On a donc n = 4, il nous faut 4 bits valant zéro. Comme ici on ne va modifier que le dernier octet, on peut faire directement 8 - 4 = 4 pour connaître sa nouvelle valeur. 11110000(2) = 240(10), notre nouveau masque est donc 255.255.255.240. L’intervalle est de 256 - 240 = 16, on détermine les plages :

Ordinal Adresse du sous-réseau Première adresse IP d’hôte Dernière adresse IP d’hôte Adresse de broadcast
1er 203.68.5.0 203.68.5.1 203.68.5.14 203.68.5.15
2ème 203.68.5.16 203.68.5.17 203.68.5.30 203.68.5.31
3ème 203.68.5.32 203.68.5.33 203.68.5.46 203.68.5.47
Dernier 203.68.5.240 203.68.5.241 203.68.5.254 203.68.5.255

Vous remarquez probablement une différence : la dernière adresse IP d’hôte de chaque sous-réseau ne se termine pas par 254 ! De plus, vous voyez bien maintenant l’intérêt du -2 de la formule : l’adresse du réseau et celle de broadcast sont bien visibles ici.

Remarquez que le masque de sous-réseau ne peut être 255.255.255.255. En effet, dans ce cas, il n’y a que l’adresse même du sous-réseau dans chaque sous-réseau, donc aucune adresse disponible pour les hôtes ! D’ailleurs, si on prend comme masque 255.255.255.254, il n’y a qu’une adresse disponible par sous-réseau, on est donc obligé de supprimer le broadcast (ce qui n’est pas grave vu qu’il n’y a qu’un hôte).

Allez, vous avez bien travaillé, vous avez droit… à la suite ! :D

La notation du masque

Cette sous-partie ne comportera rien de fameux, nous allons juste vous fournir quelques explications sur les éventuelles notations que vous rencontrerez probablement dans le monde du réseau.

La notation « classique »

Cette notation dite « classique » est la notation « normale » d’une adresse IP. C’est en fait une notation qui couple l’adresse IP et son masque de sous-réseau associé. Par exemple, vous pourrez rencontrer une expression telle que 192.168.1.45/255.255.255.0. C’est assez évident à comprendre, n’est-ce pas ? Cela veut simplement dire qu’à l’adresse IP 192.168.1.45 est attribué un masque 255.255.255.0. C’est une notation que nous pourrons qualifier de « obsolète » car elle a laissé sa place à…

La notation avec un slash ( / )

Cette notation suit le même modèle que la notation classique. C’est-à-dire que c’est un couplage de l’adresse IP d’un hôte à son masque de sous-réseau. Mais le point particulier ici, c’est qu’au lieu de donner l’expression « brute » du masque de sous-réseau dans la notation, on se contente de spécifier le nombre de bits masqués pour obtenir ce masque. La notation précédente en notation avec un slash devient 192.168.1.45/24. Cela veut dire que l’adresse IP 192.168.1.45 est associée à un masque ayant 24 bits de masqués.

La notation avec un slash semble devenir la plus courante et la plus utilisée aujourd’hui notamment avec le succès du CIDR (Classless Inter Domain Routing) que nous allons aborder très bientôt. En fait, la notation avec un slash n’est rien d’autre que ce qu’on appelle officiellement la notation CIDR. ;)

Concernant les expressions « notation classique » et « expression brute », ce sont des expressions propres au tutoriel, n’allez pas croire qu’elles sont conventionnées. ;)

Voila, vous savez tout sur les notations que vous pouvez rencontrer. Il va sans dire que vous préférerez sûrement utiliser la notation avec un slash. C’est plus pratique : on peut se contenter d’écrire 130.14.56.3/16 par exemple au lieu de 130.14.56.2/255.255.0.0. ;)


Reposez-vous avant de passer au chapitre suivant. Car vous allez encore faire des calculs, d’un autre genre cette fois ! ;)