II-2. L'algorithme d’émission de données
Cet algorithme concerne les types de données (SYNC, RTS, CTS, DATA, ACK) qu’un nœud pourrait émettre selon le mode de transmission « unicast » ou « broadcast ». En effet, un nœud ne peut émettre des données que s’il est à l’état actif, que son compteur NAV (vecteur d’allocation réseau) est à 0 et que l’indicateur de puissance du signal reçu est supérieur à 0.5.
Avant l’émission de paquet SYNC (paquet de synchronisation), de paquet RTS ou de paquet DATA en mode « broadcast », un nœud doit impérativement contentionner le canal pendant une durée égale TYPE_CONTEND_TIME avec TYPE = {SYNC, RTS, CTS, DATA}.
Pour le cas d’émission de paquet SYNC, le nœud reste en écoute passive de durée égale à passive_preamble_time.
Pendant l’émission de paquet RTS, CTS et DATA (mode « broadcast »), la période active est égale à 3 fois la valeur de « passive_preamble_time » car, lors d’une telle émission, de nouvelles transmissions de données vont être initiées.
Pour le cas d’émission de paquet DATA en mode « unicast » ou de paquet ACK, le nœud n’a pas besoin de contentionner le canal.
L’algorithme d’émission de données est le suivant :
Début
Si (l'état du noeud est “actif”)
alors
Si la variable NAV est à zéro alors
Si ((l'indicateur de puissance du signal reçu) > 0,5) alors
Rester à l’écoute passive (passive_preamble_time)
Sinon
Selon l'état du noeud faire
1er Cas : le noeud contentionne le canal (PROTO_STATE_CONTEND)
Selon le prochain état du nœud (next_state) faire :
1er sous-cas: Si le noeud se prépare à envoyer un paquet SYNC
(état PROTO_STATE_SEND_SYNC) alors il commence par contentionner le canal
pendant une durée SYNC_CONTEND_TIME.
rester à l’écoute passive (passive_preamble_time) et émettre le paquet SYNC
2ème sous-cas: Si le noeud se prépare à envoyer un paquet RTS
(état PROTO_STATE_SEND_RTS) alors il commence par contentionner le canal
pendant une durée RTS_CONTEND_TIME.
lancer une période d’écoute active (3 * passive_preamble_time) et émettre le paquet RTS
le nœud va changer d’état (état PROTO_STATE_WFCTS) pour montrer qu'il sera en
attente du paquet CTS pendant une durée égale à TIMEOUT_WFCTS.
3ème sous-cas: Si le noeud se prépare à envoyer un paquet DATA en mode
broadcast (état PROTO_STATE_SEND_DATA) alors il doit commencer par
contentionner le canal pendant une durée DATA_CONTEND_TIME.
lancer une période d’écoute active et émettre le paquet DATA.
4ème sous-cas: Si le noeud se prépare à envoyer un paquet CTS (état
PROTO_STATE_SEND_CTS) alors il doit commencer par contentionner le canal
pendant une durée CTS_CONTEND_TIME.
Le nœud va changer d’état (état PROTO_STATE_WFDATA) pour montrer qu'il sera
en attente du paquet DATA pendant une durée égale à TIMEOUT_WFDATA.
FinSelon
2ème cas : Si le noeud se prépare à envoyer un paquet DATA en mode unicast
(état PROTO_STATE_SEND_DATA) alors émettre le paquet DATA et
changer d’état (état PROTO_STATE_WFACK) pour montrer qu'il sera en attente du
paquet ACK pendant une durée égale à TIMEOUT_WFACK.
3ème cas: Si le noeud se prépare à envoyer un ACK (état
PROTO_STATE_SEND_ACK) alors émettre le paquet ACK.
FinSelon
Finsi
Fin
Dostları ilə paylaş: |