---
title: "Subnetting IPv4 — CIDR & VLSM"
domain: network
subdomain: addressing
type: snippet
tags: [ipv4, subnetting, cidr, vlsm, mask, broadcast, network-design]
difficulty: intermediate
status: stable
updated: "2025-05-14"
---
## Rappel binaire

```text
Octet = 8 bits — valeurs de position : 128 | 64 | 32 | 16 | 8 | 4 | 2 | 1

Conversion décimale → binaire rapide (méthode soustractive) :
  192 → 128+64        = 11000000
  172 → 128+32+8+4    = 10101100
  255 → tous à 1      = 11111111
  0   → tous à 0      = 00000000

Conversion binaire → décimale : additionner les positions à 1
  11000000 = 128+64 = 192
  00011010 = 16+8+2 = 26
```

## Structure d'une adresse IPv4

```text
32 bits = 4 octets séparés par des points

  Adresse IP :  192  .  168  .  10  .  45
  Binaire    :  11000000.10101000.00001010.00101101

Avec /26 (masque = 255.255.255.192) :
  Partie réseau  : les 26 premiers bits  (fixes)
  Partie hôte    : les 6  derniers bits  (variables)
  11000000.10101000.00001010.00 | 101101
                                ^--- limite réseau/hôte
```

## Notation CIDR et formules

```text
Notation CIDR : adresse/longueur_préfixe
  /24 → masque 255.255.255.0   → 8 bits hôte
  /26 → masque 255.255.255.192 → 6 bits hôte

Formules :
  Nb hôtes utilisables = 2^(32 - préfixe) - 2
    /24 → 2^8  - 2 = 254 hôtes
    /26 → 2^6  - 2 = 62  hôtes
    /30 → 2^2  - 2 = 2   hôtes (liens P2P)

  Nb sous-réseaux dans un bloc parent :
    Bits empruntés = nouveau_préfixe - préfixe_parent
    Nb sous-réseaux = 2^(bits_empruntés)
```

## Table des masques courants /8 à /30

| Préfixe | Masque décimal      | Wildcard       | Nb hôtes    | Incrément |
|---------|---------------------|----------------|-------------|-----------|
| /8      | 255.0.0.0           | 0.255.255.255  | 16 777 214  | 256 (3e)  |
| /16     | 255.255.0.0         | 0.0.255.255    | 65 534      | 256 (3e)  |
| /17     | 255.255.128.0       | 0.0.127.255    | 32 766      | 128       |
| /18     | 255.255.192.0       | 0.0.63.255     | 16 382      | 64        |
| /19     | 255.255.224.0       | 0.0.31.255     | 8 190       | 32        |
| /20     | 255.255.240.0       | 0.0.15.255     | 4 094       | 16        |
| /21     | 255.255.248.0       | 0.0.7.255      | 2 046       | 8         |
| /22     | 255.255.252.0       | 0.0.3.255      | 1 022       | 4         |
| /23     | 255.255.254.0       | 0.0.1.255      | 510         | 2         |
| /24     | 255.255.255.0       | 0.0.0.255      | 254         | 1         |
| /25     | 255.255.255.128     | 0.0.0.127      | 126         | 128       |
| /26     | 255.255.255.192     | 0.0.0.63       | 62          | 64        |
| /27     | 255.255.255.224     | 0.0.0.31       | 30          | 32        |
| /28     | 255.255.255.240     | 0.0.0.15       | 14          | 16        |
| /29     | 255.255.255.248     | 0.0.0.7        | 6           | 8         |
| /30     | 255.255.255.252     | 0.0.0.3        | 2           | 4         |

## Calcul rapide d'un sous-réseau

```text
Méthode :
  1. Réseau    = IP AND masque           (bits hôtes à 0)
  2. Broadcast = réseau OR (NOT masque)  (bits hôtes à 1)
  3. Premier hôte = réseau + 1
  4. Dernier hôte = broadcast - 1
```

### Exemple 1 : 192.168.10.45/26

```text
Masque /26 = 255.255.255.192   incrément = 64

Trouver le bloc : 45 ÷ 64 = 0 reste 45 → dans le bloc 0–63

Réseau     : 192.168.10.0
Broadcast  : 192.168.10.63
Premier    : 192.168.10.1
Dernier    : 192.168.10.62
Nb hôtes   : 62

Les 4 blocs /26 dans un /24 :
  192.168.10.0   – 192.168.10.63    (.0   + 64 - 1)
  192.168.10.64  – 192.168.10.127   (.64  + 64 - 1)
  192.168.10.128 – 192.168.10.191   (.128 + 64 - 1)
  192.168.10.192 – 192.168.10.255   (.192 + 64 - 1)
```

