Laboratoire de SEG 3550
Traduction
Janvier 20/21, 2004
Fichier à télécharger:
·
FramingLab.zip
Quand vous decompressez le
fichier FamingLab.zip, et charger Tau, ajoutez les fichiers suivant.
·
FramingPackage.sun
¬
un paquet de SDL
·
Framing.ssy
¬
un système de SDL
·
FramingDemo.msc
¬
trace du diagramme de sequence (MSC)
Objectif
L'objectif de ce laboratoire est de
commencer à faire la conception d'un protocol stack dans SDL, en utilisant le
service de transmission d'octet qui a été présenté dans le laboratoire 1.
Dans ce laboratoire, nous ajouterons la fonctionnalité de la couche liaison
de données (couche #2): trame et "stuffing" de données. Après
un laboratoire de plus (dans lequel exigences additionnelles peuvent être
demandees), vous devriez etre pret a soumettre le protocol stack de SDL comme
votre première devoir a remettre.. Utilisez le simulateur Tau pour
observer l'opération du protocol de stack.
Contenu du paquet téléchargé
La liste complète des fichiers est:
- FramingPackage.sun
- PhysicalLayer.sbt
¬
le même fichier que le laboratoire 1
- BitProcessor1.spr
¬
le même fichier que le laboratoire 1
- BitProcessor2.spr
¬
le même fichier que le laboratoire 1
- removeFirstOctet.spd
- Framing.ssy
- FramingDemo.msc
FramingPackage
comprend ce qui suit:
- La
même couche physique de type bloc (et le
bit processeurs) tel que utilisé dans le laboratoire 1. Celui qui envoie
un octet a travers une couche physique simulée. L'octet est divise en 8
bits qui sont envoyés un bit a la fois. Les bits peuvent être
envoyes dans les deux directions simultanément. Le paquet est fiable;
aucun bit ne sera perdu, sera changé, ou re-arrangé à nouveau.
- Un
procédé de SDL qui enlève le premier octet du string . Si oStr
est un octet de type string, l'appel a la procédure
removeFirstOctet
(
oStr)
modifiera
oStr
en enlevant le premier octet dans oStr
.
- Il
est recommande que vous observez le procédé pour voir
comment on lui fait appelle, qu'est ce qu'il "return ", et
comment faire passer le paramètre, parce qu'il se peut que vous allez
créer et utilisez vos propres procédures.
- Notez
que SDL a les paramètres IN qu'on les font
passer au procede de la meme facon que les paramètres de Java ou de
C++ (la valeur est passée "in" ), mais également les paramètres
IN/OUT
où la valeur est passée "in" quand on
fait appelle au procédé et
a valeur "return" du procédé est re-passée encore (probablement
modifiée) .
- Constantes
prédéfinies d'octet: oSOH
, oEOT
, oESC
, oA,
oB
, oC
- Vous
trouvez une demonstration de la trace du diagramme sequence (MSC) dans le
fichier FramingDemo.msc
- Fichier
Framer contient un objet de type bloc. Le bloc a un seul (vide)
prosessus qui capable agir comme emetteur et recepteur pour la
fonctionnalité de ce niveau.
Cliquetez ici
pour voir, dans le browser, le contenu complet de ces fichiers .
Qu'est ce que vous devez faire?
Framer processus à l'intérieur
du Framer bloc n'est pas defini. Votre tâche est de concevoir et implementer
en SDL la contenu de ce processus, tel qu'il fournit les services suivants:
- Recevoir
de la couche supérieure (a ce moment, l'environnement de SDL), un string
d'octets de longueur arbitraire
dans un signal a appelé frameReq
. Ce signal a un paramètre de type OCTET_STRING
qui porte les octets des données de l'utilisateur à
envoyer.
- Ajoutez
les octets SOH
et EOT
au début et à la fin du trame.
- Employez
la methode des données "stuffing" pour s'assurer qu'aucunes
occurrences des octets SOH
ou EOT
apparaîtront dans les données de l'utilisateur à
envoyer.
o
Les codes de "stuffing" devraient être
ceux on a vus dans le cours: ESC
A pour SOH
( debut de l'en-tete) ; ESC
B pour EOT
(fin de la queue) , et ESC
C pour ESC
.
- Faire
appelle a la couche PhysicalLayer
dans FramingPackage
pour envoyer chaque octet, employer octetReq
signal.
- L'emetteur
doit pouvoir manipuler additionnel messages frameReq
même si des trames antérieures encore n'ont pas été
complètement envoyées à la couche physique. C'est-à-dire, les
messages frameReq
peuvent être reçus à tout moment, et doivent être
memorises dans l'ordre qu'ils sont reçus.
Du côté de réception, Framer
doit :
- Rassemblez
les octets quand ils arrivent de la couche PhysicalLayer
par l'intermédiaire des signaux octetInd,
ou SOH
( debut de l'en-tete) dénote le début d'une trame.
- Quand
l'octet EOT
(fin de la queue) arrive, défait (reconstruit le trame
) données "stuffing", et expédiez le string d'octet à la
couche supérieure par l'intermediare du signal frameInd.
- Un
trame incomplet devrait être met a l'eccard. Ceci est introduit
sous forme des exceptions suivantes: SOH
du début manquant, autres SOH
avant EOT.
Notes:
- La
fonctionnalité suivante de SDL/Tau peut être utile:
- La
concaténation de deux strings octet peut être faite avec //
opérateur: newString
:
= string1// string2
- Le
premier octet dans un string d'octet peut être obtenu avec le
"premiere" fonction: firstOctet
:
= first(anOctetString )
- Convertissez
un octet en octet_string en utilisant mkstring
()
- Un
string d'octet vide peut être faite avec hexstring
('')
Évaluation de laboratoire (une fois soumis en tant
devoir ):
·
Le TA aura sa propre copie du paquet de téléchargé.
Il va connecter son vide processus Framer a l'organisateur
de Tau, avec le votre fichier du processus Framer et toute sous-structure qui
lui appartienne (telles que vos propres procédures SDL) et puis il recompile
le système.
·
Il chargera alors un scrit simulation, qui
inclura le scénario dans la trace de démonstration, avec evidement des scénarios
"intéressants" en addition. Vous allez perdre des points si votre
processus "framing" ne produit pas des
résultats équivalents à ce qui est prévu.
·
Que veut dire
"équivalent"?
- Quand
le TA tourne la simulation, seulement les messages "allant à"
et "venant de" partie(s) du système que vous avez implementez
seront tracés, comme illustré par le fichier FramingDemo.msc
.
- Les
changement dans la commande globale des messages qui peuvent être
attribués au programme du processus ne sont pas appropriés.
- Par
exemple, dans la trace FramerDemo.msc
, la couche physique reçoit toutes les "octets
demandes" (request ) avant d'envoyer n'importe quelle
"octet indication". Il faudrait que n'importe quelle
"octet indication" doit etre envoyée "à quelque
moment" après la "octet demande" correspondante ; en
fait, un "octet indication" pourrait avoir été envoyée
juste après que la "octet demande" est arrivée.