Internet expliqué aux enfants

…, aux grands parents et aux personnes effrayées par la technologie.

Câble réseauL’objectif de ce billet est de donner quelques explications aux termes techniques que l’on retrouvera souvent sur ce blog mais qu’il est également parfois nécessaire de connaître lorsque l’on est confronté à des problèmes ou des messages d’erreurs. Je vais alors essayer d’expliquer le plus simplement possible les termes de “serveur”, “réseau”, “IP”, “DNS”, “passerelle”, “firewall”, ….

Pour commencer, il faut faire un peu d’histoire. En effet, même dans le domaine technique, si on connaît les objectifs d’origine, les choix critiques effectués au cours du temps, on peut alors comprendre les limitations actuelles et imaginer les futures évolutions.

L’objectif principal a été fixé dès les années 60 : il faut transmettre des données entre deux ordinateurs distants. Pour les plus jeunes d’entre nous : les ordinateurs existaient déjà. Il s’agissait plutôt à proprement parler de “calculateurs” ou de grosses calculatrices qui enchaînaient les opérations le plus vite possible. Je ferai peut-être plus tard un billet du même genre que celui-ci sur “c’est quoi un ordinateur”.
Les utilisateurs de ses ordinateurs souhaitaient transmettre des données entre deux ou plusieurs ordinateurs et tant qu’à faire des messages pour les utilisateurs.
Il fallait alors résoudre plusieurs questions. La première est évidente : il faut trouver comment transporter les données. La réponse est relativement simple : il suffit de mettre un câble entre les deux machines. C’est le début du réseau. Une carte électronique spécifique de l’ordinateur, la carte réseau, est chargé d’envoyer les données binaires composées de ‘zéros’ et de ‘uns’. Lors de la réception, une autre carte réseau les injecte dans l’ordinateur de réception.Transmission de données
Ensuite il s’agit de comprendre cette suite de 0 et de 1. Il faut une règle commune pour que les deux machines sachent que la lettre “A” est codé par “0100001”. Il faut que les machines connaissent la taille de chaque séquence de donnés (ou paquet de données) mais aussi détecter le début et la fin de communication, gérer les erreurs s’il y a des parasites ou des coupures. Les règles communes sont les protocoles de communication.
Sur l’image ci-contre on peut imaginer que le protocole dit que la donnée est encadrée par quatre ‘uns’ et quatre ‘zéros’.
Transporter des données n’est alors pas très compliqué. C’est pour l’instant surtout un problème électronique.

La seconde question est plus décisive : “comment distribuer les données lorsque plusieurs machines veulent communiquer ?”. La solution est qu’un ordinateur conserve toutes les données. Les autres ordinateurs envoient et récupèrent les données sur le premier ordinateur. Cet ordinateur qui reçoit et distribue est un serveur, les autres machines sont les clients. Les liaisons entre serveur et client sont le réseau (network en anglais). Les lignes que vous lisez actuellement se trouvent sur un serveur. Votre ordinateur, le client, a téléchargé à votre demande ces données depuis le serveur pour les afficher sur votre écran.
Ici, et c’est ce qui fera la spécificité d’Internet, un choix important a été fait dès l’origine : tous les ordinateurs peuvent être client ou serveur.
Le Minitel français n’avait pas fait ce choix. Votre ordinateur est certainement plus puissant que le serveur sur lequel se trouve le texte que vous êtes en train de lire. La seule différence est que le serveur doit être continuellement allumé pour être accessible à toute heure du jour ou de la nuit.

Pour l’instant j’ai un peu simplifié la question du transport et de la distribution des données et je n’ai en réalité décrit que les principes de base d’un transfert de données entre ordinateurs.
Nous allons voir comment la volonté que tout client soit également serveur a déterminé les choix qui amèneront au réseau internet comme nous le connaissons.
Dans un premier temps, il n’est pas envisageable de tirer des câbles entre chaque client et chaque serveur potentiel. Il faut donc partager les câbles de liaison. Il faut alors également identifier chaque machine. Elles auront un numéro unique. Le protocole de communication indiquera le numéro de destination et le numéro source où sera envoyé la réponse.

