Page prec.      Fin page      Page suiv.

Adresse Internet ou adresse IP

    Une adresse Internet est un moyen unique de désigner une machine hôte dans le monde. C'est un entier de 32 bits qui contient plusieurs informations. Elle n'est pas liée au matériel : un ordinateur hôte peut avoir plusieurs adresses IP, il peut être physiquement remplacé par un autre ordinateur que la même adresse IP désignera. L'adresse IP encode à la fois la machine hôte (désignée plus loin par hostid) et le réseau auquel elle est rattachée (désigné plus loin par netid). L'adresse IP d'une machine peut avoir une des trois formes suivantes A, B ou C :

    Chacune de ces classes est choisie en fonction de l'importance du réseau : un réseau pouvant comporter de très nombreuses machines sera choisi de classe A, au contraire un réseau avec peu de machines sera de classe C.

    Les 3 premiers bits permettent de savoir immédiatement à quelle classe appartient une adresse IP. Il est alors très facile et très rapide d'isoler les deux parties de l'adresse. Les routeurs en particulier n'utilisent que la partie réseau de l'adresse.

    Rappelons qu'une machine peut avoir plusieurs adresses IP : une adresse IP ne correspond pas à une machine mais à une connexion sur un réseau : un routeur qui connecte n réseaux a n adresses IP.

Notation pointée

    Les adresses IP sont conventionnellement écrites de façon lisible sous la forme de 4 entiers en notation décimale, séparés par un point décimal '.', exprimant les valeurs des quatre octets de la gauche vers la droite.

    Le tableau ci-dessous indique les limites des adresses IP valides suivant les classes.

    Toutes ces adresses sont valides, elles ne désignent cependant pas toutes une machine, certaines sont interprétées de façon particulière. Certaines valeurs qui ne figurent pas dans le tableau ne correspondent pas à des adresses IP valides.

Adresse de réseau

    Conventionnellement, la valeur 0 n'est jamais donnée au champ hostid. Cette valeur ne peut donc désigner une machine particulière. Au contraire, lorsque le champ hostid d'une adresse IP est nul, l'adresse désigne le réseau lui-même.

Adresse de diffusion dirigée (directed broadcast)

    La valeur de hostid uniquement formée de 1 ne peut non plus, par convention, désigner une machine particulière. Au contraire, elle est réservée au mécanisme dit de diffusion (broadcast). Lorsqu'une trame a pour valeur de hostid l'adresse de diffusion formée de 1, cette trame est destinée à toutes les machines du réseau indiqué dans la partie netid. Il est ainsi possible d'envoyer un seul paquet à un ensemble de machines qui peuvent être très éloignées. Cela ne signifie cependant pas que toutes les machines la reçoivent : le mécanisme de diffusion peut dépendre des supports logiciel et matériel du réseau.

Diffusion limitée (limited broadcast)

    Lorsqu'une adresse IP est exclusivement remplie de 32 bits à 1, la diffusion est limitée au réseau sur lequel est émis le paquet qui la contient. Il n'est donc pas nécessaire de connaître l'adresse du réseau destinataire, si c'est le réseau local. Cette technique est particulièrement utile lorsqu'une machine démarre, avant qu'elle ne connaisse sa propre adresse IP et celle de son réseau (voir protocole ARP).

    Elle émet une trame d'interrogation ayant cette adresse de diffusion limitée. Il est en général conseillé de réduire la diffusion (dirigée ou limitée) aux cas où elle est indispensable.

"Auto"référence (this)

    Une adresse nulle peut être considérée comme une auto-référence : une valeur nulle de hostid désigne "cette" machine, une valeur nulle de netid désigne "ce" réseau. Ainsi toute machine qui reçoit un paquet ayant :

se considère comme destinataire. C'est cette adresse qui est utilisée par la diffusion dirigée. De même un réseau recevant un paquet d'adresse netid nulle se considère comme destinataire du paquet.

Adresse "loopback"

    La valeur 127.0.0.1 est réservée à une utilisation particulière : lorsqu'un programme envoie un paquet à cette adresse, le logiciel qui gère localement les transferts conserve le paquet sur cette machine, sans le déposer sur le réseau. Ce mécanisme est utilisé pour tester localement une application. En principe, aucun paquet ayant cette adresse ne peut donc circuler sur le réseau.

    L'adresse 127.0.0.1 est parfois écrite 127/8 pour indiquer que seuls les 8 premiers bits sont "significatifs".

