USSI7c : Encapsulation, Wireshark, Scapy, et Concepts de Base
Ce document est une révision détaillée des concepts clés des réseaux et protocoles, en s'appuyant sur les documents que vous avez partagés. Il couvre les modèles OSI et TCP/IP, l'analyse des trames Ethernet, les protocoles DNS, TCP, UDP, et IP, ainsi que l'utilisation des outils Wireshark et Scapy. Des exercices pratiques sont inclus pour renforcer votre compréhension.
Objectifs :
Le modèle OSI (Open Systems Interconnection) est un modèle conceptuel qui divise les fonctions de communication en sept couches. Chaque couche a un rôle spécifique et communique avec les couches adjacentes via des interfaces standardisées.
| Couche | Nom | Rôle | Exemples de Protocoles | Unité de Données (PDU) |
|---|---|---|---|---|
| 7 | Application | Fournit des services réseau aux applications (ex: navigation web, email). | HTTP, FTP, SMTP, DNS, SSH | Message |
| 6 | Présentation | Gère la représentation des données (chiffrement, compression, conversion de formats). | SSL, TLS, JPEG, MPEG, ASCII, Unicode | Données |
| 5 | Session | Gère les sessions entre applications (établissement, maintien, terminaison). | NetBIOS, RPC, PPTP, SIP | Données |
| 4 | Transport | Assure le transfert de données de bout en bout (fiabilité, contrôle de flux). | TCP, UDP, SCTP, DCCP | Segment (TCP) / Datagramme (UDP) |
| 3 | Réseau | Gère l'adressage logique et le routage des paquets à travers les réseaux. | IP, ICMP, OSPF, BGP, RIP | Paquet |
| 2 | Liaison de Données | Gère la transmission des trames entre nœuds adjacents (détection d'erreurs, accès au médium). | Ethernet, PPP, Wi-Fi (802.11), VLAN, MAC | Trame |
| 1 | Physique | Transmet les bits bruts sur le médium physique (câbles, ondes radio, fibre optique). | USB, RJ45, Fibre Optique, Wi-Fi (physique), Bluetooth | Bit |
(Représentation visuelle des 7 couches)
Source: Wikimedia Commons
Le modèle TCP/IP est une simplification du modèle OSI, avec quatre couches principales. Il est utilisé pour les communications sur Internet et est plus orienté vers la pratique que le modèle OSI.
| Couche | Nom | Rôle | Protocoles | Correspondance OSI |
|---|---|---|---|---|
| 4 | Application | Regroupe les couches 5, 6 et 7 du modèle OSI. Fournit des services aux applications utilisateur. | HTTP, FTP, DNS, SMTP, SSH, Telnet | Application, Présentation, Session |
| 3 | Transport | Assure le transfert de données de bout en bout (fiabilité, contrôle de flux). | TCP, UDP, SCTP | Transport |
| 2 | Internet | Gère l'adressage logique et le routage des paquets. | IP, ICMP, ARP, OSPF, BGP | Réseau |
| 1 | Accès Réseau | Regroupe les couches 1 et 2 du modèle OSI. Gère la transmission physique et l'accès au médium. | Ethernet, Wi-Fi, PPP, MAC, VLAN | Physique, Liaison de Données |
(Représentation visuelle des 4 couches)
Source: Wikimedia Commons
| Critère | Modèle OSI | Modèle TCP/IP |
|---|---|---|
| Nombre de couches | 7 couches | 4 couches |
| Approche | Théorique, générique, indépendant des protocoles. | Pratique, basé sur les protocoles Internet. |
| Couche Transport | Couche 4 (Transport) | Couche 3 (Transport) |
| Couche Application | Couches 5, 6, 7 (Session, Présentation, Application) | Couche 4 (Application) |
| Utilisation | Modèle de référence pour l'enseignement et la conception. | Modèle utilisé pour Internet et les réseaux réels. |
| Protocoles | Ne spécifie pas de protocoles. | Basé sur des protocoles spécifiques (TCP, IP, etc.). |
Une trame Ethernet est une unité de données au niveau de la couche de liaison de données (couche 2 du modèle OSI). Elle est utilisée pour encapsuler les paquets de données qui sont transmis sur un réseau Ethernet.
Voici la structure détaillée d'une trame Ethernet :
| Champ | Taille (octets) | Description | Valeurs Typiques |
|---|---|---|---|
| Préambule | 7 | Synchronisation des horloges entre l'émetteur et le récepteur. | 10101010 (alternance de 1 et 0) |
| Début de Trame (SFD) | 1 | Indique le début de la trame (10101011). | 10101011 |
| Adresse MAC Destination | 6 | Adresse MAC du destinataire. Peut être une adresse unicast, multicast ou broadcast. | 00:1A:2B:3C:4D:5E |
| Adresse MAC Source | 6 | Adresse MAC de l'expéditeur. | 00:1A:2B:3C:4D:5F |
| Type/EtherType | 2 | Indique le type de protocole de la couche supérieure (ex: 0x0800 pour IPv4, 0x0806 pour ARP). | 0x0800 (IPv4), 0x0806 (ARP), 0x86DD (IPv6) |
| Données (Payload) | 46-1500 | Charge utile contenant les données des couches supérieures (IP, ARP, etc.). La taille minimale est de 46 octets (sinon, un bourrage est ajouté). | Paquet IP, trame ARP, etc. |
| FCS (Frame Check Sequence) | 4 | Code de redondance cyclique (CRC) pour détecter les erreurs de transmission. | Calculé à partir des champs précédents |
Note sur le bourrage (Padding) : Si la taille des données est inférieure à 46 octets, un bourrage est ajouté pour atteindre cette taille minimale. La taille maximale d'une trame Ethernet (sans VLAN) est de 1518 octets (1500 octets de données + 18 octets d'en-tête et FCS).
Voici un exemple de trame Ethernet capturée en hexadécimal :
À partir de la trame ci-dessus, répondez aux questions suivantes :
Corrigé :
00:08:e3:ff:fc:2830:e1:71:82:10:c50800 (IPv4)a3.ad.e7.a1 → 163.173.231.1610a.ad.20.61 → 10.173.32.97Avec les VLAN (Virtual LAN), une trame Ethernet peut inclure un tag VLAN (4 octets supplémentaires) pour identifier le réseau virtuel. La taille maximale d'une trame Ethernet avec VLAN est de 1522 octets.
Structure d'une trame Ethernet avec VLAN (802.1Q) :
| Champ | Taille (octets) | Description |
|---|---|---|
| Préambule | 7 | Synchronisation. |
| SFD | 1 | Début de trame. |
| Adresse MAC Destination | 6 | Adresse MAC du destinataire. |
| Adresse MAC Source | 6 | Adresse MAC de la source. |
| Tag VLAN (802.1Q) | 4 | Identifie le VLAN (Tag Protocol Identifier + Priority + VLAN ID). |
| Type/EtherType | 2 | Type de protocole (ex: 0x0800 pour IPv4). |
| Données | 46-1500 | Charge utile. |
| FCS | 4 | Contrôle d'erreur. |
Le DNS est un protocole de la couche application qui permet de traduire les noms de domaine (ex: www.cnam.fr) en adresses IP (ex: 163.173.128.52).
Il utilise généralement le protocole UDP sur le port 53, mais peut aussi utiliser TCP pour des réponses longues (ex: transferts de zone).
Le DNS fonctionne selon une hiérarchie de serveurs :
(Requête pour www.cnam.fr)
Source: CloudNS
Voici un exemple de requête DNS capturée avec Wireshark :
À partir des captures ci-dessus :
www.cnam.fr ?www.cnam.fr vers sarek.cnam.fr ?Corrigé :
A (demande d'adresse IPv4).www.cnam.fr.163.173.128.52.CNAME (alias).TCP est un protocole de la couche transport qui offre une communication fiable, orientée connexion, et avec contrôle de flux. Il est utilisé pour des applications nécessitant une transmission sans erreur (ex: HTTP, FTP, SSH).
| Champ | Taille (bits) | Description |
|---|---|---|
| Port Source | 16 | Port de l'expéditeur. |
| Port Destination | 16 | Port du destinataire. |
| Numéro de Séquence | 32 | Numéro du premier octet de données dans le segment. |
| Numéro d'Accusé de Réception (ACK) | 32 | Numéro du prochain octet attendu par le récepteur. |
| Longueur d'En-tête (Data Offset) | 4 | Longueur de l'en-tête TCP en mots de 32 bits (4 octets). |
| Réservé | 6 | Non utilisé (doit être à 0). |
| Drapeaux (Flags) | 6 | Contrôle la connexion (SYN, ACK, FIN, RST, etc.). |
| Fenêtre (Window) | 16 | Taille de la fenêtre de réception (nombre d'octets que le récepteur peut accepter). |
| Somme de Contrôle (Checksum) | 16 | Vérifie l'intégrité de l'en-tête et des données. |
| Pointeur Urgent | 16 | Indique la fin des données urgentes (si le drapeau URG est positionné). |
| Options | Variable | Options supplémentaires (ex: taille maximale de segment). |
| Bourrage (Padding) | Variable | Assure que l'en-tête a une longueur multiple de 32 bits. |
| Drapeau | Nom | Description |
|---|---|---|
| SYN | Synchronize | Utilisé pour établir une connexion (premier paquet du three-way handshake). |
| ACK | Acknowledge | Accusé de réception. Indique que le numéro d'accusé est valide. |
| FIN | Finish | Utilisé pour terminer une connexion. |
| RST | Reset | Réinitialise la connexion en cas d'erreur. |
| PSH | Push | Demande au récepteur de transmettre les données à l'application immédiatement. |
| URG | Urgent | Indique que le champ "Pointeur Urgent" est significatif. |
Le three-way handshake est le processus utilisé par TCP pour établir une connexion :
Source: Gate Vidyalay
Voici un exemple de capture d'une connexion TCP (three-way handshake) :
À partir de la capture ci-dessus :
Corrigé :
50014.80 (service HTTP).SYN (demande d'établissement de connexion).0.1 (le serveur accuse réception du SYN du client et indique qu'il attend le prochain octet avec le numéro de séquence 1).UDP est un protocole de la couche transport qui offre une communication non fiable et sans connexion. Il est utilisé pour des applications où la vitesse est plus importante que la fiabilité (ex: streaming vidéo, DNS, VoIP).
| Champ | Taille (bits) | Description |
|---|---|---|
| Port Source | 16 | Port de l'expéditeur (optionnel, peut être 0). |
| Port Destination | 16 | Port du destinataire. |
| Longueur | 16 | Longueur totale du datagramme UDP (en-tête + données). |
| Somme de Contrôle | 16 | Vérification de l'intégrité du datagramme (optionnel). |
Voici un exemple de capture d'une requête DNS (qui utilise UDP) :
À partir de la capture ci-dessus :
Corrigé :
63773 (port éphémère).53 (service DNS).DNS.A (demande d'adresse IPv4 pour www.cnam.fr).IP est un protocole de la couche réseau qui permet l'adressage logique et le routage des paquets à travers les réseaux. Il existe deux versions principales : IPv4 (32 bits) et IPv6 (128 bits).
IPv4 utilise des adresses sur 32 bits, généralement représentées en notation décimale pointée (ex: 192.168.1.1).
| Champ | Taille (bits) | Description |
|---|---|---|
| Version | 4 | Version du protocole IP (4 pour IPv4). |
| IHL (Internet Header Length) | 4 | Longueur de l'en-tête en mots de 32 bits. |
| Type de Service (TOS) | 8 | Indique la qualité de service souhaitée (ex: priorité, délai). |
| Longueur Totale | 16 | Longueur totale du datagramme IP (en-tête + données). |
| Identification | 16 | Identifie les fragments d'un même datagramme. |
| Drapeaux | 3 | Contrôle la fragmentation (DF, MF). |
| Décalage de Fragment | 13 | Position du fragment dans le datagramme original. |
| TTL (Time To Live) | 8 | Nombre maximal de sauts avant que le paquet ne soit détruit. |
| Protocole | 8 | Protocole de la couche supérieure (ex: 6 pour TCP, 17 pour UDP). |
| Somme de Contrôle | 16 | Vérification de l'intégrité de l'en-tête. |
| Adresse IP Source | 32 | Adresse IP de l'expéditeur. |
| Adresse IP Destination | 32 | Adresse IP du destinataire. |
| Options | Variable | Options supplémentaires (peu utilisées). |
| Données | Variable | Charge utile (protocole de couche supérieure). |
IPv6 utilise des adresses sur 128 bits, représentées en hexadécimal (ex: 2001:0db8:85a3:0000:0000:8a2e:0370:7334).
IPv6 simplifie l'en-tête IP et ajoute des fonctionnalités comme l'auto-configuration et la sécurité intégrée.
| Champ | Taille (bits) | Description |
|---|---|---|
| Version | 4 | Version du protocole IP (6 pour IPv6). |
| Classe de Trafic | 8 | Priorité et gestion du trafic (similaire à TOS en IPv4). |
| Étiquette de Flux | 20 | Identifie un flux de paquets pour une QoS spécifique. |
| Longueur de la Charge Utile | 16 | Longueur des données (sans l'en-tête). |
| En-tête Suivant | 8 | Protocole de la couche supérieure (ex: 6 pour TCP). |
| Limite de Sauts | 8 | Similaire au TTL en IPv4. |
| Adresse IP Source | 128 | Adresse IPv6 de l'expéditeur. |
| Adresse IP Destination | 128 | Adresse IPv6 du destinataire. |
| Données | Variable | Charge utile (protocole de couche supérieure). |
Comparez les deux captures IPv4 et IPv6 ci-dessus et répondez aux questions :
Corrigé :
20 octets (peut varier avec les options).
Taille de l'en-tête IPv6 : 40 octets (fixe).
Fragmentation (gérée différemment, pas de fragmentation en routeur).
La fragmentation est gérée uniquement par l'hôte source en IPv6.
fc00:2:0:2::1).
Les zéros consécutifs sont remplacés par ::.
Wireshark est un analyseur de protocole réseau open-source qui permet de :
Wireshark est disponible pour Windows, macOS et Linux. Vous pouvez le télécharger depuis le site officiel.
Après installation, lancez Wireshark et sélectionnez une interface réseau pour commencer la capture :
Source: Wireshark
L'interface de Wireshark est divisée en plusieurs parties :
Source: Wireshark
Les filtres permettent de réduire l'affichage aux paquets qui vous intéressent. Il existe deux types de filtres :
port 80).tcp.port == 80).| Filtre | Description | Exemple d'Utilisation |
|---|---|---|
ip.addr == 192.168.1.1 |
Affiche les paquets avec l'adresse IP source ou destination 192.168.1.1. | Analyser le trafic vers/un routeur. |
tcp.port == 80 |
Affiche les paquets TCP sur le port 80 (HTTP). | Analyser le trafic web. |
dns |
Affiche uniquement les paquets DNS. | Déboguer des problèmes de résolution de noms. |
http.request.method == "GET" |
Affiche les requêtes HTTP de type GET. | Analyser les requêtes web. |
icmp |
Affiche les paquets ICMP (ping). | Vérifier la connectivité réseau. |
arp |
Affiche les paquets ARP (résolution d'adresses MAC). | Déboguer des problèmes de résolution d'adresses locales. |
udp.portrange 50000-60000 |
Affiche les paquets UDP avec des ports sources/destinations entre 50000 et 60000. | Analyser des flux multimédias ou des jeux. |
Voici un exemple de capture filtrée pour afficher uniquement le trafic HTTP :
Wireshark permet de suivre un flux TCP complet pour reconstruire une conversation entre un client et un serveur. Pour ce faire :
Source: Comparitech
Wireshark offre des outils pour analyser les statistiques du trafic :
Source: Wireshark
Capturez du trafic sur votre réseau domestique avec Wireshark et répondez aux questions :
Indice : Utilisez Statistics > Protocol Hierarchy pour la question 1.
Scapy est un outil puissant en Python pour :
Scapy peut être installé via pip :
pip install scapy
Ou sur Linux (Debian/Ubuntu) :
sudo apt-get install python3-scapy
Lancez Scapy en mode interactif avec la commande :
sudo scapy
Voici quelques commandes de base :
# Afficher la liste des commandes disponibles
ls()
# Créer un paquet IP
p = IP()
# Afficher les détails du paquet
p.show()
# Créer un paquet IP avec des adresses source et destination
p = IP(src="192.168.1.100", dst="8.8.8.8")
# Ajouter une couche ICMP (pour un ping)
p = IP(dst="8.8.8.8")/ICMP()
# Envoyer le paquet
send(p)
# Sniffer des paquets (10 paquets)
pkts = sniff(count=10)
# Afficher les paquets capturés
pkts.show()
# Créer un paquet ICMP Echo Request
ping = IP(dst="8.8.8.8")/ICMP()
# Envoyer le paquet
send(ping)
# Sniffer les paquets ICMP pendant 10 secondes
pkts = sniff(filter="icmp", timeout=10)
# Afficher les paquets capturés
pkts.show()
# Créer un paquet TCP SYN pour le port 80
syn = IP(dst="192.168.1.1")/TCP(dport=80, flags="S")
# Envoyer le paquet
send(syn)
# Créer un paquet Ethernet + IP + TCP avec des données
p = Ether(dst="00:11:22:33:44:55")/IP(dst="192.168.1.1", ttl=64)/TCP(dport=80)/"Hello, World!"
# Envoyer le paquet
sendp(p)
# Sniffer le trafic TCP sur le port 80
pkts = sniff(filter="tcp and port 80", count=5)
# Afficher les paquets
for pkt in pkts:
pkt.show()
from scapy.all import *
# Créer une requête DNS pour www.cnam.fr
dns_req = IP(dst="8.8.8.8")/UDP(dport=53)/DNS(rd=1,qd=DNSQR(qname="www.cnam.fr"))
# Envoyer la requête et attendre la réponse
ans, unans = sr(dns_req)
# Afficher la réponse
ans.show()
Utilisez Scapy pour réaliser les tâches suivantes :
8.8.8.8.192.168.1.1.
Indice :
Utilisez sniff(filter="icmp", count=5) pour la question 2.
Voici une trame Ethernet capturée :
Questions :
Corrigé :
00:08:e3:ff:fc:2830:e1:71:82:10:c50800 (IPv4)a3.ad.e7.a1 → 163.173.231.1610a.ad.20.61 → 10.173.32.97TCP (port 2, mais le champ protocole dans l'en-tête IP est 06, qui correspond à TCP).
Utilisez Wireshark pour capturer une requête DNS lorsque vous visitez www.cnam.fr.
Identifiez les champs suivants dans la capture :
Indice :
Utilisez le filtre dns dans Wireshark pour faciliter l'analyse.
Utilisez Scapy pour envoyer une requête ICMP (ping) à 8.8.8.8 (serveur DNS de Google).
Capturez cette requête avec Wireshark et vérifiez qu'elle apparaît dans la capture.
Étapes :
>>> packet = IP(dst="8.8.8.8")/ICMP()
>>> send(packet)
icmp && ip.src == [votre_ip] pour voir le paquet ICMP envoyé.Capturez une connexion TCP (ex: navigation sur un site web) avec Wireshark et identifiez :
Indice :
Filtrez avec tcp.port == 80 pour voir le trafic HTTP.
Utilisez Scapy pour sniffer 10 paquets sur votre interface réseau et affichez leurs détails. Identifiez :
Code Scapy :
from scapy.all import *
# Sniffer 10 paquets
pkts = sniff(count=10)
# Afficher les paquets
for pkt in pkts:
pkt.show()
Ce document de révision détaillé couvre les concepts fondamentaux des réseaux et protocoles, en mettant l'accent sur :
Pour approfondir vos connaissances, je vous recommande de :
Livres :
Sites Web :
Cours en Ligne :
Outils Complémentaires :