Le modèle OSI (pour Open Systems Interconnexion) a été créé par l'ISO (l'Organisation internationale de normalisation) dans le but d'uniformiser les communications réseau tout en permettant une variété de protocoles. Il correspond à la norme ISO 7498. Il est un modèle conceptuel qui peut donc être implémenté concrètement de plusieurs différentes façons.
Le modèle OSI a été conçu en couches, de façon à ce que chaque couche ait une juridiction bien précise. Toute couche ne communique qu'avec les couches qui lui sont adjacentes et toutes les couches sont indépendantes de l'implémentation des autres couches. L'idée est d'avoir la possibilité de modifier l'implémentation d'une couche sans que ce changement affecte les autres. (On verra toutefois que ce n'est pas totalement respecté dans notre monde grandement TCP/IP).
La norme ISO 7498 fait la différence entre trois concepts qui sont à la base de toutes les couches:
Les 7 couches qui composent le modèle sont généralement séparées en 2 groupes: les 4 couches du bas s'occupant plutôt de la communication (elles sont souvent implémentées par le système d'exploitation), et les 3 couches du haut s'occupant plutôt de l'aspect application (elles sont souvent implémentées par une librairie ou un programme spécifique).
Ces couches sont les suivantes:
Le programme ou l'utilisateur communique avec la couche 7, qui elle communique avec la 6, qui communique avec la 5, et ainsi de suite. La couche 1 communique avec la couche 1 de l'autre côté du "tunnel", puis les données remontent les couches jusqu'à 7, pour atteindre le programme (et l'utilisateur) à l'autre bout.
Au bas de la pyramide se trouve la couche physique. Son rôle consiste à transmettre des signaux physiques (électriques ou optiques) entre deux machines. Son service est généralement limité à la transmission d'un bit ou d'une chaîne de bits, et sait comment convertir des bits en signaux physiques, et vice-versa.
Des exemples:
10Base-T, 100Base-T, câble coaxial, Wi-Fi, Bluetooth...
À l'étage juste au-dessus, la couche liaison de données gère la communication entre deux machines adjacentes reliées par un support physique quelconque. Donc ici, on peut transmettre une trame d'un appareil à un autre dans le même LAN (Local Area Network). Il n'y a aucune possibilité de sortir du réseau local, donc aucune nécessité pour le routage (qui sera géré plus haut). En fait, l'adressage utilisé par la couche 2 est un adressage physique (comme les adresses MAC), donc c'est absolument impossible de détecter un réseau ou un sous-réseau à partir de ça.
La couche de liaison de données reçoit des paquets de la couche 3 et en fait des trames, qu'elle peut ensuite envoyer en bas. En effet, la couche liaison de données se fie sur la couche physique pour concrètement transformer ses trames en signaux transmissibles. Elle n'a aucune idée de la façon dont c'est fait. Par contre, elle peut implanter des moyens de détecter et de corriger les erreurs de transmission de la couche 1 (mais ce n'est pas obligatoire - si elle ne le fait pas, une correction d'erreur devra être implanté plus haut).
Une trame de la couche 2 contient une entête, une adresse de destination, une adresse source, des données, et un "postambule" (c'est la traduction officielle de trailer).
Des exemples:
Ethernet, Frame Relay, PPP (Point-to-Point Protocol), Token ring, les communications série.
La couche réseau se fie à la couche liaison de données pour transmettre ses paquets d'un ordinateur à un autre. De son côté, la couche réseau, comme son nom l'indique, a une vision de la topologie du réseau et utilise un adressage routable et hiérarchique, contrairement à la couche 2. Elle est responsable d'envoyer des paquets de la source à la destination.
Le service offert par la couche 3 consiste en le routage (trouver un chemin pour livrer des paquets d'un endroit à un autre à travers un réseau), le relayage (envoyer des paquets à un routeur qui pourra les router au destinataire), et le contrôle des flux (contrôler la congestion sur le réseau en aiguillant les paquets intelligemment).
Toutes les machines d'un réseau doivent implémenter la couche 3 et les couches inférieures afin de pouvoir communiquer. Les routeurs, bien souvent, n'implémentent rien au-dessus de 3, les couches supérieures étant utiles uniquement aux appareils des extrémités.
Un paquet réseau contient lui aussi une entête et des adresses sources et destination, mais ce sont cette fois-ci des adresses réseau.
La couche réseau n'implémente pas nécessairement un contrôle d'erreur et certains paquets peuvent très bien arriver dans le désordre, ou ne jamais arriver, et l'expéditeur n'en sera pas informé.
Des exemples:
IP (le plus connu!), IPX, IPSec.
La couche transport est responsable de fournir un canal virtuel de communication entre deux points. Elle ne se soucie aucunement de la façon dont les données vont ultimement atteindre la destination (c'est le rôle de la couche 3). La couche 4 est là pour garantir que toutes les données vont se rendre d'un point à un autre, dans l'ordre voulu, sans erreur ni redondance. C'est donc ici qu'on implémentera le plus souvent les méthodes de contrôle d'erreur. Les méthodes exactes utilisées varieront d'une implémentation à l'autre, et il existe 5 types de protocoles de transports, chacun avec son degré de correction: du type TP0 (qui ne corrige à peu près rien et qui se fie que le réseau est parfait), au type TP4 (qui a une correction d'erreur extensive et qui suppose que le réseau n'est pas fiable - comme Internet).
La couche 4 manipule des messages (parfois appelés segments ou datagrammes) et les envoie à destination, fournissant une interface qui voit la communication comme un flot d'octets de taille variable selon les besoins.
La couche 4 amène également la notion de ports, qui ne sont finalement rien d'autre que des façons d'adresser des entités multiples situées au même point du réseau. Les ports sont donc ajoutés aux adresses à partir de cette couche.
Des exemples:
TCP (évidemment), UDP (beaucoup moins fiable)
C'est la couche 5 qui apporte les mécanismes nécessaires à l'ouverture, la gestion et la fermeture d'une session de communication entre deux processus. Elle permet l'authentification, la gestion des permissions et la restauration de session dans des cas de pertes de communication. C'est elle qui permet la création d'un "tunnel virtuel" entre deux processus distants. Ce tunnel pourra être utilisé en full duplex, half duplex ou simplex, selon l'implémentation.
Lorsque la communication est ouverte et que les données commencent à arriver, elle relaie le tout à la couche 4 pour le transport proprement dit. La couche session n'est aucunement concernée par le transport des données. Tout ce qui importe pour elle, c'est la gestion du canal dans lequel les données vont transiter.
Dans le monde TCP/IP, ces fonctionnalités sont en fait encapsulées dans la couche 4 (TCP) ou laissées au soin de la couche d'application. En effet, TCP/IP ne respecte pas tout à fait le modèle OSI et prend quelques libertés...
Des exemples:
NetBIOS, RPC (Remote Procedure Call, un protocole utilisé par Windows pour bon nombre de services à accès distant), SSH
La couche 6 s'occupe du "formatage". C'est elle qui s'assure que les données de la couche 7 seront converties convenablement dans un format compréhensible pour l'autre partie. Elle s'occupera des formats de représentation de caractères (EBCDIC vers ASCII, par exemple), la représentation des chaînes de texte, l'encryption et la décryption, etc.
Cette couche ne se soucie aucunement des paquets, datagrammes ou connexions. Elle ne fait que convertir des données afin de s'assurer qu'elles seront comprises correctement, puis les envoie à la couche 5. Dans le monde TCP/IP, la couche présentation est fusionnée avec la couche application, qui s'occupe un peu de tout ça à la fois. C'est le cas par exemple de HTTP, qui est un protocole de couche 7 mais qui est capable de reconnaître et de convertir l'encodage des caractères.
Des exemples:
ASCII, EBCDIC (Extended Binary Coded Decimal Interchange Code), RDP (Remote Desktop Protocol)
La couche 7 est celle qui est utilisée par l'utilisateur. C'est dans cette couche que toutes les fonctionnalités utilisateur sont implémentées: les commandes permettant la gestion de la communication, le terminal virtuel, la détermination des ressources disponibles, la disponibilité des partenaires de communication, etc.
Des exemples:
HTTP, FTP, SMTP, POP3, Telnet, BitTorrent, DHCP, DNS, etc.
Tentez d'identifier à quelle couche du modèle OSI ces actions ou objets de la vie de tous les jours se rapprochent le plus: