Outils pour utilisateurs

Outils du site


Ceci est une ancienne révision du document !


Les adresses IPv4

Définition d'une adresse IP

Dans sa version 4, IP définit une adresse sur 4 octets. Une partie définit l'adresse du réseau (NetID ou SubnetID suivant le cas), l'autre partie définit l'adresse de l'hôte dans le réseau (HostID). La taille relative de chaque partie varie suivant le masque de (sous) réseau. Car il faudra bien pouvoir déterminer simplement si 2 nœuds font partie ou non du même réseau local.

Les classes d'adresses

Bien que cette façon de faire soit désormais obsolète (nous verrons plus loin pourquoi), il reste intéressant de l'étudier, pour mieux comprendre la notion de masque de sous-réseau.

Topologie

Les classes (défuntes) Hormis la classe D multicast, destinée à faire de la diffusion d'information pour plusieurs hôtes simultanément, il existe trois classes d'adresses IP:

Comme vous le voyez, la classe A permet de créer peu de réseaux, mais avec beaucoup d'hôtes dans chaque réseau, La classe C faisant l'inverse.

Étendue de chaque classe

Comment fait-on pour savoir à quelle classe appartient une adresse ? Il y a deux méthodes pour le savoir:

  • La triviale, qui consiste à apprendre par cœur le tableau.
  • La subtile, qui consiste à retenir la règle, qui est logique.

Voici donc la règle:

  • La classe est définie par les bits les plus lourds (les plus à gauche)
  • Le bit le moins signifiant pour la classe est toujours un 0
  • Les autres sont tous à 1
  • La classe A est signalée par un seul bit, donc obligatoirement un 0
  • La classe B par deux bits, donc 1 0
  • La classe C par trois bits, donc 1 1 0
  • La classe D (multicast) par 4 bits donc 1 1 1 0

Identification d'une classe à partir des bits de poids le plus lourd

Il existe même une classe E, dont les bits les plus lourds sont 11110, qui est « réservée à un usage ultérieur ».

Si l'on arrive à retenir la définition ou son image, ça devient facile de retrouver l'étendue de chaque classe:

Class Première adresse Dernière adresse
A 0.0.0.1 127.255.255.254
B 128.0.0.1 191.255.255.254
C 192.0.0.1 223.255.255.254
D 224.0.0.1 239.255.255.254

A ce stade, nous pourrions penser qu'il peut y avoir, par exemple,  128 réseaux de classe A, avec la possibilité d'avoir 16 777 216 hôtes dans chaque réseau. C'est bien entendu, un peu plus compliqué que çà.

Il y a déjà quelques adresses que l'on ne peut pas attribuer à un hôte:

  • L'adresse d'hôte =0 (exemple: 192.168.1.0 dans une classe C)
    Par convention, l'adresse IP dont la partie hôte est nulle est réservée à l'identification du réseau.
  • L'adresse d'hôte avec tous ses bits à 1 (exemple: 192.168.1.255)
    Par convention, cette adresse signifie que tous les hôtes du réseau 192.168.1.0 sont concernés (Adresse de broadcast).
Notons que la notion de classes n'est plus d'actualité avec la notation CIDR et que donc il faudra désormais considérer que:
  • l'adresse la plus petite du bloc d'adresses est l'adresse du réseau;
  • l'adresse la plus grande du bloc d'adresses est l'adresse de broadcast

Les réseaux privés

Et ce n'est pas tout. Nous savons qu'une adresse Internet doit être unique dans un inter réseau. Cette considération, qui ne posait pas trop de problèmes pour des réseaux d'entreprise coupés du reste du monde, devient très restrictive à l'échelle de l'Internet où chaque adresse IP doit être unique à l'échelle planétaire. Ceci représente une contrainte énorme, et qui fait que la pénurie d'adresses IP est une catastrophe annoncée bien plus certaine que celle du bug de l'an 2000. (Rassurez-vous, le prochain protocole IP v6 prévoit de la marge, il faudra juste tout ré apprendre).

