Adressage IP
ESIL 1ère année
Alexandra Bac - Nicolas Baudru
2006-2007
Rappel
Une adresse IP est codée sur 4 octets écrits en notation décimale pointée (ex. 139.124.6.5). Ces 4 octets
sont divisés en une partie adresse réseau (du coté des poids forts) et une partie adresse hôte (du coté des
poids faibles). La limite de ce découpage définit 5 classes d’adresses :
Les bits définissant la classe font partie des adresses de réseaux. Les adresses dont les bits de l’un des
champs Adr. Réseau ci-dessus sont tous à 0 ou tous à 1 ne sont pas attribuables car réservées pour des
utilisations particulières. De plus, pour les adresses réseaux attribuables, les adresses dont les bits du champ
Idt. Station sont tous à 0 ou tous à 1 sont elles aussi réservées. Si Idt. Station a ses bits à 0, alors c’est le
réseau lui-même qui est désigné par cette adresse.
Les adresses de classe D ou E ne sont pas non plus attribuables. La classe D est utilisable pour la
multidiffusion alors que les adresses de classe E ne sont même pas reconnues dans Internet.
Exercice 1. Combien de réseaux et combien de stations par réseau peut-on adresser dans les classes A, B
et C ?
Exercice 2. Déterminez la classe, l’adresse du réseau, l’identifiant de la station puis la notation décimale
pointée des adresses suivantes :
1. 1 0 0 1 0 0 1 1 1 1 0 1 1 0 0 0 0 1 1 0 0 1 1 1 1 0 1 1 1 1 1 0
2. 0 1 1 0 1 1 0 0 1 0 1 0 0 1 0 0 1 0 0 1 0 1 0 1 1 1 0 0 0 1 0 1
3. 1 1 0 1 0 1 1 0 0 1 0 1 1 1 0 0 1 0 1 1 0 1 0 0 1 1 0 1 0 0 0 1
4. 1 1 1 0 0 0 0 0 1 0 0 0 0 0 0 1 1 0 1 0 0 0 1 0 0 1 0 1 0 0 0 1
Exercice 3. Le premier octet, comme tout octet, peut valoir de 0 à 255. La classe étant codée en tête
de celui-ci, on peut calculer pour chaque classe, un intervalle inclus dans [0, 255] dont la borne inférieure
1
(resp. supérieure) est la valeur du premier octet de la plus petite (resp. grande) adresse de cette classe. Les
intervalles obtenus permettent de reconnaı̂tre facilement la classe d’une adresse IP d’après cet octet. Calculez
ces intervalles.
Exercice 4. Ecrire la fonction C de prototype :
unsigned long int dp2int(const char * chaine);
qui prend en paramètre une chaı̂ne de caractères contenant une adresse IP en notation décimale pointée et
qui renvoie l’entier non signé correspondant à cette adresse.
Conseil : les points délimitant les octets, extraire les caractères numériques jusqu’au point en le trans-
formant en nombre puis, si c’est le premier octet il faut le multiplier par 224 , par 216 pour le second et 28
pour le troisième.
Exemple : la chaı̂ne ”214.5.25.150” peut être transformée en : ((214 ∗ 28 + 5) ∗ 28 + 25) ∗ 28 + 150, où 214
est obtenu par ((2 * 10) + 1) * 10 + 4 Puis écrivez un programme qui demande une adresse ip en notation
décimale pointée et qui écrit l’entier correspondant à cette adresse.
Exercice 5. En fait, il existe une fonction dans la bibliothèque C qui effectue cette opération. C’est la
fonction de prototype :
unsigned long int inet_addr(const char *cp);
Pour utiliser cette fonction, incluez les lignes suivantes en tête de votre programme :
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
Rajoutez à votre programme l’écriture de ce que renvoie cette fonction. Comparez avec ce que votre
fonction renvoie.
Exercice 6. Si les valeurs écrites sont différentes, c’est parce que la machine sur laquelle le programme a été
exécuté ne code pas les valeurs numériques de la même manière qu’IP le nécessite. Un PC par exemple, code
ses nombres dans l’ordre ”petit-bout” (Little Endian), c’est à dire que l’adresse d’une donnée correspond à
l’octet de poids faible du nombre. IP nécessite le codage ”gros-bout” (Big Endian) où l’adresse d’une donnée
désigne l’octet de poids fort du nombre. En réseau, le codage gros-bout est appelé le codage en format réseau
(ou en ordre réseau).
Machines petit-boutistes
Adresse poids faible poids fort
0 : <-- octet --><-- octet --><-- octet --><-- octet -->
4 : <-- octet --><-- octet --><-- octet --><-- octet -->
8 : <-- octet --><-- octet --><-- octet --><-- octet -->
... :
Machines gros-boutistes
Adresse poids fort poids faible
0 : <-- octet --><-- octet --><-- octet --><-- octet -->
4 : <-- octet --><-- octet --><-- octet --><-- octet -->
8 : <-- octet --><-- octet --><-- octet --><-- octet -->
... :
Ainsi, les entiers sont codés de telle manière qu’à l’octet de poids fort du format IP correspond l’octet
de poids faible du PC et que l’octet de poids faible du format IP correspond à l’octet de poids fort du PC.
2
poids faible poids fort
<--------------- entier sur 32 bits --------------->
<-- octet --><-- octet --><-- octet --><-- octet -->
PC : A B C D
IP : D C B A
Combien de réseaux au sens IP dénombrez-vous ? De quels types de réseaux s’agit-il (LAN, MAN, WAN) ?
Proposez un plan d’adressage en utilisant pour l’ensemble de ce réseau une adresse de classe B (expliquez
brièvement vos choix et donnez bien toutes les adresses et informations nécessaires).