Aller au contenu

Modele TCP/IP

TODO Demander une synthèse aux élèves, dirigé par quelques questions ?

La communication est une des aspects fondamentaux des sociétés humaines depuis plusieurs millénaires. L'échange d'informations permet coordination et organisation. L'outils de communication le plus puissant jamais créé par l'humanité est sans doute Internet, qui permet un échange d'informations de tous types à l'échelle mondiale.

Dans cette partie, nous allons nous intéresser à quelques grands aspects du fonctionnement d'internet.

Une histoire de protocoles

Le fonctionnement d'internet est centré sur la notion de protocole de communication.

Un protocole de communication est une convention, ensemble de règles, qui permettent la communication entre deux entités.

Les protocoles de communications ne sont pas uniquement limités au numérique. Il est par exemple fréquent d'avoir des conventions dans d'autres domaines.

Par exemple, lors des communications radio, vu que la fréquence de communication peut être utilisée par de nombreuses personnes à la fois, il est commun d'annoncer l'emmetteur du message et le destinataire. On annonce éventuellement la fin du message et l'attente d'une réponse par a vous.

  • Vol 6456 à tour de contrôle. J'ai un problème moteur, je demande un atterissage d'urgence. A vous
  • Tour de contrôle à vol 6456. La piste A3 est libre, vous pouvez commencer l'approche. Nous envoyons l'équipe d'intervention sur place. A vous
  • ...

Internet comporte plusieurs dizaines de protocoles. Nous n'en aborderont que quelques uns dans ce cours.

Modèle TCP/IP

Le modèle TCP/IP classifie les protocoles d'Internet en fonction de leur usage. Il porte le nom et TCP et IP, deux protocoles très importants que nous verrons par la suite.

Il est organisé en couches, les protocoles d'une couche étant construits sur les protocoles de la couche inférieure. Il existe plusieurs découpage des couches, en voici un.

Nom de la couche Description
Application Crée des applications à l'échelle d'Internet (Exemple : HTTP)
Transport Relie des logiciels à travers Internet (Exemple : TCP, UDP)
Réseau Relie des machines à travers Internet (Exemple : IP)
Liaison Relie des machines à l'aide de liens physiques (Exemple : ethernet)
Physique Lien physique entre deux machines

Chaque couche représente un aspect plus ou moins abstrait d'Internet. Ainsi, la couche Transport relie des logiciels entre eux, et fait abstraction des couches inférieures : réseau, liaison et physique. Dans cette couche, la notion de cable Internet ou de WiFi, n'existe tout simplement pas.

On va brievement aborder ces couches. Les protocoles IP et TCP seront abordés un peu plus en détail dans les chapitres suivants.

Couche physique

La couche physique consiste en les liens physiques entre des machines (câbles, fréquences radio, ...).

D'une manière générale, on va considérer qu'un lien physique relie deux machines et leur permet de communiquer, c'est ce que l'on appelle un lien point à point.

Sur une machine, un lien physique corresponds à une interface réseau. De nombreuses machines ont plusieurs interfaces réseau. Par exemple, certains ordinateurs ont une prise RJ45 et une antenne WiFi. Chaque interface a une adresse MAC (plus ou moins unique au monde), qui est de la forme : XX:XX:XX:XX:XX:XX, où XX représentent deux octets en notation hexadécimale. Par exemple : FE:A0:23:5C:DE:FF.

lien physique

Couche liaison

La couche liaison utilise des liens physiques pour permettre une communication directe entre deux ou plusieurs machines.

Le protocole le plus connu est Ethernet.

Il connecte entre elles deux machines ou plus par le biais d'une équipement intermédiaire, le switch (ou commutateur en français) pour former un réseau.

ethernet

Dans le protocole Ethernet, les machines utilisent les addresses MAC. Les messages sont envoyés par le biais de trames.

Une trame est structurée ainsi :

En-tête Charge utile (message) Seq. Verification
18 octets 46 à 1500 octets 4 octets

Activité : des trames ?

=== "Enoncé, partie 1"

    Combien de trames sont nécessaires pour envoyer un message de 100 octets ? De 10 000 octets ? Quelle est la formule générale ?

=== "Solution"

    Il faut 1 trame pour un message de 100 octets.

    Il faut 7 trames pour un message de 10 000 octets

    La formule générale pour le nombre de trame $T$ d'un message de taille $M$ :

    $$
    T = \lceil\frac{M}{1500}\rceil
    $$

    Où $\lceil x \rceil$ est l'arrondi à l'entier supérieur de $x$.

===! "Enoncé, partie 2"

    Donnez la formule qui permet de calculer, approximativement, le nombre total $O$ d'octets transmis pour un message de $M$ octets.

    Calculez cette valeur pour deux transmissions de 10 000 et 10 000 000 d'octets respectivement. Commentez ces nombres.

    Que se passerait-il si on augmentait la taille des trames ? Si on la réduisait ?

=== "Solution"

    $$
    O = \lceil\frac{1522}{1500} \times M\lceil
    $$

    Pour envoyer un message de 10 000 d'octets, on transmet 10 147 octets

    Pour envoyer un message de 10 000 000 d'octets, on transmet 10 146 667 octets

    C'est à dire, environ 1% de plus.

    Augmenter la taille des trames reviendrait à transmettre moins d'en-tête, donc le nombre d'octets transmis serait plus petit.

    Réduire la taille des trames reviendrait à transmettre plus d'en-têtes, donc le nombre d'octets transmis serait plus grand.

    Mais du coup... Pourquoi ne pas faire des grande trames ? Ou même une seule immense trame ?

    C'est une très bonne question, qui mérite une section !

