On imagine mal la quantité de mécanismes mis en œuvre quand un ordinateur veut communiquer sur le réseau.
Petite expérience de pensée : prenons un ordinateur relié à un réseau Ethernet équipé d'un serveur DHCP et relié à un routeur donnant l'accès à l'internet par l'entremise d'un fournisseur. Une situation bien entendu imaginaire qui n'a aucune chance de se présenter
Continuons par la pensée à tenir l'ordinateur comme frappé d'amnésie (mais alors, une amnésie totale) concernant le réseau : il ne connaît rien d'autres que les paramètres fournis par l'administrateur, c'est à dire qu'il est réglé de façon à réclamer les informations nécessaires. Considérons aussi que les appareils sont tous convenablement configurés.
Le propriétaire de l'ordinateur lance son navigateur et tape une URL (par exemple
www.machin.com) dans la barre d'adresse puis tape Entrée.
NB : nous n'allons dans la suite que nous intéresser aux échanges d'information entre l'ordinateur et son environnement : les échanges d'information DANS l'ordinateur entre les différents protagonistes (le navigateur, le système, la pile réseau, etc.) n'entrant pas dans le cadre de ce petit laïus, pas plus que les échanges de service entre les différentes couches réseau (au sens OSI).
Dans l'état actuel des chose, l'ordinateur n'est pas en mesure de donner satisfaction à son maître car il n'a même pas encore d'adresse IP (souvenez-vous, il est amnésique). Il sait par contre qu'il doit faire sa demande à un serveur DHCP.
Si vous avez réglé un jour un ordinateur pour obtenir son adresse en DHCP, vous aurez remarqué qu'on ne fournit pas d'adresse de serveur.
Comment cela se passe-t-il donc ?
L'ordinateur va construire une trame Ethernet à l'attention de tous les appareils du voisinage indiquant qu'il fait une demande d'adresse IP au premier capable de lui en fournir une. Par courtoisie — mais surtout parce que le mécanisme le nécessite —, il indique aussi son adresse MAC (c'est tout ce qu'il connaît de lui-même). Disons que cette adresse MAC vaut 01:23:45:67:89:AB
La trame pourrait donc ressembler à ça :
FF:FF:FF:FF:FF:FF - 01:23:45:67:89:AB - 255.255.255.255 - 0.0.0.0 - DHCP
FF:FF:FF:FF:FF:FF signifie «
je m'adresse à tous les appareils Ethernet qui recevront cette trame »
255.255.255.255 signifie «
je m'adresse à tous les appareils IP qui recevront cette trame »
0.0.0.0 signifie «
je ne sais pas comment je m'appelle »
DHCP — c'est pour faire simple — signifie «
pouvez vous me le dire (comment je m'appelle) »
Tous les serveurs DHCP du voisinage (et on comprend immédiatement qu'il vaut mieux qu'il n'y en ait qu'un) vont vérifier s'ils disposent d'une adresse non encore attribuée ou s'ils peuvent en libérer une (parce que son bail a expiré). Imaginons que LE serveur DHCP en soit capable. Il "forge" alors une réponse qui peut ressembler à ça :
01:23:45:67:89:AB - 01:FE:DC:BA:98:76 - 10.0.0.10 - 10.0.0.500 - DHCP MASK 255.0.0.0
Il répond donc à la station d'adresse MAC 01:23:45:67:89:AB que son adresse IP est désormais 10.0.0.10 et que lui même s'appelle 01:FE:DC:BA:98:76 en Ethernet et 10.0.0.500 en IP. Il indique aussi le masque de sous-réseau 255.0.0.0 (on verra plus tard pourquoi).
L'ordinateur est heureux : il sait maintenant comment il s'appelle. Mais il n'oublie pas sa mission et se rend compte qu'on lui demande un truc qu'il ne connaît pas :
www.machin.comIl lui faut obtenir des informations complémentaires pour établir à quoi correspond cette URL (ce nom de domaine).
Comme il est devenu pote avec le serveur DHCP, il lui demande de lui fournir des renseignements qui lui permettront d'en savoir plus :
01:FE:DC:BA:98:76 - 01:23:45:67:89:AB - 10.0.0.500 - 10.0.0.10 - DHCP
On voit que cette trame s'adresse en direct au serveur DHCP. Ce n'est donc pas une demande d'adresse comme la demande initiale. C'est donc une demande de renseignements complémentaires. Bon, ok, c'est pas tout à fait comme ça mais c'est le principe qui compte. Ça montre au passage avec quelle économie on peut faire marcher tout ça.
Le serveur DHCP, trop content de rendre son service répond un truc dans le genre :
01:23:45:67:89:AB - 01:FE:DC:BA:98:76 - 10.0.0.10 - 10.0.0.500 - DHCP - GATEWAY 10.0.0.1 DNS 200.200.200.200
Il indique que la passerelle s'appelle 10.0.0.1 et que le DNS primaire s'appelle 200.200.200.200 (bon, encore une fois, c'est le principe. On n'est pas là pour démonter les protocoles mais pour faire toucher du doigt l'activité frénétique qui a lieu sur nos câbles ou nos ondes).
Bon. L'ordinateur sait maintenant à qui demander qui se cache derrière
www.machin.cm : il faut demander à 200.200.200.200 !
Mais à ce stade, il est encore trop tôt. En effet, il faut savoir si 200.200.200.200 fait partie de l'entourage IP, c'est à dire sur même réseau IP. C'est là que le masque va servir. Il masque 200.200.200.200 avec l'information 255.0.0.0, ce qui donne 200.0.0.0 (on obtient ce résultat par l'opération ET binaire. Je vous laisse chercher comment ça marche, ce n'est pas le sujet ici). Il fait la même chose avec sa propre adresse, ce qui donne 10.0.0.0
Il compare ensuite les 10.0.0.0 (son propre réseau) avec 200.0.0.0 (le réseau de son correspondant) et note que ces informations sont... différentes. Ça signifie que 200.200.200.200 se trouve ailleurs, sur un autre réseau. L'ordinateur va donc devoir s'adresser à la passerelle pour relayer sa demande.
Ça tombe bien, il connaît son adresse... IP ! Hélas, on est sur un réseau Ethernet. Il va donc falloir découvrir l'adresse MAC (Ethernet) de la passerelle avant de lui parler.
Pour ce faire, l'ordinateur va composer une trame (encore) qui ressemble à ça :
FF:FF:FF:FF:FF:FF - 01:23:45:67:89:AB - 10.0.0.1 - 10.0.0.10 - ARP
Elle s'adresse à tout le monde en Ethernet (FF:FF:FF:FF:FF:FF) et demande à la station ayant l'adresse IP 10.0.0.10 de répondre à cette requête ARP (cherchez ça sur le Web si ça vous intéresse).
La passerelle (le routeur) se voyant interpellé répond par :
01:23:45:67:89:AB - 00:11:22:33:44:55 - 10.0.0.10 - 10.0.0.1 - ARP
On voit que la question et la réponse ne diffèrent pas beaucoup. Sauf que la question s'adresse à tout le monde.
Bref, maintenant, l'ordinateur connaît tout ce qu'il veut sur la passerelle, c'est à dire sur sa porte de sortie vers le reste du monde, il va pouvoir s'en servir.
Mais il ne veut pas causer à la passerelle, il veut parler à
www.machin.com et pour le moment il ne sait pas assez de choses pour pouvoir le faire. Il lui faut encore obtenir des infos de la part du DNS.
Là, on va assister à une de ces choses très malines que j'adore.
L'ordinateur va composer une trame à l'attention du DNS et l'adresser à la passerelle, puisque c'est par là qu'il faut passer :
00:11:22:33:44:55 - 01:23:45:67:89:AB - 200.200.200.200 - 10.0.0.10 - DNS
www.machin.comOui, vous avez bien vu : il utilise l'adresse MAC de la passerelle et l'adresse IP du DNS. Trop fort. Véritablement malin.
Bien entendu, la passerelle (le routeur, quoi) accepte : c'est son job. Il envoie la demande de l'autre côté, sur le réseau de l'opérateur (il existe aussi des routeurs Ethernet vers Ethernet qu'on utilise en entreprise pour cloisonner l'infrastructure. Sur sa seconde patte, le routeur remplace alors l'adresse MAC source de la trame d'origine son l'adresse MAC et l'adresse MAC de destination avec celle du destinataire. Le mécanisme est sensiblement le même pour un routeur Ethernet-ADSL).
Bon, là on laisse se passer ce qui doit se passer côté fournisseur d'accès. On fait aussi l'impasse sur la translation d'adresse (NAT).
Toujours est-il que le routeur finit par recevoir une réponse du DNS. Il la relaie sur le réseau interne Ethernet :
01:23:45:67:89:AB - 00:11:22:33:44:55 - 10.0.0.10 - 200.200.200.200 - DNS
www.machin.com = 123.234.123.234
On voit que là aussi, le routeur (la passerelle : faut suivre...) répond avec son adresse MAC et l'adresse IP du DNS : pour l'ordinateur, au travers de ce mécanisme, tout se passe comme si le DNS et le routeur ne faisaient qu'un.
Maintenant, tout est prêt pour rendre ENFIN le service attendu depuis le début. L'ordinateur masque 123.234.123.234 avec 255.0.0.0, obtient 123.0.0.0 et voit bien que c'est différent de 10.0.0.0 ; il va donc encore devoir passer par la passerelle :
00:11:22:33:44:55 - 01:23:45:67:89:AB - 123.234.123.234 - 10.0.0.10 - HTTP GET
www.machin.comEncore une fois, on voit l'association de l'adresse MAC du routeur et l'adresse IP du destinataire.
La réponse viendra par :
01:23:45:67:89:AB - 00:11:22:33:44:55 - 10.0.0.10 - 123.234.123.234 - HTTP REPLY tout un tas de truc pour afficher la page
Rebelote pour l'association adresse MAC/adresse IP.
Voilà. C'est forcément édulcoré. Forcément imparfait mais ça donne une idée des mécanismes insoupçonnés qui agitent nos réseaux et montre la complexité de ces choses dont on attend qu'elles marchent du premier coup sans y rien connaître.
L'amnésie est un alibi pour rassembler en une succession facile à suivre des échanges qui se tiendront en réalité à des moments biens différents.
Notons aussi que les différents appareils, pour ne pas redemander à chaque fois les mêmes infos mémorisent tout ça dans des caches (on peut consulter le cache ARP de sa machine en tapant arp -a dans une fenêtre de commande).
On a vu comment pouvait s'opérer la mise en relation de trois systèmes de nommage : MAC, IP et adresse symbolique (
www.machin.com). C'est capital et une bonne partie de la capacité réseau est consommée à ces activités. D'où la nécessité d'économie.
Le tube d'aspirine est sur le frigo