Connexion élèves

Choisir le(s) module(s) à installer :

Réseaux, sous-réseaux, IP...

Vous avez vu lors de la simulation d'un réseau, qu'en plus de l'IP de chaque machine, il fallait préciser le masque du sous-réseau à laquelle elle appartenait.
A quoi correspond cette notion ?

Masque de sous-réseau

Masque de sous-réseau

Le problème

On le rappelle, Internet n'est que la connexion entre eux de multiples plus petits réseaux ( on parle de sous-réseaux ), chacun ayant son propre domaine de diffusion hors duquel ne "sortent" pas les données qui circulent, et qui sont donc indépendants les uns des autres : pour faire circuler les données d'un réseau à un autre, il faut une machine spéciale ( un routeur ) pour "passer" de l'un à un autre.
Par contre, les machines sur un même sous-réseau peuvent directement communiquer les unes avec les autres.

Mais alors, il faudrait deux adresses IP pour identifier une machine donnée :

Or, l’adressage IP ne définit qu’une seule adresse IP par machine reliée à Internet. Cela semble insuffisant...

En réalité, non : il suffit de segmenter cette adresse en deux parties distinctes, l’une pour identifier le sous-réseau, et l’autre pour la machine elle-même.
C’est là où le masque entre en jeu, c’est lui qui joue le rôle de séparateur entre ces deux adresses.

Principe

Dans une adresse IP ( nous prendrons l'exemple d'une IPv4, mais tout restera valable pour des adresses IPV6 ), un certain nombre des bits qui la compose sont toujours les mêmes pour toutes les machines du sous-réseau : ce sont eux qui identifient le sous-réseau auquel elle appartient.

C'est le masque de sous-réseau qui permet de savoir quels sont ces bits.

Il est composé, comme l'adresse IP, de 4 octets, soit 32 bits.

  • un bit à 1 dans le masque indique que le bit de même position dans l'adresse IP sera fixe, donc commun à toutes les machines du réseau. Ce sont donc ces bits qui définissent la partie "adresse réseau".
  • un bit à 0 indique que le bit de même position dans l'adresse IP sera libre, donc différent pour chaque hôte. Ce sont donc ces bits qui définissent la partie "machine".

Comme le masque définit tout le sous-réseau, il doit donc être le même pour tous les hôtes qui le composent. Il leur permettra de déterminer si une IP donnée appartient au même sous-réseau qu'eux ( et sera donc directement accessible ) ou pas.

Souvent, tous les bits d'un octet du masque sont à 1 ou à 0 : ces octets prennent donc les valeurs 0 ou 255 ( mais pas obligatoirement, voire exemples plus bas ).

Exemples

Une notation condensée du couple IP/masque existe, appelée notation CIDR ( = Classless Inter-Domain Routing ) : elle consiste à indiquer l'IP avec un "/" suivi du nombre décimal de bits de poids fort identifiant le sous-réseau ( c'est à dire les bits des octets communs à toutes les adresses du sous-réseau ).
Pour les exemples précédents :

( on remarque du coup qu'avec cette notation, il est très facile de connaître le nombre total d'IP que l'on peut avoir dans ce sous-réseau : chaque IPv4 faisant 32 bits, la différence permet de savoir le nombre de bits "libres", donc le nombre de valeurs différentes possibles. Pour le premier exemple ci-dessus, le nombre de bits "libres" est 32 - 24 = 8 → 28 = 256 IP différentes )

Parmi toutes les IP possibles dans un sous-réseau, deux ne peuvent être attribuées à des hôtes :

  • l'adresse du sous-réseau lui-même qui est la première de la plage des IP possibles ( bits de la partie "machine" de l'adresse tous à 0 )
  • l'adresse de diffusion qui est la dernière de cette plage ( bits de la partie "machine" de l'adresse tous à 1 ), et qui sert, comme son nom l'indique aux messages de diffusion

Le masque de sous-réseau est donc indissociable de l'adresse IP. Une adresse seule ne voudra rien dire puisqu’on ne saura pas quelle est la partie réseau et quelle est la partie machine. De la même façon, un masque seul n’aura pas de valeur puisqu’on n’aura pas d’adresse sur laquelle l’appliquer. L’adresse IP et le masque sont donc liés l’un a l’autre.

Applications

Il va falloir refaire un peu de binaire...ça n'est jamais mauvais !...

  1. On considère l'adresse IP 200.67.80.45, avec le masque de sous réseau 255.0.0.0.
    • écrire l'adresse du sous-réseau et l'adresse de diffusion
    • écrire cette adresse avec la notation CIDR
    • combien d'hôtes différents peut-il y avoir sur ce sous-réseau ?
  2. On considère maintenant l'IP 192.168.16.5/21 ( attention, moins facile ! ).
    • déterminer le masque du sous-réseau ( bien travailler en binaire ! )
    • combien d'adresses IP différentes permet ce masque ? ( voir remarque ci-dessus )
    • quelle est l'adresse du sous-réseau ? ( à quels bits du masque correspond-elle ? )
    • la machine d'IP 192.168.16.125 appartient-elle au même sous-réseau ? ( à vous de traduire "appartient au même sous-réseau"... )
    • et la machine d'IP 192.168.22.5 ?
  3. A quel réseau correspond le masque 0.0.0.0 ?