Ici, je dois ouvrir une petite parenthèse pour aborder le sujet de la numérotation binaire. Comme vous le savez les ordinateurs sont stupides et ne traitent que les valeurs 0 et 1. Ces machines sont essentiellement constituées de mini-interrupteurs qui ne connaissent que les valeurs : “éteint” ou “allumé”. Pour représenter le nombre 2 on va associer deux valeur binaires ‘10’ (non pas “dix” mais “un” et “zéro”), pour 3 cela sera ‘11’, pour 4 on doit ajouter un élément binaire (un bit), on obtient ‘100’. Si l’on continue ainsi on obtient le nombre particulier 15 qui est représenté par ‘1111’. Une autre valeur intéressante est 255, représentée par ‘11111111’ soit 8 bits à 1. Ces 8bits sont également appelé un octet. Comme ces suites de 0 et 1 deviennent fastidieuses à lire ou écrire, on va utiliser une astuce : nous allons écrire ces valeurs dans une autre base arithmétique. Nous utilisons couramment la base décimale : les chiffres ‘0123456789’ nous permettent de représenter tous nos nombres. La base hexadécimale, où aux chiffres de 0 à 9 on ajoute les lettres ‘abcdef’, devient très pratique pour représenter les données binaires. En effet ‘a’ en hexadécimal, représente ‘10’ en décimal et ‘1010’ en binaire. Mieux ‘f’ en hexadécimal, représente ‘15’ en décimal et ‘1111’ en binaire. Donc ‘ff’ nous permet de représenter 255 et nos très long ‘11111111’ binaires. Une autre valeur qui apparaît régulièrement est 65535 ou FFFF en hexadécimal et donc 16 bits à 1. Vous l’aurez compris ces valeurs qui peuvent nous sembler étranges sont en réalité très faciles à traiter par
une machine. Fin de la parenthèse.  

Revenons à nos problèmes d’identification de machines. En 1974 on se disait que 65535 numéros de machines seraient suffisant pour un réseau local mais l’objectif était également de joindre des machines d’autres réseaux, donc d’inter-connecter les réseaux. Vinton Cerf et Robert E. Kahn introduisent les notions de numérotation de réseau (255 en 1974) et de passerelles (gateway). La passerelle est une machine spécifique du réseau local qui est également connectée au réseau extérieur. Cette passerelle distribue les données en fonction du numéro de réseau vers un réseau extérieur ou vers le réseau local pour les données reçues. Un réseau local qui n’a pas besoins de se connecter à l’extérieur n’a pas besoin de passerelle. Un ensemble de passerelles peuvent relier des réseaux de réseaux. Pour limiter les conséquences des coupures de liaison plusieurs chemins (ou routes) peuvent être disponibles entre ces passerelles.

En 1981 le protocole IP est défini. Désormais chaque machine a un numéro unique qui comporte son numéro de réseau et de sous réseau.  C’est une adresse IP. Cette adresse ip est découpée en quatre nombres compris entre 0 et 255, par exemple 192.168.0.21 Vous pouvez remarquer que l’on a utilisé des nombres décimaux mais on aurait pu choisir une notation hexadécimale comme “c0.a8.0.15”. Pour indiquer le réseau, on utilise un masque par exemple “255.255.255.0” ou “/24” qui indique que les 24 premiers bits représentent le réseau et donc que ce réseau contient 255 machines.

C’est une adresse publique, toute machine avec une adresse IP publique est potentiellement accessible par une autre machine connectée sur Internet.

Cet adressage en 4 parties permet de créer environ 4 milliards d’adresses (256 x 256 x 256 x 256). Internet est un tel succès que, en 2012, 4 milliards d’adresses ne sont plus suffisantes pour toutes les machines connectées. En attendant une solution globale dont je parlerai dans une autre billet, on a utilisé la position privilégiée des passerelles pour leur permettre de convertir des adresses IP privées (inaccessibles depuis les réseau extérieurs) en une seule adresse publique. C’est un mécanisme de NAT.

