4. Protocoles sur Internet

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

Pile de protocoles réseaux

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 :

  • le modèle OSI en 7 couches, qui est un modèle théorique mais qui décrit de manière très précise la pile de protocoles nécessaire à une communication réseau.
  • le modèle Internet à 4 couches seulement qui est une implémentation pratique et donc "simplifiée" du modèle OSI; c'est ce modèle que l'on étudiera par la suite.
Modèles OSI et Internet

Le modèle Internet ou modèle TCP/IP

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 :

Couche Liaison ou Accès réseau

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...

Couche Réseau ou Internet

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 ).

Couche Transport

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.

Couche Application

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

Analyse de paquets réseau

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.

Communication entre deux machines

  • Reprendre le premier exemple sur lequel vous avez travaillé ( deux machines reliées directement ).
  • Passer en mode simulation, et faire un clic-droit sur la machine 192.168.1.1 et afficher les échanges de données.
  • en ligne de commande, exécuter sur la machine 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.

Questions

  1. Quel est le protocole utilisé pour déterminer l'adresse MAC de 192.168.1.2 ? A quelle couche ce protocole appartient-il ?
  2. Expliquer alors comment 192.168.1.1 obtient l’adresse MAC de 192.168.1.2.
  3. Quel est le protocole utilisé par la commande ping ? A quelle couche appartient ce protocole ?
  4. A l’issue du ping, comment l’ordinateur 192.168.1.1 sait-il que l’ordinateur 192.168.1.2 est bien connecté ?

Requête et réponse HTTP

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.

