cours/content/reseaux_protocoles/5_couche_liaison/index.md

215 lines
8.7 KiB
Markdown

---
title: "Réseaux et Protocole: couche liaison"
date: 2024-03-29
tags: ["OSI", "ethernet"]
categories: ["Réseaux et protocoles", "Cours"]
mathjax: true
---
Commençons déjà par la terminologie:
* *nœuds* : équipement (routeur, host)
* *canal de communication* : lien adjacent entre nœuds;
* *frame* : paquet de la couche liaison (niveau 2)
La couche 2 transmet une frame entre deux **nœuds ajacents**. Il existe les
liaisons **filaires** (ethernet) et **sans-fils** (wifi, LTE). Chaque protocole
propose des caratéristiques différentes (fiabilité, rapidité etc.)
Comme pour les autres couches étudiée jusqu'à maintenant, celle-ci encapsule les
éléments de celle au dessus en y ajoute son entête. La couche liason ajoute
ainsi les propres mécanismes de contrôles de flux entre les nœuds adjacent ou
encore la détection voire la correction d'erreur. Le mode de communication peut
être *half-duplex* ou *full-duplex*
La couche liason est implémentée sur chacun des nœuds, elle peut l'être
directement sur le contrôleur réseau de façon matérielle mais aussi logicielle.
## Détection d'erreur
Elle se fait par l'ajout d'un champs *EDC* pour *Error Detection Code* dans la
frame. C'est un simple ajout de bits de parité. Cependant ajouter un seul bit de
parité **n'est pas assez fiable**. Il est alors préférable d'utiliser le *two
dimentionnal parity*, un tableau à deux dimensions pour faire du *calcul de
parité* permettant non seulement **la correction** mais aussi la **correction**.
## Multiple access link
Nous avons d'abors des protocole utilisé pour la communication entre deux nœuds :
*PPP* pour *Point to Point Protocol* ou encore *ethernet*. Mais d'autres sont
fait poue la diffusion (*broadcast*), la communication entre plusieurs nœuds
comme le *Wifi* ou les communications par *Satellite*
Dans le second cas, il nous faut un algorithme pour déterminer **l'ordre de
transmisson** : à quel moment un équipement peut envoyer des données sur le
canal partagé entre tous. Il n'y a pas de canal auxiliaire ( *out of band* )
pour organiser le partage de la ressource, il faut alors organiser le
partitionnement
### MAC Protocol
Le canal est divisé en plus petites pièces à l'exclusivité de nœuds. Les accès
sont aléatoires et au tour par tour.
#### partitionnement en fonction du temps
Chaque station a un slot de temps fixe permettant la transmission, si la station
n'a pas de donnée à transmettre, alors le slot passe en IDLE.
#### Frequencie division multiple access *FDMA*
Le canal est divisé sur plusieurs fréquences, chaque nœud se voit attribuer une
fréquence et peut transmettre sur celle-ci en continue.
#### accès aléatoire
Lorqu'un nœud veut émettre, il prend la communication sur l'ensemble du canal,
il n'y a pas de gestion de la coordination. Donc si deux nœuds ou plus émettent
en même temps alors il y a **collision**.
Ces types de protocoles définissent alors comment détecter les collisions et ce
qu'il faut faire dans ce cas.
Vopici des exemples de protocoles de type accès aléatoires: ALOHA, Slotter
ALOHA, CSMA, CSMA/CD, CSMA/CA
##### Slotted ALOHA
Le temps est divisé en intervalle régulier (intervalle de temps) correspondant au
temps nécessaire pour la transmission d'une trame. L'émetteur attend donc le
début d'une intervalle de temps pour transmettre sa trame.
En cas de collision, le nœud retransmet son paquet après avoir attendu un temps
aléatoire. Au mieux, 37% d'efficacité.
##### Carrier Sense Multiple Access
C'est un protocole simple : écouter avant de transmettre :
* Si le canal est libre alors on transmet **la trame entière**;
* sinon on repousse la transmission
##### Carrier Sense Multiple Access with Collision Detection (CSMA/CD)
Les collision sont possible avec CSMA, à cause du délais de propagation de la
trame. La probabilité d'une collision est déterminée par la distance et le
délais de propagation.
Avec CSMA/CD, un hôte annule la transmission d'une trame à l'instant de la
détection d'une collision. Dans le cadre d'Ethernet par exemple:
* Vérification du canal;
* Envoi d'une trame entière si le canal est libre;
* Si aucune collision détectée : fin!
* Sinon annule la transmission et envoie le *signal jam*;
* Entre dans le *binary exponential backoff* : choisi un nombre \\(K\\) entre
\\([1..2^{m-1}]\\) et attend \\(K x 512 \\)temps / bit et relance les étapes
à partir de la vérification du canal.
#### à tour de rôle
C'est un protocole reprenant le meilleur de l'accès aléatoire et du partage de
canal
Deux façons de faire :
* Un contrôleur décide du partage de la ressource et invite les équipement.
C'est le fonctionnent du **Bluetooth** par exemple.
* Un jeton donne le droit à transmission et passe d'hôte en hôte. Cette façon
de procéder donne lieu à un peu *d'overhead*, de plus que faire si le jeton
se perd?
## LAN
### Adressage
La base de cette des LAN est l'adresse MAC inscrite en dur dans le matériel --
mais parfois dans le logiciel, pensez aux machines virtuelles par exemple -- sur
48 bits. Les 3 premiers octets de cette adresse sont alloués par l'IEE en
fonction du fabricat du périphérique.
### Le protocole ARP
Il fait le lien entre l'adresse Ethernet (couche liaison) et l'adresse IP
(couche réseau). La **table ARP** présent sur tous les hôtes connecte au reseau
permet de faire le lien entre les adresses MAC et IP en y associant aussi une
durée de vie , le `TTL`.
Des message de broadcast sont envoyés par les hôtes afin de connaitre l'adresse
MAC des autres si l'entrée n'est pas disponible dans la table (encapsulé dans
une trame Ethernet).
### Ethernet
C'est la technologie dominante sur les réseaux locaux depuis les années 90.
Plusieurs implémentation sont disponibles :
* **bus** pour les réseaux coaxiaux avec un seul domaine de collision;
* **switch** pour les réseaux avec connecteur RJ45, ici un domaine de collision
par machine.
D;abors il y a le préambules : une série de 8 octets dont les 7 presiers sont
`1010101010` puis le dernier à `1010101011`. Son rôle est de synchroniser les
hôtes et de délimiter le début de la transmission.
Viens ensuite la *trame* composées de :
* l'adresse *MAC* de destination;
* l'adresse *MAC* source;
* le *type* indiquant le protocole de la couche supérieure;
* la *charge utile*
* le contrôle d'intégrité (*CRC* pour **Cyclic Redundancy Check*).
Ethernet est un protocole sans connexion : il n'y a pas de *handshake*, pas de
mécanisme d'*ACK*, pas de retransmission. On laisse ça **à la couche supérieure.
Il existe aussi plusieurs standards Ethernet en fonction du type de liaison.
### Les switches
C'est un équipement de la **couche liaison** qui stocket te retransmet les
trames Ethernet. Il examine les adresse MAC dans les entêtes et envoie les
trames vers les hôtes concernés. Il est transparent et ne nécessite pas de
configuration pour un *switching* basique.
Les switches possèdent une **table de transfert** qui contient les tuples
`MAC:Port:TTL` mis a jour en fonction des trames qu'il voit passer. Le switch
modifie dynamiquement cette table en fonction des trames qu'il voit passer sur
ses différents ports. Lorqu'il doit envoyer des trames vers une adresse qu'il ne
connait pas, alors il va emmetre une demande ARP sur **l'ensemble de ses
ports**. Cette auto-apprentissage peur fonctionner même un fois les *switches*
brachés les un aux autres.
Il est capable de communiquer sur plusieurs canaux simultaniement sans
collisions par exemple, communication A <---> B et C <---> D ( mais A <---> B et
A <--> C ne peut se faire en simultané )
### VLAN
Ils permettent de reduire le domaine de broadcast (ARP, DHCP) pour plusieurs
éventuels objectifs:
* attacher logiquement des utilisateurs à leur machines / réseau;
* faciliter la gestion du réseau
* séparer les utilisateurs (sécurité, vie privée)
Mais pour celà il faut des équipement compatibles et de la **configuration**.
Par exemple avec les *ports based VLAN* il est possible d'affecter
dynamiquement les ports à des VLAN.
L'échange de messages entre les VLANs doivent se faire via un **routeur** ou un
**switch de niveau 3**. Les connexions entre les différents switches doivent se
faire va un **lien trunk** permettant de transmettre les informations relatives
aux VLAN.
Ces information son positionnées dans l'entête Ethernet au format *802,1q*. elle
se comporte du *tag protocol* et du *vlan id*.
### MPLS
Ce protocole permet d'assurer un routage et un forwarding plus rapide des
paquets. Il s'intercale entre les couches 2 et 3 et se base sut l'ajout de
labels de taille fixe entre l'entête Ethernet et la charge utile.
Le routeur MPSL regarde donc le label pour décider quoi faire avec le paquet: le
routage est plus rapide (pas de décapsulation) et plus flexible.