Université Paul Sabatier                                                                                                                                                                                

L2_INFO                                                                                         PROJET RESEAUX

 

 

1- OBJECTIF

 

              On souhaite réaliser un programme qui simule le fonctionnement de la couche liaison de donnée. Le programme en question sera réalisé en langage C. L’accent sera principalement porté sur la mise en place d’un protocole de communication, en minimisant le temps passé à traiter des problématiques d’ergonomie et de mise en page écran.

 

 

2- LE  PROTOCOLE DE COMMUNICATION

 

2.1 Spécifications générales

 

              - Le protocole de communication fonctionnera en mode non connecté, puis en mode connecté

              - Le protocole de communication sera de type STOP & WAIT, puis avec fenêtre d’anticipation

              - Le format des trames échangées est décrit plus loin

 

2.2 Mode non connecté

 

En mode non connecté l’échange d'information ne nécessite qu’une phase de transfert de données.

 

2.3 Mode connecté

 

En mode connecté tout échange d'information nécessite :

              - une phase d'établissement de connexion qui a pour objet de chercher à savoir si le site récepteur est actif et s'il peut accepter l'établissement d'une connexion,

              - une phase de transfert de données,

              - une phase de fermeture de connexion ayant pour objet d'indiquer la fin du transfert.

 

2.4 Le protocole STOP & WAIT

 

              Dans ce type de protocole impliquant une communication entre deux stations, l’émetteur envoie une trame et doit ensuite attendre un accusé de réception avant d’envoyer la suivante.

 

2.5 Le protocole STOP & WAIT PAR

 

Dans ce cas, on considère que la liaison peut générer des erreurs de transmission. Pour le protocole Stop & Wait PAR (Positive Acknowledgement and Retransmission) l’acquittement indique que le message a bien été reçu, la non réception d’un acquittement implique la retransmission du message au bout d’un certain délai.

 

2.6 Le protocole avec fenêtre d’anticipation

 

              Dans ce type de protocole impliquant une communication entre deux stations, l’émetteur peut envoyer plusieurs trames qui seront acquittées  par un seul accusé de réception.

 

3. DESCRIPTION DU PROGRAMME A REALISER

 

3.1 PRIMITIVES DE SERVICE

 

                        Afin de pouvoir mettre en œuvre ce programme, les primitives de service suivantes devront être développées :

 

L_UNIT_DATA_req : cette primitive permet de transférer une unité de données sans connexion préalable,

L_UNIT_DATA_ind : cette primitive permet de récupérer une unité de données qui a transité sans connexion préalable,

L_CONNECT_req : cette primitive permet d’envoyer une unité de données de protocole contenant une demande de connexion,

L_CONNECT_ind : cette primitive permet de prendre connaissance de l’existence d’une demande de connexion,

L_CONNECT_rep : cette primitive permet de renvoyer la réponse à la demande de connexion,

L_CONNECT_cnf : cette primitive permet de prendre connaissance de la réponse à la demande de connexion,

L_TX_DATA_req : cette primitive permet de transférer une unité de données,

L_TX_DATA_ind : cette primitive permet de récupérer une unité de données qui a transité sur le réseau,

L_DISCONNECT_req : cette primitive permet de mettre fin à une connexion,

L_DISCONNECT_ind : cette primitive permet de prendre acte de l’existence d’une demande de fermeture de la connexion préalablement établie.

 

 

3.2 STRUCTURE DES UNITES DE DONNEES DE PROTOCOLE

 

 

Les unités de données transmises sont structurées comme suit :

 

Champ

Nb octets

Signification

DEB_TRAME

1

caractère marquant le début de la PDU

@DEST

6

Octets permettant d’identifier le destinataire

@SOURCE

6

Octets permettant d’identifier l’équipement source

CTRLE

1

ce champ permet d’identifier le type de la PDU :

0    pour une demande de connexion,

1    pour une demande de déconnexion,

2    pour une acceptation de connexion,

3    pour un refus d’établissement de connexion,

4    pour le transfert d’une PDU de données,

5  pour le transfert d’un accusé de réception positif d’une PDU de données,

6  pour le transfert d’un accusé de réception négatif d’une PDU de données,

7   pour accepter la demande de déconnexion,

8   pour refuser la demande de déconnexion

9   autre …..

NUM_PDU

1

Ce champ permet de coder le numéro des PDU transmises : il prend une valeur allant de 0 à 7

LG INFO

1

ce champ contient le nombre d'octets apparaissant dans la partie informations

INFO

n

ce champ contient le message que l’on souhaite communiquer au système destinataire

FCS

1

ce champ est une séquence de contrôle calculée à l'émission en réalisant un ou exclusif sur tous les octets contenus dans le champ INFO

FIN_TRAME

1

ce champ marque la fin de la PDU

 

Note : une trame ne pourra pas dépasser 100 octets.

 

4 TRAVAIL A REALISER

 

 

Dans un fichier couche_liaison.h, placer la structure de données de la trame.

            Créer le fichier service_liaison.h qui constitue la bibliothèque des primitives de service de la couche liaison.

 

Dans le fichier service_liaison1.c, développer le corps des primitives de service en supposant que le protocole est de type Stop & Wait en mode non connecté.

 

Dans le fichier service_liaison2.c, développer le corps des primitives de service en supposant que le protocole est de type Stop & Wait PAR en mode non connecté.

 

Dans le fichier service_liaison3.c, développer le corps des primitives de service en supposant que le protocole est de type Stop & Wait PAR en mode connecté.

 

Dans le fichier service_liaison4.c, développer une solution pour un protocole de type fenêtre d’anticipation en mode connecté. Note : il n’est pas souhaitable dans ce cas de développer les primitives. On travaillera directement avec un programme émetteur et un programme récepteur.

 

Ecrire les applications de simulation en utilisant les bibliothèques précédentes. Dans chaque cas on aura 2 applications. Une application lit un fichier qui simule les données à transférer et envoie ces données. La seconde application reçoit des données et les affiche à l’écran. Analyser les résultats.