Nous verrons dans cet article comment un paquet IMCP (un "ping") trace sa route pour arriver sur une machine à l’autre bout du monde, et revenir - le tout en quelques milllisecondes.
Étude de cas
Nous n’aborderons pas toutes les possibilités de types de réseau possibles dans l’immensité d’internet. Il s’agit là seulement d’un exemple.
On prendra comme exemple un ordinateur relié en Ethernet à une Freebox.
Genèse d’un paquet ICMP
L’utilisateur d’un ordinateur va effectuer une commande PING sur un hôte distant :
ping google.fr
A partir de cette simple commande, la quantité de technologie qui va être mise en oeuvre pour faire effectivement parvenir un paquet ICMP à un des serveur de google et ensuite revenir est considérable. Cette commande des plus simples va utiliser de nombreux protocoles réseau et énormément d’équipements répartis à travers le monde.
Résolution de nom
La première tâche va être de traduire le nom de domaine « google.fr » en adresse IP. Ceci est fait par le biais de DNS. Généralement, chaque machine connecté eau réseau possède un fichier qui contient des IP de serveurs de résolution de nom de domaine ( /etc/resolv.conf sous Debian ) fournies par le protocole DHCP au démarrage de la machine. Lorsque la machine veut résoudre google.fr, elle va aller demander au DNS l’IP correspondante. Vos DNS sont le plus souvent ceux de votre FAI qui garde ce type d’information en cache pendant quelques heures, après quoi il resynchronise ses informations sur les « DNS root ».
Construction du paquet ICMP
Lorsque l’on effectue un ping, on utilise le protocole ICMP, partie intégrante du protocole IP. Le noyau va construire le paquet de niveau 3 ( réseau ). C’est un paquet IP particulier : le paquet ICMP. Le noyau va transmettre ce paquet ICMP à la carte réseau ( l’interface ) correspondant à la bonne route à utiliser pour atteindre l’hôte distant. Le mapping interface / routes peut être consulté sous Debian par :
% sudo route -n
Password:
Table de routage IP du noyau
Destination Passerelle Genmask Indic Metric Ref Use Iface
10.8.0.13 0.0.0.0 255.255.255.255 UH 0 0 0 tun0
192.168.103.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
10.8.0.0 10.8.0.13 255.255.255.0 UG 0 0 0 tun0
169.254.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth0
0.0.0.0 192.168.103.1 0.0.0.0 UG 0 0 0 eth0
ou sans sudo :
% ip route10.8.0.13 dev tun0 proto kernel scope link src 10.8.0.14
192.168.103.0/24 dev eth0 proto kernel scope link src 192.168.103.68
10.8.0.0/24 via 10.8.0.13 dev tun0
169.254.0.0/16 dev eth0 scope link
default via 192.168.103.1 dev eth0
Construction d’un paquet Ethernet
Le paquet IP à transmettre va être encapsulé au niveau de la carte réseau dans une trame ethernet ( niveau 2 : liaison ). Pour cela, elle va chercher dans son cache ARP l’adresse ethernet de la passerelle à utiliser ( voir les routes ). Dans notre cas, on va chercher l’adresse ethernet de la machine 192.168.103.1. Si cette adresse n’est pas dans le cache ARP, la carte réseau va broadcaster des requêtes ARP en demandant à tout le monde "Qui a l’IP 192.168.103.1 ?". Une fois cette étape franchie, la trame ethernet est construit et est prêt à l’envoi.
Pour voir l’état du cache ARP sous Debian :
% sudo arp
Address HWtype HWaddress Flags Mask Iface
sample.local ether 00:14:25:E1:D3:E5 C eth0
Envoi
La carte réseau envoie alors la trame ethernet sous forme d’impulsions électriques sur le support physique ( cable Ethernet ).
| protocole | couche |
|---|---|
| ICMP (IP) | 3, réseau |
| Ethernet | 2, liaison |
Routeur local
La trame arrive sur une des carte réseau de la freebox. Voyant que cette trame correspond effectivement à son adresse ethernet, elle désencapsule le paquet IP et le passe à la couche 3 ( noyau de la freebox ). La couche 3 ( liaison ) constate que ce paquet n’est pas à destination d’une IP appartenant à la freebox, elle doit donc le rerouter. Pour cela, elle consulte sa propre table de routage et renvoie le même paquet IP encapsulé dans un protocole de niveau différent : l’ATM.
Pour des questions de sécurité évidentes, la communication entre le routeur et le réseau du FAI est protégé par des sessions PPP (souvent PPPoA pour PPP over ATM). Ce mécanisme permet un cryptage des données et une vérification d’identité du routeur client (login/mot de passe).
A ce stade, on a donc les encapsulations suivantes :
| protocole | couche |
|---|---|
| ICMP(IP) | 3, réseau |
| PPP | "2,5" |
| ATM | 2, liaison |
L’ATM est le protocole réseau utilisé pour le raccordement des abonnés au réseau de l’opérateur de collecte. La freebox va donc construire des petites cellules ATM ( de seulement 53 octets, pour des questions de réduction de latence (jitter) ) et les transformer en signaux électriques particuliers pour utiliser les fréquences les plus hautes (on parle de canaux) disponibles sur la liaison téléphonique. L’ADSL utilise les fréquences inutilisées de la voix pour transmettre l’information.
Le signal électrique résultant ( voix + data ) est envoyé sur l’interface de sortie choisie pour atteindre la cible « google.fr » par le cable téléphonique.
Le DSLAM
Le signal électrique va donc cheminer en ATM jusqu’au DSLAM (Digital Subscriber Line Access Multiplexer) , en passant potentiellement par plusieurs répéteurs qui vont entretenir le signal (pour contrer la perte de puissance naturelle).
Le DSLAM est un équipement réseau qui agrège les flux "faible débit" des abonnés. Dans un premier temps, chaque signal va être démodulé pour extraire le signal voix du signal data : le signal voix qui va être envoyé sur le réseau téléphonique commuté (RTC) , et le signal data (qui contient notre ping).
Les signaux data, vont donc être regroupé en un flux plus gros via le DSLAM qui va les multiplexer.
Le BAS
Ce flux ATM sur fibre optique va ensuite arriver sur un BAS (BroadBand Access Server) qui va encore multiplexer les flux d’une dizaine de DSLAM !
Rappelons que nous étudions ici un cas particulier d’architecture en guise d’exemple. Vous devez donc garder à l’esprit que d’autres types d’architectures sont possibles et existent bien. Par exemple nous allons considérer ici que l’accès au FAI se fait en modèle fermé (à l’aide d’un tunnel L2TP), modèle largement répandu. Nous ne parlerons du modèle ouvert.
La BAS utilise un tunnel L2TP (Layer 2 Tunneling Protocol) qui se termine au LNS (L2TP Network Server) du FAI. Ainsi, le BAS va désencapsuler l’ATM qui arrive et le mettre dans le tunnel L2TP.
L2TP utilise le protocole UDP (port 1701) pour transporter les sessions PPP.
| protocole | couche |
|---|---|
| ICMP(IP) | 3, réseau |
| PPP | "2,5" |
| ATM | 2,liaison |
| UDP | 4, transport |
| IP | 3, réseau |
| ATM | 2, liaison |
Le flux IP va ainsi transiter par un VPN (L2TP) jusqu’au réseau du fournisseur d’accès.
De l’opérateur de collecte à l’opérateur d’accès
Le flux ATM est alors transporté via des switchs niveau 2 ATM jusqu’au LNS du FAI. A partir de là, le flux IP extrait de la session PPP est routé au sein du backbone du FAI pour atteindre l’IP cible ("google.fr").
Dernier pas
sortie du FAI vers l’hébergeur de google.fr
arrivée à google et réponse
liens
http://www.frameip.com/l2tp-pppoe-ppp-ethernet/
http://www.rzo.free.fr/docs_jean/adsl.pdf
http://christian.caleca.free.fr/adsl/dans_la_pratique.htm