Un sous-réseau est une subdivision logique d'un réseau de taille plus importante. Le masque de sous-réseau permet de distinguer la partie de l'adresse utilisée pour le routage et celle utilisable pour numéroter des interfaces. Un sous-réseau correspond typiquement à un réseau local sous-jacent.
Historiquement, on appelle également sous-réseau chacun des réseaux connecté à Internet.
La subdivision d'un réseau en sous-réseaux permet de limiter la propagation des broadcast, ceux-ci restant limités au réseau local et leur gestion étant coûteuse en bande passante et en ressource au niveau des commutateurs réseau. Les routeurs sont utilisés pour la communication entre les machines appartenant à des sous-réseaux différents.
Les adresses IPv4 sont composées de deux parties : le sous-réseau et l'hôte.
On considérait autrefois que l'adresse du réseau était définie par sa classe, et obtenue en appliquant l'opérateur booléen ET bit à bit entre le masque par défaut associé et l'adresse IPv4. La notion de classe est cependant considérée comme désuète depuis l'avènement du routage sans classe. Ni les protocoles de routages actuels (BGP, OSPF, IS-IS), ni les RIR n'en tiennent plus compte dans l'assignation des adresses IP publiques.
Un masque de sous-réseau (désigné par subnet mask, netmask ou address mask en anglais) est un masque indiquant le nombre de bits d'une adresse IPv4 utilisés pour identifier le sous-réseau, et le nombre de bits caractérisant les hôtes (ce qui indique aussi le nombre d'hôtes possibles dans ce sous-réseau).
L'adresse du sous-réseau est obtenue en appliquant l'opérateur ET binaire entre l'adresse IPv4 et le masque de sous-réseau. L'adresse de l'hôte à l'intérieur du sous-réseau est quant à elle obtenue en appliquant l'opérateur ET entre l'adresse IPv4 et le complément à un du masque
Les masques de sous-réseau utilisent la même représentation que celles des adresses IPv4. En IPv4, une adresse IP est codée sur 4 octets, soit 32 bits (représentés en notation décimale à point). Un masque de sous-réseau possède lui aussi 4 octets. Bien que la norme IPv4 n'interdise pas que la partie significative du masque contienne des bits à 0, on utilise en pratique des masques constitués (sous leur forme binaire) d'une suite de 1 suivis d'une suite de 0, il y a donc 32 masques réseau possibles.
192.168.1.2 & 255.255.255.0 = 192.168.1.0 192.168.1.2 & 0.0.0.255 = 0.0.0.2
soit en binaire :
11000000.10101000.00000001.00000010 11000000.10101000.00000001.00000010 & 11111111.11111111.11111111.00000000 & 00000000.00000000.00000000.11111111 = 11000000.10101000.00000001.00000000 = 00000000.00000000.00000000.00000010
Autrement dit, il suffit pour obtenir l'adresse du sous-réseau de conserver les bits de l'adresse IPv4 là où les bits du masque sont à 1 (un certain nombre de bits en partant de la gauche de l'adresse). La partie numéro d'hôte est, elle, contenue dans les bits qui restent (les plus à droite).
Une forme plus courte est connue sous le nom de « notation CIDR » (Classless Inter-Domain Routing). Elle donne le numéro du réseau suivi par une barre oblique (ou slash, « / ») et le nombre de bits à 1 dans la notation binaire du masque de sous-réseau. Le masque 255.255.224.0, équivalent en binaire à 11111111.11111111.11100000.00000000, sera donc représenté par /19 (19 bits à la valeur 1, suivis de 13 bits 0).
La notation 91.198.174.2/19 désigne donc l'adresse IP 91.198.174.2 avec le masque 255.255.224.0, et signifie que les 19 premiers bits de l'adresse sont dédiés à l'adresse du sous-réseau, et le reste à l'adresse de l'ordinateur hôte à l'intérieur du sous-réseau.
Deux adresses IP appartiennent à un même sous-réseau si elles ont en commun les bits du masque de sous-réseau.
À partir de la connaissance de l'adresse IPv4 et du il est possible de calculer le nombre d'interfaces que l'on peut numéroter à l'intérieur d'un sous-réseau. Le nombre de sous-réseaux possibles est donné par 2r-n, où n représente le nombre de bits à 1 dans le masque réseau et r le nombre de bits du masque de sous-réseau. Le nombre d'hôtes est 232-n-2, deux adresses de ce sous-réseau étant réservées au sous-réseau lui-même et au broadcast et ne peuvent pas être utilisées pour numéroter une interface.
/32 désigne un réseau qui ne comporte qu'une seule adresse IP, c'est-à-dire une adresse IP individuelle.
Le masque /31 était autrefois considéré comme inutilisable, car ce réseau comporte que deux adresses, dont l'adresse du sous-réseau et l'adresse de broadcast. Pour numéroter des adresses de liens point à point, on utilisait donc des /30, soit quatre adresses dont deux utilisables pour adresser des interfaces. Le RFC 3021 permet cependant d'utiliser plus efficacement l'espace d'adressage en permettant le /31 (il n'y a dans ce cas pas d'adresse de broadcast et l'adresse du sous-réseau est utilisée pour numéroter une interface).
CIDR | bits disponibles | Masque de sous-réseau | Nombre d'hôtes par sous-réseau |
---|---|---|---|
/1 | 31 | 128.0.0.0 | 231-2 = 2147483646 |
/2 | 30 | 192.0.0.0 | 230-2 = 1073741822 |
/3 | 29 | 224.0.0.0 | 229-2 = 536870910 |
/4 | 28 | 240.0.0.0 | 228-2 = 268435454 |
/5 | 27 | 248.0.0.0 | 227-2 = 134217726 |
/6 | 26 | 252.0.0.0 | 226-2 = 67108862 |
/7 | 25 | 254.0.0.0 | 225-2 = 33554430 |
/8 | 24 | 255.0.0.0 | 224-2 = 16777214 |
/9 | 23 | 255.128.0.0 | 223-2 = 8388606 |
/10 | 22 | 255.192.0.0 | 222-2 = 4194302 |
/11 | 21 | 255.224.0.0 | 221-2 = 2097150 |
/12 | 20 | 255.240.0.0 | 220-2 = 1048574 |
/13 | 19 | 255.248.0.0 | 219-2 = 524286 |
/14 | 18 | 255.252.0.0 | 218-2 = 262142 |
/15 | 17 | 255.254.0.0 | 217-2 = 131070 |
/16 | 16 | 255.255.0.0 | 216-2 = 65534 |
/17 | 15 | 255.255.128.0 | 215-2 = 32766 |
/18 | 14 | 255.255.192.0 | 214-2 = 16382 |
/19 | 13 | 255.255.224.0 | 213-2 = 8190 |
/20 | 12 | 255.255.240.0 | 212-2 = 4094 |
/21 | 11 | 255.255.248.0 | 211-2 = 2046 |
/22 | 10 | 255.255.252.0 | 210-2 = 1022 |
/23 | 9 | 255.255.254.0 | 29-2 = 510 |
/24 | 8 | 255.255.255.0 | 28-2 = 254 |
/25 | 7 | 255.255.255.128 | 27-2 = 126 |
/26 | 6 | 255.255.255.192 | 26-2 = 62 |
/27 | 5 | 255.255.255.224 | 25-2 = 30 |
/28 | 4 | 255.255.255.240 | 24-2 = 14 |
/29 | 3 | 255.255.255.248 | 23-2 = 6 |
/30 | 2 | 255.255.255.252 | 22-2 = 2 |
/31 | 1 | 255.255.255.254 | 21 |
/32 | 0 | 255.255.255.255 | 20 |