Les protocoles de communication
===============================
<img class="r-stretch centre image-responsive" src="https://upload.wikimedia.org/wikipedia/commons/3/3d/Torrentcomp_small.gif" alt="illustration">
<small>Crédits : <a href="https://commons.wikimedia.org/wiki/File:Torrentcomp_small.gif">Wikiadd</a>, <a href="http://creativecommons.org/licenses/by-sa/3.0/">CC BY-SA 3.0</a>, via Wikimedia Commons</small>
*Ce document a été créé en collaboration avec Claude (modèle Claude Sonnet 4), qui a été utilisé pour transposer le cours correspondant (accessible [ici](protocoles)) en un diaporama. Pour voir la conversation [cliquez ici](https://claude.ai/public/artifacts/b9941432-f36f-4184-ac9d-6935779e57a8).*
---
## Qu'est-ce qu'un protocole de communication ?
- **Définition** : Ensemble de règles pour la communication entre machines
- **Spécifie** :
- Le **format** des informations échangées
- La **manière** de les échanger
- L'**établissement** et la **terminaison** de la communication
- Les machines utilisent **plusieurs protocoles** simultanément
---
## Rappels sur le protocole TCP/IP
----
### Définitions
- **Protocole IP** (Internet Protocol) :
- Assure l'acheminement des paquets d'une machine A vers B
- Utilise les adresses IP des machines
- **Protocole TCP** (Transmission Control Protocol) :
- Assure la transmission correcte des paquets
- Gère la numérotation et les accusés de réception
- Basé sur le **découpage en paquets** et l'**encapsulation**
----
### TCP/IP - Étape 1 : Encapsulation
- **TCP** découpe les données en paquets
- Ajoute un **numéro** à chaque paquet
- **IP** encapsule le paquet TCP
- Ajoute les **adresses IP** de l'émetteur et du récepteur
<img class="centre image-responsive" src="data/tcp_ip_1.png" alt="illustration">
----
### TCP/IP - Étape 2 : Transport
- Le protocole **IP** achemine les paquets vers la destination
- Utilise l'**adresse IP** du destinataire
- Les paquets passent de **routeurs en routeurs**
- Chemin déterminé par des **algorithmes** (route la plus rapide)
<img class="centre image-responsive" src="data/tcp_ip_2.png" alt="illustration">
----
### TCP/IP - Étape 3 : Désencapsulation
- À destination, les données sont **désencapsulées**
- **IP** donne chaque paquet à **TCP**
- **TCP** réordonne les paquets selon leur numéro
- Reconstitue les **données originales**
<img class="centre image-responsive" src="data/tcp_ip_3.png" alt="illustration">
----
### TCP/IP - Étape 4 : Accusé de réception
- **TCP** s'assure que chaque paquet arrive à destination
- L'ordinateur B envoie un **accusé de réception** à A
- Message : "OK, j'ai bien reçu le paquet"
- Si pas d'accusé → **renvoi** du paquet après un délai
<img class="centre image-responsive" src="data/tcp_ip_4.png" alt="illustration">
---
## Le modèle de *couches* Internet
----
### Modèle Internet en 4 couches
<img class="centre image-responsive" src="data/modele_internet_4_couches.svg" alt="modèle internet en 4 couches">
- **Couche 4 - Application** : Point d'accès aux services réseau (coder et décoder les infos utiles pour les applications)
- **Couche 3 - Transport** : Gestion des connexions entre applications (contrôle des flux, gestion des erreurs)
----
### Modèle Internet en 4 couches
<img class="centre image-responsive" src="data/modele_internet_4_couches.svg" alt="modèle internet en 4 couches">
- **Couche 2 - Internet** : Acheminement des paquets via les routeurs
- **Couche 1 - Accès réseau** : Transmission physique entre machines (d'un même résau)
----
### Encapsulation des données
<img class="centre image-responsive" src="data/modele_internet_encapsulation_v2.png" alt="modèle internet en 4 couches">
- Chaque couche **ajoute des données** à la couche supérieure
- **Segment** : données de la couche Transport
- **Datagramme/Paquet** : données de la couche Internet
- **Trame** : données de la couche Accès réseau
- Principe de **pile de protocoles**
----
### Modèle Internet = modèle TCP/IP
- Le modèle Internet s'appelle aussi parfois *modèle TCP/IP*
- Mais cela porte à confusion !
- Car la couche "Transport" peut utiliser un autre protocole que TCP (ex : UDP)
- Car la couche "Internet" met en oeuvre d'autres protocoles que IP (ex : ARP)
----
## Couche Accès réseau
- Le message de la couche n'est pas envoyé directement, il est encapsulé dans une **trame** qui sera envoyée **physiquement** sur le réseau
- Communication via **interface physique**
- Identifiée par une **adresse MAC** (Media Access Control)
- **Adresse physique unique** définie par le constructeur
- Format : 6 octets en hexadécimal (XX:XX:XX:XX:XX:XX)
- Exemple : 5E:FF:56:A2:AF:15
----
## Couche *Accès réseau*
- Interfaces physiques connues : Ethernet, Wi-Fi, OTN (Optical Transport Network) = fibre
- Si la laison physique est de type Ethernet, on parle de **trame Ethernet** :
- Encapsule le **datagramme IP**
- Ajoute les **adresses MAC** émetteur et destinataire
- Contient des **codes de contrôle d'erreurs**
- Permet la transmission **physique** sur le réseau
----
## Protocole ARP
- **Problème** : IP connaît les adresses IP, pas les adresses MAC
- **Solution** : Protocole ARP (Address Resolution Protocol) = permet de connaître l'@MAC à partir de l'@IP
- **Principe** :
- Requête à toutes les machines : "Quelle @MAC a cette @IP ?"
- Seule la machine concernée répond avec son @MAC
- Table de correspondance mise en cache
----
## Couche *Application*
- Le message encapsulé par la couche *Transport* contient lui-même des données encapsulées par le protocole utilisé au niveau de la couche *Application*
- Exemples de protocoles utilisés par la couche *Application* :
- **HTTP/HTTPS** : Navigation web (navigateur ↔ serveur)
- **SMTP, POP, IMAP** : Messagerie électronique
- **FTP** : Transfert de fichiers
- Chaque application utilise son **protocole spécifique**
----
## Synthèse - Modèle Internet complet
- **4 couches** avec leurs protocoles respectifs
- **Encapsulation** à l'envoi (de haut en bas)
- **Désencapsulation** à la réception (de bas en haut)
- Exemple complet : Requête HTTP via trame Ethernet
<img class="centre image-responsive" src="data/modele_internet_protocoles.svg" alt="modèle internet en 4 couches">
----
## Synthèse - Exemple (requête HTTP)
<img class="centre image-responsive" src="data/modele_internet_4_couches_bilan.svg" alt="modèle internet en 4 couches">
---
## Le modèle OSI
----
#### Modèle OSI
- C'est un autre modèle *théorique* pour découper les piles de protocoles utilisés
<img class="centre image-responsive" src="data/osi_vs_internet.png" alt="modèle internet en 4 couches">
---
# Le protocole du bit alterné
----
## Introduction
- La couche *Transport* gère les flux de données
- Protocoles mis en œuvre pour assurer la fiabilité des transmissions
- TCP utilise numérotation et accusé de réception
- **Protocole du bit alterné** : solution plus basique mais pas infaillible
----
## Contexte
- Alice veut envoyer à Bob un message M
- Message prédécoupé en sous-messages M0, M1, M2,...
- Alice envoie ses sous-messages au fur et à mesure
----
### Situation idéale
<img class="r-stretch centre image-responsive" src="data/ideale.png" alt="situation idéale">
- Messages envoyés par Alice à cadence Δt fixée
- Sous-messages arrivent tous à destination dans le bon ordre
- Transmission correcte
----
### Situation réelle
<img class="r-stretch centre image-responsive" src="data/realite.png" alt="situation réelle">
- On maîtrise le timing d'envoi d'Alice
- Temps d'arrivée des sous-messages *imprévisible*
- Sous-messages peuvent être détruits en route
- Exemple : M0 arrive après M1, M2 n'arrive jamais
----
**Que faire ?**
----
### Solution naïve
<img class="r-stretch centre image-responsive" src="data/naive.png" alt="situation naïve">
- Bob envoie un signal ACK (acknowledgement) à Alice
- ACK confirme la réception du sous-message
- Alice renvoie un message considéré comme perdu
- Permet de gérer les messages perdus
----
### Problème de la solution naïve
<img class="r-stretch centre image-responsive" src="data/naivebad.png" alt="situation naïve peu efficace">
- Si le deuxième ACK de Bob met trop de temps à arriver
- Alice suppose que son sous-message M1 n'est pas arrivé
- Elle renvoie M1
- Bob se retrouve avec deux fois le sous-message M1
- Transmission incorrecte, rien ne permet de le détecter
----
### Problème de la solution naïve
<img class="r-stretch centre image-responsive" src="data/naivebad.png" alt="situation naïve peu efficace">
> Que se passe-t-il sur le deuxième ACK de Bob est perdu ?
----
### Le protocole du bit alterné - Principe
- Bob intègre une méthode de validation du sous-message reçu
- Il peut décider de garder ou d'écarter le message
- But : éviter les doublons
----
### Le protocole du bit alterné - Mécanisme (1/2)
- Alice ajoute un bit de contrôle **FLAG** à chaque sous-message
- Au départ, FLAG vaut 0
- Quand Bob reçoit un FLAG, il renvoie un ACK **égal au FLAG reçu**
----
### Le protocole du bit alterné - Mécanisme (2/2)
- Alice attend l'ACK contenant le même bit que son dernier FLAG envoyé
- Tant qu'elle ne l'a pas reçu : continue à envoyer le même sous-message avec le même FLAG
- Dès qu'elle l'a reçu : envoie nouveau sous-message en inversant le bit FLAG
- Bob garde seulement les sous-messages dont le FLAG = inverse de son dernier ACK
----
#### Cas où le sous-message est perdu
<img class="r-stretch centre image-responsive" src="data/alt2.png" alt="cas où le message est perdu">
- Le message d'Alice avec le FLAG 1 est perdu en route
- Alice ne reçoit pas d'ACK 1 donc renvoie le message avec le même FLAG
- Bob finit par recevoir le message, renvoyé l'ACK 1 qui est reçu par Alice
----
#### Cas où le ACK est perdu
<img class="r-stretch centre image-responsive" src="data/alt1.png" alt="cas où l'accusé est perdu">
- Bob reçoit M1 avec FLAG 1 mais l'ACK 1 est perdu
- Alice renvoie M1 avec FLAG 1
- Bob reçoit M1 :
- renvoie un ACK1
- Bob détecte un doublon et l'écarte (il s'attend à avoir un FLAG 0 et reçoit un FLAG 1)
- Protocole détecte bien le doublon
----
#### Cas où un sous-message est en retard
<img class="r-stretch centre image-responsive" src="data/alt3.png" alt="cas où le message est en retard">
- Même principe : doublon détecté et rejeté
- Transmission correcte !
----
#### Cas où le protocole est inefficace
- Il existe des situations où le protocole du bit alterné ne permet pas d'assurer une transmission correcte
----
#### Exemple problématique
Cas précédent :
<img class="r-stretch centre image-responsive" src="data/alt3.png" alt="cas où le message est en retard">
> Et si le premier sous-message M1 était *encore plus* en retard ?
----
### Conclusion
- Protocole longtemps utilisé au sein de la couche 2 du modèle OSI
- Simple et léger
- Peut être facilement mis en défaut
- Remplacé par des protocoles plus performants mais plus complexes comme TCP (qui intervient quant à lui au niveau de la couche *Transport*)
----
## Protocoles sans accusé de réception
- Certains protocoles ne prévoient pas d'accusés de réception
- L'émetteur ne sait pas si tous les paquets arrivent
- Exemple : **protocole UDP**
- transmissions plus rapides mais moins fiables que TCP
- Paquet perdu = définitivement perdu
- Utilisation quand la rapidité est primordiale et la perte moins gênante :
- VoIP
- streaming vidéo
- jeux en ligne
---
# Bilan
----
## Bilan (1/2)
- **Protocole de communication** = ensemble de règles précisant format, échange et établissement/terminaison
- Messages découpés en paquets, acheminés via TCP et IP
- Communications via **couches de protocoles** avec encapsulation
- **Modèle Internet** (4 couches) et **modèle OSI**
----
## Bilan (2/2)
## Les couches
- **Application** : protocoles des applications (email, HTTP...)
- **Accès réseau** : fabrication de la trame avec adresses MAC
- Protocoles de fiabilité : **bit alterné** (simple mais limité), **TCP** (complexe mais efficace)
---
**Références** :
- Cours *Introduction aux réseaux* du DIU EIL de l'université de Nantes, Pierrick Passard et Salima Hamma.
- Cours de Gilles Lassus sur les [Protocoles de communication](https://glassus.github.io/premiere_nsi/T3_Architecture_materielle/3.4_Protocoles_de_communication/cours/).
- Cours de David Roche sur le [Modèle TCP/IP](https://dav74.github.io/site_nsi_prem/c18c/)
---
Germain Becker, Lycée Emmanuel Mounier, Angers.
Sous licence [CC BY-SA 4.0](https://creativecommons.org/licenses/by-sa/4.0/deed.fr).
