R03 - Adressage IPv4, masques, CIDR et classes

Objectif

À partir d’une IP et d’un masque, savoir trouver à la main : l’adresse réseau, le broadcast, la plage utilisable et le nombre d’hôtes. Ton cours détaillé original : cours-classes-ip.


1. Une IPv4 = 32 bits

192.168.1.10 = 4 octets de 8 bits, chacun entre 0 et 255.

Poids des bits1286432168421
19211000000
16810101000
1000001010

Décimal → binaire : on part du poids 128, on met 1 si le nombre restant est ≥ au poids, et on soustrait. Exemple 172 : 172−128=44 (1) · 64 trop grand (0) · 44−32=12 (1) · 16 (0) · 12−8=4 (1) · 4−4=0 (1) · 2 (0) · 1 (0) → 10101100.


2. Le masque : où coupe-t-on ?

Le masque dit quels bits sont la partie réseau (bits à 1) et lesquels sont la partie hôte (bits à 0). Les 1 sont toujours à gauche et contigus.

IP      : 11000000.10101000.00000001.00001010   192.168.1.10
Masque  : 11111111.11111111.11111111.00000000   255.255.255.0  = /24
          └──────────── réseau ─────────────┘└ hôte ┘

La notation CIDR /24 = « 24 bits à 1 dans le masque ».

Les valeurs possibles d’un octet de masque

Bits à 1 dans l’octet012345678
Valeur0128192224240248252254255

3. Calculer réseau et broadcast (méthode fiable)

flowchart TD
  A["IP + masque<br/>ex : 172.16.45.130 /20"] --> B["Trouver l'octet 'intéressant'<br/>(celui où le masque n'est ni 255 ni 0)<br/>/20 → 3e octet, masque = 240"]
  B --> C["Nombre magique = 256 − 240 = 16"]
  C --> D["Multiples de 16 dans le 3e octet :<br/>0, 16, 32, 48 …<br/>45 tombe dans le bloc qui commence à 32"]
  D --> E["Réseau = 172.16.32.0"]
  E --> F["Broadcast = début du bloc suivant − 1<br/>= 172.16.47.255"]
  F --> G["Plage : 172.16.32.1 → 172.16.47.254<br/>Hôtes = 2^12 − 2 = 4094"]

Méthode binaire (pour vérifier)

  • Adresse réseau = IP ET masque (bit à bit : 1 ET 1 = 1, sinon 0).
  • Broadcast = adresse réseau avec tous les bits hôte à 1.
  • Hôtes utilisables = 2^(bits hôte) − 2.

Vérifie toujours avec le script : python3 scripts/reseaux/calcul_ip.py 172.16.45.130/20


4. Tableau CIDR de référence

CIDRMasqueBits hôteAdressesHôtes utilisables
/8255.0.0.02416 777 21616 777 214
/16255.255.0.01665 53665 534
/20255.255.240.0124 0964 094
/22255.255.252.0101 0241 022
/23255.255.254.09512510
/24255.255.255.08256254
/25255.255.255.1287128126
/26255.255.255.19266462
/27255.255.255.22453230
/28255.255.255.24041614
/29255.255.255.248386
/30255.255.255.252242
/32255.255.255.255011 (une seule machine, ex. loopback de routeur)

5. Les classes (système historique)

Classe1er octetMasque par défautPlage privée (RFC 1918)
A1 – 126/810.0.0.0/8
B128 – 191/16172.16.0.0/12 (172.16 → 172.31)
C192 – 223/24192.168.0.0/16
D224 – 239-multicast
E240 – 255-réservée

Les classes sont obsolètes depuis le CIDR (1993). Le masque est libre. En exam, on te demande souvent la classe « historique » : regarde juste le 1er octet.

6. Adresses spéciales

Adresse / plageRôle
127.0.0.0/8 (souvent 127.0.0.1)Loopback : la machine elle-même
169.254.0.0/16APIPA : le PC n’a pas eu de réponse DHCP → s’auto-attribue une IP (symptôme de panne !)
0.0.0.0« Toutes les adresses » (écoute) ou « route par défaut » (0.0.0.0/0)
255.255.255.255Broadcast limité au réseau local
100.64.0.0/10CGNAT (opérateurs, et IP Tailscale 100.x.y.z)
192.0.2.0/24, 198.51.100.0/24, 203.0.113.0/24Réservées à la documentation (exemples)

7. Exercices corrigés

Ex. 1 - 10.20.30.40/12 : réseau, broadcast, hôtes ?

Ex. 2 - Deux PC : 192.168.5.70/26 et 192.168.5.130/26. Peuvent-ils se joindre sans routeur ?

Ex. 3 - Quel masque le plus petit pour 500 hôtes ?

Ex. 4 - Un PC affiche 169.254.12.7. Que se passe-t-il ?

Script associé

Fichier : scripts/reseaux/calcul_ip.py - usage : python3 calcul_ip.py 192.168.1.200/26. Il affiche réseau, broadcast, plage, nombre d’hôtes, masque inverse et l’écriture binaire.

Voir aussi