IUT Bordeaux 1 2008-2009 Département Informatque ASR2-Réseaux TP Programmaton de protocoles de communcaton Basé sur un TP de M1- Master IST, Unversté Pars-Sud Ce TP a pour objectf d'nter à la programmaton d un protocole de nveau lason sous des hypothèses de plus en plus restrctves et se rapprochant de la réalté. Créer le sous répertore /ASR2-Reseaux/DataLnk dans votre répertore de référence et coper dans ce répertore le contenu du répertore /net/exemples/asr2-reseaux/datalnk. 1. Cadre On consdère la lason de données entre deux machnes A et B relées entre elles par un support. Machne A support Machne B lason de données Fgure 1: Transmsson de données de A vers B. Interface avec les nveaux physque et applcaton A cette structure matérelle, on assoce une archtecture partelle des nveaux : réseau, lason et physque (cf. fgure 2). A Network Layer B Network Layer from_network_layer to_network_layer packet Data Lnk layer Data Lnk layer to_physcal_layer from_physcal_layer frame packet Nveau Physcal physque Layer Physcal Layer support Meda Fgure 2 : Archtecture partelle Le nveau lason de données décharge le nveau applcaton des fonctons de transfert des données. Il récupère les données de la couche «Réseaux» sous forme de paquets, les envoe vers le destnatare (membre du réseau physque) de manère la plus fable possble. Il assure auss la récepton des trames (frame, en anglas). Le nveau lason de données est réalsé par le contrôleur de communcaton des machnes A et B. 1
Le nveau physque assure la transmsson physque des bts sur le support: codage bande de base, adaptaton électrque, établssement du crcut, détecton d'erreurs, Le nveau physque comprend les nterfaces ETTD/ETCD, les modems et support. 2. Structure de données et procédures communes Les nterfaces entre le nveau réseau et le nveau lason de données d une part, le nveau lason de données et le nveau physque d autre part, sont défnes sous forme de procédures. Deux procédures permettent de prendre un paquet à envoyer ou de donner un paquet reçu au nveau «réseau» : from_network_layer et to_network_layer. Le nveau «lason de données» place alors le message à transmettre dans une structure d'enveloppe appelée trame (unté de données du protocole de nveau lason). Pour transférer une trame, le nveau lason utlse les servces du nveau physque grâce à deux prmtves du nveau physque: from_physcal_layer et to_physcal_layer Deux structures de données sont défnes c: - paquet (packet) est l unté de transfert du nveau applcaton ; c'est une sute d'nformatons à transmettre de A vers B par la procédure de transmsson ; la talle d'un paquet sera supposée constante de longueur maxmum MAX_PKT octets. - trame (frame) est l unté de données du nveau lason; elle est construte et gérée par la procédure de transmsson. Elle est composée de pluseurs champs; certans champs spécfques sont groupés dans une parte de l'enveloppe appelée "en-tête" ; ensute vennent le champ d nformaton qu content un paquet, suv du caractère de contrôle d'erreur. La séquence de contrôle d'erreurs est calculée par le nveau physque. Des procédures permettent la réalsaton de fonctons couramment rencontrées dans les procédures de transmsson : wat_for_event, start_tmer, stop_tmer, ncr. 3. Hypothèses de traval La lgne de commande dot mpératvement respecter la structure suvante quel que sot le protocole : protocol evenement tmeout taux-perte taux-erreur trace protocole est le nom du programme evenement est durée de la smulaton tmeout est le déla de retransmsson taux-perte est le taux en % de trames perdues taux-erreur est le taux en % de trames reçues mas erronées (0= pas d erreurs), trace est 1 s mode trace snon sa valeur est 0. Scénaro : La couche réseau de la staton A souhate émettre des données vers la couche réseau de la staton B. La staton A possède donc des nformatons à transmettre jusqu'à la fn de la smulaton. Le protocole n'a donc jamas à attendre la producton de données. Traval à réalser : Il s agt de programmer, pour chaque protocole, deux procédures de communcaton qu réalseront les fonctons du nveau lason : une procédure d émsson de messages et une procédure de récepton de message. Le langage de programmaton utlsé est le langage C. 2
Structures de données et Procédures communes aux protocoles de communcaton (extrat de protocol.h») // constantes : # defne MAX_PKT 4 /* determnes packet sze n bytes */ #defne MAXSEQ 2 /* 2 trames max */ // types : typedef struct {unsgned char data[max_pkt];} packet; /* packet defnton */ typedef enum {data, ack, nak} frame_knd; /* frame_knd defnton */ typedef struct { /* frames are transported n ths layer */ frame_knd knd;/* what knd of a frame s t? */ seq_nr seq; /* sequence number */ seq_nr ack; /* acknowledgement number */ packet nfo; /* the network layer packet */ } frame; { Procedures utlsées pour la programmaton des dfférents protocoles } type_evt wat_for_event() { attendre un évènement et retourner son type } {ndspensable avant une récepton physque qu n'est pas bloquante } nt ncr( nt k ) { retourner l'ncrémentaton de k modulo MAXSEQ } { nterface avec le nveau réseau } vod from_network_layer(packet *p); { lecture dans le tampon où la couche «réseau» écrt les paquets à émettre } vod to_network_layer(packet *p) { transmsson d un paquet reçu à la couche réseau } { nterface avec le nveau physque } vod to_physcal_layer(frame *r){ émsson de la trame stockée dans r } vod from_physcal_layer(frame *r) { récepton physque d'une trame stockée dans r } { geston des temporsateurs } vod start_tmer( nt k ) { armer le «tmer» assocé à la trame de numéro de séquence k } vod stop_tmer(nt k) { désarmer le «tmer» assocé à la trame de numéro de séquence k } 4. Protocole 1 (cas utopque) Nous prendrons comme exemple ntal un protocole très smple ; ses caractérstques sont les suvantes : - transmsson de données unquement de A vers B, - A possède toujours des nformatons à transmettre, - les temps de tratement sont néglgeables, - l'espace mémore en récepton est nfn (pas de contrôle de flux), - le canal est sans erreur. trame trame +1 trame +2 trame +3 Canal sans erreur 3
Pour programmer ce protocole (peu réalste), l a été écrt deux procédures sender1 et recever1 (sans argument) dans le fcher ~/ASR2-Reseaux/DataLnk/p1.c. Le langage de programmaton est le langage C. Questons : 1. Comprendre les deux procédures qu réalsent le protocole 1 en utlsant les structures de données et les procédures défnes auparavant. 2. Exécuter le protocole 1 (lre le fcher ~/ASR2-Reseaux/DataLnk/README)qu explque comment compler le programme et comment l exécuter. 5. Protocole 2 (rajout d'un contrôle de flux) Revenons à une stuaton plus réalste, et consdérons que le récepteur ne peut pas trater les données entrantes auss vte qu'elles sont émses. On relâche l'hypothèse selon laquelle l'hôte récepteur dspose d'une quantté d'espace mémore nfne. Par contre, on suppose toujours que le canal est sans erreur. L'émetteur dot transmettre à une vtesse nféreure à la capacté d'absorpton du récepteur afn d'évter l'engorgement de ce derner : s le récepteur a beson d un déla t pour exécuter le code de from_physcal_layer à to_network_layer, l'émetteur dot émettre à une vtesse moyenne nféreure à une trame par temps t. Questons : 1. Donner une soluton smple au problème de contrôle de flux permettant d'asservr l'émetteur au récepteur.réponse : le contrôle de flux de type "envoyer et attendre" est la soluton la plus smple ; ans on envoe une trame et on attend son acquttement pour en envoyer une nouvelle. On est sûr de ne jamas engorger le récepteur. 2. Ecrre en C les deux procédures sender2 et recever2 qu réalsent le protocole 2 dans le fcher ~/ASR2-Reseaux/DataLnk/p2.c en C. 3. Exécuter votre protocole, vérfer qu l n y a pas de blocage dans s le taux de perte et d erreur de trame sont 0. 6. Protocole 3 (canal avec erreurs) Consdérons mantenant le cas d'un canal de transmsson produsant des erreurs. Les trames peuvent subr des erreurs de transmsson ou être perdues. On suppose que lorsqu'une trame subt une erreur de transmsson, cette erreur est détectée par le récepteur, par calcul d'un CRC. Questons : 1. Peut-on perdre des trames de données? Quelles en sont les conséquences s on utlse le protocole 2? Le mécansme d'accusé de récepton (en anglas : acknowledgement) postf est l envo par le receveur d un accusé de récepton lorsqu l reçot une trame. 2. Un mécansme d'accusé de récepton vous semble-t-l suffsant pour garantr le bon fonctonnement du protocole en cas de perte de trame de données? 3. Que faut-l ajouter au protocole? 4. Peut-on perdre des accusés de récepton? 5. A-t-on beson d un mécansme supplémentare pour suffsant pour garantr le bon fonctonnement du protocole en cas de perte des accusés de récepton? 6. Que fare des trames erronées (données ou accusé de récepton)? Comment peut s'effectuer la reprse sur erreur? On s'orente vers un mécansme de reprse par accusés de récepton postfs par le récepteur et une temporsaton de la rémsson des trames de données par l'émetteur. 4
7. La duplcaton de trames de données reçues par le receveur pose-t-elle un problème? Explquez. trame fn temporsaton trame trame +1 8. La numérotaton des trames de données modulo 2 est-elle suffsante? Explquez. trame fn temporsaton trame trame +1 trame +2 9. La numérotaton des accusés de récepton assure le bon fonctonnement du protocole? Complétez le schéma suvant. trame fn temporsaton trame trame +1 10. Explquer les tros types d événements : frame_arrval, cksum_err et tmeout. 11. Lster les types de trames que votre protocole peut envoyer parm la lste suvante : data, ack et nak 12. Ecrre en C les deux procédures sender2 et recever2 qu réalsent le protocole 2 dans le fcher ~/ASR2-Reseaux/DataLnk/p2.c en C. 13. Exécuter votre protocole. 5