# Les réseaux informatiques/Les modèles OSI et TCP

Les ordinateurs d'un réseau n'ont pas à être identiques : les différences de systèmes d'exploitation, de logiciels utilisés pour naviguer sur le net, et les autres différences du genre ne doivent pas avoir le moindre impact sur la communication entre deux machines. Par exemple, on peut parfaitement connecter des ordinateurs sous Windows avec des ordinateurs sous Linux. Pour cela, il a fallu inventer un certain nombre de standards réseau, appelés protocoles réseaux. Des organismes publics supranationaux s'occupent d'établir et de normaliser ces protocoles : ils consultent les grandes entreprises du web (Microsoft, Apple, et ainsi de suite), et les négociations sur ce qui doit être mis dans les protocoles sont souvent longues. Un cours sur le réseau ne peut décemment pas passer sous silence le fonctionnement des protocoles les plus connus. Peut-être en avez-vous déjà entendu parler : les protocoles IP ou TCP sont de loin les plus connus, sans compter les protocoles UDP ou MAC.
Chaque protocole gère des choses aux noms bizarres, comme le routage, la transmission des bits, l'adressage logique ou physique, et bien d'autres choses que nous allons aborder dans ce cours. Cependant, tous les protocoles ne se situent pas au même "niveau d'abstraction". Standardiser le codage des bits dans un câble réseau est plus proche de la machine que la gestion du routage. On pourrait croire que cette histoire assez vague de niveaux d'abstraction n'a pas grande importance. Il se trouve qu'il existe plusieurs classifications qui décrivent ces niveaux d'abstraction, et que celles-ci sont assez importantes. Ces classifications sont au nombre de deux : le modèle OSI et le modèle TCP/IP. Ces deux modèles forment l'ossature des chapitres qui vont suivre, aussi il est important de les voir. Une bonne présentation ne peut pas, en effet, mélanger des protocoles ou des connaissances de niveaux d'abstraction différents : nous n'allons pas passer du codage des bits sur un fil de cuivre aux protocoles de routage dans le même chapitre. Les modèles OSI et TCP/IP peuvent sembler assez compliqués, ceux qui les ont appris en cours de réseau ayant certainement eu du mal à comprendre leur principe. Mais il s'agit cependant d'un passage incontournable de la plupart des cours de réseau.

## Les modèles OSI et TCP/IP

Ces modèles OSI et TCP/IP permettent de classer divers protocoles réseaux, à savoir des standards qui décrivent telle ou telle fonctionnalité que le réseau doit respecter. Par exemple, un protocole de la couche liaison va standardiser la façon dont deux ordinateurs vont s'échanger des données sur un câble réseau : comment les bits sont codés, comment détecter les erreurs de transmission, quelles sont les spécifications électriques des connecteurs et interfaces, etc. Ces protocoles sont classés selon leurs niveaux d'abstractions, dans ce qu'on appelle des couches. La définition d'une couche réseau est assez abstraite, mais on peut dire qu'il s'agit d'un ensemble de protocoles, qui sont au même niveau d'abstraction, qui ont des fonctions similaires.
Ces couches sont censées être bien individualisées, à savoir que la communication entre couches doit suivre un certain ordre. Des données à transmettre sur le réseau doivent d'abord passer par les protocoles de la couche la plus abstraite, dans le niveau d’abstraction supérieur, avant de passer par la couche d'en dessous, et ainsi de suite. Cela ne fait que traduire une évidence : avant de traiter le codage des bits du paquet, encore faut-il que les données aient été cryptées, que l'on ait identifié l'émetteur et le récepteur et ainsi de suite. Les opérations à effectuer doivent être faites dans un certain ordre si l'on veut que tout fonctionne, ce que traduit l'ordre des couches. Pour des raisons de simplicité, un protocole d'une couche peut utiliser les fonctionnalités de la couche immédiatement inférieure, mais pas des autres couches. Cela garantit qu'un paquet de données soit traité par toutes les couches dans le bon ordre, sans passer d'étapes.

### Le modèle OSI

