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

Couche réseau

La couche réseau homogénéise les communications entre machines sous un unique protocole : IP (Internet Protocol). Elle s'appuie sur la couche inférieure, liaison, dont elle masque la complexité et la diversité des liens et des protocoles de communication.

Pour former la couche réseau, on connecte des réseaux liaisons par le biais de routeurs. Cet ensemble forme Internet. Les machines y sont identifiées par le biais d'une adresse IP.

Une adresse IP est un entier sur 32 bits (IPv4) ou 128 bits (IPv6). Dans ce cours, on ne traitera que les adresses IPv4. Le principe général du fonctionnement d'IP est le même pour IPv6. Pour les rendre plus simple à manipuler, on note en général les adresses IPv4 comme 4 octets en valeur décimale séparés par des points : 242.132.10.103.

routeur

Cette architecture permet de rendre Internet très résilient et adaptatif.

Les sous-réseaux qui composent Internet sont plus ou moins indépendants et la charge du trafic est réparti sur touts les routeurs et commutateurs d'Internet, et non pas focalisé sur un seul commutateur. Il est donc très facile d'ajouter ou de retirer des machines, et une panne dans un sous-réseau, par exemple un commutateur qui tombe en panne, n'affecte peu ou pas le reste d'Internet.

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.

Par exemple, détecter des erreurs de transmission et de récupérer de ces dernières.

Son protocole le plus connu et le plus utilisé est TCP, qui sera détaillé plus loin dans le cours.

Encapsulation

Les protocoles du modèle TCP/IP s'appuient les uns sur les autres. Pour transmettre des données avec le protocole IP, on doit aussi utiliser un lien physique, et donc un protocole de la couche Liaison, comme le protocole Ethernet.

Un mécanisme d'encapsulation est utilisé pour rendre les protocoles indépendants les uns des autres : Le fonctionnement d'Ethernet ne dépends pas du fonctionnement d'IP, et, dans une moindre mesure, le fonctionnement d'IP ne dépends pas du fonctionnement d'Ethernet.

Pour transmettre des données à l'aide d'un protocole, on utilise un message qui comporte :

  • Les données à proprement parler, appelées charge utile. Cette partie n'est pas utilisée par le protocole.
  • Des informations nécessaires à la transmission du message, souvent sous forme d'un en-tête de message ou d'un pied de message.

Par exemple, un message dans le protocole IP, appelé paquet, est structuré ainsi :

  • Un en-tête, qui comprends entre autres l'adresse IP du destinataire et celle de l'emetteur.
  • La charge utile.

TODO schema ici

Quand un paquet IP est transmis à l'aide du protocole Ethernet, le paquet est la charge utile du message Ethernet (appelé trame), qui est structuré ainsi :

  • Un en-tête, qui comprends entre autres l'adresse MAC du destinataire et celle de l'emetteur.
  • La charge utile (ici, notre paquet IP).
  • Un pied, qui permet entre autres de signaler la fin de la trame lors de la transmission.

TODO schema ici

Exemple de communication

Supposons qu'un logiciel Z de port 42000 sur l'ordinateur A veuille envoyer HELLO à un logiciel Y de port 38000 sur l'ordinateur B.

  1. Le logiciel Z :
    1. crée un paquet TCP, comprenant en en-tête son numéro de port et celui du destinataire. Sa charge utile est HELLO. Il en demande l'envoie au système d'exploitation de l'ordinateur A.
  2. Le système d'exploitation de l'ordinateur A:
    1. construit ensuite un paquet IP, avec en en-tête son adresse IP, et celle du destinataire. Sa charge utile est le paquet TCP.
    2. construit finalement une trame Ethernet, avec en en-tête son adresse MAC et l'adresse MAC du routeur sur son réseau local (Routeur 1). Sa charge utile est le paquet IP.
    3. transmet cette trame au commutateur 2.
  3. Le commutateur 2 :
    1. lit l'adresse MAC du destinataire de la trame, et la relaie au Routeur 1.
  4. Le routeur 1 :
    1. reçoit la trame, et en extrait le paquet IP.
    2. lit l'adresse IP du destinataire du paquet, et décide que le Routeur 3 sera relai de la transmission.
    3. construit une trame Ethernet, avec en en-tête son adresse MAC et l'adresse MAC du routeur 3. Sa charge utile est le paquet IP.
    4. transmet cette trame au Routeur 3.
  5. Le routeur 3 :
    1. reçoit la trame, et en extrait le paquet IP.
    2. Le routeur 3 lit l'adresse IP du destinataire du paquet, et décide que le Routeur 2 sera relai de la transmission.
    3. construit une trame Ethernet, avec en en-tête son adresse MAC et l'adresse MAC du routeur 2. Sa charge utile est le paquet IP.
    4. transmet cette trame au Routeur 3.
  6. Le routeur 2 :
    1. reçoit la trame, et en extrait le paquet IP.
    2. Le routeur 2 lit l'adresse IP du destinataire du paquet, qui est sur le même réseau Ethernet que lui.
    3. Le routeur 2 construit une trame Ethernet, avec en en-tête son adresse MAC et l'adresse MAC de l'ordinateur B. Sa charge utile est le paquet IP.
    4. Transmet cette trame au commutateur 3.
  7. Le commutateur 3:
    1. lit l'adresse MAC du destinataire de la trame, et la relaie à l'ordinateur B
  8. Le système d'exploitation de l'ordinateur B:
    1. reçoit la trame, et en extrait le paquet IP.
    2. Le système d'exploitation lit le paquet IP, et en extrait le paquet TCP.
    3. lit le paquet TCP, identifie le numéro de port du logiciel Y, et lui transmet le Paquet TCP
  9. Le logiciel Y :
    1. extrait la charge utile du paquet TCP. Il a reçu HELLO !

