Envoyer un message, charger une page, synchroniser un jeu : tout passe par un réseau.
Ce chapitre explique comment les données sont découpées en paquets et encapsulées couche par couche, comment un protocole simple, le bit alterné, permet de récupérer un paquet perdu, et comment est organisé le réseau local d'un établissement.
Il se termine par les périphériques, les capteurs et actionneurs des objets connectés, et la conception d'une interface homme-machine à partir d'un cahier des charges.
1. Transmettre des données : paquets et encapsulation
1.1 Pourquoi découper en paquets
Un fichier de plusieurs mégaoctets n'est jamais envoyé d'un bloc.
Il est découpé en paquets de taille limitée (environ 1500 octets sur Ethernet), chacun numéroté.
defdecouper(message, taille):
"""Découpe le message en paquets numérotés d'au plus taille caractères."""
paquets = []
numero = 0for debut inrange(0, len(message), taille):
paquets.append((numero, message[debut:debut + taille]))
numero = numero + 1return paquets
for p in decouper("Rendez-vous demain à midi devant le lycée.", 10):
print(p)
Chaque paquet porte son numéro : même s'ils arrivent dans le désordre, le destinataire peut reconstituer le message.
defoctets_transmis(taille_fichier, taille_paquet, entete):
paquets = taille_fichier // taille_paquet
# à toi : et s'il reste des octets ?return paquets, taille_fichier
1.2 Les couches et l'encapsulation
Le réseau est organisé en couches, chacune avec son protocole.
Couche
Protocole
Rôle
Ce qu'elle ajoute au paquet
application
HTTP, SMTP, DNS…
le contenu utile : page, courriel, requête
le message
transport
TCP (ou UDP)
découpe, numérote, contrôle l'arrivée, remet dans l'ordre
ports, numéro de séquence
réseau
IP
achemine de machine en machine à travers Internet
adresses IP source et destination
liaison
Ethernet, Wi-Fi
transmet sur un lien physique entre deux machines voisines
adresses MAC, contrôle d'erreur
Un routeur ne regarde que l'en-tête IP. Un commutateur ne regarde que l'en-tête Ethernet.
1.3 Lien avec TCP/IP
IP livre les paquets « au mieux », sans garantie : ils peuvent se perdre, arriver en désordre ou en double.
TCP apporte la fiabilité : connexion établie avant l'échange, accusés de réception, renvoi des paquets manquants, remise dans l'ordre.
C'est TCP qui utilise, dans une version élaborée, le principe du bit alterné.
2. Un protocole de récupération : le bit alterné
2.1 Le problème
Un émetteur envoie des paquets à un récepteur, sur un lien qui peut perdre des paquets ou des accusés de réception.
Comment garantir que chaque paquet arrive une fois et une seule, dans l'ordre ?
2.2 Les règles
2.3 Dérouler les scénarios
Scénario
Déroulement
sans perte
A0, ACK0, B1, ACK1, C0…
perte d'un paquet
A0 perdu ; délai ; A0 renvoyé ; ACK0 ; B1…
perte d'un accusé
A0 reçu, ACK0 perdu ; délai ; A0 renvoyé ; le récepteur attendait le bit 1 : doublon ignoré, ACK0 renvoyé ; l'émetteur passe à B1
La simulation ci-dessous applique exactement ces règles. Le lien perd un message sur trois en moyenne : relance plusieurs fois, puis essaie perte = 0 et perte = 0.6.
from random import random
perte = 0.33# probabilité qu'un message se perde
paquets = ["A", "B", "C"]
recu = [] # ce que l'application du récepteur a reçu
bit_attendu = 0# état du récepteur
bit = 0# état de l'émetteurfor contenu in paquets:
accuse = Falsewhilenot accuse:
print("émetteur : envoie", contenu + str(bit))
if random() < perte:
print(" paquet perdu, le délai expire")
continueif bit == bit_attendu:
recu.append(contenu)
bit_attendu = 1 - bit_attendu
print("récepteur : accepte", contenu, "et envoie ACK" + str(bit))
else:
print("récepteur : doublon ignoré, renvoie ACK" + str(bit))
if random() < perte:
print(" accusé perdu, le délai expire")
continue
accuse = True
bit = 1 - bit
print("reçu :", recu)
Quel que soit le nombre de pertes, la dernière ligne est toujours ['A', 'B', 'C'] : chaque paquet est reçu une fois et une seule, dans l'ordre.
chacune a une carte réseau et son adresse MAC, fixée en usine sur 48 bits : 3C:5A:B4:12:9F:01
commutateur (switch)
relie les machines par câbles Ethernet, et aiguille chaque trame vers le bon port grâce à l'adresse MAC
bornes Wi-Fi
jouent le même rôle, sans fil
routeur (la « box »)
relie le réseau local à Internet ; adresse IP publique côté Internet, privée côté local ; souvent pare-feu
serveur DHCP
attribue automatiquement une adresse IP à chaque machine
serveur DNS
traduit un nom comme www.klaria.net en adresse IP
3.2 Adresses IP
Chaque machine du réseau local reçoit une adresse IP privée, unique dans le réseau : 192.168.1.21, 10.0.0.5.
Un masque indique quelle partie de l'adresse désigne le réseau (192.168.1.) et quelle partie désigne la machine.
defmeme_reseau(ip1, ip2):
"""Vrai si les deux adresses ont les trois mêmes premiers nombres (masque 255.255.255.0)."""return ip1.split(".")[0:3] == ip2.split(".")[0:3]
print(meme_reseau("192.168.1.21", "192.168.1.50"))
print(meme_reseau("192.168.1.21", "192.168.2.50"))
Dans le second cas, les deux machines ne sont pas dans le même réseau : les paquets devront passer par un routeur.
3.3 Simuler un réseau
Des logiciels comme Filius ou Packet Tracer permettent de construire un réseau virtuel (machines, commutateur, routeur, serveur DNS), d'attribuer les adresses et d'observer les paquets.
Commande
Ce qu'elle fait
ping 192.168.1.50
teste qu'une machine répond
ip a (Linux)
affiche les adresses de la machine
traceroute
liste les routeurs traversés jusqu'à une destination
4. Périphériques, capteurs et actionneurs
4.1 Entrées et sorties
Type
Rôle
Exemples
périphériques d'entrée
fournir des données à la machine
clavier, souris, micro, caméra, lecteur de carte
périphériques de sortie
restituer des données
écran, haut-parleur, imprimante, vibreur
les deux à la fois
écran tactile, carte réseau, disque
Le système d'exploitation les gère grâce à des pilotes, et les programmes y accèdent par des bibliothèques.
4.2 Capteurs et actionneurs
Dans un objet connecté, un système embarqué ou un robot, le programme du microcontrôleur (Arduino, micro:bit, Raspberry Pi) répète sans fin la même boucle : lire les capteurs, décider, commander les actionneurs.
Ici, on n'a pas de vrai capteur : on le remplace par une liste de mesures.
mesures = [22.5, 24.0, 25.5, 27.0, 25.2, 24.8, 23.0] # une mesure par seconde
seuil = 25
ventilateur = Falsefor temperature in mesures: # sur un vrai microcontrôleur : while Trueif temperature > seuil: # décider
ventilateur = Trueelse:
ventilateur = Falseprint(temperature, "°C ventilateur :", "allumé"if ventilateur else"éteint")
4.3 Réaliser une IHM selon un cahier des charges
Voici une réalisation. Teste les cas limites : peut-on dépasser 25 ? descendre sous 15 ?
4500/1000=4,5 : il faut 5 paquets, quatre pleins et un de 500 octets.
Total : 4500+5×60=4800 octets.
Le surcoût des en-têtes est de 300 octets, soit environ 7%.
Correction · Question b
A0, ACK0, B1, puis ACK1 perdu.
Le délai expire : B1 est renvoyé.
Le récepteur attend le bit 0 : c'est un doublon, il l'ignore et renvoie ACK1.
L'émetteur passe à C0, puis reçoit ACK0.
Le récepteur a bien reçu A, B et C, une seule fois chacun.
Correction · Question c
1. Le poste interroge le serveur DNS, via le commutateur, pour obtenir l'adresse IP du site. 2. Il envoie la requête HTTP, encapsulée dans TCP, puis IP, puis Ethernet. 3. Le commutateur l'aiguille vers le routeur, qui est la passerelle. 4. Le routeur remplace l'adresse privée par l'adresse publique (NAT) et envoie le paquet sur Internet. 5. La réponse fait le chemin inverse.
Correction · Question d
Capteurs : deux capteurs infrarouges sous le châssis, qui distinguent le noir du blanc.
Actionneurs : deux moteurs.
Règle : si le capteur gauche voit la ligne, ralentir la roue gauche ; si c'est le droit, ralentir la roue droite ; sinon, avancer tout droit.
Le tout dans une boucle : lire, décider, commander.
À retenir
Révise ce chapitre avec KlarIA
Tuteur qui t'explique pas à pas, quiz pour t'entraîner, flashcards pour mémoriser. Gratuit.