Introduction aux réseaux IP Vincent Defert - 28 Nov. 1998

Introduction

Un réseau est un ensemble de dispositifs matériels et logiciels permettant à 2 machines ou plus de communiquer. Pour mettre en évidence les concepts importants, on peut utiliser l'analogie avec la vie quotidienne:

Imaginez que vous (M. Dupond) ayez un client (M. Schmidt) au téléphone. Celui-ci vous soumet un problème délicat: vous attirez l'attention de votre collègue (M. Jones) et lui griffonez quelques mots sur un bout de papier. M. Jones réfléchit un instant et vous griffonne sa réponse.

MM. Dupond, Schmidt et Jones représentent les machines connectées. Ces personnes sont reliées par 2 réseaux ("Liaison téléphonique" et "Liaison visuelle") auquels ils sont reliés par 2 types d'interfaces ("Combiné téléphonique" et "Papier + Crayon"). M. Dupond, qui possède les 2 types d'interfaces, permet d'établir une communication entre M. Schmidt et M. Jones: il sert de passerelle entre les 2 réseaux. Enfin, chaque personne parle pendant un temps puis attend une réponse de son interlocuteur: ils communiquent en échangeant des paquets d'informations.

A la lumière de cet exemple, on peut donc formuler ainsi les définitions des mots importants:

Réseau

Support permettant les échanges. Ce terme générique peut aussi bien désigner un câble coaxial reliant 2 machines qu'une ligne spécialisée (dont l'autre extrémité est reliée à une installation complexe, mais qui est vue comme un support ordinaire du point de vue d'une interface).

Le terme de réseau désigne aussi la totalité de l'installation (machines, interfaces et câblage). Le contexte permet de distinguer facilement le sens dans lequel il doit être compris.

Interface

Dispositif assurant la connexion de la machine à un réseau. Les interfaces utilisées avec les réseaux informatiques sont les cartes réseaux, les modems et les ports parallèles.
Routeur

Machine assurant l'interconnexion de plusieurs réseaux. On parle aussi de passerelle (en anglais: "router" et "gateway"). Il peut s'agit d'une machine du réseau dans laquelle on a installé plusieurs interfaces, ou d'un appareil spécialisé n'assurant que cette fonction.
Paquet

Unité de transport d'information.
Protocole

Ensemble de règles régissant les échanges d'informations.
Adresse

Identification des éléments intervenant dans la communication (interfaces et réseaux). L'analogie postale est particulièrement bonne: le nom de la rue correspond à l'adresse de réseau et le numéro de la maison à l'adresse de l'interface.

Réseaux IP

Les réseaux IP sont caractérisés par leur indépendance par rapport au matériel et par la possibilité d'établir une communication entre 2 machines situées des réseaux différents (on dit que c'est un protocole "routable"). Ces avantages découlent du mode d'adressage choisi: on affecte à chaque interface une adresse logique découlant de l'adresse du réseau auquel elle est connectée.

On fait ainsi d'une pierre 2 coups: puisqu'il s'agit d'une adresse logique, on peut facilement faire évoluer le matériel (il suffit de donner à la nouvelle machine l'adresse de l'ancienne), et puisqu'elle découle de l'adresse du réseau auquelle elle est reliée, il est facile de détecter si la machine à laquelle on veut envoyer des données est sur le même réseau ou non (auquel cas on doit passer par un routeur).

Prennons un exemple simple:

Réseau local isolé

host1 et host2 sont les noms des machines, eth0 le nom des interfaces, et mynet le nom du réseau (on peut aussi l'appeler "mon petit réseau local", ça n'a aucune importance si ce n'est faciliter les conversations entre humains).

On a donc commencé par choisir une adresse de réseau: 192.168.0.0 (nous verrons plus loin pourquoi). Ensuite, on affecte une adresse logique à chacune des interfaces qui y est reliée, l'adresse de l'interface découlant de celle du réseau: 192.168.0.1, 192.168.0.2, etc.

Les adresses IP sont des nombres codés sur 32 bits. Par commodité, on les représente en décimal sous la forme de 4 nombres (de 0 à 255 chacun) séparés par des point ("dotted quad" en anglais).

Nous avons vu que l'adresse d'une interface découle de celle du réseau. La relation entre les 2 consiste à "couper" l'adresse en 2 parties: les bits situés à gauche du point de coupure constituent la partie fixe (l'adresse de réseau) et ceux situés à droite sont disponibles pour numéroter les interfaces. L'adresse du réseau a donc tous les bits de la partie variable à 0. L'adresse dont tous les bits de la partie variable sont à 1 est réservée.

