3.2.1.1. Sender Behavior (Comportamento del Mittente) (Sostituisce Sezione 8.4.3.1, RFC 8724)
3.2.1.1. Sender Behavior (Comportamento del Mittente)
All'inizio della frammentazione di un nuovo SCHC Packet:
-
il fragment sender (mittente di frammenti) DEVE selezionare una coppia di valori RuleID e DTag per questo SCHC Packet. Una Rule (regola) NON DEVE essere selezionata se i valori di M e WINDOW_SIZE per quella Rule sono tali che il SCHC Packet non può essere frammentato in (2^M) * WINDOW_SIZE tiles o meno.
-
il fragment sender DEVE inizializzare l'Attempts counter (contatore dei tentativi) a 0 per quella coppia di valori RuleID e DTag.
Un messaggio Regular SCHC Fragment (frammento SCHC regolare) trasporta nel suo payload una o più tiles. Se più di una tile è trasportata in un Regular SCHC Fragment:
-
le tiles selezionate DEVONO essere contigue nel SCHC Packet originale, e
-
esse DEVONO essere posizionate nel SCHC Fragment Payload adiacenti l'una all'altra, nell'ordine in cui appaiono nel SCHC Packet, dall'inizio del SCHC Packet verso la sua fine.
Le Tiles che non sono l'ultima DEVONO essere inviate in Regular SCHC Fragments come specificato nella Sezione 8.3.1.1. Il campo FCN DEVE contenere il tile index (indice della tessera) della prima tile inviata in quel SCHC Fragment.
In un messaggio Regular SCHC Fragment, il mittente DEVE riempire il campo W con il window number (numero di finestra) della prima tile inviata in quel SCHC Fragment.
Un Profile DEVE definire se l'ultima tile di un SCHC Packet è inviata:
-
in un Regular SCHC Fragment, da sola o come parte di un payload multi-tiles,
-
da sola in un All-1 SCHC Fragment, o
-
con uno dei due metodi sopra indicati.
In un messaggio All-1 SCHC Fragment, il mittente DEVE riempire il campo W con il window number dell'ultima tile del SCHC Packet.
Il fragment sender DEVE inviare SCHC Fragments in modo tale che, tutti insieme, contengano tutte le tiles del SCHC Packet frammentato.
Il fragment sender DEVE inviare almeno un All-1 SCHC Fragment.
Nel fare i due elementi sopra, il mittente DEVE accertarsi che il ricevitore non riceverà l'ultima tile sia attraverso un Regular SCHC Fragment che attraverso un All-1 SCHC Fragment.
Il fragment sender DEVE ascoltare i messaggi SCHC Compound ACK dopo aver inviato:
-
un All-1 SCHC Fragment o
-
uno SCHC ACK REQ.
Un Profile PUÒ specificare altri momenti in cui il fragment sender DEVE ascoltare i messaggi SCHC Compound ACK. Ad esempio, questo potrebbe essere dopo aver inviato una finestra completa di tiles.
Ogni volta che un fragment sender invia un All-1 SCHC Fragment o uno SCHC ACK REQ:
-
DEVE incrementare l'Attempts counter, e
-
DEVE resettare il Retransmission Timer (timer di ritrasmissione).
Alla scadenza del Retransmission Timer:
-
se l'Attempts counter è strettamente inferiore a MAX_ACK_REQUESTS, il fragment sender DEVE inviare o il All-1 SCHC Fragment o uno SCHC ACK REQ con il campo W corrispondente all'ultima finestra,
-
altrimenti, il fragment sender DEVE inviare uno SCHC Sender-Abort (interruzione del mittente SCHC), e PUÒ uscire con una condizione di errore.
Tutte le ricezioni di messaggi discusse nel resto di questa sezione devono essere intese come "corrispondenti alla coppia RuleID e DTag in elaborazione", anche se non esplicitamente indicato, per brevità.
Alla ricezione di uno SCHC Compound ACK:
-
se uno dei campi W nello SCHC Compound ACK corrisponde all'ultima window del SCHC Packet:
-
se il bit C è impostato, il mittente PUÒ uscire con successo.
-
altrimenti:
-
se il Profile richiede che l'ultima tile sia inviata in un All-1 SCHC Fragment:
-
se lo SCHC Compound ACK non mostra tile mancanti al ricevitore, il mittente:
-
DEVE inviare uno SCHC Sender-Abort e
-
PUÒ uscire con una condizione di errore.
-
-
altrimenti:
-
il fragment sender DEVE inviare messaggi SCHC Fragment contenenti tutte le tiles di tutte le windows segnalate come mancanti nello SCHC Compound ACK.
-
se l'ultimo di questi messaggi SCHC Fragment non è un All-1 SCHC Fragment, allora il fragment sender PUÒ o inviare, in aggiunta, uno SCHC ACK REQ con il campo W corrispondente all'ultima finestra o ripetere il All-1 SCHC Fragment per chiedere al ricevitore di confermare che tutte le tiles sono state ricevute correttamente.
-
nel fare i due elementi sopra, il mittente DEVE accertarsi che il ricevitore non riceverà l'ultima tile sia attraverso un Regular SCHC Fragment che attraverso un All-1 SCHC Fragment.
-
-
-
altrimenti:
-
se lo SCHC Compound ACK non mostra tile mancanti al ricevitore, il mittente DEVE inviare il All-1 SCHC Fragment
-
altrimenti:
-
il fragment sender DEVE inviare messaggi SCHC Fragment contenenti tutte le tiles segnalate come mancanti nello SCHC Compound ACK.
-
il fragment sender DEVE quindi inviare o il All-1 SCHC Fragment o uno SCHC ACK REQ con il campo W corrispondente all'ultima finestra.
-
-
-
-
-
altrimenti, il fragment sender:
-
DEVE inviare messaggi SCHC Fragment contenenti le tiles segnalate come mancanti nello SCHC Compound ACK.
-
poi, PUÒ inviare uno SCHC ACK REQ con il campo W corrispondente all'ultima finestra.
-
Vedere la Figura 43 di RFC 8724 per uno tra diversi esempi possibili di una Finite State Machine (macchina a stati finiti) che implementa un comportamento del mittente conforme a questa specifica.