La majorité des gens utilisent l'Internet sans vraiment savoir ce qui se passe lors du téléchargement d'un fichier par FTP ou lors de la consultation d'une page Web. De vagues notions telles que «épine dorsale» circulent, mais il y a absence de connaissance concrète. Le but de cet article est de fournir au lecteur une introduction au TCP/IP, les protocoles utilisés sur Internet. On débute par un aperçu de la pile des protocoles classique puis on développe chacune des couches. Cet article est l'équivalent du premier jour de cours sur le réseau TCP/IP et en donne un large aperçu sans aller trop loin dans les détails. Certains aspects de la suite des protocoles (la plupart du temps la théorie qui les supportent) ainsi que leur implémentation ne sont pas discutés ici.
Avant de débuter l'examen de chacune des couches du TCP/IP, nous devons éclaircir quelques concepts de base. Dans sa plus simple expression, un réseau d'ordinateurs n'est qu'une série de connexions entre les ordinateurs leur permettant de communiquer. Le contenu, la portée, la taille, la vitesse et la fiabilité du réseau dépend de ses protocoles et de son implémentation. Les protocoles sont un moyen de communication prédéterminé. Le terme TCP/IP (Transmission Control Protocol/Internet Protocol) fait référence à toute une famille de protocoles à l'intérieur de laquelle TCP et IP se retrouvent. La figure suivante représente le diagramme classique du TCP/IP. Plutôt que de concevoir les protocoles de manière monolithique (ce qui signifierait que ftp, telnet et gopher auraient leur propre implémentation de protocole complète, incluant des copies du code du noyau pour chaque driver utilisant le protocole), les concepteurs du TCP/IP ont divisé la suite de protocoles réseau en un certain nombre de tâches. Chaque couche correspond à une facette différente de communication. Conceptuellement, il est utile de représenter le TCP/IP sous forme d'une pile. Lors des implémentations, les programmeurs fusionnent certaines couches ensemble pour accroître la performance.

