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.