### Exemple 2 : 172.16.0.130/19

```text
Masque /19 = 255.255.224.0   incrément = 32 (3e octet)

Trouver le bloc sur le 3e octet : 0 ÷ 32 = bloc 0–31

Réseau     : 172.16.0.0
Broadcast  : 172.16.31.255
Premier    : 172.16.0.1
Dernier    : 172.16.31.254
Nb hôtes   : 8190

Blocs /19 dans 172.16.0.0/16 :
  172.16.0.0   – 172.16.31.255
  172.16.32.0  – 172.16.63.255
  172.16.64.0  – 172.16.95.255
  ...
  172.16.224.0 – 172.16.255.255   (8 sous-réseaux /19 au total)
```

## VLSM — Variable Length Subnet Mask

```text
Principe : allouer le masque le plus petit qui couvre les hôtes requis,
           en partant du plus grand besoin vers le plus petit.

Règle : toujours prendre 2^n - 2 ≥ nb_hôtes_requis (n = bits hôte)
  50 hôtes → 2^6 - 2 = 62 → /26
  25 hôtes → 2^5 - 2 = 30 → /27
  10 hôtes → 2^4 - 2 = 14 → /28
   2 hôtes → 2^2 - 2 =  2 → /30 (lien point-à-point)
```

### Découpage d'un 192.168.1.0/24 en VLSM

| Sous-réseau         | Préfixe | Masque              | Premier hôte    | Dernier hôte    | Broadcast       | Nb hôtes |
|---------------------|---------|---------------------|-----------------|-----------------|-----------------|----------|
| 192.168.1.0         | /26     | 255.255.255.192     | 192.168.1.1     | 192.168.1.62    | 192.168.1.63    | 62       |
| 192.168.1.64        | /27     | 255.255.255.224     | 192.168.1.65    | 192.168.1.94    | 192.168.1.95    | 30       |
| 192.168.1.96        | /28     | 255.255.255.240     | 192.168.1.97    | 192.168.1.110   | 192.168.1.111   | 14       |
| 192.168.1.112       | /30     | 255.255.255.252     | 192.168.1.113   | 192.168.1.114   | 192.168.1.115   | 2        |
| 192.168.1.116–255   | —       | —                   | —               | —               | —               | réserve  |

## Supernetting / Agrégation de routes (CIDR)

```text
Regrouper plusieurs réseaux contigus en un seul préfixe plus court.

Conditions :
  1. Réseaux contigus (adresses consécutives)
  2. Nombre de réseaux = puissance de 2 (2, 4, 8…)
  3. Premier réseau aligné sur un multiple du bloc agrégé

Exemple :
  192.168.0.0/24  →  11000000.10101000.00000000.xxxxxxxx
  192.168.1.0/24  →  11000000.10101000.00000001.xxxxxxxx
                                              ^--- bit qui diffère = 1 bit supplémentaire
  Agrégat : 192.168.0.0/23  (masque 255.255.254.0)

Exemple avec 4 réseaux :
  192.168.0.0/24, 192.168.1.0/24, 192.168.2.0/24, 192.168.3.0/24
  → 192.168.0.0/22  (masque 255.255.252.0)

Vérification : l'adresse de début doit être divisible par la taille du bloc
  192.168.0.0 / 2 réseaux /24 = position 0 → ok (0 est pair)
  192.168.4.0 + 192.168.5.0 → agrégat 192.168.4.0/23 → ok (4 est pair)
  192.168.3.0 + 192.168.4.0 → NON agrégeable (3 est impair)
```

## Cas particuliers

```text
/31 — Liens point-à-point (RFC 3021) :
  2 adresses, pas d'adresse réseau ni broadcast
  Ex: 10.0.0.0/31 → hôtes 10.0.0.0 et 10.0.0.1
  Cisco : ip address 10.0.0.0 255.255.255.254

/32 — Route hôte / loopback :
  Une seule adresse — identifie un nœud unique
  Ex: interface Loopback0 → ip address 1.1.1.1 255.255.255.255
  Utilisé en BGP (next-hop loopback), OSPF router-id, routes statiques hôte
```

<Tip>
Pour trouver l'incrément d'un masque en moins de 2 secondes : soustraire le dernier octet non-255 de 256.
- /26 → dernier octet non-255 = 192 → 256 - 192 = **64** → blocs .0, .64, .128, .192
- /27 → 256 - 224 = **32** → blocs .0, .32, .64, .96…
- /28 → 256 - 240 = **16** → blocs .0, .16, .32, .48…
- /19 → 256 - 224 = **32** → sur le 3e octet
</Tip>