La première couche, liaison, est responsable de la communication avec la quincaillerie (par exemple, une carte Ethernet). Elle reçoit les données du câble du réseau et les transmet à la couche réseau; les données qu'elle reçoit de la couche réseau sont envoyées sur le câble du réseau. C'est à cet endroit que les pilotes de dispositifs (driver) des différentes cartes réseau résident.
La deuxième couche, réseau, a la responsabilité de trouver le moyen d'expédier les données vers la destination. Elle ne garantit pas que les données se rendront à la destination, elle ne fait que décider l'endroit où les données seront envoyées.
La troisième couche, transport, assure un flux de données sans erreur pour la couche application. C'est la couche transport qui garantie la fiabilité de la transmission.
La quatrième couche, application, est l'endroit où l'utilisateur interagit avec le réseau. C'est là qu'on trouve les programmes telnet, ftp, email, IRC, etc.
Les paquets sont l'unité de transmission sur Internet, ils renferment les données et l'information d'en-tête. Les informations d'en-tête consistent généralement en des données pour vérification, des identificateurs de protocole, les adresses source et destination et des informations d'état. Chaque couche peut ajouter ses propres informations d'en-tête, ainsi elle en mesure de comprendre les données qu'elle transmet à la couche inférieure.
Nous allons maintenant examiner chaque couche une après l'autre, avec une attention particulière aux couches réseau et transport. Dans les exemples qui suivent, nous faisons référence à deux ordinateurs : swell.ca.umass.edu et cool.alaska.edu. Swell est l'ordinateur où nous nous trouvons, cool est l'ordinateur destination. Nous supposons que cool et swell sont sur un réseau Ethernet. La plupart de nos exemples supposent que le réseau est Ethernet, mais se pourrait être n'importe quel autre type de réseau.
La couche liaison est la plus facile à comprendre, elle est composée de la quincaillerie réseau et des pilotes réseau (drivers), la couche réseau est le plus bas niveau de la pile de protocoles. Lorsqu'elle reçoit des données du réseau, elle prend les paquets du câble du réseau, en retire toutes les informations d'en-tête de la couche liaison, et les remet à la couche réseau. Lorsqu'elle transmet des données sur le réseau, elle reçoit les paquets de la couche réseau, y colle les informations d'en-tête de la couche liaison, et envoie les paquets sur le câble du réseau.
L'avantage de rendre indépendant la quincaillerie, c'est que les développeurs de protocoles n'ont à écrire la couche réseau qu'une seule fois. Ils fournissent une interface commune à la couche réseau en écrivant un pilote différent pour chaque type de carte réseau.
C'est à cet endroit que le protocole IP et le protocole ICMP («Internet Control Message Protocol»), entre autres, résident. ICMP est utilisé pour garantir la fiabilité du réseau et des informations par des utilitaires tels que ping et traceroute. IP est utilisé pour presque toutes les autres communications sur Internet. Lorsqu'elle envoie des paquets, elle doit trouver comment les faire parvenir à leur destination; lorsqu'elle reçoit des paquets, elle doit trouver à qui ils appartiennent. Parce qu'elle n'a pas à se préoccuper si les paquets arrivent bel et bien à destination, ou que les paquets arrivent dans le même ordre qu'ils ont été envoyés, son travail est de beaucoup simplifié. Si un paquet pose des problèmes (par exemple, un paquet endommagé), IP s'en débarrasse silencieusement. Les couches supérieures ont la responsabilité d'assurer la fiabilité dans la réception des paquets. Le comportement du protocole IP est dit «sans état» ou «débranché» car l'existence de paquets antérieurs ou futurs n'a pas d'importance dans le traitement du paquet courant. On pourrait débrancher le câble du réseau, attendre une minute, rebrancher le câble et IP n'en saurait rien.
IP est capable d'envoyer les paquets à leur destination car chaque carte réseau (interface) sur Internet a sa propre adresse numérique unique. Curieusement ces adresses sont appelées adresses IP. Notez bien, chaque interface a sa propre adresse, si un ordinateur possède plusieurs interfaces (c'est le cas d'un routeur), chacune a sa propre adresse IP. L'Internic a la responsabilité d'assigner des ensembles d'adresses aux organisations, assurant ainsi l'unicité dans les adresses.
Parce qu'il est difficile de faire allusion aux ordinateurs par des nombres, les concepteurs du TCP/IP ont permis aux administrateurs de réseau d'associer des noms aux adresses IP. Bien que cela n'a rien à voir avec la couche IP, nous croyons que cette information est utile. À l'origine, chaque hôte sur Internet entretenait sa propre copie complète de cette base de données (sur les systèmes Unix, elle se trouve dans /etc/hosts). Cependant, au fur et à mesure que grossissait Internet, cette méthode devenait très lourde -- autant en ce qui concerne la taille de la base de données, que le cauchemar administratif résultant pour la maintenir. Ainsi naquit le système des noms de domaine (DNS, «domain name system»). C'est une base de données distribuées d'adresses IP avec leurs noms associés; en effet, une adresse IP peut être associée à plusieurs noms différents. Lorsqu'un administrateur de réseau ajoute un nouvel ordinateur à son réseau, il a la responsabilité de mettre à jour le serveur contenant la base de données des noms de son organisation, ces changements se propagent rapidement dans tout le réseau. Toutes les communications entre les ordinateurs se font via les adresses IP numériques, ainsi le nom d'un ordinateur n'est utilisé qu'au tout début de la connexion.
Les étapes utilisées par IP pour envoyer des paquets sont simples : à partir de son adresse IP, trouver le moyen de le rendre à sa destination, puis l'expédier.
La recherche du moyen de rendre le paquet à sa destination, un genre de routage, est la tâche critique du protocole IP. Heureusement, swell n'a pas à savoir comment envoyer un paquet en Alaska, il n'a qu'à savoir qu'elle est le routeur local qui est responsable d'expédier les paquets en Alaska. Un routeur diffère d'un ordinateur typique du Net, car il possède au moins deux cartes réseaux -- cela lui permet de se brancher à deux réseaux ou plus. Dans une petite organisation, on retrouve un réseau local (par exemple, Ethernet) avec une ligne louée branchée sur Internet. Le routeur de l'organisation est branché à la fois sur le réseau local et sur Internet. Tous les paquets destinés à l'Internet sont envoyés au routeur, qui les place sur la ligne louée, en route vers le routeur suivant.
Les routeurs n'ont besoin de connaître que les routeurs auxquels ils sont branchés. Cela permet au routeur local de swell de dire: «tous les paquets destinés à l'Ouest vont au MIT, alors je ne fais qu'envoyer les paquets à cet endroit et je laisse MIT se débrouiller avec ces paquets.» MIT les place sur une ligne T3 vers Cleveland, de là ils vont à Chicago, San Francisco, Seattle, puis vers l'Alaska, de là ils se rendent au routeur local de l'organisation puis à la carte réseau Ethernet de l'ordinateur swell. Les routeurs n'ont pas à connaître le chemin complet qu'un paquet doit emprunter, uniquement le routeur auquel ils sont connectés qui permet de se rendre vers cette destination.
Pour déterminer l'endroit suivant où un certain paquet doit se rendre, les ordinateurs sur Internet entretiennent des tables de routage. Elles sont composées de trois éléments majeurs : les adresses des routeurs, les adresses qu'elles peuvent manipuler et l'interface à laquelle ils sont branchés. Dans le cas d'un ordinateur situé sur un réseau local, tel que cool, cette table a probablement ces entrées : une pour le loopback (ce qui permet à l'ordinateur de se connecter à lui-même), une pour le réseau local et une entrée implicite.
L'entrée du réseau local permet à IP de savoir que l'ordinateur est relié directement à un ensemble d'adresses IP. Plutôt que d'essayer de faire le routage de ces paquets, le protocole IP cherche les adresses physiques des cartes réseaux auxquels correspondent les adresses IP et envoie les paquets à cet endroit. L'entrée du réseau local fait de cool un routeur, les adresses qu'il peut manipuler sont toutes les adresses IP du réseau local et l'interface destination est une carte réseau Ethernet située dans ce réseau local.
L'entrée implicite veut dire : «pour toutes les autres adresses, les envoyer à ce routeur.» Plutôt que d'essayer d'expédier un paquet destiné à cool.alaska.edu vers un ordinateur du réseau local, cool l'envoie à l'interface du routeur, en disant «Voilà, je ne sais pas où il va, trouve sa destination.» Le routeur regarde dans sa table, s'aperçoit qu'il n'a pas de branchement direct avec cool, alors il l'envoie à la destination implicite : MIT; et le processus se poursuit.
Lorsqu'il reçoit un paquet de la couche liaison, le protocole IP vérifie s'il est endommagé puis le remet à la couche transport. S'il y a un problème avec le paquet, IP s'en débarrasse silencieusement parce qu'il n'a pas à se préoccuper si le paquet se rend effectivement à destination.
Nous n'avons donné qu'un bref aperçu de ce qui se passe dans la couche réseau, voici ce que nous n'avons pas couvert dans cette section : fragmentation des paquets, les masques et autres techniques de routage, le traitement des erreurs de réseau et les interactions entre la couche réseau et la couche transport.
Il y a deux protocoles dans la couche transport : le TCP (Transmission Control Protocol) et le UDP (User Datagram Protocol). Le TCP permet d'établir une communication point à point fiable alors que l'UDP ne le permet pas. Le protocole UDP ressemble au protocole IP mais permet aux gens d'écrire des logiciels qui créer leur propre format de paquet, ce qui est très utile si vous désirez écrire de nouveaux protocoles.
Le protocole TCP établit un «circuit virtuel» entre deux processus. Il s'assure que les paquets sont reçus dans l'ordre transmis et que les paquets perdus sont retransmis. Des programmes interactifs tels que ftp et telnet utilisent le protocole TCP.
Jusqu'à maintenant nous avons discuté de l'adressage au niveau de l'hôte -- comment identifier un ordinateur en particulier. Mais une fois dans l'ordinateur, on a besoin d'une méthode permettant d'identifier un service en particulier (par exemple : le courrier électronique). C'est la tâche des ports -- des numéros d'identification inclus dans chaque paquet UDP ou TCP. Les ports TCP/IP ne sont pas des ports physiques, ce n'est qu'un moyen d'étiqueter les paquets. Un processus situé dans un ordinateur écoute sur un port particulier. Lorsque la couche transport reçoit un paquet, elle en vérifie le numéro de port et envoie les données au processus correspondant. Lorsqu'un processus est lancé, il enregistre un numéro de port dans le protocole TCP/IP. Un seul processus par protocole peut écouter sur un port donné. Ainsi, bien qu'un processus utilisant le protocole UDP et un autre utilisant le protocole TCP peuvent écouter ensemble sur le port 111, ce n'est pas le cas pour deux processus utilisant le même protocole TCP. Un certain nombre de ports est réservé pour les services standards. Par exemple, SMTP, le protocole de courrier électronique, utilise toujours le port 25, et telnet le port 23. Pour voir la liste des ports réservés sur un système Unix, regardez dans etc/services.
Nous avons vu comment fonctionnent les ports du côté du serveur -- des ports spécifiques sont réservés pour un ensemble de tâches. Du côté de l'initiateur, l'assignation des ports est dynamique. Lorsque le programme telnet est lancé sur l'ordinateur swell, il obtient un nouveau numéro de port (par exemple : 1066). C'est le port source que la couche TCP de swell inscrit dans chaque paquet. Cela permet au processus telnet situé sur l'ordinateur cool de répondre au bon processus telnet situé sur l'ordinateur swell. La combinaison d'adresses IP source et destination avec les ports fournit un identificateur de conversation unique. Une conversation est appelée un flux.
Le protocole UDP est essentiellement le protocole IP avec les numéros de port (flux). Il donne accès à l'utilisateur à des datagrammes IP. Le système de fichiers réseau (NFS) et talk sont deux exemples de protocoles basés sur UDP.
Nous venons d'explorer très superficiellement les protocoles TCP et UDP. Maintenant vous devriez avoir une bonne compréhension de l'interaction entre les couches réseau (IP) et transport (TCP/UDP). Passons maintenant à la couche finale.
C'est à cet endroit que l'utilisateur interagit avec le réseau. Tous les programmes réseaux tels que telnet, ftp, mail, news, et les clients WWW sont situés dans la couche application. Ils utilisent le protocole TCP ou UDP pour communiquer avec d'autres ordinateurs. Pour en donner une meilleure vue d'ensemble, je vais examiner telnet plus en détail.
Telnet est utilisée pour le travail à distance, il élimine le raccordement physique entre des terminaux. Un utilisateur sur swell qui tape telnet cool.alaska.edu se connecte rapidement à cool.alaska.edu, qui lui demande de s'identifier au moyen d'un login. Il peut ainsi interagir avec cool. Voici les étapes de ce processus :
Les étapes de communication entre deux ordinateurs nous montrent que le procédé est relativement simple. Parce que la couche transport fournit une interface de programmation standard, les applications réseaux n'ont pas à être réécrites ou recompilées si le code de la couche transport est modifié.
Nous avons couvert les quatre couches de base du TCP/IP. Le lecteur devrait avoir une bonne vue d'ensemble de l'interaction entre les différentes parties du TCP/IP. Nous avons délibérément passé sous silence plusieurs détails qui sont abondamment expliqués dans les manuels traitant du TCP/IP.