La trame LAP B

Rôles et position

Rappelez-vous l’environnement OSI … Un niveau 3 est supporté par un protocole de niveau 2. Le protocole de niveau 2 gére la communication entre deux équipements adjacents (séparés par un support physique). Son rôle est d’assurer le transfert de blocs de données entre équipements directement connectés avec un taux d’erreurs résiduelles négligeable.

Le LAP B entre en action dès que la connexion de niveau physique est établie. Les deux modems (ou ERBdB, souvenez-vous …) sont en communication, les porteuses sont détectées de chaque coté, les DTE sont informés par les modems de l’établissement de la connexion. La procédure de niveau 2 s’active.

Une remarque importante à ce stade : Le LAP B est une procédure de transmission synchrone orientée « bits ». Autrement dit elle ne peut pas fonctionner sur des liaisons de transmission asynchrone qui par nature sont des liaisons adaptées à des transmissions en mode caractère. Je vous renvoie encore une fois à ce fameux cours OSI (couche 2) pour vous rafraîchir la mémoire si nécessaire. Donc pas de LAP B sur des liaisons asynchrone … Compris ?

Train binaire et trames …

Donc, maintenant, un train binaire continu et synchrone est échangé entre les deux DTE d’extrémité. Dans notre exemple, le premier DTE est la station X25, le second est le commutateur X25 d’entrée dans le réseau. Il s’agit donc maintenant d’émettre les PDU de niveau 2 (pour rappel PDU = Protocol Data Unit = Trame pour le niveau 2, encore une fois voir le cours OSI si c’est du chinois !).

Mais comment repérer les trames dans le train binaire ? Quand commencent-elles ? Quand se terminent-elles ? En fait, on va utiliser un fanion de départ et un fanion de fin, pour être plus précis : le train binaire est constitué d’une suite de fanion continue. Un fanion est un octet ayant la valeur (7E)h (7E en héxadécimal), soit donc ayant la valeur binaire (0111110)b. Si un octet dans le train a une valeur différente de (7E)h, c’est un octet de trame !

Ce mécanisme a été présenté dans le cours OSI couche 2 en exemple, mais je le reprends entièrement ci-dessous.

Dans le schéma ci-contre, une trame est encadrée par des fanions (7E)h. Ceux-ci sont émis en continu sur la ligne et la trame vient s’insérer dans le train binaire. LAP B détecte donc un début de trame sur le premier octet (jaune) puisqu’il est différent de (7E)h et la fin de trame est détectée quand un nouvel octet (7E)h est détecté (après l’octet bleu).

Par contre on voit tout de suite la limitation du système ! Si on doit transmettre dans la trame un octet de données qui a justement une valeur (7E)h, LAP B va considérer que c’est la fin de la trame alors que c’est faux ! L’idiot ….

C’est le problème de tout protocole : La transparence aux données. Tout protocole qui se respecte doit être capable de véhiculer n’importe quelle valeur de données sans se planter !

LAP B, doit donc mettre en œuvre un mécanisme permettant d’acheminer cette séquence sans pour autant qu’elle soit prise pour un fanion.

La méthode consiste à insérer un zéro à la suite de toutes séquences de deux 1 consécutifs, que ces suites soit suivies d’un 0 ou d’un 1. Le récepteur retirera tous les 0 se situant après deux 1 consécutifs. Si les deux 1 sont suivis d’un 1 c’est alors un fanion qui indique la fin de trame (et peut-être le début de la suivante).

Cool non ? Je sais, vous n’y croyez pas ! A chaque fois que je présentais ce mécanisme à des stagiaires ils passaient systématiquement une heure à essayer de trouver la configuration où ça ne marche pas ! IL N’Y EN A PAS SAPERLIPOPETTE ! Si vous appliquez à la lettre le mécanisme décrit ci-dessus, c’est imparable ! Ne vous cassez pas la tête ! Croyez-moi !

Donc, maintenant on a un niveau 1 actif, un train binaire 7Eh de synchronisation et de repérage des trames en place et on sait assurer la transmission de trames en garantissant la transparence aux données véhiculées. Alors, voyons un peu le format des trames que l’on peut envoyer !

Format des trames LAP B …

Une trame LAP B est formée :

– d’un champ Adresse (1 octet)
– d’un champ Commande (1 octet)
– d’un champ de données (longueur variable)
– d’un champ de contrôle d’erreur – FCS : Frame Check Sequence (CRC16 sur deux octets donc)

Champ A : Champ Adresse (1 octet)

Rappelons que LAP B est issu d’HDLC (High Data Link level Control. Je sais ! Ils n’ont pas mis le « L » de « level » … Et alors ?). Or HDLC a été conçu pour fonctionner dans une multitude d’environnement et de situation, et, notamment, en environnement multipoint ! En conséquence, la trame dispose d’un champ Adresse, ce qui peut paraître ridicule dans notre cas où nous l’utilisons dans un environnement point à point !

Ce champ, de 8 bits, comporte deux bits spéciaux nommés C/R pour Commande / Réponse et E/A pour Extension Adresse : x x x x x x c/r e/a.

Bit C/R : En effet, LAP B est une procédure équilibrée (bien dans sa tête !), c’est à dire que chaque équipement peut prendre la parole quand il le souhaite. Or quand un protocole prend la parole c’est rarement pour rigoler ! Il émet généralement une Commande, dans ce cas il est réputé être un primaire ! Par contre quand un équipement a reçu une Commande, il DOIT (sinon gare à lui !) faire une Réponse, dans ce cas il est réputé être un secondaire. Mais comme la procédure est équilibrée (démocratique) chaque équipement peut être tour à tour et même à la fois Primaire ou Secondaire. Donc :

un primaire émet des commandes et reçoit des réponses

un secondaire reçoit des commandes et émet des réponses

On différencie ensuite les équipements concernés. Il existe la notion d’Utilisateur (Station X25) et de Réseau (Commutateur X25). Selon que l’équipement est un équipement utilisateur ou réseau, il positionnera le bit c/r à 1 ou à 0. En LAP B, on obtient la règle suivante pour le bit c/r :

C/R

Utilisateur

Réseau

Trame de commande
0
1
Trame de réponse
1
0

Cette technique permet aux équipements de bien différencier la source et le type de trame.

Bit E/A : Le LAP B est un sous-ensemble d’HDLC. Or nous venons de le dire HDLC permet de fonctionner en environnement Multipoint. Dans ce type d’architecture il peut y avoir de nombreuses stations qui partagent un même support. En conséquence un champ Adresse d’un seul octet, qui plus est, amputé d’un bit pour le c/r, risque d’être trop étroit pour adresser l’ensemble des machines. En conséquence, il est possible d’étendre le champ d’adresse en utilisant le bit e/a :

– Si e/a = 0, le champ adresse est étendu à l’octet suivant

– Si e/a = 1, l’octet qui le supporte est le dernier octet d’adresse

En LAP B le champ adresse est limité à un octet puisque l’on est uniquement en environnement point à point. En conséquence le bit e/a est toujours à 1.

Donc les trames LAP B auront une valeur 01h pour les trames ayant le bit c/r à 0 (trames de commande Utilisateur et de réponse Réseau) ou une valeur 03h pour les trames ayant le bit c/r à 1 (trames de commande Réseau et de réponse Utilisateur).

Champ C : Champ Commande (1 octet)

Le champ d’adresse permet d’identifier qui émet une trame et dans quelles conditions. Le champ Commande permet de compléter cette identification et de déterminer ainsi le type de trame. Il est composé de quatre parties : r r r p/f s s s lsb

Bit lsb : Famille de trames

– Si lsb = 0, la trame est une trame de données elle possède donc un champ Data.

– Si lsb = 1, la trame est une trame de gestion (acquittement, rejet, connexion, etc). Nous verrons les différents types de trames juste ci-dessous. Ces trames, à part une trame particulièrement, n’ont pas de champ Data.

Bits r r r : Le compteur Nr : Numéro de trame reçu

Le compteur Nr (Numero Receive) permet d’indiquer quel est le numéro de la prochaine trame attendue par l’équipement. Ce compteur est donc un compteur d’acquittement ! Il permet au récepteur lorsqu’il envoie une trame à son correspondant de lui indiquer quelle est la dernière trame valide qu’il est reçu de lui. Le correspondant va donc comparer ce compteur avec son compteur Ns (voir ci-dessous) afin de déterminer s’il a reçue toutes les trames. L’équipement positionne ce compteur uniquement dans 4 trames différentes que nous présenterons dans un tableau ci-dessous. Dans les autres trames, les bits du compteur Nr sont positionnés à des valeurs précises qui permettent d’identifier les trames.

Bits s s s : Le compteur Ns : Numéro de trame émise

Le compteur Ns (Numero Send) permet d’indiquer quel est le numéro de la trame émise par l’équipement. Vous remarquerez que ce compteur est modulo 8 (comme le compteur Nr). L’équipement peut donc envoyer 8 trames consécutives numérotées de 0 à 7. La trame suivant le numéro 7 aura donc le numéro 0. Comme nous avons dit que ce compteur servait de base au compteur Nr pour émettre des acquittements, vous comprendrez donc que l’émetteur ne peut émettre plus de 8 trames consécutives sans avoir reçu un acquittement du destinataire. Car s’il émettait 9 trames sans avoir reçu d’acquittement il aurait deux trames 0 en instance d’acquittement. Comment saurait-il laquelle est acquitté si il reçoit un compteur Nr = 1 ?

Bits p/f : Demande d’acquittement immédiat

Ce bit permet à un émetteur de demander au destinataire d’acquitter immédiatement la trame reçu (et donc toutes les trames en instance d’acquittement !). Généralement l’émetteur arrête toute transmission jusqu’à réception de l’acquittement requis. On parle de bit p/f car :

une trame de commande véhicule un bit p

une trame de réponse véhicule un bit f

par abus de langage on parle de bit p/f

IMPORTANT : Une trame de réponse aura toujours le bit f positionné à la même valeur que le bit p de la trame de commande reçue.

Ce bit existe dans toute les trames.

Champs Data et FCS : Conteneur de données et contrôle d’erreur

Le champ Data a une longeur variable. Il existe uniquement pour les trames de données, pour les autres trames sa longueur est nulle. La taille est généralement de 128 ou 256 octets.

Le contrôle d’erreur est un champ de deux octets. On utilise ici un CRC16 (Cyclique Redondancy Check) qui consiste à diviser la valeur polynomiale de la trame par un polynome générique appelé « Polynôme générateur ». Le champ FCS correspond au reste de la division polynomiale. Le destinataire effectue la même division avec le même polynôme générateur et compare les restes (celui qu’il a obtenu et celui émis dans le FCS). S’ils sont identiques il accepte la trame, sinon il la rejette.

Tableau des trames

Le tableau suivant recense l’ensemble des trames utilisées en LAP B :

Type

Nom

Libellé

Champ Commande

Bit c/r
(champ Adresse)

Valeur Binaire

Valeur Hexa

Compteur Nr

bit p/f

Compteur Ns

lsb

Données (lsb = 0) INFO INFORmation

Nr

p

Ns

0

??

c

Supervision
(lsb = 1 et lsb+1 = 0)
RR Receive Ready

Nr

p/f

000

1

x1

c/r

RNR Receive Not Ready

Nr

p/f

010

1

x5

c/r

REJ REJect

Nr

p/f

110

1

xD

c/r

Gestion non numérotées
(lsb = 1 et lsb+1 = 1)
SABM Set Asynchronous Balanced Mode

001

p

111

1

2F/3F

c

DM Disconnect Mode

000

f

111

1

0F/1F

r

UA Unumbered Acknowledge

011

f

001

1

63/73

r

DISC DISConnect

010

p

001

1

43/53

c

FRMR Trame de Rejet + Diagnostic

100

f

011

1

87/97

r

Ce tableau vous apporte certaines informations :

– Seules les trames de données et de supervision sont équipées d’un compteur Nr. Elles seules peuvent donc effectuer des acquittements.

– Seule la trame de données est équipée d’un compteur Ns, ce qui est logique. Il n’y a pas d’intérêt à compter des trames qui ne véhiculent pas de données.

– Les trames de supervision peuvent être tour à tour des trames de commande ou réponse (bit c/r = bit c ou bit r).

Vous comprendrez mieux les rôles et mécanismes de ces bits dans les chapitres suivants où nous allons étudier de nombreux cas de dialogues.

Sommaire | Page suivante