darkgallium, 2019
Contrairement aux apparences, cette présentation n'est pas un cours.
Il se peut qu'elle contienne des imprécisions, des erreurs (que vous pouvez me signaler) et des blagues pas drôles !
Poursuivez à vos risques et périls...
The Opte Project, un projet de visualisation d'internet sous forme de carte.
C'est une interconnexion de réseaux hétérogènes.
Ces réseaux sont connectés entre eux par des routeurs qui acheminent les messages, subdivisés en paquets, d'un point à un autre du réseau.
Carte des câbles internet sous-marins
Un paquet ≈ une lettre.
Il doit contenir des infos qui puissent identifier l'expéditeur et le destinataire et un contenu, un message.
Tous les intermédiaires qui transportent le paquet doivent être capable de le lire et de l'envoyer sur la bonne route pour qu'il soit reçu.
Ces protocoles et normes permettent que les éléments du réseau parlent tous la même langue et puissent transmettre, lire et construire des paquets.
Nous allons nous y intéresser dans les prochaines slides...
Les réseaux sont complexes et leurs usages évoluent rapidement.
Les concepteurs des protocoles utilisés sur les réseaux aujourd'hui l'avaient anticipé et ont conçu leurs protocoles de façon modulaire.
Chaque paquet est constitué d'un mille-feuille d'en-têtes de protocoles en dessous duquel se trouvent les données transportées.
Chaque couche gère un seul aspect du paquet (acheminement, vérification d'erreur, contenu...) en se reposant sur les autres couches pour gérer le reste.
Pile de protocoles dans le modèle OSI (Open Systems Interconnection)
Chaque protocole prend le résultat de la couche précédente et rajoute ses informations, on parle d'encapsulation.
Encapsulation dans un paquet UDP
Cette couche contient les informations nécessaires pour acheminer les données entre deux voisins dans le réseau.
Elle contient principalement :
Implémentations : Ethernet, 802.11 (Wi-Fi)
Cette couche contient les informations nécessaires pour acheminer le paquet de l'hôte expéditeur à l'hôte de destination.
On a besoin que chaque participant ait un identifiant unique, pour qu'on puisse lui adresser des messages.
Sur Internet, à chaque équipement est attribué une adresse IP, un identifiant sur 32 bits, écrit de la forme 192.168.1.1.
Cette adresse est l'information essentielle contenue dans la couche réseau, permettant aux intermédiaires réseau de diriger le paquet vers sa destination.
Cette couche contient les informations nécessaire pour fournir une communication logique entre deux processus situés l'un sur la machine expéditrice et l'autre sur la machine destinataire.
Grâce à la couche IP, on peut acheminer un paquet d'un hôte à un autre, mais plusieurs processus peuvent envoyer/recevoir des paquets en même temps sur une même machine !
Chaque processus décide d'un numéro unique qui l'identifiera et tous les paquets mentionant ce numéro seront transférés à ce processus.
C'est le numéro de port, il se situe entre 1 et 65535.
Dans l'idéal, à un numéro de port correspond une application et/ou un usage.
En pratique, les programmeurs choisissent leurs numéros de ports au hasard ! (oh hi Fortnite!)
HTTP | 80 (TCP) |
HTTPS | 443 (TCP) |
SSH | 22 (TCP) |
Minecraft | 25565 (TCP) |
League Of Legends | 5000-5500 (UDP) |
Protocole fiable de la couche transport, fonctionnant en mode connecté.
Supporte la segmentation des paquets, garantit leur ordonnancement et dispose de mécaniques de gestion de la congestion (dont nous ne parlons pas ici).
Utilisations: web, ssh...
A chaque fois qu'il reçoit un paquet TCP, un hôte accuse réception en envoyant à l'expéditeur un paquet d'acquittement (ACK).
A chaque envoi d'un paquet, l'expéditeur lance un timer durant lequel il s'attend à reçevoir l'acquittement concernant le paquet.
S'il ne le reçoit pas dans le temps imparti, le paquet est retransmis.
TCP garantit que l'ordre des paquets est préservé.
TCP permet également de segmenter les messages. C'est-à-dire que si le message est trop gros pour tenir dans un seul paquet, TCP va le découper et produire plusieurs plus petits paquets que le destinataire remettra dans l'ordre.
Ces deux objectifs sont possibles car TCP numérote les paquets à l'aide d'un numéro de séquence.
L'information d'acquittement est transportée en même temps que les données (piggybacking).
Chaque en-tête TCP contient :
Si un paquet envoyé par Bob s'est perdu, le prochain paquet qu'Alice recevra aura un numéro d'ACK supérieur à celui attendu.
Dans ce cas, elle renverra un paquet avec le numéro d'ACK attendu (ACK dupliqué).
Au bout de 3 ACK dupliqués reçu, Bob réemettra le paquet qui s'est perdu.
TCP est un protocole en mode connecté, il faut donc que deux hôtes établissent une connexion avant de pouvoir échanger des données.
Cette connexion permet de s'assurer que l'autre partie est prête à recevoir des données. Cela permet aussi de choisir (aléatoirement) de chaque côté le numéro de séquence initial.
Protocole best effort de la couche transport, fonctionnant sans connexion.
Il gère la segmentation des paquets mais n'offre aucune garantie (intégrité, reception...).
Utilisations: VoIP, jeux...
En dessous de tous les en-têtes que nous avons vu se trouvent les données envoyées par l'application.
Chaque application dispose de son propre protocole de communication que le développeur a défini.
Nous avons vu les différentes couches d'un paquet et les protocoles les plus connus qui les implémentent.
Comment les paquets franchissent-ils les réseaux et comment sont-ils dirigés vers la bonne destination ?
La fonction principale d'un routeur est de connecter un réseau à un ou plusieurs autres réseaux et donc de permettre l'acheminement des paquets à travers ces réseaux.
Lorsqu'un routeur reçoit un paquet depuis une interface d'entrée, il doit prendre une décision pour savoir vers quelle interface de sortie il l'envoie.
Pour cela il regarde l'adresse IP de destination du paquet et la compare à une table de routage qui fait correspondre une plage d'IP de destination à une interface de sortie.
Il permet de distinguer dans l'adresse IP la partie réservée au routage (l'adresse du réseau) et la partie réservée à l'identification des hôtes.
192.168.1.1 avec un masque /24 (255.255.255.0)
Les 24 premiers bits de l'IP sont l'adresse du réseau, les 8 derniers forment l'adresse d'un hôte dans le réseau.
Le masque de sous réseau permet de déterminer si une IP est concernée ou non par une règle de routage.
$ ip route
default via 192.168.1.1 dev wlp2s0 proto dhcp metric 600
172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1
192.168.1.0/24 dev wlp2s0 proto kernel scope link src 192.168.1.2 metric 600
Si chaque appareil utilisant internet possédait une IP unique, nous serions très rapidement en pénurie d'IP (au moins d'IPv4).
En plus, il se trouve qu'une IPv4 ... ça coûte assez cher (surtout depuis qu'on est véritablement en pénurie d'IPv4 !)
La RFC 1918 définit 3 plages d'IPv4 privées, qui ne sont pas routables sur Internet : 10.0.0.0/8, 172.16.0.0/12 et 192.168.0.0/16.
Toutes les autres IP sont des IP publiques attribuables par l'IANA.
Mais comment faire pour passer un paquet d'un réseau privé (IP source privée) vers un réseau public (IP de destination publique) ?
La solution c'est d'avoir une passerelle en bordure de réseau qui dispose d'une IP publique et qui remplace l'IP locale source par son IP publique dans chaque paquet avant de le router (translation d'adresse).
Pour que la passerelle puisse savoir à quelle machine du réseau local il faut qu'elle envoie un paquet en entrée, elle change également le port source de chaque paquet en sortie et tient une table de correspondance entre port source extérieur et IP et port de destination.
Les routes sur internet ne sont pas fixées : les routeurs peuvent tomber en panne, le lien peut être physiquement coupé, de nouvelles routes se créent tous les jours...
Comme les tables de routage évoluent très souvent, il existe des protocoles spécifiques (BGP, OSPF) qui permettent aux routeurs importants d'internet de se parler entre eux et d'annoncer aux autres les régions d'internet qu'ils peuvent joindre.
Ces protocoles ne sont pas abordés dans cette présentation.
DHCP est un protocole de la couche application (UDP, port 67 pour le serveur) qui permet de configurer automatiquement les paramètres réseau d'une machine.
Lorsqu'une machine est connectée à un réseau en mode DHCP, elle envoie un paquet de demande d'IP en broadcast (via une adresse IP spéciale que tous les ordinateurs d'un réseau local écoutent, 255.255.255.255).
Le serveur DHCP, s'il existe et qu'il est disposé, envoie une offre d'IP à la machine qui a fait la demande.
La machine accepte ou refuse l'offre (sauf config spécifique, il accepte la première qu'il reçoit on va pas se mentir).
Revenons quelques instant sur les réseaux...
Comment créer plusieurs sous-réseaux logiques, virtuels à l'intérieur d'un même réseau physique ?
C'est une fonctionalité permettant de créer plusieurs sous-réseaux logiques, virtuels à l'intérieur d'un même réseau physique.
Avec les VLAN, nous pouvons par exemple décider que le port 24 d'un switch donnera accès à un réseau virtuel n°103 dédié au wifi et que le port 1 donnera accès au réseau virtuel n°1 dédié au management et au réseau dédié au wifi...
Utilisation : séparation d'usages, séparation de privilèges...
Ils fonctionnent grâce à un tag (VLAN ID entre 0 et 4095) spécial indiqué dans chaque paquet dans la couche liaison.
Les équipements des utilisateurs lambda ne sont pas configurés pour tagger les paquets. Il faut donc faire en sorte que les switchs rajoutent le tag les paquets en provenance des ports sur lesquels se connectent les joueurs. On dit qu'on met le port en mode access ou untagged.
Les serveurs ou les équipements configurés pour peuvent dialoguer sur des VLAN particuliers lorsqu'ils y sont autorisés. On configure donc le port en mode trunk ou tagged dans le switch.
ip addr : affiche l'adresse IP, le masque de sous-réseau de chaque interface de sa machine.
ip route : affiche la table de routage
ping : permet d'envoyer un paquet ping-pong à une machine (protocole ICMP) et affiche le temps total qu'à pris le paquet à faire son allez-retour.
traceroute : commande permettant de retracer le chemin d'un paquet et d'afficher les routeurs par lesquels il est passé.
ss -tualpe : commande permettant de voir les ports utilisés par les applications sur une machine.
dhclient -v <interface> : faire une demande de bail de DHCP sur l'interface spécifiée.