Pour permettre aux entreprises de construire leur réseau privé, il a donc été réservé dans chaque classe A, B et C des adresses de réseaux qui ne sont jamais attribuées sur l'Internet (RFC 1918). Tout paquet de données contenant une adresse appartenant à ces réseaux doit être éliminé par le premier routeur établissant une connexion avec l'Internet.

Ces réseaux privés sont:

Classe Réseaux privés Identification
A 10.0.0.0 Pour les réseaux privés
A 127.0.0.0 Pour l'interface de boucle locale (1)
B 169.254.0.0 à 169.254.255.255 Pour l'auto-configuration en réseau local (2)
B 172.16.0.0 à 172.31.0.0 Pour les réseaux privés
C 192.168.0.0 à 192.168.255.0 Pour les réseaux privés
(1) L'adresse qui correspond à « localhost ». Cette adresse locale est nécessaire au fonctionnement de la pile IP.
(2) Système « zeroconf » qui permet une allocation dynamique d'adresse IP sur le lien local (IPV4LL).

Le masque de sous réseau

Le masque de sous-réseau dans sa définition première est un ensemble de 4 octets destiné à isoler:

  • Soit l'adresse de réseau (NetID ou SubnetID) en effectuant un ET logique bit à bit entre l'adresse IP et le masque.
  • Soit l'adresse de l'hôte (HostID) en effectuant un ET logique bit à bit entre l'adresse IP et le complément du masque (!masque).

Les masques de sous-réseau par défaut sont, suivant les classes d'adresses:

Classe Masque par défaut Nbe d'octets pour l'hôte
A 255.0.0.0 3
B 255.255.0.0 2
C 255.255.255.0 1

Par défaut, un masque de sous réseau englobe donc la totalité de la classe. Cependant, il est possible de découper une classe en plusieurs tranches pour réaliser des sous-réseaux. Exemple sur la classe C privée 192.168.0.0 qui par défaut dispose du masque 255.255.255.0. Un outil comme ipcalc nous montre ceci:

ipcalc 192.168.0.0 255.255.255.0

Address:   192.168.0.0          11000000.10101000.00000000. 00000000

HostMin:   192.168.0.1          11000000.10101000.00000000. 00000001
HostMax:   192.168.0.254        11000000.10101000.00000000. 11111110
Broadcast: 192.168.0.255        11000000.10101000.00000000. 11111111
Hosts/Net: 254                   Class C, Private Internet

Mais pourquoi « sous réseau »?

Supposons, pour une raison obscure pour l'instant, que l'on désire couper ce réseau en 2 sous-réseaux interconnectés par un routeur. Il faudra alors utiliser le masque 255.255.255.128 ce qui donnera d'une part le sous-réseau 192.168.0.0:

ipcalc 192.168.0.0 255.255.255.128

Address:   192.168.0.0          11000000.10101000.00000000.0 0000000

HostMin:   192.168.0.1          11000000.10101000.00000000.0 0000001
HostMax:   192.168.0.126        11000000.10101000.00000000.0 1111110
Broadcast: 192.168.0.127        11000000.10101000.00000000.0 1111111
Hosts/Net: 126                   Class C, Private Internet
et le sous-réseau 192.126.0.128 toujours avec le même masque 255.255.255.128:
ipcalc 192.168.0.128 255.255.255.128

Address:   192.168.0.128        11000000.10101000.00000000.1 0000000

HostMin:   192.168.0.129        11000000.10101000.00000000.1 0000001
HostMax:   192.168.0.254        11000000.10101000.00000000.1 1111110
Broadcast: 192.168.0.255        11000000.10101000.00000000.1 1111111
Hosts/Net: 126                   Class C, Private Internet

Nous avons toujours des adresses allant de 192.168.0.1 à 192.168.0.254, mais ici découpées en 2 sous-réseaux de 126 adresses chacun. Si nous connectons tous ces nœuds sur le même switch ou hub, les jaunes ne pourront plus communiquer avec les oranges et réciproquement. Si l'on veut tout de même les faire communiquer, il faudra placer un routeur entre les deux sous-réseaux.

Le modèle CIDR