Lien vers les REPONSES

Opérations logiques sur IP...

Adresse de sous-réseau

L'adresse d'un sous-réseau est ce qui permet à une machine de savoir si une autre est située sur le même sous-réseau qu'elle.

Rappel : les bits à 1 du masque de sous-réseau indiquent les bits de l'IP qui correspondent à la partie réseau ( et les bits à 0 indiquent la partie machine.)

On montre alors que pour déterminer l'adresse du sous-réseau, il suffit de faire une opération de ET logique entre l'IP et le masque.

Soit une machine d'IP 192.168.1.24 et de masque 255.255.255.0.

  1. écrire en binaire le masque de sous-réseau, et l'adresse IP
  2. Montrer que l'opération ET logique entre bit à bit entre les bits de l'IP et ceux du masque permet bien d'obtenir l'adresse du sous-réseau.

On rappelle la table de vérité du ET logique :

A B A ET B
0 0 0
1 0 0
0 1 0
1 1 1

Lien vers les REPONSES

Adresse de diffusion

L'adresse de diffusion ( broadcast ) permet d'envoyer des messages à toutes les machines d'un sous-réseau.

Rappel : elle correspond à une IP avec tous les bits de la partie machine à 1.

On montre de même que, pour trouver l'adresse de diffusion du sous-réseau, il faut faire une opération de OU logique entre l'IP et le complément à 1 du masque; le complément à 1 du masque correspond au masque avec tous ses bits inversés : 0 → 1 et 1 → 0 .

Le complément à 1 du masque peut lui-même s'obtenir par une opération de OU EXCLUSIF entre le masque et la valeur 255.255.255.255

  1. En appliquant la fonction OU EXCLUSIF entre le masque 255.255.255.0 et la valeur 255.255.255.255, montrer que le complément à 1 du masque est 0.0.0.255
  2. Montrer que l'opération OU logique entre l'IP 192.168.1.24 et le complément à 1 du masque permet bien d'obtenir l'adresse de diffusion ( 192.168.1.255 )

On rappelle la table de vérité du OU et du OU EXCLUSIF logiques :

A B A OU B A OU EXCLUSIF B
0 0 0 0
1 0 1 1
0 1 1 1
1 1 1 0

Lien vers les REPONSES

Un peu de Python pour faciliter ces calculs...

Écrire en Python une fonction adresse_sous_reseau, qui :

  • prend 2 paramètres ip et masque sous forme de chaînes de caractères de la forme "XXX.XXX.XXX.XXX"
  • détermine l'adresse de sous-réseau correspondant à l'IP et au masque fourni
  • renvoie cette adresse sous forme d'une chaîne de caractères de la même forme "XXX.XXX.XXX.XXX"

Entrez l'IP sous la forme xxx.xxx.xxx.xxx : 192.168.1.24
Entrez le masque sous la même forme : 255.255.255.0

L'adresse du sous-réseau est : 192.168.1.0					
				

Quelques indications :

  • il existe en Python la fonction split() qui permet de séparer des "mots" dans une chaîne selon un caractère séparateur présent dans la chaîne.
    Cette fonction retourne une liste dont chaque élément est un des "mots", sans le caractère séparateur.
    Ainsi, pour séparer les 4 octets de l'IP selon le caractère séparateur ".", on pourra utiliser l'instruction :
    
    octets = ip.split('.')						
    					
  • l'opérateur ET logique en Python se note &. Il peut très bien travailler avec des nombres en base 10, inutile de convertir en binaire au préalable !

Vérifiez le bon fonctionnement de votre fonction avec les exemples précédents.

def adresse_sous_reseau(ip: str, masque: str)->str: pass

Lien vers les REPONSES

Écrire une fonction adresse_diffusion, qui :

  • prend 2 paramètres ip et masque sous forme de chaînes de caractères de la forme "XXX.XXX.XXX.XXX"
  • détermine l'adresse de diffusion du sous-réseau
  • retourne cette adresse sous forme d'une chaîne de caractères de la même forme "XXX.XXX.XXX.XXX"

Entrez l'IP sous la forme xxx.xxx.xxx.xxx : 192.168.1.24
Entrez le masque sous la même forme : 255.255.255.0

L'adresse du sous-réseau est : 192.168.1.0
L'adresse de diffusion est : 192.168.1.255					
				

Quelques indications :

  • l'opérateur OU logique en Python se note |. Il peut lui aussi très bien travailler avec des nombres en base 10, inutile de convertir en binaire au préalable !
  • l'opérateur Ou EXCLUSIF se note ^

Vérifiez le bon fonctionnement de votre fonction avec les exemples du chapitre.

def adresse_diffusion(ip: str, masque: str)->str: pass

Lien vers les RÉPONSES