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%