L'exemple précédent montre deux choses importantes:

  • les masques sont constitués d'une suite de 1 sans trou, suivie d'une suite de 0 sans 1 au milieu;
  • écrire ces masques sous la forme de 4 octets traduits en base décimale n'est guère pratique.

Avec le modèle (Classless Inter-Domain Routing), la notion de classe n'est plus qu'anegdotique, si ce n'est pour les classes réservées à l'usage privé. Les adresses sont désormais distribuées par bloc, sans tenir compte de leur classe originelle.

L'IANA distribue donc désormais des blocs d'adresses contiguës, délimitées par un masque, toujours de 32 bits, dont les x bits de gauche sont à 1 et les autres à 0. Dans ce modèle, un bloc d'adresse se définit ainsi :

adresse.de.base/x

A titre d'exemple, la classe C 192.168.0.0 avec un masque 255.255.255.0 s'écrirait :

192.168.0.0/24. Dans l'exemple précédent, cette classe découpée en deux donnerait les blocs ''192.168.0.0/25'' et ''192.168.0.128/24''. Et pour finir d'éclaircir la question, nous pourrions parfaitment utiliser ceci: ''192.168.0.0/23'', ce qui nous donnerait:

ipcalc 192.168.0.0/23

Address:   192.168.0.0          11000000.10101000.0000000 0.00000000
Netmask:   255.255.254.0 = 23   11111111.11111111.1111111 0.00000000
Wildcard:  0.0.1.255            00000000.00000000.0000000 1.11111111
=>
Network:   192.168.0.0/23       11000000.10101000.0000000 0.00000000
HostMin:   192.168.0.1          11000000.10101000.0000000 0.00000001
HostMax:   192.168.1.254        11000000.10101000.0000000 1.11111110
Broadcast: 192.168.1.255        11000000.10101000.0000000 1.11111111
Hosts/Net: 510                   Class C, Private Internet
Dans cet exemple, nous avons englobé deux classes C adjacentes pour disposer de 510 adresses dans le même réseau.

Un autre exemple

Sur un réseau privé, nous pourrions prendre les deux classes C 192.168.0.0 et 192.168.1.0. En utilisant un masque de type 255.255.254.0, ceci nous permettra de réunir les deux classes C au sein d'un même réseau logique.

En notation CIDR : 192.168.0.0/23

~$ ipcalc 192.168.0.0/23
Address:   192.168.0.0          11000000.10101000.0000000 0.00000000
Netmask:   255.255.254.0 = 23   11111111.11111111.1111111 0.00000000
Wildcard:  0.0.1.255            00000000.00000000.0000000 1.11111111
=>
Network:   192.168.0.0/23       11000000.10101000.0000000 0.00000000
HostMin:   192.168.0.1          11000000.10101000.0000000 0.00000001
HostMax:   192.168.1.254        11000000.10101000.0000000 1.11111110
Broadcast: 192.168.1.255        11000000.10101000.0000000 1.11111111
Hosts/Net: 510                   Class C, Private Internet

Ça fonctionne… Avec quelques restrictions cependant, sur les anciens systèmes. Certaines vieilles piles IP (Windows 95 par exemple) risquent de ne pas accepter les adresses 192.168.0.255 et 192.168.1.0 comme adresses d'hôtes valides (elles devraient être réservées dans un réseau « normal“, nous l'avons vu, mais dans le cas d'un bloc constitué comme celui de l'exemple, il est logiquement possible de les utiliser).

Un exemple « vrai » de configuration

Cet exemple appartient désormais au passé, du temps d'un fournisseur d'accès aujourd'hui disparu.

Un client se connecte et récupère l'adresse 62.161.99.115. C'est une adresse de classe A. Nous allons essayer de voir toutes les informations que l'on peut en tirer, au niveau du réseau. « whois » nous dit:

whois -h whois.geektools.com 62.161.99.115 ...
Query: 62.161.99.115
Registry: whois.ripe.net
Results:
% Rights restricted by copyright. See http://www.ripe.net/ripencc/pub-services/db/copyright.html
inetnum: 62.161.96.0 - 62.161.120.255
...

