CEG3585/SEG3555 TUTORAT 3
Transcription
CEG3585/SEG3555 TUTORAT 3
CEG3585/SEG3555
TUTORAT 3
Été 2015
HDLC
HDLC est un protocole synchrone à bit-orienté de la
couche de liaison de données développé par ISO.
Mode non-balancé
Mode normal de réponse (NRM)
Mode de réponse asynchrone (ARM)
Mode balancé
Mode balancé asynchrone (ABM)
HDLC
La station primaire
Controle les opérations de la liaison
Les trames issues sont définies comme des commandes
Maintient une liaison logique distincte avec chaque
station secondaire
La station secondaire
Sous le contrôle de la station primaire
Les trames issues sont définies comme des réponses
Mise en trame
Délimiteur de trame: 8bits
Chaque trame débute et finit avec un délimiteur de trame.
la séquence est '01111110', ou, en notation hexadécimal, 7E
Adresse: 8 bits ou plus
En NRM, les trames n’inclus qu’une seule adresse, celle du
terminal secondaire.
Mise en trame
Contrôle: 8bits ou 16 bits
Les trames d’information, ou frames-I, transportent les
données de l’usager de la couche de réseau. Elles
peuvent aussi inclure de l’information de contrôle de
débit et d’erreurs accolée aux données.
Les trames de supervision, ou frames-S, sont utilisées
pour le contrôle de débit et d’erreurs tel que dans le cas
où une station n’a pas à envoyer de données. Les
trames-S n’ont pas de champ d’information.
Les trames non numérotées, ou frames-U, sont utilisées
dans différents buts, incluant la gestion des liaisons.
Certaines frames-U, dépendamment du type, contiennent
un champ d’information.
Mise en trame
Frame-I
Bit le moins significatif (premier à être transmis) est 0.
N(S) définit le numéro de séquence de la trame expédiée.
P/F
N(R) définit le numéro de séquence de la trame reçue.
Mise en trame
Frame-S
Les premiers deux bits sont 10.
Le champ d’encode de la frame-S est de 2 bits
Prêt à recevoir (RR): 00
Pas prêt à recevoir (RNR): 01
Rejet (REJ): 10
Rejet sélectif (SREJ): 11
P/F
N(R)
Mise en trame
Frame-U
Mise en trame
Bit Poll/Final
Bit Poll
Trame de commande
1 pour solliciter (poll) une réponse d’ailleurs
Le primaire n’envoie de Poll que lorsqu’il a reçu un
Final d’un secondaire, ou après un timeout indiquant
que la trame a été perdue.
Bit Final
Trame de réponse
La station secondaire n’envoie de Final que lorsqu’il a
reçu un Poll de la station primaire.
Mise en trame
Bourrage de bits
A chaque fois qu’apparait 5 consécutifs bits-1 dans les
données transmises, on y ajoute un bit-0 pour que cela
ne soit pas pris pour un délimiteur de trame.
A la réception, on enlève tout bit-0 qui suit 5 bits-1.
Mise en trame
FCS: Vérificateur de séquençage de trame
Une vérification cyclique de redondance se produit sur
toute la trame, incluant ‘l’Adresse’, le 'Contrôle' et les
champs ‘d’Information'.
Le vérificateur de séquençage de trame est un CRC de 16-bit
(CRC-CCITT) ou de 32-bit (CRC-32).
Labo 3 – Le protocole HCLC
Topologie physique multi-point
Une station primaire, deux stations secondaire
La station primaire contrôle la communication
Architecture de 3 couches
Couche physique
Couche liaison de données – offre service orienté
connexion avec le protocole HDLC
Couche « application » - Échange de messages entre la
station primaire et chaque station secondaire
Labo 3 – Le protocole HDLC
Programmation Java
Couche physique simulé avec la programmation socket
Classe: PhysicalLayer – offre deux méthodes transmit()
et receive90 pour transmettre et recevoir les trames HDLC
Classe: PhysicalLayerServer – Serveur qui permet de
réaliser un couche physique multi-point
Entités des deux autres couchés réalisés avec des classes
Java
Couche liaison de données: classes PrimaryHDLCDataLink
et SecondaryHDLCDataLink
Couche Application: classes PrimaryStation et
SecondaryStation
Couche Physique
Station Primaire
trame
Station Secondaire
Station Secondaire
trame
trame
transmit() receive()
PhysicalLayer
transmit() receive()
PhysicalLayer
transmit() receive()
PhysicalLayer
ClientSocketManager
ClientSocketManager
ClientSocketManager
Réseau local
Le serveur agit comme commutateur
Toutes trames reçues sur une
connexion est retransmit sur les autres
Ces classes vous sont fournies
ServerSocketManager
PhysicalLayerServer
Couches liaison de données et application
Station Primaire
PrimaryStation
Station Secondaire
Station Secondaire
SecondaryStation
SecondaryStation
PrimaryHDLCDataLink
SecondaryHDLCDataLink
SecondaryHDLCDataLink
PhysicalLayer
PhysicalLayer
PhysicalLayer
La classe PrimaryHDLCDataLink offre les méthodes suivantes
dlConnectRequest, dlConnectConfirmation, dlDataRequest,
dlDataIndication, dlDisconnectRequest
La classe SecondaryHDLCDataLink offre les méthodes suivantes
dlConnectIndication, dlConnectResponse, dlDataRequest,
dlDataIndication, dlDisconnectIndication
Couche
application
Couche
liaison de
données
Couche
physique
Mise en trame
Une trame sera une chaîne de caractère: objet String
Des chaînes déjà prédéfinis sont fournis pour mise en trame
Exemple:
private final String SNRM_M1 = "00";
private final String SNRM_M2 = "001";
private final String P1 = "1";
Des méthodes (de la classe PrimaryHDLCDataLink et
SecondaryHDLCDataLink)
private String intAdrToBitAdr(int adr): conversion d’adresse en bits
private String stringToBitString(String str) : conversion de chaîne ASCII
en bits.
Utilise opérateur de concaténation (+) pour la création d’une trame:
Exemple (adr est une variable int):
La chaîne référée par frame sera une séquence de 0`s et 1`s
String frame = FLAG+intAdrToBitAdr(adr)+SNRM_M1+P1+SNRM_M2+FLAG;
Extraire données d’une trame
En Java, l’objet offre des méthodes pour manipuler les
objets
Les méthodes de la classe String utiles pour ce labo:
substring(int ixStart, int ixEnd) – pour extraire une
sous-chaîne de la chaîne – caractères entre ixStart et ixEnd-1;
charAt(int ix) – donne le caractère à l’index ix
Constantes prédéfinies fournies à utiliser avec méthodes.
Exemples (avec String trame qui réfère à une trame):
Numéro de séquence:
String ns = trame.substring(NS_START, NS_END)
Bit Poll: char p = trame.charAt(PF_IX);
Votre tâche
De compléter les méthodes des classes
PrimaryHDLCDataLink et SecondaryHDLCDataLink
Exemple:
// Data transfer service - non-confirmed service
public Result dlDataRequest(int adr, String sdu)
{
Result.ResultCode cd = Result.ResultCode.OpSucessful;
// à compléter
return(new Result(cd, 0, null));
}
Pondération
Fonctionnement de base du HDLC: 60%
Compléter les méthodes:
La classe PrimaryHDLCDataLink : dlConnectRequest,
dlConnectConfirmation, dlDataRequest, dlDataIndication,
dlDisconnectRequest
La classe SecondaryHDLCDataLink : dlConnectIndication,
dlConnectResponse, dlDataRequest, dlDataIndication,
dlDisconnectIndication
Fenêtre coulissante: 20%
Rapport: 20%