1. Réseau
Les ordinateurs contemporains sont tous en réseau, c'est à dire, connectés entre eux. Pour la plupart des ordinateurs personnels, le réseau se réduit (?!) à une connexion internet, par WIFI ou cable ethernet. Pour les ordinateurs de l'université ou d'une entreprise, les ordinateur sont également connectés à un réseau local.
Les ordinateurs d'un réseau doivent être identifiés : ils ont une adresse.
Les ordinateurs communiquent entre eux en utilisant des protocoles qui décrivent précisément la manière de communiquer (exemples : HTTP, SSH, FTP, ...)
Le réseau Internet est assez impressionnant. Les opérations effectuées sont extremement complexes, et les problèmes assez rares !
Pour essayer de visualiser la complexité, voici par exemples les échanges de paquets nécessaires pour la réception d'une unique image de 300kio : https://vimeo.com/14439742
1.1. Quelques définitions
réseau
Un réseau est un ensemble de machines (ordinateurs et autres) reliées entre elles par une technologie unique :
-
réseau des ordinateurs des salles de TP
-
réseau WIFI du campus
-
mini réseau avec un ordinateur et ses souris / clavier sans fil
internet
ensemble de réseaux connectés entre eux :
-
réseau de l'université, avec ces composantes filaires et sans fils
-
réseau Internet
client -- serveurs
Les connections sur le réseau internet ne sont pas vraiment symétriques : elles mettent en jeux
-
un client (l'ordinateur de l'utilisateur, ou plus précisément son navigateur Internet)
-
un serveur (l'ordinateur qui héberge le site)
Comme un serveur dans un restaurant, un serveur informatique répond aux différentes demandes de tous les clients qui s'adressent à lui. Même lorsqu'aucun client n'est présent, le serveur doit être à l'écoute pour pouvoir gérer les clients qui arrivent. En fonctionnement normal, un serveur peut potentiellement gérer plusieurs centaines, voir plusieurs milliers (ou plus) client en même temps.
Lorsqu'un serveur tombe en panne, ce sont tous les sites qu'il héberge qui deviennent inaccessibles.
réseaux Peer to Peer
Les réseaux P2P sont complètement décentralisés, sans aucune notion de client et de serveur. Les "peers" (pairs) peuvent tous se connecter les uns aux autres, et chacun peut envoyer / répondre à des requêtes. Ceci rend ces réseaux plus robustes car même lorsqu'un pair tombe en panne d'autres peuvent automatiquement prendre le relais.
1.2. Adresses IPs, URLs et routes
Chaque ordinateur du réseau Internet est identifié par une adresse IP (adresse pour "Internet Protocol"). Cette adresse est un nombre entier entre 0 et 4 294 967 295 (càd un nombre sur 32 bits). Ce nombre est en général écrit sous la forme N.N.N.N où chaque N est un nombre inférieur à 256 (càd sur 2 octets)
Ces adresses doivent identifier uniquement chaque ordinateur. Deux ordinateurs peuvent avoir la même adresse à condition qu'ils soient sur deux réseaux indépendants. (Les adresses "privées" sont utilisées dans ce cas.)
Comme le nombre de machines connectées au réseau Internet augmente, ces adresses ne sont plus suffisantes. On les remplace par des adresse IP version 6 (IPv6) qui utilisent 128 bits (au lieu de 32).
Pour les utilisateurs humains, des adresses "textuelles" sont également utilisées : ainsi www.google.fr est un synonyme pour 216.58.210.195 et www.google.com est un synonyme pour 74.125.206.147.
C'est le DNS (Domain Name System) qui traduit ces noms de domaines en adresses IP utilisables pour le routage.
Remarque : sur un réseau local, chaque ordinateur (ou plus précisément, chaque périphérique) est identifié par une adresse MAC (Media Access Control). Cette adresse est en général donné par le périphérique physique et n'a pas de lien avec la topologie du réseau. Cette adresse MAC n'est pas vraiment utile pour la communication entre les réseaux.
1.3. Internet
Le réseau Internet est essentiellement décentralisé : les connections peuvent se faire de n'importe quel ordinateur vers n'importe quel autre. Comme il n'y a pas de connexion physique directe entre tous les ordinateurs, les communications sont routées d'une machine vers l'autre. C'était l'une des idées importantes lors ce sa création.
Même s'il n'y a pas de noeud central universel, le graphe du réseau internet possède des noeuds importants qui gèrent le gros du traffic (des "autoroutes" qui relient les continents).
Chaque paquet (bloc de données) envoyé contient son adresse de destination et les routeurs ont pour tache de faire passer les paquets par une route raisonnable. Un paquet peut passer ainsi par de nombreux routeurs pour aller d'un ordinateur vers un autre.
Exemple, pour se connecter au site d'une université en Suède, ma connection passe par
-
la France : Grenoble, Lyon
-
l'Angleterre
-
la Suède : Lund, Halmstad et Goteborg
$ mtr www.chalmers.se 1. sw-mb.univ-savoie.fr (193.48.120.1) 2. rtr-bourget.local.univ-savoie.fr (192.168.10.33) 3. 193.54.143.109 4. 100.64.249.5 5. vl1183-te4-4-grenoble-rtr-021.noc.renater.fr (193.51.185.66) 6. te1-3-lyon2-rtr-021.noc.renater.fr (193.51.177.57) 7. te0-0-0-5-lyon1-rtr-001.noc.renater.fr (193.51.177.216) 8. renater.mx1.gen.ch.geant.net (62.40.124.61) 9. ae4.mx1.par.fr.geant.net (62.40.98.152) 10. ae1.mx1.lon2.uk.geant.net (62.40.98.76) 11. ae3.mx1.lon.uk.geant.net.geant.net (62.40.98.78) 12. nordunet-gw.mx1.lon.uk.geant.net (62.40.124.130) 13. dk-uni.nordu.net (109.105.97.126) 14. dk-ore.nordu.net (109.105.97.132) 15. dk-ore2.nordu.net (109.105.97.57) 16. ??? 17. lund-lnd88-r1.sunet.se (130.242.4.70) 18. halmstad-hsd1-r1.sunet.se (130.242.4.72) 19. goteborg-gbg7-r1.sunet.se (130.242.4.48) 20. cth-r1.sunet.se (130.242.4.173) 21. cth1.sunet.se (130.242.6.9) 22. hall-core1-gw.chalmers.se (129.16.2.114) 23. www.chalmers.se (129.16.71.10)
Il n'y a en général pas unicité de la route d'un point à un autre, et en cas de panne d'un noeud intermédiaire, les routeurs trouvent une autre route...
1.4. Protocoles : niveau application
Il existe de nombreux protocoles décrivant les types de données envoyées sur le réseau. Voici quelques exemples :
-
HTTP (Hypertext Transfer Protocol) : c'est le protocole principal du web. Un serveur envoie du contenu (texte, multimedia) à des clients. Dans l'utilisation courante, le client est un navigateur internet qui affiche le contenu et permet de naviguer grace à des liens entre les documents HTML (Hypertext Markup Language)
Le protocole décrit les requetes possibles (GET et POST, et quelques autres)
-
IMAP (Internet Message Access Protocol), POP (Post Office Protocol), SMTP (Simple Mail Transfer Protocol) : ce sont les protocoles du courrier electronique :
-
POP : téléchargement de mesagge depuis un serveur distant
-
IMAP : accès (lecture) de message sur un serveur distant (remplace largement POP)
-
SMTP : envoie de messages à travers un serveur distant
-
-
LDAP (Lightweight Directory Access Protocol) : authentification d'utilisateurs pour controle d'accès à des fichiers, des services, etc. Les droits des utilisateurs des services informatiques de l'USMB sont stockés sur un annuaire LDAP
-
SSH (Secure Shell) : connexion à distance pour obtenir un shell sur un ordinateur distant. Utilisé pour gérer des machines sans y avoir un accès physique.
-
FTP (File Transfer Protocol) : transfer de fichiers entre machines. (Le protocole SSH permet également de le faire)
-
...
Seul SSH intègre une fonctionnalité de chiffrement. Pour les autres protocoles, il faut utiliser un protocole "au dessus" pour chiffrer les données : protocoles TLS (Transport Layer Security) ou anciennement SSL (Secure Sockets Layer) : par exemple, HTTPS.
1.5. Protocole : transport (réseau local)
Les protocoles de communications sont basés sur d'autres protocoles qui décrivent comment découper l'information pour la faire passer sur un réseau.
-
UDP (User Datagram Protocol) Lorsque deux ordinateurs sont connectés, il est possible d'envoyer des datagrammes : un datagramme est découpé en
-
2 octets pour indiquer le port d'origine (facultatif : peut être 00 00)
-
2 octets pour indiquer le port de destination (obligatoire)
-
2 octets pour indiquer la taille totale du datagramme en comptant les 8 octets d'entête (obligatoire)
-
2 octets de somme de controle: ces octets permettent de vérifier l'intégrité des données envoyées (facultatif : peut être 00 00)
Les taille - 8 octets de données viennent après cette entête.
Ce protocole est réservé aux communications simples et rapides (DNS par exemple). Il permet le "broadcast", c'est à dire l'envoi d'un paquet sur tout le réseau, sans préciser de destination. (Les ordinateurs du réseau peuvent tous regarder un datagramme.)
-
-
TCP (Transmission Control Protocol) Ce protocole permet d'avoir une gestion plus "haut niveau" d'information envoyée entre deux ordinateurs.
-
envoie d'accusés de reception ("acknowledgment") et lorsqu'aucun accusé n'est reçu, le paquet est automatiquement réenvoyé)
-
l'ordre des paquets est maintenu, même lorsque plusieurs paquets arrivent dans le désordre (par exemple lorsqu'ils ont emprunté des routes différentes)
-
transparence pour l'application, qui ne voie qu'un flot de donnée. Ces avantages rendent par contre le protocole plus lourd que du simple UDP, et le protocole nécessite une connection entre deux ordinateurs (pas de broadcast possible)
Les entêtes des paquets TCP sont plus complexes que celles des paquets UDP
-
-
ICMP (Internet Control Message Protocol) cf ping / traceroute Ce protocole sert essentiellement à envoyer des messages d'erreur ou de l'information sur le réseau ; pas des données utilisateurs.
Remarque : les paquets UDP ou TCP ne contiennent pas d'adresse IP mais seulement des numéros de port. Ce sont les paquets IP qui contiennent les adresses IP... Les paquets ICMP ne contiennent même pas cette information.
1.6. Protocoles : niveau réseau
Pour envoyer les paquets TCP entre différent réseaux locaux ("inter" "network"), on utilise un nouveau protocole :
-
Pour le web, le protocole TCP est associé au protocol IP (Internet Protocol) : on parle de protocole TCP/IP. L'entête d'un paquet IP contient les adresses IP de la source et de la destination. L'entête contient également :
-
la version du protocole (4 ou 6)
-
la taille
-
le champs TTL (Time To Live) qui donne une "durée de vie" au paquet et évitent qu'un paquet tourne en boucle sur un réseau
-
une somme de controle
-
...
-
Les routeurs sont les noeuds du réseau internet : les paquets IP sont dirigés de routeur en routeur pour les rapprocher de leur destination.
À un niveau encore plus bas, la manière d'envoyer des données sur le réseau utilise elle aussi des protocoles. Le plus utilisé est le protocole ethernet. C'est à ce niveau que sont utilisés les adresses MAC pour repérer les périphériques physiques qui doivent recevoir les données : c'est en général un "switch" qui dirige l'information vers la machine concernée.
Les données du web voyagent dans des poupées russes imbriquées : le code d'une image affichée dans une page web qui arrive sur ma page web est
-
découpé dans plusieurs paquets TCP,
-
qui sont chacun dans un paquet IP,
-
qui sont chacun dans une trame ethernet.
Remarque : la couche ethernet est modifiée lors des passages d'un réseau local à un autre. Les couches TCP et IP peuvent être modifiées (NAT : network address translation) pour remplacer des adresses privées par des adresses "accessibles" depuis l'extérieur.
1.7. Notions de sécurité
Cryptographie et web : TLS
cf https://security.stackexchange.com/questions/20803/how-does-ssl-tls-work
Le protocole TLS (transport layer security) permet de chiffrer les données échangées. Pour ceci, le début de la communication, appelé "poignée de main" ("TSL handshake protocol") ressemble à ceci :
-
le client envoie un nombre aléatoire au serveur (ainsi que les versions de TLS qu'il supporte, une liste d'algos de chiffrements qu'il supporte, une liste de méthode de compressions, un numéro de sessions, ...)
-
le serveur répond en envoyant un autre nombre aléatoire (ainsi que la version de TLS qu'il utilise, les algos de chiffrement et de compression choisis, ...)
-
le serveur envoie son certificat (et d'autres petits trucs)
-
le client envoie un nombre secret, crypté avec la clé publique du serveur (récupérée dans le certificat du serveur) ou bien client et serveur utilisent un algorithme comme Diffie-Hellman pour échanger une clé
-
le client et le serveur calculent une clé secrète à partir :
-
des 2 nombres aléatoires
-
du nombre secret
Cette clé sera utilisé pour chiffrer la suite des communications.
-
Remarque : le certificat doit être vérifié auprès d'une autorité tierce pour garantir son authenticité.
Les données sont chiffrées, mais les méta-données ne le sont pas. En particulier, les adresses source et destination sont forcément en clair.
TOR
cf la section TOR sur https://www.cl.cam.ac.uk/~rja14/Papers/SEv3-ch20-mar17.pdf
Réseaux privés, VPN, firewall
Afin d'éviter les intrusions, les réseaux privés (comme celui de l'université) ne sont pas accessibles de l'extérieur. Seules les machines connectés physiquement au réseau peuvent communiquer entre elles.
Les parefeux (firewall) permettent de filtrer les paquets entrant / sortant d'un réseau : suivant le type de paquet, le numéro de port, les adresses IP de source ou destination, des paquets peuvent être ignorés silencieusement.
Le VPN (Virtual Private Network) permet d'autoriser certaines connections externe et de les traiter comme faisant partie du réseau privé.
Les VPN sont également utilisés pour offrir un minimum d'anonymat vis à vis de ses fournisseurs d'accès Internet : les connexions sortant de votre box sont chiffrées et passent par le VPN, qui se charge ensuite de déchiffrer les métadonnées et de poursuivre la connexion. (Il faut avoir confiance en l'opérateur du VPN, qui a lui accès à vos connexions...)