Notions de réseau
- Qu’est-ce que le réseau ? Le modèle OSI
- Sécuriser les entrées/sorties
- Qu’est-ce qu’un I/O ?
- Le flux réseau : une extension du dataflow
- Les principaux protocoles
- TCP/IP et l’algèbre de Boole
- Tables de routage et pare-feu (Firewall)
- Outils d’investigation : Le kit de survie
- Pour aller plus loin : quelques services incontournables
- Exercices
- Conclusion à l’Introduction au monde de Linux
- Réponses aux exercices
Maintenant que nous savons comment un système Linux gère ses fichiers et ses processus en interne, il est temps de lui permettre de communiquer avec l’extérieur. Le réseau sous Linux est une extension logique de la gestion des flux et des fichiers que nous avons étudiée.
Plan du chapitre :
- Qu’est-ce que le réseau ? Les différentes couches du modèle OSI et leur rôle.
- La philosophie : sécuriser les entrées/sorties et les flux réseau
- Qu’est-ce qu’un I/O
- Qu’est-ce qu’un flux réseau (extension du paragraphe sur les dataflow ?)
- Les principaux protocoles : http, tcp, udp, ssh.
- Petit coup d’œil à TCP/IP : pourquoi l’algèbre de Boole est bonne à connaître (adresses IP et CIDR)
- Tables de routage : iptables, ufw, etc.
- Outils d’investigation :
curl,dig,netstat - Pour aller plus loin : quelques logiciels incontournables (Apache, HAProxy, NginX)
Qu’est-ce que le réseau ? Le modèle OSI
Le réseau est constitué de l’ensemble des protocoles et du matériel permettant à deux machines d’échanger des données. Pour que toutes les machines (Linux ou autres) se comprennent, nous nous appuyons sur le Modèle OSI. C’est un modèle en 7 couches que nous pouvons nous représenter comme des poupées russes : chaque couche « emballe » la donnée de la précédente avec ses propres informations.
- Couches 1 à 3 (Physique, Liaison, Réseau) : Le transport pur. C’est là qu’on trouve les câbles, les adresses MAC et les adresses IP.
- Couche 4 (Transport) : Elle gère la qualité de la connexion (le fameux TCP ou UDP).
- Couches 5 à 7 (Session, Présentation, Application) : C’est ici que nos programmes discutent (HTTP pour le web, SSH pour la console, etc.).

