3.2.1.1. Sender Behavior (Comportement de l'Émetteur) (Remplace Section 8.4.3.1, RFC 8724)
3.2.1.1. Sender Behavior (Comportement de l'Émetteur)
Au début de la fragmentation d'un nouveau SCHC Packet:
-
le fragment sender (émetteur de fragments) DOIT sélectionner une paire de valeurs RuleID et DTag pour ce SCHC Packet. Une Rule (règle) NE DOIT PAS être sélectionnée si les valeurs de M et WINDOW_SIZE pour cette Rule sont telles que le SCHC Packet ne peut pas être fragmenté en (2^M) * WINDOW_SIZE tiles ou moins.
-
le fragment sender DOIT initialiser le Attempts counter (compteur de tentatives) à 0 pour cette paire de valeurs RuleID et DTag.
Un message Regular SCHC Fragment (fragment SCHC régulier) transporte dans sa charge utile une ou plusieurs tiles. Si plus d'une tile est transportée dans un Regular SCHC Fragment:
-
les tiles sélectionnées DOIVENT être contiguës dans le SCHC Packet original, et
-
elles DOIVENT être placées dans le SCHC Fragment Payload adjacentes les unes aux autres, dans l'ordre où elles apparaissent dans le SCHC Packet, du début du SCHC Packet vers sa fin.
Les Tiles qui ne sont pas la dernière DOIVENT être envoyées dans des Regular SCHC Fragments comme spécifié dans la Section 8.3.1.1. Le champ FCN DOIT contenir le tile index (index de tuile) de la première tile envoyée dans ce SCHC Fragment.
Dans un message Regular SCHC Fragment, l'émetteur DOIT remplir le champ W avec le window number (numéro de fenêtre) de la première tile envoyée dans ce SCHC Fragment.
Un Profile DOIT définir si la dernière tile d'un SCHC Packet est envoyée:
-
dans un Regular SCHC Fragment, seule ou dans le cadre d'une charge utile multi-tiles,
-
seule dans un All-1 SCHC Fragment, ou
-
avec l'une des deux méthodes ci-dessus.
Dans un message All-1 SCHC Fragment, l'émetteur DOIT remplir le champ W avec le window number de la dernière tile du SCHC Packet.
Le fragment sender DOIT envoyer des SCHC Fragments de sorte que, tous ensemble, ils contiennent toutes les tiles du SCHC Packet fragmenté.
Le fragment sender DOIT envoyer au moins un All-1 SCHC Fragment.
En effectuant les deux éléments ci-dessus, l'émetteur DOIT s'assurer que le récepteur ne recevra pas la dernière tile à la fois par un Regular SCHC Fragment et un All-1 SCHC Fragment.
Le fragment sender DOIT écouter les messages SCHC Compound ACK après avoir envoyé:
-
un All-1 SCHC Fragment ou
-
un SCHC ACK REQ.
Un Profile PEUT spécifier d'autres moments auxquels le fragment sender DOIT écouter les messages SCHC Compound ACK. Par exemple, cela pourrait être après l'envoi d'une fenêtre complète de tiles.
Chaque fois qu'un fragment sender envoie un All-1 SCHC Fragment ou un SCHC ACK REQ:
-
il DOIT incrémenter le Attempts counter, et
-
il DOIT réinitialiser le Retransmission Timer (temporisateur de retransmission).
À l'expiration du Retransmission Timer:
-
si le Attempts counter est strictement inférieur à MAX_ACK_REQUESTS, le fragment sender DOIT envoyer soit le All-1 SCHC Fragment, soit un SCHC ACK REQ avec le champ W correspondant à la dernière fenêtre,
-
sinon, le fragment sender DOIT envoyer un SCHC Sender-Abort (abandon de l'émetteur SCHC), et il PEUT sortir avec une condition d'erreur.
Toutes les réceptions de messages discutées dans le reste de cette section doivent être comprises comme "correspondant à la paire RuleID et DTag en cours de traitement", même si cela n'est pas explicitement indiqué, par souci de concision.
Lors de la réception d'un SCHC Compound ACK:
-
si l'un des champs W dans le SCHC Compound ACK correspond à la dernière window du SCHC Packet:
-
si le bit C est défini, l'émetteur PEUT sortir avec succès.
-
sinon:
-
si le Profile impose que la dernière tile soit envoyée dans un All-1 SCHC Fragment:
-
si le SCHC Compound ACK ne montre aucune tile manquante au récepteur, l'émetteur:
-
DOIT envoyer un SCHC Sender-Abort et
-
PEUT sortir avec une condition d'erreur.
-
-
sinon:
-
le fragment sender DOIT envoyer des messages SCHC Fragment contenant toutes les tiles de toutes les windows signalées comme manquantes dans le SCHC Compound ACK.
-
si le dernier de ces messages SCHC Fragment n'est pas un All-1 SCHC Fragment, alors le fragment sender PEUT soit envoyer, en plus, un SCHC ACK REQ avec le champ W correspondant à la dernière window, soit répéter le All-1 SCHC Fragment pour demander au récepteur de confirmer que toutes les tiles ont été correctement reçues.
-
en effectuant les deux éléments ci-dessus, l'émetteur DOIT s'assurer que le récepteur ne recevra pas la dernière tile à la fois par un Regular SCHC Fragment et un All-1 SCHC Fragment.
-
-
-
sinon:
-
si le SCHC Compound ACK ne montre aucune tile manquante au récepteur, l'émetteur DOIT envoyer le All-1 SCHC Fragment
-
sinon:
-
le fragment sender DOIT envoyer des messages SCHC Fragment contenant toutes les tiles signalées comme manquantes dans le SCHC Compound ACK.
-
le fragment sender DOIT ensuite envoyer soit le All-1 SCHC Fragment, soit un SCHC ACK REQ avec le champ W correspondant à la dernière window.
-
-
-
-
-
sinon, le fragment sender:
-
DOIT envoyer des messages SCHC Fragment contenant les tiles signalées comme manquantes dans le SCHC Compound ACK.
-
puis, il PEUT envoyer un SCHC ACK REQ avec le champ W correspondant à la dernière window.
-
Voir la Figure 43 du RFC 8724 pour l'un des nombreux exemples possibles d'une machine à états finis implémentant un comportement d'émetteur obéissant à cette spécification.