Modèle OSI et protocoles réseau
1. Modèle OSI — 7 couches
Le modèle OSI (Open Systems Interconnection) est un standard de communication en réseau divisé en 7 couches. Chaque couche fournit des services à la couche supérieure et consomme ceux de la couche inférieure. Dans l'IoT, les couches 1 (Physique), 3 (Réseau), 4 (Transport) et 7 (Application) sont essentielles.
| Couche | Nom | Rôle | Exemple IoT |
|---|---|---|---|
| 7 | Application | Interface utilisateur/réseau | MQTT, HTTP, CoAP |
| 6 | Présentation | Codage, chiffrement | TLS, JSON, CBOR |
| 5 | Session | Gestion des sessions | MQTT session persistante |
| 4 | Transport | Fiabilité, segmentation | TCP (MQTT), UDP (CoAP) |
| 3 | Réseau | Routage, adressage | IPv4, IPv6, 6LoWPAN |
| 2 | Liaison | Accès au média | WiFi 802.11, LoRa, BLE |
| 1 | Physique | Transmission bits | RF 2.4 GHz, 868 MHz |
2. TCP vs UDP
TCP (Transmission Control Protocol) est orienté connexion, fiable et ordonné — idéal pour MQTT et HTTP. UDP (User Datagram Protocol) est sans connexion, plus rapide mais sans garantie — utilisé par CoAP, DNS, DHCP.
| Propriété | TCP | UDP |
|---|---|---|
| Connexion | Orienté connexion (3-way handshake) | Sans connexion |
| Fiabilité | Accusé de réception, retransmission | Aucune garantie |
| Ordre | Maintenu | Non garanti |
| Vitesse | Plus lent (overhead) | Rapide |
| Cas IoT | MQTT, HTTP/2, WebSocket | CoAP, LoRaWAN, DNS |
3. Adressage IP et sous-réseaux
Une adresse IPv4 est codée sur 32 bits (4 octets). Le masque de sous-réseau détermine la partie réseau et la partie hôte. Exemple : 192.168.1.0/24 signifie masque 255.255.255.0 soit 256 adresses dont 254 utilisables pour les hôtes.
import ipaddress
reseau = ipaddress.IPv4Network("192.168.1.0/24", strict=False)
print(f"Réseau : {reseau.network_address}")
print(f"Masque : {reseau.netmask}")
print(f"Broadcast : {reseau.broadcast_address}")
print(f"Nombre d'hôtes : {reseau.num_addresses - 2}")
print(f"Plage : {list(reseau.hosts())[0]} – {list(reseau.hosts())[-1]}")
# Sous-réseau pour liaison IoT (/30)
lien_iot = ipaddress.IPv4Network("10.0.0.0/30", strict=False)
print(f"Adresse lien IoT : {list(lien_iot.hosts())[0]}")
# → 10.0.0.1 et 10.0.0.2 utilisables
4. Commandes de diagnostic réseau
ping 192.168.1.1 # Tester la connectivité
ping -c 4 google.com # 4 paquets seulement
traceroute 8.8.8.8 # Chemin vers DNS Google (macOS)
traceroute -n 8.8.8.8 # Sans résolution DNS
ipconfig getifaddr en0 # IP locale macOS
ip a # IP locale Linux/WSL
nslookup google.com # Résolution DNS
netstat -an | grep :1883 # Voir connexions MQTT
a) Identifiez à quelle couche OSI appartiennent : LoRa, WiFi 802.11, MQTT, IP, TLS, Ethernet. Justifiez chaque réponse.
b) Calculez le nombre d'hôtes disponibles pour les masques : /25, /26, /27, /28, /29, /30. Quel masque recommandez-vous pour connecter 12 capteurs IoT ?
c) Sur le réseau 10.0.50.0/24, déterminez : adresse réseau, broadcast, plage hôtes, et nombre total d'adresses utilisables.
d) BONUS — Écrivez un script Python qui prend une adresse IP et un masque, et affiche toutes les informations du sous-réseau.
a) LoRa = Couche 1 (Physique) + Couche 2 (Liaison) ; WiFi 802.11 = Couches 1+2 ; MQTT = Couche 7 (Application) ; IP = Couche 3 (Réseau) ; TLS = Couche 5-6 (Session/Présentation) ; Ethernet = Couches 1+2.
b) /25=126, /26=62, /27=30, /28=14, /29=6, /30=2. Pour 12 capteurs → /27 (30 hôtes) pour avoir de la marge.
c) 10.0.50.0/24 : réseau=10.0.50.0, broadcast=10.0.50.255, plage=10.0.50.1–10.0.50.254, 254 hôtes.