Notez toutefois que dans les systèmes modernes, les frontières entre les couches application, présentation et session sont parfois floues. Par exemple, quand nous parlons d’HTTPS, il s’agit de HTTP+TLS, le contenu de la page web pouvant ensuite mêler du texte (en UTF-8, qui est un encodage de texte), des images (aux formats JPEG ou MPEG), et du JSON (qui est une représentation des données utilisées pour mettre en forme notre page web).
Sécuriser les entrées/sorties
Dans la philosophie Unix, le réseau est traité avec la même méfiance que n’importe quel autre flux. La mise en application du modèle OSI repose donc sur des pratiques de sécurité.
- Isolation : Par défaut, un système Linux ne devrait “écouter” que ce qui est strictement nécessaire. Chaque port ouvert est une porte d’entrée potentielle pour un attaquant.
- Maîtrise : Nous ne laissons pas le réseau gérer le système ; c’est le système qui définit des règles strictes sur ce qui peut entrer, et ce qui peut sortir.
Qu’est-ce qu’un I/O ?
I/O signifie précisément Input/Output (Entrée/Sortie). Sous Linux, un flux réseau est vu comme un I/O, au même titre qu’une écriture sur un disque dur. Quand notre serveur reçoit une requête web, il s’agit d’un « Input ». Quand il répond, c’est un « Output ». Comprendre cela permet de voir le réseau non pas comme une entité complexe, mais comme un simple robinet de données.
Le flux réseau : une extension du dataflow
Dans le chapitre précédent, nous avons vu comment rediriger des flux entre programmes locaux. Le flux réseau, c’est exactement la même chose, mais le « tuyau » (le Pipe) passe par un câble ou du Wi-Fi.
Nous avons déjà évoqué la notion de Socket, en disant que, comme tout le reste, ce sont des fichiers. Une connexion réseau sous Linux est représentée par ce fichier spécial. Écrire dans un Socket, c’est envoyer des données sur le réseau. Lire un socket, c’est recevoir des données.
Les principaux protocoles
Pour que les flux soient ordonnés, on utilise des règles de communication, qui structurent les protocoles. Il en existe de nombreux, et certaines applications proposent leur propre protocole. Néanmoins, les plus courants et les plus souvent utilisés pour les communications réseaux sont les suivants :
- TCP : C’est le protocole de transport (couche 4) « fiable ». Il vérifie que chaque paquet arrive à bon port et dans le bon ordre. C’est le standard pour le Web et le SSH.
- UDP : Le protocole de transport (couche 4) « rapide ». On envoie les données sans vérifier si elles arrivent (utilisé pour le streaming ou le jeu vidéo).
- HTTP et HTTPS : Le langage des navigateurs web. Nous avons déjà parlé de HTTPS, qui fonctionne de la même façon que HTTP, mais avec une couche de sécurité supplémentaire (le fameux « S »).
- SSH : Sous Linux, c’est le protocole sécurisé que nous utilisons pour prendre le contrôle d’une machine à distance. Les communications sont protégées via un système de clé privé / clé publique : tout message chiffré avec la clé privée ne peut être déchiffré qu’avec la clé publique, ce qui garantit au destinataire (notre serveur distant) que nous sommes bien l’auteur du message reçu.
TCP/IP et l’algèbre de Boole
Pour comprendre comment Linux (ou n’importe quel système) sait si un paquet doit rester sur le réseau local ou partir sur Internet, il faut descendre d’un étage : là où tout n’est que 0 et 1. C’est ici qu’intervient l’algèbre de Boole. Alors l’objectif n’est pas de vous donner un cours de binaire complet, mais bien de comprendre le minimum vital pour comprendre pourquoi une adresse donnée est dans un réseau, et pas dans un autre.
En l’occurrence, en réseau, nous utilisons essentiellement le ET logique, qui permet de comparer deux bits : le résultat est 1 uniquement si les deux bits comparés sont à 1.
1 AND 1 = 11 AND 0 = 00 AND 0 = 0
Une adresse IP (IPv4) est une suite de 32 bits (4 octets de 8 bits). Le CIDR (le fameux /24ou /16) indique combien de bits, en partant de la gauche, sont réservés à l’adresse du « quartier » (le réseau). Le reste est réservé aux « maisons » (les hôtes).
Prenons une machine avec l’IP 192.168.1.15 et un masque 255.255.255.0 (ce qui correspond à un /24 en notation CIDR).
Concentrons-nous sur le dernier octet pour voir l’opération en binaire :
- Le dernier octet de l’IP (15) en binaire correspond à :
00001111 - Du côté du masque, le dernier octet (0) en binaire, correspond à :
00000000. Pour notre réseau, c’est la partie « hôte » du /24.
Si on prend un autre exemple où le masque n’est pas « plein » (par exemple un /28), voici le calcul :
- IP (192.168.1.15) :
... 0000 1111 - Masque (255.255.255.240, soit /28) :
... 1111 0000<= Le dernier octet n’est plus zéro, mais 240.
IP(15) : 0 0 0 0 1 1 1 1
ET (AND)
Masque (/28) : 1 1 1 1 0 0 0 0
----------------------------------
Résultat (ID) : 0 0 0 0 0 0 0 0 //=> L'adresse réseau est 192.168.1.0
Grâce au ET binaire vu précédemment, le système détermine si une adresse appartient à notre réseau local ou s’il doit envoyer la donnée vers internet.** **L’utilisation d’un masque de réseau permet de contrôler qui a accès à notre serveur … et ainsi éviter d’ouvrir notre base de données au monde entier par erreur !
Tables de routage et pare-feu (Firewall)
iptables est l’outil historique et ultra-puissant de Linux pour filtrer les paquets. Il regarde chaque paquet et décide : « Je laisse passer », « Je rejette » ou « Je détruis ». Par contre, IPtables est très complexe à manipuler, et un administrateur système pourra rapidement se perdre dans les nombreuses règles. Arrive alors ufw (pour « Uncomplicated Firewall »). Comme son nom l’indique, c’est une surcouche simplifiée pour gérer les règles sans devoir être un expert en algèbre binaire.
Outils d’investigation : Le kit de survie
Quand « le réseau ne marche pas » (par exemple, notre IA favorite a fait des trucs bizarres dans notre dos), ces quelques outils vont nous aider pour diagnostiquer le réseau :
- curl permet de tester si un service web répond (ex :
curl -I google.fr). - dig permet d’aller vérifier si le nom de domaine (DNS) pointe bien vers la bonne IP.
- netstat (ou
ss) va montrer quel programme utilise quels ports sur notre machine. Par exemple, pour savoir qui écoute sur le port 80.
Pour aller plus loin : quelques services incontournables
Lorsque nous nous lançons dans le développement de notre application, certains services viennent rapidement sur le devant de la scène. Ceux-ci viennent nous aider dans la mise à disposition de notre application au vaste monde.
- Le serveur web, souvent Apache ou NginX, permettent de partager un site web ou l’API derrière notre application via un flux HTTP.
- Lorsque notre application devient populaire, et que la charge augmente, nous seront confrontés à un autre type de service : le Load Balancer. C’est en quelque sorte un « aiguilleur » qui répartit le flux réseau entre plusieurs serveurs pour éviter la surcharge. Dans ce rôle, on retrouve NginX (qui permet donc de gérer l’exposition et la distribution de charge pour notre application), ou bien HAProxy, qui est plus spécialisé dans le rôle de Load Balancer.
Ce ne sont bien évidemment pas les seuls, mais nous les rencontrerons très souvent, pour la partie réseau.
Exercices
Exercice n°1
Niveau débutant
À quoi sert la commande curl ?
Exercice n°2
Niveau débutant
Donnez un exemple de protocole utilisé pour la communication web et un pour l’accès à distance en console.
Exercice n°3
Niveau débutant
Qu’est-ce qu’une adresse IP ?
Exercice n°4
Niveau confirmé
Le modèle OSI comporte 7 couches. Dans lesquelles se situent les adresses IP et le transport TCP ?
Exercice n°5
Niveau confirmé
L’IA vous suggère d’utiliser netstat. À quoi cela va-t-il vous servir lors du débogage d’une application web ?
Exercice n°6
Niveau confirmé
Quelle est la différence majeure entre le protocole TCP et UDP ?
Exercice n°7
Niveau avancé
Votre application ne répond pas à l’adresse mon-app.local. Quelle commande utiliser pour vérifier si le nom de domaine est correctement résolu en adresse IP ?
Exercice n°8
Niveau avancé
À quoi sert un logiciel comme NginX ou HAProxy ?
Exercice n°9
Niveau avancé
L’IA vous demande d’exécuter cette commande : iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080.
Vous avez démarré un serveur dernier cri, avec la dernière version d’Ubuntu dessus. Cette commande renvoi une erreur « La commande iptables n’a pas été trouvée ». Pourquoi ça ne marche pas ?
Exercice n°10
Niveau expert
L’IA vous propose d’utiliser une adresse IP suivie de /24 (ex : 192.168.1.0/24). Que signifie ce /24 ?
Exercice n°11
Niveau expert
Expliquez pourquoi le réseau est considéré comme une extension du concept de Dataflow.
Exercice n°12
Niveau expert
Une IA configure votre application pour écouter sur 0.0.0.0:80. Pourquoi est-ce potentiellement dangereux par rapport à 127.0.0.1:80 ?
Conclusion à l’Introduction au monde de Linux
Nous avons parcouru un long chemin. Nous avons vu que Linux n’est pas un chaos de commandes, mais un système régi par des principes clairs :
- Tout est fichier : Pour une interface uniforme.
- Modularité : Des petits outils simples qui discutent via des flux (Dataflow).
- Isolation : Pour la sécurité des processus et des utilisateurs.
- Réseau : Une extension de ces flux vers le monde extérieur.
Vous avez maintenant les clés pour comprendre comment et pourquoi une machine Linux respire. Vous n’êtes plus un simple utilisateur qui exécute ce que lui commande son IA, mais bien l’opérateur qui s’aide de l’IA, tout en sachant ce qu’elle fait dans le système, en comprenant la tuyauterie interne du système.
Prochaine étape : Scripting et automatisation
Maintenant que vous savez manipuler les outils manuellement, nous allons apprendre à leur donner des ordres complexes. Pourquoi taper 10 fois la même commande quand on peut écrire un script qui le fait pour nous ?
Dans la prochaine partie, nous allons transformer vos connaissances en super-pouvoirs d’automatisation grâce au Bash Scripting.
Réponses aux exercices
Exercice n°1
Elle permet d’échanger des données avec un serveur via le réseau, par exemple pour télécharger le contenu d’une page web ou interroger une API.
Exercice n°2
Web : HTTP/HTTPS. HTTPS est la version sécurisée (et recommandée) de HTTP.
Accès console : SSH. C’est une standard, sous Linux.
Exercice n°3
C’est l’identifiant numérique d’une machine sur le réseau.
Pour la petite histoire, IPv4 est l’ancien modèle qu’on retrouve de partout, y compris dans ce cours : 192.168.1.1. Ce format est codée sur 32 bits, ce qui permet théoriquement d’attribuer 4 294 967 296 (2³²) adresses uniques,… pour le monde entier (et encore, en sans compter les adresses réservées). Aujourd’hui, cette limite a été atteinte, et nous nous débrouillons par diverses arcanes d’expert réseau que nous ne détaillerons pas ici.
La solution propre pour pallier cette pénurie est de passer à IPv6. Dans ce nouveau format, les adresses sont représentées différemment (combinaison de chiffre et le lettres). Grâce à ça, le nombre d’adresses disponibles est d’environ 3,4 × 10³⁸ adresses… 34, suivi de 37 zéro. Avec ça, plus d’embrouille… À ceci près que tout le monde devrait migrer dessus. Il a été standardisé en été 2017, et tout le monde parle encore en IPv6 !
Exercice n°4
Les adresses IP sont en couche 3 (Réseau) et le transport TCP est en couche 4 (Transport). Ainsi, le réseau IP permet d’encapsuler des données utilisant le protocole de transport TCP : on parle de TCP/IP.
Exercice n°5
netstat va servir à vérifier si votre application « écoute » bien sur le port attendu (ex : port 80 ou 443) et si les connexions sont établies.
Exercice n°6
TCP gère la qualité et la fiabilité de la connexion (vérifie que les données arrivent), alors que UDP privilégie la rapidité sans garantie de réception.
Exercice n°7
C’est la commande dig. Exemple d’utilisation : dig mon-app.local.
Exercice n°8
Ils servent à gérer l’exposition des applications, la distribution de la charge (Load Balancer) ou à faire office de proxy inverse.
Exercice n°9
iptables est une commande obsolète (ou legacy). Aujourd’hui, nous utiliserons nftables ou une commande de systemd équivalente.
Exercice n°10
C’est la notation CIDR qui définit le masque de sous-réseau (ici, les 24 premiers bits sont fixes, ce qui définit un réseau de 256 adresses).
Exercice n°11
Car les flux de données (I/O) ne circulent plus seulement entre des fichiers ou processus locaux, mais sont dirigés vers l’extérieur via des interfaces réseau, tout en respectant la même logique de redirection et d’isolation.
Exercice n°12
0.0.0.0 signifie que l’application écoute sur toutes les interfaces réseau (donc elle est exposée à internet si le pare-feu est ouvert), alors que 127.0.0.1 limite l’accès à la machine locale uniquement. C’est un risque de sécurité classique si l’IA privilégie la facilité d’accès à la rigueur.
Write a comment