Inconvénients de l'adressage Internet

    Comme nous l'avons vu, une machine peut avoir plusieurs adresses Internet, car connectée à plusieurs réseaux différents. Il existe donc plusieurs façons d'atteindre la même machine à partir d'une autre selon l'adresse utilisée, donc selon le réseau par lequel l'information va transiter (utilisation de netid pour "router" les informations). Cela peut parfois poser des problèmes.

    Lorsque le nombre de machines attachées à un réseau croît, il peut être amené à changer de classe (passage de la classe C à la classe B ou de la classe B à la classe A). Cette transition est difficile car toutes les adresses IP de toutes les machines connectées sur ce réseau doivent être modifiées, ainsi que les fichiers et programmes comportant de telles adresses, tant localement qu'à l'extérieur.

    Une adresse IP n'est pas liée à une machine, mais à une connexion. Si une machine est déplacée et connectée sur un autre réseau, elle doit être reconfigurée (problème des ordinateurs portables).

    Au maximum, sans tenir compte des adresses interdites (adresses pour broadcast par exemple), le nombre total d'adresses possibles est d'environ 4 milliards d'adresses (2564). En fait, malgré cette capacité qui paraissait immense à la création d'Internet, l'adressage est presque saturé, par exemple en ce qui concerne le nombre possible de réseaux de la classe B. C'est la raison pour laquelle la nouvelle version de IP (IPv6) prévoit des adresses de 128 bits.

    L'augmentation du nombre des réseaux implique :

    De plus, elle entraîne, sur le réseau, l'augmentation importante du trafic d'échange d'informations entre les routeurs.

Sous-réseau

    Une des raisons de la saturation du nombre d'adresses est l'important gaspillage dû à ce que la plupart des réseaux, par exemple de classe B, ne sont pas saturés, mais les adresses libres sont inutilisables sur les autres réseaux. Une solution consiste à utiliser des sous-réseaux. Au préalable rappelons que :     Considérons un réseau de la classe B relié par un routeur R1 à l'Internet. Les adresses IP de toutes les machines commencent donc toutes par les bits 10 et seuls les deux premiers octets de l'adresse sont gérés par les routeurs, en tant qu'adresse du réseau. A l'intérieur, rien n'empêche de subdiviser le champ "adresse machine" en deux champs : un numéro de sous-réseau, occupant par exemple les trois bits de fort poids, et l'adresse machine sur 13 bits. Cette organisation permettrait de gérer 8 sous-réseaux par l'intermédiaire de 8 routeurs R1,1, ..., R1,8, de 8192 machines chacun. A l'intérieur du réseau, les adresses IP doivent être gérées par toutes les machines de la même façon, en utilisant un masque de sous-réseau (subnet mask) qui, dans l'exemple ci-dessus, aurait la forme suivante :

11111111 11111111 11100000 00000000

    Rien n'empêche qu'un sous-réseau soit à son tour décomposé en plusieurs sous-réseaux.

Ordre "réseau" des octets

    Selon les machines (et éventuellement les programmes), les valeurs numériques entières sont stockées de façon différente dans les différents octets consécutifs : certains placent les bits de poids faible dans les adresses faibles (convention little-endian), d'autres font le contraire (convention big-endian), comme le montre la figure ci-dessous :


Ordres little-endian et big-endian

    Le transfert sans précaution d'entiers (sur 2 ou 4 octets) d'une machine à une autre, par simple transfert d'octets voisins provoquerait des erreurs d'interprétation. Tout système doit donc fournir des fonctions standard de conversion de l'ordre dit ordre host à l'ordre dit ordre network : ntohs() ou htons() pour les entiers sur 2 octets (les numéros de port) et ntohl() ou htonl() pour les entiers sur 4 octets (adresses IP). Dans les "temps anciens", les entiers courts étaient codés sur 2 octets, les entiers longs l'étaient sur 4 octets, d'où les noms : network to host short, network to host long, etc.

    Il faut veiller de plus aux spécifications des fonctions et des structures qui manipulent ou renvoient des entiers déjà dans l'ordre réseau et qu'il ne faut pas convertir deux fois!

    L'ordre "réseau" est, par convention l'ordre big-endian. Cependant, il n'est pas nécessaire de s'en préoccuper pour faire ou non la conversion selon que sa machine n'a pas ou a la même représentation interne. Il suffit d'appeler systématiquement les fonctions de conversion, qui n'ont peut-être aucun effet. La portabilité sera ainsi conservée.

    L'ordre des octets peut être retrouvé sous Linux, grâce aux deux fichiers <endian.h> et <bits/endian.h> :

- fichier <endian.h> :
 
#define __LITTLE_ENDIAN 1234
#define __BIG_ENDIAN    4321
#define __PDP_ENDIAN    3412

/* This file defines `__BYTE_ORDER' for the particular machine.  */
#include <bits/endian.h>
...


- fichier <bits/endian.h> :
 
/* i386 is little-endian.  */

#ifndef _ENDIAN_H
# error "Never use <bits/endian.h> directly; include <endian.h> instead."
#endif

#define __BYTE_ORDER __LITTLE_ENDIAN

Page prec.      Début page      Page suiv.