Le modèle OSI est de loin le plus complet. Il décrit sept couches portant les noms de couche physique, liaison, réseau, transport, session, présentation et application. Les divers protocoles qui définissent le réseau et les communications sont donc répartis dans chaque couche, selon leur utilité. Il est d'usage de diviser ces sept couches en deux : les couches basses, qui se limitent à gérer des fonctionnalités de base, et les couches hautes, qui contiennent les protocoles plus élaborés.
Les couches basses, aussi appelées couches matérielles, s'occupent de tout ce qui a trait au bas-niveau, au matériel. Elles permettent d’envoyer un paquet de données sur un réseau et garantir que celui-ci arrive à destination. Elle est généralement prise en charge par le matériel et le système d'exploitation, mais pas du tout par les logiciels réseaux. Les couches basses sont donc des couches assez bas-niveau, peu abstraites. Les couches basses sont au nombre de trois. Pour résumer, ces trois couches s'occupent respectivement des liaisons point à point (entre deux ordinateurs/équipements réseaux), des réseaux locaux, et des réseaux Internet.
* La couche physique s'occupe de la transmission physique des bits entre deux équipements réseaux. Elle s'occupe de la transmission des bits, leur encodage, la synchronisation entre deux cartes réseau, etc. Elle définit les standards des câbles réseaux, des fils de cuivre, du WIFI, de la fibre optique, ou de tout autre support électronique de transmission.
* La couche liaison s'occupe de la transmission d'un flux de bits entre deux ordinateurs, par l'intermédiaire d'une liaison point à point ou d'un bus. Pour simplifier, elle s'occupe de la gestion du réseau local. Elle prend notamment en charge les protocoles MAC, ARP, et quelques autres.
* La couche réseau s'occupe de tout ce qui a trait à internet : l'identification des différents réseaux à interconnecter, la spécification des transferts de données entre réseaux, leur synchronisation, etc. C'est notamment cette couche qui s'occupe du routage, à savoir la découverte d'un chemin de transmission entre récepteur et émetteur, chemin qui passe par une série de machines ou de routeurs qui transmettent l'information de proche en proche. Le protocole principal de cette couche est le protocole IP.
Les couches hautes, aussi appelées couches logicielles, contiennent des protocoles pour simplifier la programmation logicielle. Elles requièrent généralement que deux programmes communiquent entre eux sur le réseau. Elles sont implémentées par des bibliothèques logicielles ou directement dans divers logiciels. Le système d'exploitation ne doit pas, en général, implémenter les protocoles des couches hautes. Elles sont au nombre de quatre :
* La couche transport permet de gérer la communication entre deux programmes, deux processus. Les deux protocoles de cette couche sont les protocoles TCP et UDP.
* La couche session, comme son nom l'indique, permet de gérer les connexions et déconnexions et la synchronisation entre deux processus.
* La couche présentation se charge du codage des données à transmettre. Elle s'occupe notamment des conversions de boutisme ou d'alignement, mais aussi du chiffrement ou de la compression des données transmises.
* La couche application prend en charge tout le reste.

### Modèle TCP/IP

Le modèle TCP/IP est plus simple qu'OSI, avec seulement quatre couches : liaison, Internet, transport et application. La différence avec OSI est simplement que certaines couches ont été fusionnées. La couche liaison de TCP/IP regroupe notamment les couches physiques et liaison d'OSI. De même, la couche application de TCP/IP regroupe les couches session, application et présentation d'OSI.
| InternetProtocolStack | Comparaison des modèles OSI et TCP IP |

## L'encapsulation

Les données ne sont pas transmises telles quelles sur le réseau, car chaque protocole a besoin d'informations bien précises pour faire son travail. Par exemple, les protocoles de couche liaison ont besoin d'informations particulières, non présentes dans la donnée transmise, pour détecter les erreurs ou indiquer le récepteur. Même chose pour les protocoles TCP et UDP de la couche transport, qui ont besoin d'informations sur le processus émetteur et récepteur, qui ne sont pas dans la donnée transmise. Et ce problème nous amène à parler de l'encapsulation.

### Les en-têtes des paquets

Pour résoudre le problème précédent, chaque protocole ajoute les informations dont il a besoin à la donnée transmise. Ces informations sont regroupées dans un en-tête, placé au début des données à transmettre. Plus rarement, certains protocoles ajoutent leurs informations devant, mais aussi derrière la donnée à transmettre : l'en-tête est complété par un pied (le terme anglais est : footer). Lorsqu'un protocole prend en charge un paquet de données, il lui ajoute un en-tête à son début. Avec cette méthode, les en-têtes de chaque couche sont séparés, placés les uns à côté des autres. Lors de la réception, cet en-tête sera enlevé : les couches supérieures n'ont pas besoin des en-têtes des couches inférieures.

### Les Protocol Data Unit

Si la couche physique s'occupe de la transmission de bits individuels, ce n'est pas le cas des autres couches, qui traitent des paquets (données + en-tête/pied) contenant plusieurs bits. Les couches réseau, liaison et transport traitent des paquets de données de taille fixe (leur nombre de bits est fixé). Au-delà de la couche transport, les données ne sont pas structurées en paquets de taille fixe, mais en paquets de taille variable, qui dépendent du logiciel utilisé. Pour les couches liaison, réseau et transport, les paquets sont appelés des protocol data unit (PDU, unités de données d'un protocole, en français). Ils portent des noms différents selon la couche, vu qu'ils contiennent des en-têtes différents.
* Pour la couche liaison, l'unité est la trame.
* Pour la couche réseau, l'unité est le paquet.
* Pour la couche transport, l'unité est le segment pour le protocole TCP et le datagramme pour le protocole UDP.
| Couche OSI | Unité de transfert de données (PDU) | Unité de transfert de données (PDU) | Taille du PDU |
| Physique | Bit ou Symbole | Bit ou Symbole | Bit/symbole unique |
| Liaison | Trame | Trame | Taille fixe, plusieurs bits, dépend du protocole utilisé. |
| Réseau | Paquet | Paquet | | Taille fixe, plusieurs bits, dépend du protocole utilisé. |
| Transport | Segment (protocole TCP) | Datagramme (protocole UDP) | Taille fixe, plusieurs bits, dépend du protocole utilisé. |
| Session | Paquets de taille variable | Paquets de taille variable | Paquets de taille variable |
| Présentation | Paquets de taille variable | Paquets de taille variable | Paquets de taille variable |
| Application | Paquets de taille variable | Paquets de taille variable | Paquets de taille variable |