Formule de calcul d’un masque réseau en fonction d’un nombre de machines

Quoi de plus courant en IPv4 que de devoir trouver le bon masque de sous-réseau en fonction d’un nombre de machines à y adresser ?

D’un point de vue purement théorique, il faut définir le nombre de bits dans l’adresse qui seront consacrés à la partie « machines ». C’est-à-dire les bits mis à 0 dans le masque, en partant de la droite (bits de poids faible). Les bits restants détermineront la partie réseau bien entendu.

Par exemple, si on a besoin d’un réseau pour 100 machines:

  • Il faut que 2x >= 100 + 2, où x est le nombre de bits consacrés aux machines.
    (Ne pas oublier de tenir compte de l’adresse réseau et de l’adresse broadcast qu’on ne peut pas attribuer à une machine, c’est la raison du +2)
  • On prendra donc ici 7 bits pour les machines , ce qui permet d’attribuer 27-2 adresses.
  • On obtient donc un masque /32-7 = /25, soit 255.255.255.128

En général, soit on a ces chiffres en tête par habitude, soit on utilise un tableau récapitulatif.

C’est par contre moins évident d’automatiser ce calcul dans une feuille Excel ou dans un programme par exemple, sauf si on a la bonne formule:

BitsMachines = ArrondiHaut( log2( nb_machines + 2) )
  • ArrondiHaut : Prendre la valeur arrondie vers le haut de …
  • log2(…) : logarithme en base 2 de …
  • nb_machines : Nombre de machines à adresser
  • +2 : Pour ne pas oublier de tenir compte de l’adresse réseau et du broadcast

De là pour obtenir le nombre de bits côté réseau :

BitsRéseau = 32 - BitsMachines

ou en une fois …

BitsRéseau = 32 - ArrondiHaut( log2( nb_machines + 2) )

Exemples d’application

Formule Excel (Syntaxe en français)

=32-PLAFOND(LOG(D4+2;2);1)

Formule Excel (Syntaxe en Anglais)

=32-CEILING(LOG(D4+2;2);1)

Application en Python

# Importation de la bibliothèque Math
# pour les fonctions logarithmiques etc
import math

# Fonction qui retourne le nombre de bits réseau 
# sous forme d'un entier
def calculMasque(nbMachines):
    return int ( 32 - math.ceil(math.log(nbMachines+2,2)))

# Exemple ...
print calculMasque(100)

0 Comments on “Formule de calcul d’un masque réseau en fonction d’un nombre de machines