Internet

Pour connecter une machine sur internet il faut alors lui attribuer une adresse IP, un masque pour définir son réseau et l’adresse IP de la passerelle qui est forcément dans le même réseau local que la machine. Lorsque cette machine est connectée elle peut alors fournir un ou plusieurs “services“.
 
Le service est défini par un protocole qui gère en général les problèmes de connexion. Le plus courant est TCP qui vérifie que le serveur peut répondre et que toutes les données sont transmises à l’inverse de UDP qui autorise un peu de perte de données par exemple une données sonore peut rester utilisable même s’il manque quelques informations.

Comme le serveur ne doit pas être monopolisé par une seule tâche on va également distinguer les services disponibles par protocole avec un numéro compris entre 0 et 65535 : c’est un numéro de port. Lorsque vous envoyez un mail votre ordinateur se connecte à l’adresse IP de votre serveur sur le port 25 avec le protocole TCP. Il utilise ensuite un autre protocole commun pour décrire les données à transmettre. Pour lire cette page vous vous êtes connecté toujours avec le protocole TCP sur le port 80.

Comme toutes données qui entrent ou sortent du réseau local passent par la passerelle, celle-ci devient le lieu idéal du contrôle des connexions. Le logiciel qui autorisera ou non le passage vers telle adresse ip ou tel port est un firewall ou pare-feu. On l’installe parfois directement sur un client ou un serveur (firewall personnel) mais un autre programme du client pourrait le désactiver.

Vous pouvez par exemple vous connecter en cliquant sur le lien suivant http://176.31.181.38:80  (notez le format “adresse IP:port”) par contre si vous essayez d’utiliser le port 83 : http://176.31.181.38:83 vous obtiendrez un message d’erreur. En réalité “http://“ et “:80” sont une information redondante et indique l’usage du même protocole. Je reviendrais un peu plus loin sur ces protocoles. Avec cette petite expérience vous remarquez déjà que l’on peut utiliser uniquement le numéro IP du serveur. Malheureusement cette suite de quatre nombres n’est pas évidente à retenir. Dès 1974 on essaye d’associer un nom facilement mémorisable avec une adresse IP. On enregistre ces informations dans un simple fichier texte appelé ‘hosts’ que l’on recopie sur chaque machine. On se rend très vite compte qu’il faut une méthode plus générale et plus sûre pour gérer le nombre de plus en plus croissant de machines qui se relient sur Internet. En 1989, alors que le fichiers ‘hosts’ contient déjà 5500 lignes, un nouveau service et un nouveau protocole est mis en œuvre : le DNS. Les noms des machines vont être gérés par domaine dont la gestion sera déléguée à des serveurs.

Si vous souhaiter vous connecter à www.google.fr alors que vous ne connaissez pas son adresse IP, votre machine doit connaître l’adresse IP d’un moins un serveur DNS. Celui ci demandera à un autre serveur quelle est l’adresse du serveur qui enregistre les noms du domaine ‘.fr’. Lorsqu’il a la réponse, il demande à ce serveur le nom du serveur qui enregistre le domaine ‘.google.fr’. Il termine par demander à ce serveur quelle est l’adresse IP de ‘www.google.fr’. Vous comprenez que le nom d’une machine est forcément structuré. ‘www.yvesago’ n’existe pas parce que ‘.yvesago’ n’est pas un domaine connu dans Internet.