Cette adresse appartient donc au bloc 62.161.96.0 - 62.161.120.255, qui est une portion du réseau de classe A 62.0.0.0.

Voyons maintenant les informations données par le DHCP. (Exemple sous Linux avec PUMP)

Device eth0
    IP: 62.161.99.115
    Netmask: 255.255.248.0
    Broadcast: 62.161.103.255
    Network: 62.161.96.0
    Boot server 62.161.120.11
    Next server 62.161.120.11
    Gateway: 62.161.96.1
  ...
    Nameservers: 62.161.120.11
    Renewal time: Thu Feb  1 10:17:57 2001
    Expiration time: Thu Feb  1 10:25:27 2001

Le masque de sous réseau est ici aussi inhabituel

~$ ipcalc 62.161.96.0 255.255.248.0
Address:   62.161.96.0          00111110.10100001.01100 000.00000000
Netmask:   255.255.248.0 = 21   11111111.11111111.11111 000.00000000
Wildcard:  0.0.7.255            00000000.00000000.00000 111.11111111
=>
Network:   62.161.96.0/21       00111110.10100001.01100 000.00000000
HostMin:   62.161.96.1          00111110.10100001.01100 000.00000001
HostMax:   62.161.103.254       00111110.10100001.01100 111.11111110
Broadcast: 62.161.103.255       00111110.10100001.01100 111.11111111
Hosts/Net: 2046                  Class A

Exercices...

A quel sous réseau appartient l'adresse 62.161.99.115 (SubnetID)?
Adresse IP 0011 1110 . 1010 0001 . 0110 0011 . 0111 0011
Masque de sous réseau: 1111 1111 . 1111 1111 . 1111 1000 . 0000 0000
Adresse du sous-réseau: (ET logique) 0011 1110 . 1010 0001 . 0110 0000 . 0000 0000
donc en décimal: 62.161.96.0

L'opération consiste simplement en un ET logique bit à bit entre l'adresse et le masque. Mais on avait déjà la réponse en consultant les informations du client DHCP

Quelle est la partie de l'adresse qui concerne l'hôte (HostID)?
Adresse IP 0011 1110 . 1010 0001 . 0110 0011 . 0111 0011
Masque de sous réseau: (complément logique) 0000 0000 . 0000 0000 . 0000 0111 . 1111 1111
HostID: (ET logique) 0000 0000 . 0000 0000 . 0000 0011 . 0111 0011
donc en décimal: 0.0.3.115

L'opération consiste ici en un ET logique entre l'adresse et le complément du masque. Bien entendu, HostID + SubnetID doit reconstituer l'adresse IP, ce qui est bien le cas: (62.161.96.0) + (0.0.3.115) = 62.161.99.115

Quelle est la plus petite adresse possible dans ce sous réseau?
  • SubnetID+1=62.161.96.1 .
    Qui est d'ailleurs l'adresse de la passerelle (c'est un choix de FTCI, pas une obligation. Toute adresse dans le même sous réseau aurait aussi bien fait l'affaire)..
Quelle est la plus grande adresse possible dans ce sous réseau?
  • C'est SubnetID+!SubnetMask-1
    Pourquoi?
    !SubnetMask-1 correspond à la plus grande HostID possible dans ce sous réseau,
    !SubnetMask correspondant à l'adresse de « l'hôte de broadcast »
SubnetID: 0011 1110 . 1010 0001 . 0110 0000 . 0000 000
Masque de sous réseau-1: 0000 0000 . 0000 0000 . 0000 0111 . 1111 1110
Plus grande adresse possible: (+) 0011 1110 . 1010 0001 . 0110 0111 . 1111 1110
donc en décimal: 62.161.103.254
L'opération est une somme binaire. Le résultat était prévisible, une fois encore, en regardant les informations du client DHCP. En effet; l'adresse de broadcast pour le sous réseau étudié est 62.161.103.255 (HostID avec tous les bits à 1).

C'est bien, n'est-ce pas, de pouvoir donner une explication rationnelle à tous ces paramètres IP plus ou moins obscurs à première vue…

Les adresses IPv4: Dernière modification le: 02/03/2025 à 10:09 par prof