Couches 3 & 4 : Infrastructures et services.
Réseau et adresse IP
Précédemment, nous avons vu les couches 1 & 2 permettant d'échanger des données entre deux ordinateurs par l'intermédiaire d'un médium de communication direct. Ils ne peuvent ainsi communiquer que s'il y a un accès direct de l'un vers l'autre. Cependant, il est rare que les ordinateurs soient directement reliés entre eux. Ils sont généralement constitués en réseaux, ou en réseaux de réseaux (e.g. Internet).
La couche 3 Réseau permet alors les échanges de données entre ordinateurs au travers d'un réseau, usuellement via le protocole IP. Les ordinateurs sont alors identifiés par une adresse IP (e.g. ) identifiant :
- le réseau auquel il appartient () ;
- son numéro dans ce réseau ().
💡 La commande permet d'afficher l'adresse IPv4 des différentes interfaces réseaux de l'ordinateur:
lo + ip -br -c link
$ ip -c -br -4 addr lo UNKNOWN 127.0.0.1/8 wlo1 UP 192.168.56.101/24
Nous avons ici une adresse IPv4 composée de 4 octets représentés sous forme décimale et séparés par un point. Les adresses IPv4 vont donc de à . Dans l'exemple précédent, indique le nombre de bits utilisés pour l'adresse réseau. Il est alors possible d'obtenir :
- l'adresse de broadcast : pour envoyer un message à tous les ordinateurs du réseau.
- le masque de sous-réseau : une manière différente de représenter .
$ ipcalc 192.168.56.101/24 Address: 192.168.56.101 11000000.10101000.00111000. 01100101 Netmask: 255.255.255.0 = 24 11111111.11111111.11111111. 00000000 Wildcard: 0.0.0.255 00000000.00000000.00000000. 11111111 => Network: 192.168.56.0/24 11000000.10101000.00111000. 00000000 HostMin: 192.168.56.1 11000000.10101000.00111000. 00000001 HostMax: 192.168.56.254 11000000.10101000.00111000. 11111110 Broadcast: 192.168.56.255 11000000.10101000.00111000. 11111111 Hosts/Net: 254 Class C, Private Internet
Vous noterez que rien n'empêche de découper un réseau en plusieurs sous-réseaux :
Configuration réseau
Contrairement à l'adresse MAC qui est codé en dur dans l'interface réseau, l'adresse IP va changer en fonction du réseau auquel l'ordinateur appartient. La configuration du réseau peut-être :
- statique : donnée par la configuration de l'ordinateur.
- dynamique : donnée par le réseau.
La configuration dynamique s'effectue va le protocole DHCP qui donnera à l'ordinateur :
- son adresse IP et masque de sous-réseau.
- sa passerelle réseau (gateway) : l'IP à laquelle envoyer les paquets sortants du réseau.
- le serveur DNS : permet de convertir un nom de domaine (e.g. ) en une adresse IP.
💡 Un serveur DNS privé (ou le fichier ) permet de définir des noms de domaines privés qui ne seront connus qu'à l'intérieur du réseau (ou de l'ordinateur). Cela permet ainsi d'attribuer, gratuitement, des noms de domaines à des services internes au réseau.
💡 La commande permet d'afficher l'adresse IP associée à .
Routage
Nous avons donc un paquet IP contenant, entres autres :
- une adresse IP expéditeur.
- une adresse IP destinataire.
- des données (ainsi qu'une longueur).
Nous voulons envoyer ce paquet à travers d'un réseau de réseaux interconnectés (Internet). Il va donc falloir envoyer ce paquet à travers divers intermédiaires. Et donc de déterminer le chemin (route) que le paquet devra emprunter. Le réseau peut être vu comme un graphe dont les sommets correspondent à un intermédiaire, et les arcs à un lien entre intermédiaires. Le but est alors de trouver le chemin le plus rapide allant de l'expéditeur au destinataire.
Pour cela, chaque intermédiaire a une table de routage donnant pour chaque réseau, le prochain intermédiaire à qui transmettre le paquet :
La table de routage donne alors pour chaque destination l'interface réseau à utiliser et l'adresse IP à qui transmettre le paquet. indique qu'on peut transmettre le paquet directement à sa destination.
💡 Il faudrait normalement utiliser , mais l'affichage est alors difficilement lisible.
$ route Destination Passerelle Genmask Iface default 192.168.56.1 0.0.0.0 wlo1 192.168.56.0 0.0.0.0 255.255.255.0 wlo1
💡 Il faudrait normalement utiliser , mais l'affichage est alors difficilement lisible.
💡 Pour vérifier qu'une adresse IP est accessible, on peut utiliser la commande . La commande quant à elle affiche le chemin pris par le paquet :
⚠ Pour des raisons de sécurité, certains intermédiaires peuvent bloquer les requêtes de et/ou de .
$ tracepath uca.fr 1?: [LOCALHOST] pmtu 1500 1: livebox.home 4.456ms 1: livebox.home 4.233ms 2: no reply 3: ae115-0.nccle102.rbci.orange.net 13.081ms 4: ae44-0.nilyo102.rbci.orange.net 14.652ms asymm 5 5: ae40-0.nilyo101.rbci.orange.net 14.945ms asymm 4 6: 81.253.184.114 24.459ms asymm 5 7: 193.251.142.16 39.373ms asymm 12 8: ae7.cr6-par11.ip4.gtt.net 27.405ms asymm 11 9: ip4.gtt.net 26.759ms asymm 11 10: et-2-0-0-ren-nr-lyon1-rtr-131.noc.renater.fr 44.520ms asymm 13 11: hu0-5-0-40-ren-nr-clermont-rtr-091.noc.renater.fr 46.466ms asymm 14 12: 193.51.183.251 51.197ms asymm 15
Je suis alors capable de voir que mon paquet passe par Paris, Francfort, Rennes, et enfin Clermont-Ferrand.
💡 Des sites comme https://ipinfo.io/ permettent de trouver la localisation d'une adresse IP.
💡 Des sites comme https://ipinfo.io/ permettent de trouver la localisation d'une adresse IP.
💡 Les réseaux ont plusieurs redondances (i.e. plusieurs chemins pour arriver au même endroit) ce qui permet d'être plus résistant aux pannes, e.g. lorsqu'un intermédiaire est hors ligne ou surchargé, le paquet peut passer par un autre chemin. Cela signifie aussi qu'une mauvaise configuration des tables de routage peut entraîner une boucle infinie dans lequel le paquet IP se perdra. Pour éviter cela, les paquets ont aussi un Time To Live (TTL), décrémenté à chaque intermédiaire, permettant de supprimer le paquet lorsque le TTL atteint 0.
Réseau privé, LAN, VLAN, VPN
Il est possible de créer son propre réseau privé, dont les machines ne sont pas directement accessibles à partir de l'extérieur. On utilisera alors des adresses IP dites privées, qui n'auront de sens qu'au sein de ce réseau (plusieurs réseaux privés pouvant utiliser les mêmes adresses IP). Les adresses IPv4 suivantes sont réservées pour les réseaux privés :
Il existe 3 équipements réseaux permettant de construire un réseau sur un site :
- couche 2 : un concentrateur (hub) : comme si les ordinateurs du réseau étaient tous reliés directement entre eux.
- couche 2 : un commutateur (switch) : n'envoie pas les trames à tout le monde, permet plusieurs réseaux.
- couche 3 : un routeur (router) : permet le routage (i.e. passer d'un réseau à un autre), peut fournir le DHCP.
Les équipements précédemment présentés permettent de placer des ordinateurs d'un même site au sein d'un même réseau. Cependant, cela ne fonctionne pas si les ordinateurs sont situés sur plusieurs sites, e.g. comme au sein de l'UCA avec ses différentes antennes.
Pour cela on utilise des VPN (Virtual Private Network) qui permettent d'établir un tunnel sécurisé entre plusieurs machines distantes. Ces machines seront vues comme faisant parties du même réseau. Cela est par exemple utilisé en itinérance pour accéder aux services internes d'une organisation, comme si on était sur place.
⚠ Les "VPN" commerciaux permettant de changer sa géolocalisation sont en réalité des proxy utilisant des protocoles réseaux de VPN. Ce ne sont pas des VPN per se, car n'ont pas pour fonction de créer un réseau privé virtuel.
Ports
Nous sommes donc capables d'envoyer un paquet d'un ordinateur à un autre. Cependant, quel est le service destinataire de ce paquet ?
La couche 4 transport permet d'indiquer un numéro de port, identifiant le service destinataire du paquet. Par convention, certains numéros de ports sont réservés (cf ), e.g. :
- 22 : SSH
- 80 : HTTP
- 443 : HTTPS
Plusieurs protocoles en couche 4 existent, notamment :
- UDP : envoi d'un datagramme, sans plus de fonctionnalités.
- TCP : envoi d'un segment, plusieurs fonctionnalités décrites ci-après.
- QUIC : encapsulé dans UDP, se veut plus performant que TLS/TCP (on peut dire qu'il est sur les couches 4.5 à 6).
Pour tous, une somme de contrôle (checksum) est ajoutée au datagramme/segment, même si un est déjà présent en couche 2. En effet, les couches étant indépendantes, on ne peut pas faire l'hypothèse qu'il y a bien une somme de contrôle en couche 2.
QUIC se distingue de TCP par le chiffrement des données (basé sur TLS) et le multiplexage des flux (i.e. peut gérer plusieurs flux de données). En pratique, cela permet différentes optimisations. Par exemple, pour établir une nouvelle connexion, TCP a besoin d'échanger 3 messages (4 messages pour TLS/TCP), quand QUIC n'a besoin que de 2 messages. Ainsi, s'il faut 25ms pour transmettre un message, TLS/TCP pourra prendre 100ms, quand QUIC n'en prendra que 50ms.
Les paquets pouvant arriver dans le désordre, ils sont numérotes. Les paquets pouvant aussi se perdre, une fonctionnalité majeure de TCP et de QUIC est l'acquittement, i.e. indiquer à l'expéditeur les paquets reçus par le destinataire. Si l'expéditeur ne reçoit pas l'aquittement, il renverra les paquets non-reçus. Cela se fait par le biais d'un message indiquant :
- TCP: le numéro du dernier paquet reçu en ordre.
- QUIC: les numéros des paquets reçus.
Pour éviter d'envoyer des messages trop fréquemment, TCP et QUIC ont un système de tampon (aussi appelé fenêtre ou window) qui permet de regrouper plusieurs données au sein d'un même message, permettant ainsi d'en réduire le nombre.
Une dernière fonctionnalité de TCP et de QUIC est le contrôle de flux. S'ils constatent que le réseau est congestionné, ils réduisent automatiquement la quantité de données transférées.