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 bits | 128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
|---|---|---|---|---|---|---|---|---|
| 192 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 |
| 168 | 1 | 0 | 1 | 0 | 1 | 0 | 0 | 0 |
| 10 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 0 |
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’octet | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
|---|---|---|---|---|---|---|---|---|---|
| Valeur | 0 | 128 | 192 | 224 | 240 | 248 | 252 | 254 | 255 |
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
| CIDR | Masque | Bits hôte | Adresses | Hôtes utilisables |
|---|---|---|---|---|
| /8 | 255.0.0.0 | 24 | 16 777 216 | 16 777 214 |
| /16 | 255.255.0.0 | 16 | 65 536 | 65 534 |
| /20 | 255.255.240.0 | 12 | 4 096 | 4 094 |
| /22 | 255.255.252.0 | 10 | 1 024 | 1 022 |
| /23 | 255.255.254.0 | 9 | 512 | 510 |
| /24 | 255.255.255.0 | 8 | 256 | 254 |
| /25 | 255.255.255.128 | 7 | 128 | 126 |
| /26 | 255.255.255.192 | 6 | 64 | 62 |
| /27 | 255.255.255.224 | 5 | 32 | 30 |
| /28 | 255.255.255.240 | 4 | 16 | 14 |
| /29 | 255.255.255.248 | 3 | 8 | 6 |
| /30 | 255.255.255.252 | 2 | 4 | 2 |
| /32 | 255.255.255.255 | 0 | 1 | 1 (une seule machine, ex. loopback de routeur) |
5. Les classes (système historique)
| Classe | 1er octet | Masque par défaut | Plage privée (RFC 1918) |
|---|---|---|---|
| A | 1 – 126 | /8 | 10.0.0.0/8 |
| B | 128 – 191 | /16 | 172.16.0.0/12 (172.16 → 172.31) |
| C | 192 – 223 | /24 | 192.168.0.0/16 |
| D | 224 – 239 | - | multicast |
| E | 240 – 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 / plage | Rôle |
|---|---|
127.0.0.0/8 (souvent 127.0.0.1) | Loopback : la machine elle-même |
169.254.0.0/16 | APIPA : 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.255 | Broadcast limité au réseau local |
100.64.0.0/10 | CGNAT (opérateurs, et IP Tailscale 100.x.y.z) |
192.0.2.0/24, 198.51.100.0/24, 203.0.113.0/24 | Réservées à la documentation (exemples) |
7. Exercices corrigés
Ex. 1 - 10.20.30.40/12 : réseau, broadcast, hôtes ?
Correction
/12 → 2e octet intéressant, masque 240, magique 16. 20 est dans le bloc 16 → réseau 10.16.0.0, broadcast 10.31.255.255, hôtes 2^20 − 2 = 1 048 574.
Ex. 2 - Deux PC : 192.168.5.70/26 et 192.168.5.130/26. Peuvent-ils se joindre sans routeur ?
Correction
Magique 64 → blocs 0, 64, 128, 192. .70 ∈ réseau .64, .130 ∈ réseau .128. Réseaux différents → il faut un routeur.
Ex. 3 - Quel masque le plus petit pour 500 hôtes ?
Correction
2^9 − 2 = 510 ≥ 500 → 9 bits hôte → /23 (255.255.254.0).
Ex. 4 - Un PC affiche 169.254.12.7. Que se passe-t-il ?
Correction
Adresse APIPA : le PC est en DHCP mais aucun serveur DHCP n’a répondu (câble, VLAN du port, serveur arrêté, relais DHCP absent).
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.