D'un point de vue arithmétique, on peut donc considérer que l'adresse de réseau peut être déterminée à partir de l'adresse d'une interface en faisant un ET logique entre l'adresse de l'interface et un nombre dont tous les bits de la partie fixe sont à 1 et ceux de la partie variable sont à zéro. Ce nombre est appelé masque de réseau (netmask en anglais). Le netmask est représenter sous forme de dotted quad, comme les adresses.

Selon la valeur de l'adresse IP, on distingue plusieurs classes de réseaux (correspondant à la position du point de coupure). Ces classes sont simplement des conventions destinées à faciliter l'attribution des plages d'adresses.

Il existe d'autres classes spéciales ou expérimentales sur lesquelles nous ne nous étendrons pas. Enfin, il est possible de créer des sous-réseaux à partir d'une plage d'adresses donnée en utilisant un netmask comportant plus de bits à 1 que le netmask conventionnel. Nous reviendrons sur ce point par la suite.

Remarque : Pour indiquer une adresse de réseau et son netmask, on utilise souvent une notation consistant à faire suivre l'adresse d'un slash et du nombre de bits à un dans le netmask. Exemples :

Dans le cas d'un réseau local privé, on peut choisir n'importe quelle adresse. Dans le cas d'un réseau local connecté à Internet, votre fournisseur de connectivité IP vous indique la plage d'adresses qui vous a été allouée.

Certains numéros de réseaux ont été réservés pour les réseaux locaux privés (RFC 1597):

Pour en finir avec les adresses réservées, signalons encore 2 cas: l'adresse de loopback et les adresses de broadcast.

L'adresse de loopback (127.0.0.1) correspond à une interface fictive présente sur toutes les machines, l'interface de loopback (lo ou lo0). Elle permet à la machine de s'envoyer à elle-même des paquets. Ca a peut être l'air bête, mais c'est très utile: on peut ainsi utiliser des applications réseau sans disposer d'interface physique, ou sans qu'elle soit reliée au réseau. On peut par exemple installer les programmes client et serveur d'une application dans la même machine pour aller faire une démonstration chez un (futur) client, ou encore travailler chez soi à la conception d'un site Internet, etc.

L'adresse de broadcast associée à un réseau correspond à une partie machine dont tous les bits sont à 1. Elle sert en particulier à déterminer quelle adresse physique correspond à une adresse IP donnée: une requête envoyée à l'adresse de broadcast est reçue par toutes les machines, mais seule celle dont l'interface correspond à l'adresse demandée répond.