Je vous ai parlé a plusieurs fois de protocoles et cela peu commencer à devenir confus. Comme je le disais au début de ce billet, un protocole est un ensemble de règles communes. Ces règles communes permettent au client et au serveur de se comprendre et de réussir l’échange de données. Internet est constitué d’un ensemble de protocoles. Ces protocoles sont décrits de façon très précise dans des documents intitulés RFC (Request For Comment). Ces documents sont numérotés et peuvent évoluer au cours du temps. Ils permettent de réaliser les élément techniques ou d’écrire les logiciels (applications) qui traiterons les données.
Pour distinguer les protocoles, on les classes en “couches”. La couche physique concerne l’encodage des données sur les câbles, fibres, ondes radio ainsi que les connecteurs ou les distances maximales. La couche liaison de données (niveau 2) décrit les transmissions de données au niveau du réseau local comme par exemple le formats des paquets binaires ou la gestion de la connexion wifi. La couche réseau et transport (niveau 3) décrit le transport des données : c’est les protocoles IP, TCP ou UDP que l’on vient de croiser. On termine par la couche application : c’est les protocoles qui traitent du web comme HTTP, du mail avec SMTP pour l’envoi, POP, IMAP pour la réception ou le DNS.
Certains protocoles comme SMTP sont apparus très tôt dès le début des années 80, d’autres tard comme le wifi en 1999 ou HTTP seulement en 1989 ou encore DHCP en 1993. Ce dernier protocole permet de simplifier la configuration d’une machine : il est chargé de distribuer les adresses IP, de l’ordinateur, du DNS et de la passerelle automatiquement dans un réseau local, si les machines du réseau le demande.
Ce principe de couches permet d’obtenir les mêmes résultats que vous soyez connecté avec un câble ou en wifi.

Nous arrivons à la fin de ces quelques explications sur Internet. J’ai essayé de vous initier aux technologies d’Internet de façon plutôt historique en vous présentant les problèmes à traiter et les réponses qui ont été apportées. J’espère que ces quelques explications vous ont convaincu que les solutions techniques utilisées dans Internet ne sont pas si compliquées et qu’elles correspondent bien aux objectifs de 1974 qui était d’avoir un protocole “simple, puissant et évolutif”.

En complément, ce billet devrait également vous aider à comprendre un certain nombre de problèmes qui vous sont peut-être déjà arrivé lors de votre usage d’Internet. Si vous avez eu un message d’erreur lors de l’accès à un site cela provient peut-être seulement d’une erreur dans le nom de domaine. Si tous les sites sont coupés et que votre liaison a la passerelle n’est pas coupée, peut-être que le serveur DNS était en panne ou encore une autre machine de votre réseau a la même adresse IP.

Techniquement, il faut retenir l’importance de l’adresse IP et de la passerelle, l’aspect secondaire mais particulièrement pratique du DNS. De façon plus générale, il faut retenir que toute machine peut devenir serveur sur Internet, l’importance des protocoles : les règles communes connues de tous et pour finir l’efficacité des solutions simples et évolutives.

Pour les plus curieux :

1. Quelques outils qui vous permettent de tester vous même ce que vous avez appris dans ce billet.

Le plus simple est d’utiliser un “terminal” sous Linux, Android, MacOS X ou la console de commande “cmd.exe” sous Windows

  • connaître son adresse IP :
    • Linux ou MacOS X : ifconfig
    • Windows : ipconfig
  • connaître ses serveurs DNS :
    • Linux ou MacOS X : cat /etc/resolv.conf
    • Windows : ipconfig /all
  • connaître sa passerelle :
    • Linux ou MacOS X : route -n
    • Windows : ipconfig /all
  • tester la connexion avec la passerelle :
    • Linux, MacOS X, Windows : ping xxx.yyy.www.zzz
  • trouver une adresse IP :
    • Linux, MacOS X, Windows : nslookup www.yvesago.net
  • voir la route pour accéder à Google :
    • Linux, MacOS X, Windows : traceroute www.google.com
    • Linux : mtr www.google.com

2. À lire (en anglais)
A Protocol for Packet Network Intercommunication (1974), dans lequel Vinton Cerf et Robert E. Kahn présentent le protocole IP

3. Notez que j’ai volontairement évité de traiter un certain nombre de problèmes qui peuvent arriver à toutes les couches du modèle.
Par exemple les risques de saturation, d’écoute ou de détournement du traffic. A chaque fois des solutions ont été proposées.
Certaines ont été utilisées pendant un certain temps mais ne sont pas révélées satisfaisantes en terme de coût ou de performance
mais il s’agit ici d’autres histoires …