3.2.1.1. Sender Behavior (Sender-Verhalten) (Ersetzt Abschnitt 8.4.3.1, RFC 8724)
3.2.1.1. Sender Behavior (Sender-Verhalten)
Zu Beginn der Fragmentierung eines neuen SCHC Packet:
-
MUSS der fragment sender (Fragment-Sender) ein RuleID- und DTag-Wertepaar für dieses SCHC Packet auswählen. Eine Rule (Regel) DARF NICHT ausgewählt werden, wenn die Werte von M und WINDOW_SIZE für diese Rule so sind, dass das SCHC Packet nicht in (2^M) * WINDOW_SIZE tiles oder weniger fragmentiert werden kann.
-
MUSS der fragment sender den Attempts counter (Versuchszähler) für dieses RuleID- und DTag-Wertepaar auf 0 initialisieren.
Eine Regular SCHC Fragment (reguläres SCHC-Fragment) Nachricht trägt in ihrer Nutzlast eine oder mehrere tiles. Wenn mehr als eine tile in einem Regular SCHC Fragment getragen wird:
-
MÜSSEN die ausgewählten tiles im ursprünglichen SCHC Packet zusammenhängend sein, und
-
sie MÜSSEN im SCHC Fragment Payload nebeneinander platziert werden, in der Reihenfolge, in der sie im SCHC Packet erscheinen, vom Anfang des SCHC Packet bis zu seinem Ende.
Tiles, die nicht die letzte sind, MÜSSEN in Regular SCHC Fragments gesendet werden, wie in Abschnitt 8.3.1.1 spezifiziert. Das FCN-Feld MUSS den tile index (Kachel-Index) der ersten in diesem SCHC Fragment gesendeten tile enthalten.
In einer Regular SCHC Fragment-Nachricht MUSS der Sender das W-Feld mit der window number (Fensternummer) der ersten in diesem SCHC Fragment gesendeten tile füllen.
Ein Profile MUSS definieren, ob die letzte tile eines SCHC Packet gesendet wird:
-
in einem Regular SCHC Fragment, allein oder als Teil einer Multi-Tiles-Nutzlast,
-
allein in einem All-1 SCHC Fragment, oder
-
mit einer der beiden oben genannten Methoden.
In einer All-1 SCHC Fragment-Nachricht MUSS der Sender das W-Feld mit der window number der letzten tile des SCHC Packet füllen.
Der fragment sender MUSS SCHC Fragments so senden, dass sie zusammen alle tiles des fragmentierten SCHC Packet enthalten.
Der fragment sender MUSS mindestens ein All-1 SCHC Fragment senden.
Bei der Ausführung der beiden oben genannten Punkte MUSS der Sender sicherstellen, dass der Empfänger die letzte tile nicht sowohl durch ein Regular SCHC Fragment als auch durch ein All-1 SCHC Fragment erhält.
Der fragment sender MUSS nach dem Senden auf SCHC Compound ACK-Nachrichten hören:
-
eines All-1 SCHC Fragment oder
-
einer SCHC ACK REQ.
Ein Profile KANN andere Zeiten spezifizieren, zu denen der fragment sender auf SCHC Compound ACK-Nachrichten hören MUSS. Dies könnte beispielsweise nach dem Senden eines vollständigen Fensters von tiles sein.
Jedes Mal, wenn ein fragment sender ein All-1 SCHC Fragment oder eine SCHC ACK REQ sendet:
-
MUSS er den Attempts counter inkrementieren, und
-
MUSS er den Retransmission Timer (Neuübertragungstimer) zurücksetzen.
Bei Ablauf des Retransmission Timer:
-
wenn der Attempts counter strikt kleiner als MAX_ACK_REQUESTS ist, MUSS der fragment sender entweder das All-1 SCHC Fragment oder eine SCHC ACK REQ mit dem W-Feld entsprechend dem letzten Fenster senden,
-
andernfalls MUSS der fragment sender einen SCHC Sender-Abort (SCHC-Sender-Abbruch) senden, und er KANN mit einer Fehlerbedingung beenden.
Alle Nachrichtenempfänge, die im Rest dieses Abschnitts diskutiert werden, sind als "passend zum verarbeiteten RuleID- und DTag-Paar" zu verstehen, auch wenn dies der Kürze halber nicht ausdrücklich erwähnt wird.
Beim Empfang einer SCHC Compound ACK:
-
wenn eines der W-Felder in der SCHC Compound ACK dem letzten window des SCHC Packet entspricht:
-
wenn das C-Bit gesetzt ist, KANN der Sender erfolgreich beenden.
-
andernfalls:
-
wenn das Profile vorschreibt, dass die letzte tile in einem All-1 SCHC Fragment gesendet werden muss:
-
wenn die SCHC Compound ACK beim Empfänger keine fehlende tile zeigt, der Sender:
-
MUSS einen SCHC Sender-Abort senden und
-
KANN mit einer Fehlerbedingung beenden.
-
-
andernfalls:
-
MUSS der fragment sender SCHC Fragment-Nachrichten senden, die alle tiles aller in der SCHC Compound ACK als fehlend gemeldeten windows enthalten.
-
wenn die letzte dieser SCHC Fragment-Nachrichten kein All-1 SCHC Fragment ist, KANN der fragment sender zusätzlich entweder eine SCHC ACK REQ mit dem W-Feld entsprechend dem letzten Fenster senden oder das All-1 SCHC Fragment wiederholen, um den Empfänger aufzufordern zu bestätigen, dass alle tiles korrekt empfangen wurden.
-
bei der Ausführung der beiden oben genannten Punkte MUSS der Sender sicherstellen, dass der Empfänger die letzte tile nicht sowohl durch ein Regular SCHC Fragment als auch durch ein All-1 SCHC Fragment erhält.
-
-
-
andernfalls:
-
wenn die SCHC Compound ACK beim Empfänger keine fehlende tile zeigt, MUSS der Sender das All-1 SCHC Fragment senden
-
andernfalls:
-
MUSS der fragment sender SCHC Fragment-Nachrichten senden, die alle in der SCHC Compound ACK als fehlend gemeldeten tiles enthalten.
-
MUSS der fragment sender dann entweder das All-1 SCHC Fragment oder eine SCHC ACK REQ mit dem W-Feld entsprechend dem letzten Fenster senden.
-
-
-
-
-
andernfalls, der fragment sender:
-
MUSS SCHC Fragment-Nachrichten senden, die die in der SCHC Compound ACK als fehlend gemeldeten tiles enthalten.
-
dann KANN er eine SCHC ACK REQ mit dem W-Feld entsprechend dem letzten Fenster senden.
-
Siehe Abbildung 43 von RFC 8724 für eines von mehreren möglichen Beispielen einer Finite State Machine (endlichen Zustandsmaschine), die ein dieser Spezifikation gehorchendes Sender-Verhalten implementiert.