On remarque que :

  • Plusieurs trames Ethernet ont étés crées, lues et détruites dans le processus.
  • Le paquet IP a été lu par les routeurs mais jamais modifié.
  • Le paquet TCP a été lu uniquement par les sytèmes d'exploitation et les logiciels Z et Y.

Celà veut dire que pour utiliser un autre protocole de la couche transport à la place de TCP, par exemple UDP, il n'y a aucun chagement à faire au niveau des protocoles IP et Ethernet !

TODO ajouter un schéma ici ?

Découpage en paquets

Les trames Ethernet ont une taille limitée. En général, cette taille est de l'ordre de 1500 octets. Celà limite donc aussi la taille des paquets IP etc. Si l'on veut transmettre de gros messages, par exemple une image de 1 Mo (1 000 000 octets), il nous faut "découper" le message en plusieurs petites charges utiles.

Cette limitation peut sembler être une grosse contrainte, mais parce qu'un lien ne peut transmettre qu'un trame à la fois, elle est nécessaire pour assurer la fluidité des transmissions sur le réseau.

Voici un petit scénario qui illustre celà.

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

Jérémy est connecté sur le serveur Minetest et joue. Son ordinateur échange donc très régulièrement des messages avec le serveur.

On peut représenter les trames qui transitent que le lien entre le serveur et le commutateur comme sur le schéma suivant :

TODO prof ajouter schema ici

Dans cette situation, on remarque que le temps entre l'envoi d'un message et la réception de la réponse est d'environ 1ms. C'est le ping du serveur de jeu.

A un moment, Félix a envie de regarder une conférence d'informatique, dont la version vidéo est stockée sur le serveur. Par le biais d'un logiciel, il demande au serveur de lui envoyer la vidéo.

Si l'on suppose que les trames peuvent avoir une taille illimitée, on obtient le transit suivant sur le lien commutateur - serveur.

TODO prof ajouter schema ici

Pendant \(t\), temps de transfer de la vidéo, l'échange de message entre le jeu de Jérémy et le serveur est interrompu. Mais combien dure \(t\) ?

Voici la bande passante de diverses technologies de liens physiques, c'est à dire le nombre maximal de bits par seconde que l'on peut transmettre avec le lien.

TODO ici approx. des BP de techno de lien.

Considérons que nos deux compères utilisent dans leur réseau local des liens ethernet 1 Gbit/seconde. Le fichier de la conférence fait 3 Go, soit 24 Gbits. Il faudrait donc 24 secondes pour le transférer sur ce lien.

TODO ici exercice calculer avec d'autres technos.

Maintenant, si on limite la taille des trames à 1500 octets, le transit sur le lien commutateur - serveur ressemblera à ça :

TODO ici schema

On peut voir que le ping de Jérémy reste relativement réduit dans notre cas, et c'est le cas de la plupart des communications. On dit que le réseau est fluide.

Toutefois, la fluidité a un coût.

Pour envoyer 3Go avec des trames de 1500 octets environ, il nous faut 2 000 000 de trames, et autant de paquets IP. On utilisera aussi sans doute un protocole au dessus de IP, comme TCP, ou, dans le cas du transfert vidéo, UDP.

Rappelons nous, chaque trame éthernet, chaque paquet IP, chaque datagramme UDP, en plus de sa charge utile, a aussi un en-tête. Voici la taille approximative des en-têtes pour chacuns des protocoles mentionnés :

Protocole Taille en tête (+ pied)
Ethernet 36 octets
IPv4 24 octets
TCP 28 octets
UDP 8 octets

Donc, dans le cadre de l'utilisation de Ethernet + IP + UDP, chaque fois que l'on envoie un(e) trame/paquet/datagramme de 1500 octets, on doit en plus transmettre 68 octets correspondant aux en-têtes. Sur 2 000 000 de trames, celà fait 136Mo, soit environ 4.5% de données à transférer en plus !

D'autres structures couche liaison

TODO (prof) a ajouter


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