La question de l'adressage ayant été suffisament traitée pour le moment, reste à aborder celle de la communication. Communiquer, c'est échanger des informations. Les règles régissant ces échanges sont appelées protocoles. Les principaux protocoles rencontrés avec les réseaux IP sont les suivants (liste loin d'être exhaustive).

Nom Description
IP (Internet Protocol) Echange de paquets entre noeuds
ICMP (Internet Control Message Protocol) Transmission de messages d'erreur et de contrôle entre machines et passerelles
ARP (Address Resolution Protocol) Correspondance entre adresse IP et adresse physique
RARP (Reverse Address Resolution Protocol) Correspondance entre adresse physique et adresse IP
TCP (Transmission Control Protocol) Trasmission de données en mode connecté (mode "Stream")
UDP (User Datagram Protocol) Trasmission de données sans connection (mode "Datagram")
FTP (File Transfer Protocol) Services de haut niveau de transfert de fichiers
HTTP (HyperText Transfer Protocol) Serveurs Web
NNTP (Network News Transfer Protocol) Serveurs de News
SMTP (Simple Mail Transfer Protocol) Transmission de courrier électronique
POP (Post Office Protocol) Gestion de boîtes aux lettres électroniques
Telnet Emulation de terminal

Cette liste permet de voir que les protocoles s'adressent à différents niveaux: un programme de transfert de fichiers fournira une interface utilisateur au protocole FTP, qui s'appuie lui même sur TCP, lequel utilise IP, ce dernier exploitant ARP et RARP. C'est pour cette raison qu'on parle souvent de la "pile TCP/IP", ou de la "suite de protocoles TCP/IP".

Les spécifications de ces protocoles sont appelées RFC (Request For Comments). On peut les trouver sur tous les grands sites FTP, notamment les sites universitaires, ceux des organismes de recherche et ceux des sociétés liées à l'internet. Exemples: ftp.lip6.fr, ftp.inria.fr, ftp.nic.fr.

Notez au passage que le terme "TCP/IP" est utilisé pour désigner des choses qui ne mettent pas nécessairement en oeuvre le protocole TCP: "TCP/IP" est devenu un nom propre indépendant des abréviations qui le composent.

Supposons maintenant qu'une machine soit utilisée pour faire plusieurs choses (situation normale): serveurs Web, FTP, SMTP et POP. Cette machine n'a qu'une interface, donc qu'une adresse IP. Le problème qui se pose est de trouver un moyen d'indiquer à cette machine le programme auquel transmettre le paquet qu'on lui envoie.

La solution à ce problème est la notion de port: on affecte un numéro à chacun des services offerts par la machine (80 pour le serveur HTTP, 21 pour le serveur FTP, 25 pour le serveur SMTP et 110 pour le serveur POP).

Notez qu'on peut trasmettre des données à un port selon 2 modes: connecté (TCP) ou non (UDP). Le mode connecté (ou mode Stream) garantit que les données seront reçues en totalité et dans l'ordre où elles ont été envoyées. Le mode non-connecté (ou mode Datagram) permet d'envoyer un message isolé sans garantie qu'il soit reçu.

Cette dernière définition peut surprendre, mais ce mode est très utile: au cours d'un transfert de fichier (donc mode Stream), par exemple, on peut avoir besoin de transmettre un message d'alerte. On enverra alors cette information sous la forme d'un datagramme sur le même port (puisqu'il est destiné à la même application). Le programme de réception peut détecter l'arrivée de ces données "hors bande" et appeler la procédure adéquate sans interférer avec le transfert en cours (sauf s'il s'agit d'une demande d'interruption...). Si par malchance le message d'erreur n'était pas reçu, il pourrait être envoyé une seconde fois: l'absence de garantie d'acheminement n'est donc pas un handicap.

Le routage

Après avoir passé en revue les notions de base sur un exemple simple (réseau local isolé), nous sommes armés pour passer au cas de 2 réseaux locaux interconnectés. Cette situation se généralise au cas d'un réseau relié à l'Internet, c'est à dire à un nombre impressionnant d'autres réseaux. Nous parlerons aussi des connexions en "dial-up" (par modem).

Réseaux local interconnectés

Pour permettre à 2 machines situées sur des réseaux différents, il est nécessaire d'établir une liaison entre ces 2 réseaux. La machine "host01" remplit cette fonction de passerelle entre les 2 réseaux: elle dispose de 2 interfaces reliées chacune à un réseau. Il ne reste qu'à indiquer à la machine comment utiliser ces interfaces: c'est le rôle de la table de routage.

Chaque paquet émis possède une adresse de départ et une adresse d'arrivée. Lorsqu'une application envoie un paquet, la fonction système responsable de son acheminement parcoure la table de routage de la machine pour déterminer quelle interface elle devra utiliser.

Voici sous forme simplifiée les tables de routage des machines host01, host02 et host11.

Machine host01
Adresse Masque Interface Passerelle
127.0.0.0 255.0.0.0 lo0 néant
192.168.0.0 255.255.255.0 eth0 néant
192.168.1.0 255.255.255.0 eth1 néant

Machine host02
Adresse Masque Interface Passerelle
127.0.0.0 255.0.0.0 lo0 néant
192.168.0.0 255.255.255.0 eth0 néant
0.0.0.0 0.0.0.0 eth0 192.168.0.1

Machine host11
Adresse Masque Interface Passerelle
127.0.0.0 255.0.0.0 lo0 néant
192.168.1.0 255.255.255.0 eth0 néant
0.0.0.0 0.0.0.0 eth0 192.168.1.3

La ligne des tables de routage de host02 et host11 dont l'adresse de destination est 0.0.0.0 correspond à la route par défaut, c'est à dire à l'interface à utiliser quand aucune des autres entrées de la table ne convient.

Supposons maintenant que host02 veuille envoyer un paquet à host11. L'adresse d'arrivée est donc 192.168.1.1. host02 parcoure chaque entrée de sa table de routage et vérifie si l'adresse d'arrivée remplit les conditions indiquées.

