Après avoir étudié l'adressage, reparlons des protocoles utilisés pour la communication sur Internet.
On l'a déjà dit, on utilise sur Internet le protocole TCP/IP; ceci est en fait le nom des deux principaux protocoles utilisés, mais il y en a en fait beaucoup d'autres !
Avant toute chose, il est important de préciser qu'Internet est un réseau sur lequel les informations circulent sous forme de "blocs" de longueur fixée appelés paquets : elles ne sont donc pas envoyées "en continu" mais sont "fragmentées" en différents morceaux qui suivent leur route sur le réseau indépendamment les uns des autres.
Ces paquets ont une taille bien définie : par défaut, sur un réseau Ethernet, elle est de 1500 octets
L'ensemble des règles et des normes gérant les communications sur un réseau constituent la pile de protocoles utilisés.
Le terme « pile » implique que chaque protocole intervient à un moment bien précis de la communication, en s'appuyant sur les "couches" qui sont "en dessous" afin d'y apporter un supplément de fonctionnalité.
Ainsi, les données (paquets d'informations) qui circulent sur le réseau sont traitées successivement par chaque couche, qui vient rajouter un élément d'information puis sont transmises à la couche suivante.
Le but d'un système en couches est de séparer le problème en différentes parties (les couches) selon leur niveau d'abstraction.
Concrètement, cette "pile" de protocoles est en fait un ensemble de programmes généralement intégré au système d'exploitation des ordinateurs.
Il existe plusieurs modèles de piles de protocoles réseaux :
Du "plus bas" ( c'est à dire au plus près du lien physique ) au "plus haut" ( c'est à dire au plus proche de l'utilisateur ), les 4 couches du modèle Internet sont les suivantes :
Cette couche décrit les caractéristiques physiques de la communication, comme les conventions à propos de la nature du média utilisé pour les communications (les câbles, les liens par fibre optique ou par radio), et tous les détails associés comme les connecteurs, les types de codage ou de modulation, le niveau des signaux, les longueurs d'onde, la synchronisation et les distances maximales.
C'est aussi elle qui spécifie comment les informations sont transportés sur la couche physique, et en particulier le tramage (c'est à dire les séquences de bits particulières qui marquent le début et la fin des messages, les bits de contrôle, etc...).
Si il en faisait partie ( ce n'est pas le cas ), le protocole série vu dans le premier chapitre appartiendrait à cette couche.
Exemples de protocoles de la couche de liaison de données : Ethernet ( pour un réseau câblé ), Wireless Ethernet ( pour le wifi ), etc...
La couche Internet est la couche "la plus importante" car c'est elle qui gère les notions d'adressage IP. Elle permet l'acheminement des paquets de données vers des machines distantes ainsi que de la gestion
de leur fragmentation et de leur assemblage à réception.
Elle ne garantit pas cependant que les paquets arriveront dans le bon ordre : ce sera le rôle de la couche suivante.
Le protocole principal qui intervient dans cette couche est le protocole IP ( = Internet Protocol ); il en existe d'autres, comme le protocole ICMP utilisé par exemple par la commande ping
pour tester la connexion
entre deux machines en envoyant des "paquets de test", ou le protocole ARP utilisé pour associer une adresse IP à une adresse MAC ( voir chapitre 2 ).
Les protocoles de la couche de transport peuvent résoudre des problèmes comme la fiabilité des échanges (« est-ce que les données sont arrivées à destination ? ») et assurer que les données arrivent dans l'ordre correct.
Il y a deux protocoles dans cette couche :
Les protocoles de transport déterminent aussi à quelle application ( ou programme réseau ) chaque paquet de données doit être délivré : chaque application est pour cela "reliée" à un port TCP ou UDP ( il y a 65 536 ports différents ).
( Certains ports sont bien connus, comme par exemple le port TCP 80 pour les applications web ou le port UDP 53 pour le DNS; voir ici pour une liste détaillée. )
Le numéro utilisé par une application apparaît parfois sous cette forme après l'IP de destination : 192.168.1.12:3222
( qui signifie : "je m'adresse à l'application sur le port 3222
à l'IP 192.168.1.12
" ).
Un ensemble IP+port s'appelle un socket.
C'est dans la couche application que se situent la plupart des programmes réseau.
Ces programmes et les protocoles qu'ils utilisent incluent HTTP ( = Hyper-Text Transfer Protocol ) pour le web, FTP ( = File Transfer Protocol ) pour le transfert de fichiers, SMTP (messagerie), SSH (connexion à distance sécurisée), DNS (recherche de correspondance entre noms et adresses IP), etc...
Résumé de quelques protocoles du modèle Internet et de la couche à laquelle ils interviennent :
Couche | Protocole(s) | Adresse utilisée dans cette couche |
---|---|---|
Application | HTTP, SMTP, FTP, ... | |
Transport | TCP, UDP | port |
Internet | IP | adresse IP |
Liaison | Ethernet, ARP, .... | adresse MAC |
Dans le logiciel Filius, il est possible de visualiser le contenu des paquets réseau qui circulent entre deux machines; nous allons donc reprendre ce logiciel, ainsi que les fichiers que vous aviez alors sauvegardés, pour étudier les informations véhiculées par ces paquets.
192.168.1.1
et afficher les échanges de données.192.168.1.1
la commande : ping 192.168.1.2
; le contenu ( en clair ! ) des différents paquets émis ou reçus par 192.168.1.1
s'affiche alors.Attention, chaque ligne ne donne les informations que de la couche "la plus haute" utilisée dans ce paquet; pour avoir des détails sur chaque protocole du paquet, il faut cliquer sur une des lignes et obtenir ces informations dans la partie inférieure de la fenêtre.
192.168.1.2
? A quelle couche ce protocole appartient-il ?192.168.1.1
obtient l’adresse MAC de 192.168.1.2
.ping
? A quelle couche appartient ce protocole ?192.168.1.1
sait-il que l’ordinateur 192.168.1.2
est bien connecté ?Vous allez visualiser maintenant comment se déroule une requête HTTP vers un serveur web, et la réponse de ce dernier, dans le cas de l'affichage de la "page de démarrage" par défaut d'un serveur web dans Filius.
Pour ne pas "encombrer" l'affichage avec des paquets réseau correspondant à d'autres protocoles ( notamment DHCP et DNS ), vous utiliserez un "web" très simplifié, où un client HTTP est directement relié à un serveur
HTTP.
Vous pouvez installer un serveur web sur une des machines de l'exemple précédent ( et un navigateur sur l'autre machine ! ), ou alors, vous pouvez directement utiliser ce fichier Filius déjà fait.
192.168.1.200
dans le fichier fourni )192.168.1.1
dans le fichier ), activez l'affichage des échanges de données.→ identifiez dans les données échangées les paquets correspondants à ces trois étapes ( ce sont des paquets "vides", dans le sens où ils ne contiennent pas de données ).
Comment le protocole TCP peut-il s'assurer que tous les paquets arrivent à bon port ? Un des mécanismes de contrôle utilisé pour cela s'appelle le protocole du bit alterné.
Le principe est le suivant : considérons deux ordinateurs A et B qui communiquent.
B sait donc que le paquet suivant devra avoir le drapeau de même valeur que son acquittement précédent : si ce n'est pas le cas, cela signifie donc que le paquet ne lui est pas parvenu..
De plus, après l’envoi de chaque paquet, A lance un compte à rebours. Si ce compteur arrive à 0 avant d’avoir reçu l’acquittement ( "timeout" ), le message est renvoyé et un nouveau compte à rebours est lancé.
Si le message d’acquittement est perdu, là aussi, le message est renvoyé à la fin du compte à rebours. Dans ce cas, le destinataire ignore le deuxième envoi et ré-envoie à nouveau l’accusé de réception.
Entre deux machines dans un réseau, les communications se font d'application à application : par exemple, un client HTTP communique avec un serveur HTTP. Toutes les informations doivent donc "traverser" les différentes couches de protocoles, aussi bien à l'envoi qu'à la réception des données.
On l'a vu plus haut, chaque couche rajoute des informations à celles de la couche supérieure en "englobant" ces dernières dans ses propres données: c'est la notion d'encapsulation des données que l' on va étudier sur un exemple ( simplifié ! ).
Prenons l'exemple d'une requête HTTP vers une page web; une telle requête se fait selon la méthode GET. Les données émises par l'application ( un client HTTP comme un navigateur par exemple ) pourraient ainsi être :
GET / HTTP/1.1 Host: www.nsivaugelas.fr/index.html |
Au besoin, les protocoles des couches inférieures fragmenteront les données en morceaux de plus petite taille, et elles seront donc "réparties" dans plusieurs paquets différents.
Le protocole utilisé, par exemple TCP, va encapsuler les données de l'application dans ses propres données, en leur rajoutant un en-tête contenant différentes informations, dont notamment :
Comme c'est ce protocole qui s'occupe aussi de la fragmentation des données sur plusieurs paquets et de leur réception dans le bon ordre, il indique également le n° du paquet sur l'ensemble des paquets correspondant à ces données.
( Plus exactement, ce sont les numéros de séquence SEQ et d'acquittement ACK qui sont indiqués et qui permettent cette remise en ordre. )
Les données issues de la couche transport seraient alors :
En-tête TCP | Données encapsulées | |||
Port source 1321 |
Port destination 80 |
Paquet 5 / 54 |
|
On obtient ainsi le segment TCP du paquet.
Le protocole IP va, principalement, ajouter les adresses IP de la source et de la destination en en-tête, en encapsulant les données de la couche précédente :
En-tête IP | Données encapsulées | |||||
IP source 192.168.1.2 |
IP destination 83.56.1.24 |
|
On obtient ainsi le datagramme IP.
Enfin, dans la couche liaison, le protocole Ethernet ( par exemple ) va, principalement, ajouter les adresses MAC de destination et de la source en en-tête, en encapsulant les données de la couche précédente :
En-tête Ethernet | Données encapsulées | |||||||
MAC destination ff.e1.f2.56.89.6a |
MAC source 0e.11.36.3c.78.aa |
|
L'ensemble des informations précédentes, auxquelles seront ajoutées différentes informations de contrôle ( notamment des octets de START et de STOP ! ) et de correction d'erreur, constitueront la trame envoyée sur le réseau physique.
Attention, l'exemple ci-dessous est volontairement très simplifié ! De nombreuses autres informations sont ajoutées par chaque couche...
Vous ferez ci-dessous, le décryptage d'une "vraie" trame Ethernet !
A chaque "passage" par un équipement réseau, les données présentes dans un paquet peuvent être modifiées par cet équipement : par exemple, l'adresse MAC de destination d'un paquet est à l'origine celle de la passerelle utilisée par la machine émettrice pour accéder à l'extérieur de son réseau; après "passage" dans cette passerelle, cette dernière va remplacer l'adresse MAC de destination par celle du routeur suivant sélectionné dans sa table de routage ( et l'adresse MAC d'origine par la sienne ! ), permettant ainsi "l'aiguillage" correct du paquet. Et ainsi de suite de routeur en routeur...
Pour une description plus complète de ce processus, vous pouvez consulter ce document.
Une fois le paquet arrivé à destination, les données sont..."désencapsulées" : chaque couche de protocoles intervient dans l'ordre inverse du précédent, en "retirant" à chaque fois les informations la concernant, jusqu'à ce qu'il n'arrive à l'application destinataire que les données proprement dite, "débarrassées" des octets ayant servi à leur transport...
A quoi ressemble une trame Ethernet complète ? En voici un exemple simple :
00 50 56 b0 11 46 00 26
bb 16 21 84 08 00 45 00
00 40 97 ea 40 00 40 06
be 74 53 08 3f e9 c0 a8
01 64 00 50 1f 90 d0 78
41 24 00 00 00 00 a0 02
ff ff 5e 92 00 00 02 04
05 b4 01 03 03 04 01 01
08 0a 4a 69 8a a3 00 00
00 00 04 02 25 32
Chaque octet de la trame est représenté sous forme hexadécimale; l'affichage a été formaté sous forme de lignes de 8 octets pour des raisons de lisibilité mais en réalité les octets sont tous "les uns à la suite des autres"...
Vous allez essayer de "désencapsuler" de cette trame les informations importantes : adresses MAC, IP, protocoles utilisés, etc...
Utilisez cette feuille-réponse, ce qui vous permettra d'identifier les octets correspondant à chaque couche.
Les premiers octets de la trame correspondent logiquement à l'en-tête Ethernet ajouté par la couche Liaison.
Plus précisément, cet en-tête est constitué ainsi :
0x0800
→ IPv40x0806
→ ARP0x86dd
→ IPv6Les premiers octets correspondent donc à l'en-tête rajouté par le protocole IP; cet en-tête est un peu plus compliqué mais nous ne considérerons que les informations suivantes :
Les premiers octets correspondent donc à l'en-tête rajouté par le protocole TCP; lui aussi compliqué, nous ne considérerons que les informations suivantes :
Y a-t-il quelque chose à chercher ?
Après toutes les notions vues dans ce thème, un QCM ( un peu plus long que d'habitude...) s'impose maintenant pour vérifier vos connaissances !