Découpage en trames

Activité

Jérémy et Félix on décidé de se mettre en colocation pendant leurs études. A l'aide des souvenirs de leurs cours de NSI, et de quelques recherches sur Internet, ils mettent en place un serveur dans la colocation, où ils hébergent, entre autres, un serveur Minetest1 et stockent quelques fichiers. Dans leur appartement, ils ont donc un réseau qui ressemble à celui ci :

decoupage en paquets

Tous les liens peuvent transmettre 100Mo/seconde (100 000 000 octets).

Jérémy est en train de jouer à Minetest, en mode hardcore : si il meurt, c'est définitif !

Il est en pleine séquence d'action, poursuivi par une horde de monstres.

Son ordinateur échange continuellement des messages avec le serveur.

Soudain, Félix décide de regarder le nouvel épisode du meilleur manga isékai de la saison : "Réincarné en prof de NSI", qu'il avait téléchargé plus tôt sur le serveur.

Le fichier de l'episode fait environ 3Gb.

Félix lance donc une commande pour demander au serveur de lui envoyer l'episode.

=== "Enoncé"

    Expliquez pourquoi Jérémy est très content que la transmission de l'épisode soit découpée en trame.

    Vous pouvez réfléchir à plusieurs.

=== "Aide"

    un lien ne peut faire transiter qu'un message à la fois.

=== "Solution"

    Quand le serveur se met à envoyer l'épisode à Félix, le lien entre le serveur et le commutateur devient occupé par la transmission.

    **Supposons que le découpage en trame n'existe pas.**

    L'épisode pèse 3gb, soit 3000Mo. Il met donc environ 30 secondes à s'envoyer du serveur vers le PC de Félix.

    30 secondes pendant lesquelles le lien est occupé, et donc que la communication entre le PC de Jérémy et le serveur Minetest est coupée.

    Et donc Jérémy se fait rattraper par les monstres, et meurt (dans le jeu).

    **Maintenant, que ce passe-t-il si on découpe la transmission en petite trame ?**

    Chaque trame fait 1500 octets environ. Une trame occupe donc le lien pendant environ 0.000015 seconde (soit 15 microsecondes).

    La communication entre le PC de Jérem et le serveur reste alors très réactive : le serveur peut "mélanger" les trames du jeu et les trames de l'épisode.

Couche réseau

La couche liaison et le protocole Ethernet est limitante sur la topologie du réseau :

  • Toutes les machines doivent se connaitre
  • Ajouter des machines demande une certaine puissance de calcul
  • Le réseau éthernet a une faible redondance des liens, et donc peu de tolérance aux pannes (même si elles sont TRES rares.).

Plutôt que de faire un énorme réseau avec toutes les machines du monde, la couche réseau propose de connecter entre eux des réseaux. Celà crée alors un réseau de réseau, un "inter-réseaux" : Internet.

Activité

=== "Enoncé"

    Réfléchissez à comment connecter deux ou plusieurs réseaux locaux.

    Quel problème apparaît ?

=== "Solution"

    Il faut une machine entre les deux réseaux, qui sert de *passerelle*.

    On peut même connecter plusieurs réseaux les uns avec les autres de cette manière : soit une machine par paire, soit une machine pour plusieurs réseaux.

    Un problème apparaît : comment faire communiquer les machines à travers plusieurs réseaux.

routeur

Le protocole qui permet cette communication s'appelle le protocole IP (pour Internet Protocol).

Il faut globalement deux choses :

  • Identifier chaque machine de manière unique
  • Transmettre le message

activité : identification des machines

Utilisez un ordinateur ou votre smartphone pour aller sur le site https://www.mon-ip.com/

Vous devriez voir l'adresse IP v4 de votre smartphone, de la forme v.x.y.zv, x, y et z sont des nombres entre 0 et 255.

C'est l'identifiant de votre machine sur internet.

activité : transmission des messages

Partagez la classe en divers groupes d'élèves.

Maintenant, faites passer un message à travers la classe. Chaque élève d'un groupe ne peut passer le message qu'aux élèves du même groupe.

Certains élèves appartiendront à 2 groupes en même temps. On les appelera les routeurs.

La transmission des messages par le protocole IP suit le même principe : les routeurs se passent les messages de proche en proche, jusqu'à atteindre la destination.

Nous verrons le fonctionnement de cette couche plus en détails dans un chapitre dédié.

Paquets IP et encapsulation

Comme IP s'appuie sur Ethernet, il faut découper le message en paquets.

Un paquet IP a la forme suivante :

| En-tête | Charge utile (message) | | --- | --- |---| | 20 à 60 octets | ??? octets |

Activité

Expliquez comment envoyer un paquet IP à travers un lien Ethernet.

Ce principe est l'encapsulation, il permet l'abstraction.

Activité

Expliquez les étapes de la communication entre deux machines appartenant à des réseaux locaux différents, reliés par un routeur : création des paquets et des trames, ...

Couche transport

La couche transport s'appuie sur la couche Internet, et propose des mécanismes pour simplifier l'échange de données entre des logiciels. Au sein d'une machine, un logiciel est identifié par un numéro de port, en général un entier sur 16 bits.

Son protocole le plus connu et le plus utilisé est TCP, qui rends extrêmement fiable la transmission de données, et qui sera détaillé dans un chapitre dédié.


  1. Minetest est un jeu libre inspiré de Minecraft.