Un "web" très simplifié...
  • passez en mode simulation, et lancer le serveur web sur la machine sur laquelle il est installé ( 192.168.1.200 dans le fichier fourni )
  • sur le client ( l'autre machine, 192.168.1.1 dans le fichier ), activez l'affichage des échanges de données.
  • lancez le navigateur, et entrez l'adresse du serveur dans la barre d'adresses ( il n'y a pas de DNS...); la page d'accueil s'affiche....et, pfiou !! 25 paquets échangés rien que pour cette petite page..c'est qu'une communication HTTP se fait en plusieurs temps; vous allez étudier ça plus en détail.
Trames HTTP
Cet exemple sera celui utilisé pour la correction mais vous pourriez avoir des valeurs différentes.

Questions

  1. Quel est le numéro de port TCP utilisé par le client HTTP ? et par le serveur ?
  2. Ouverture de la connexion TCP : avant que le protocole HTTP puisse intervenir, il faut d'abord établir une connexion entre le client et le serveur; c'est le protocole TCP qui s'en charge, et ceci se fait en 3 temps ( "3-way handshake" ) :
    • Demande d'ouverture d'une connexion client-serveur
    • Acquittement ( c'est à dire, accusé de réception ) de la part du serveur, et demande d'une connexion serveur-client ( oui, il y a en réalité 2 connexions ouvertes, une dans chaque "sens"...)
    • Acquittement de la part du client

    → 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 ).

  3. Maintenant que la connexion est établie dans les deux sens, les applications réseau peuvent échanger des paquets contenant des données.
    → quelles sont les lignes correspondant à chaque paquet échangé entre le client et le serveur ? Par quoi est suivi l'envoi de chaque paquet ? Dans la colonne Protocole de ces lignes, que devrait-il être indiqué ?
  4. Requêtes du client : certains paquets correspondent aux différentes requêtes du client vers les ressources demandées ( fichiers HTML, images,...)
    → combien de requêtes de la part du client sont faites ici ? à quelles lignes correspondent ces requêtes, et quelle ressource est demandée dans chaque requête ? Quelle méthode utilisée pour ces requêtes reconnaissez-vous ?
  5. Réponse du serveur : le serveur va alors répondre en envoyant les paquets correspondant aux données demandées
    → combien de paquets sont nécessaires pour envoyer les données du serveur au client ? Quel(s) paquet(s) correspond(ent) à l'envoi du fichier HTML ? A l'envoi de l'image dans la page ?
  6. Fermeture de la connexion : une fois tous les paquets de données reçus, la connexion TCP prend fin.
    → Identifiez les paquets correspondant; en les analysant, expliquez précisément comment se déroule cette fin de connexion.

Lien vers les REPONSES

Un exemple de protocole de détection de perte de paquet

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.

  • lors de l'envoi du premier paquet, A rajoute à la trame un bit de contrôle appelé drapeau à 0
  • lors de la réception du paquet, B renvoie alors à A un message d'acquittement en inversant le bit qui passe à 1
  • A envoie alors le paquet suivant avec le drapeau à 1
  • B renvoie un acquittement en inversant le bit à 0
  • etc...

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.

Bit alterné

Questions

  1. Quelle est la réponse à envoyer quand on reçoit un paquet avec le bit de contrôle à 1 ?
  2. On arrive au timeout pour le paquet n avec un bit de contrôle de 0. Quelle était la réponse attendue ?
  3. On suppose que le premier bit de contrôle est 0. Quel est le bit de contrôle associé au nième paquet ?

Lien vers les REPONSES

Circulation des données dans le modèle Internet

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é ! ).

Flux de données Internet

Encapsulation des données par l'émetteur

Couche Application

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.

Couche Transport

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
GET / HTTP/1.1
Host: www.nsivaugelas.fr/index.html

On obtient ainsi le segment TCP du paquet.

Couche Réseau

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
Port source
1321
Port destination
80
Paquet
5 / 54
GET / HTTP/1.1
Host: www.nsivaugelas.fr/index.html

On obtient ainsi le datagramme IP.

Couche Liaison

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
IP source
192.168.1.2
IP destination
83.56.1.24
Port source
1321
Port destination
80
Paquet
5 / 54
GET / HTTP/1.1
Host: www.nsivaugelas.fr/index.html

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 !

Circulation des paquets sur les réseaux

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.

Et à la réception ?

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...

Décryptage d'une trame

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.

Trame Ethernet

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 :

  • 6 octets pour l'adresse MAC de destination
  • 6 octets pour l'adresse MAC de la source
  • 2 octets pour indiquer le type de protocole utilisé dans la couche supérieure ( donc ici la couche Réseau/Internet ), par exemple :
    • 0x0800 → IPv4
    • 0x0806 → ARP
    • 0x86dd → IPv6
Trame Ethernet
  1. Déterminez les adresses MAC de la destination et de la source.
  2. Déterminez le type de protocole utilisé dans la couche Réseau.
  3. après l'en-tête viennent les données, sauf les 4 derniers octets qui constituent une "somme de contrôle" destinée à la correction d'erreur.
    → identifiez dans la trame où commencent et où finissent les données
  4. Supprimez alors de la trame les octets de la couche Liaison, de façon à ne garder que ceux correspondant à la couche supérieure.

Datagramme IP

Les 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 :

  • dans le premier octet :
    • les 4 premiers bits indiquent le numéro de version d'IP utilisé ( 4 ou 6 )
    • les 4 derniers bits indiquent la longueur de l'en-tête, en nombre de bloc(s) de 32 bits ( et pas en octets ! c'est comme ça... )
  • viennent ensuite un ensemble d'octets d'informations diverses, comme le TTL du paquet, le protocole de la couche supérieure, des bits de contrôle, etc...
  • on trouve, juste avant les données, les octets correspondant à l'IP de la source, puis ceux de l'IP de destination.
Datagramme IP
  1. déterminez :
    • la version du protocole IP utilisé
    • la longueur de l'en-tête en octets
  2. Combien d'octets faut-il au total pour coder les IPs de la source et de destination ? Déduire alors des informations précédentes l'IP de la source et celle de la destination, et les exprimer dans le format adapté à la version d'IP
  3. Supprimez alors les octets de la couche Réseau, de façon à ne garder que ceux correspondant à la couche supérieure.

Segment TCP

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 :

  • 2 octets pour le port source
  • 2 octets pour le port destination
  • 4 octets pour le numéro de séquence ( SEQ )
  • 4 octets pour le numéro d'acquittement ( ACK )
  • 1 octet dont les 4 premiers bits indiquent la taille de l'en-tête, là-aussi en blocs de 32 bits
Segment TCP
  1. Déterminez le port source et le port destination; sachant que ce paquet a circulé dans le sens serveur → client, déterminer le protocole de la couche Application utilisé.
  2. Déterminez les numéros SEQ et ACK. Ces deux nombres sont utilisés par le protocole TCP pour remettre les paquets dans l'ordre.
  3. Déterminez la taille de l'en-tête en octets.
  4. Que constate-t-on alors ?

Couche Application

Y a-t-il quelque chose à chercher ?

Lien vers les REPONSES

QCM d'entraînement

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 !