Outils pour utilisateurs

Outils du site


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.

Relations avec les adresses MAC

Il faudra patienter un peu pour accéder à toutes les travaux pratiques sur le routage IPv4. Pour l'instant, Voyons ce qu'est une table ARP en mémoire système. Il y a deux outils sous GNU/Linux qui permettent ces introspections:

  1. arp si le paquet net-tools (Debian) est installé;
  2. ip le couteau suisse du poquet iproute2.

Soit un réseau 192.168.60.0/24 équipé de:

  • un NAS 192.168.60.3;
  • une imprimante 192.168.60.10;
  • une station 192.168.60.47;
  • une station 192.168.60.127;
  • un routeur 192.168.60.254;

Nous sommes sur la station 192.168.60.127:

arp -n

Adresse                  TypeMap AdresseMat          Indicateurs           Iface
192.168.60.254           ether   68:a3:78:86:ec:02   C                     enp1s0
192.168.60.47            ether   ae:2a:a7:dd:e6:07   C                     enp1s0
192.168.60.3             ether   18:31:bf:df:a1:f0   C                     enp1s0
(le -n sert juste à éviter à l'outil de chercher à traduire une adresse IP en URI si un RDNS est présent, mais c'est hors de propos ici).

À peu près la même chose avec la commande ip:

ip -4 neigh list

192.168.60.254 dev enp1s0 lladdr 68:a3:78:86:ec:02 STALE 
192.168.60.47 dev enp1s0 lladdr ae:2a:a7:dd:e6:07 REACHABLE 
192.168.60.3 dev enp1s0 lladdr 18:31:bf:df:a1:f0 STALE 
En gros, les mêmes informations. le -4 sert ici à ne donner que les informations concernant IPv4.

Nous constatons qu'il n'y a pas de référence à 192.168.60.10, l'imprimante. La station envoie un document à imprimer et de suite après:

ip -4 neigh ls

192.168.60.10 dev enp1s0 lladdr f8:da:0c:0c:8d:48 REACHABLE 
192.168.60.254 dev enp1s0 lladdr 68:a3:78:86:ec:02 STALE 
192.168.60.47 dev enp1s0 lladdr ae:2a:a7:dd:e6:07 REACHABLE 
192.168.60.3 dev enp1s0 lladdr 18:31:bf:df:a1:f0 STALE 
L'imprimante apparaît dans la table ARP comme «reachable». Il y a donc eu quelque part un mécanisme qui a retrouvé l'adresse MAC correspondant à l'adresse IP de l'imprimante. Normal puisqu'au niveau Ethernet, ce sont les seules adresses exploitables. Il faudra voir comment ça se passe…

Si l'on retourne voir la table arp après un moment sans s'être servi de l'imprimante, nous verrons en ce qui la concerne:

192.168.60.10 dev enp1s0 lladdr f8:da:0c:0c:8d:48 STALE

Elle est devenue «stale». Suivant le contexte, il pourra se faire que cette référence finisse pas disparaître de la table pour ne pas l'encombrer inutilement.

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