Sur la première ligne, il applique le masque 255.0.0.0 à 192.168.1.1 et trouve donc 192.0.0.0, alors que cette ligne est donnée pour 127.0.0.0. On passe donc à la suivante: 192.168.1.1 et 255.255.255.0 donne 192.168.1.0, ce qui ne correspond pas au 192.168.0.0 attendu. Il ne reste plus que la route par défaut: le paquet sera donc transmis à host01 (192.168.0.1).

Lorsque host01 reçoit ce paquet, il applique la même technique. Sur la première ligne, le resultat est identique au cas précédent. Sur la 2ème ligne, 192.168.1.1 et 255.255.255.0 donne 192.168.1.0 , ce qui ne correspond pas au 192.168.0.0 attendu. Par contre, la condition de la 3ème ligne est satisfaite: le paquet sera donc transmis sur eth1 et reçu par host11.

Le routage ressemble à ces jeux éducatifs composé d'un ensemble de formes en plastique et d'une boîte comportant des trous appropriés. L'enfant doit essayer les différents trous jusqu'à ce qu'il trouve celui qui convient à la forme qu'il veut ranger dans la boîte. Moralité: TCP/IP, c'est enfantin! ;-)

Poste avec connection dial-up

Le cas d'une connexion "dial-up" est intéressant parce qu'il met en oeuvre la modification dynamique de la table de routage: lorsque le modem établit la connexion avec son homologue à l'autre bout de la ligne téléphonique, une nouvelle interface (ppp0) est créée et 2 entrées sont ajoutées à la table de routage (une vers le modem distant et une route par défaut).

Les différentes étapes sont les suivantes:

Supposons par exemple que le modem local reçoive l'adresse 192.168.1.1 et que celle du modem distant soit 192.168.1.2, on aura alors les tables de routage suivantes:

Machine host1 non connectée
Adresse Masque Interface Passerelle
127.0.0.0 255.0.0.0 lo0 néant

Machine host1 connectée
Adresse Masque Interface Passerelle
127.0.0.0 255.0.0.0 lo0 néant
192.168.1.0 255.255.255.0 ppp0 néant
0.0.0.0 0.0.0.0 ppp0 192.168.1.2

Domain Name System

Jusqu'à maintenant, nous ne nous sommes occupé que des adresses des machines, mais dans la réalité on utilise leurs noms: pour la plupart des gens, www.yahoo.fr est beaucoup plus facile à retenir que 195.67.49.44.

Toute machine peut utiliser un fichier local contenant la correspondance entre adresses IP et noms de machines. Le problème avec cette approche est qu'elle n'est valable que pour un réseau local qui ne change pas très souvent (car il faut alors mettre à jour les tables de toutes les machines!).

L'objet du Domain Name System est de fournir un moyen pour transformer les noms de machines en adresses IP à l'échelle planétaire. Le principe consiste à organiser les noms des machines de façon hiérarchique.

Ainsi, le nom www.yahoo.fr comporte 3 niveaux, lus de droite à gauche. Chaque niveau gère la totalité des niveaux immédiatement inférieurs. Un certain nombre de serveurs gèrent les domaines de premier niveau (ici: fr), ceux-ci déléguant à leur tour la gestion des niveaux inférieurs.

En résumé, les serveurs "racine" gèrent les domaines de plus haut niveau (com, fr, uk, etc), les Network Information Centers nationaux gérant tous les niveaux inférieurs (ex. le NIC France gère ibp.fr, gouv.fr, yahoo.fr, etc). Yahoo! France gère tous les noms se terminant par yahoo.fr, et ainsi de suite.

Lorsqu'une machine veut transformer un nom en adresse IP, elle fait appel à un serveur de noms qui se chargera d'exploiter toute l'arborescence de ses confrères pour obtenir le renseignement. Les serveurs de noms utilisent un "cache" pour éviter de déclencher une recherche à chaque demande.

Le système de délégation permet de résoudre le problème des mises à jour (à la durée de vie des informations copiées dans les caches près) et de laisser une totale liberté de gestion à chaque niveau.

Chaque serveur en charge d'un domaine doit être secondé par au moins un autre serveur. Ce sont les DNS secondaires, qui recopient à intervalles réguliers les données du serveur primaire et peuvent traiter les demandes en cas d'indisponibilité du serveur primaire.