5. LoWPAN Adaptation Layer and Frame Format (Livello di adattamento LoWPAN e formato dei frame)
I formati di incapsulamento definiti in questa sezione, indicati nel seguito come "incapsulamento LoWPAN", costituiscono il payload della MAC Protocol Data Unit (PDU) IEEE 802.15.4. Il payload LoWPAN, ad esempio un pacchetto IPv6, segue immediatamente queste intestazioni di incapsulamento.
Tutti i datagrammi incapsulati LoWPAN trasmessi su IEEE 802.15.4 sono preceduti da uno stack di intestazioni di incapsulamento. Ogni intestazione nello stack contiene un tipo di intestazione, seguito da zero o più campi. In un'intestazione IPv6, lo stack contiene nell'ordine: indirizzamento, hop-by-hop options, routing, frammentazione, destination options e infine payload [RFC2460]. Nelle intestazioni LoWPAN, una sequenza analoga è: indirizzamento mesh (L2), hop-by-hop options, inclusi broadcast/multicast L2, frammentazione e infine payload.
Esempio tipico di stack di intestazioni:
Datagramma IPv6 incapsulato in LoWPAN:
+---------------+-------------+---------+
| IPv6 Dispatch | IPv6 Header | Payload |
+---------------+-------------+---------+
Caso con indirizzamento mesh e frammentazione:
+-------+-------+-------+-------+---------+---------+---------+
| M Typ | M Hdr | F Typ | F Hdr | HC1 Dsp | HC1 Hdr | Payload |
+-------+-------+-------+-------+---------+---------+---------+
Quando più intestazioni LoWPAN sono usate nello stesso pacchetto, DEVONO apparire nell'ordine seguente: intestazione di indirizzamento mesh, intestazione broadcast, intestazione di frammentazione.
5.1. Dispatch Type and Header (Tipo e intestazione Dispatch)
Il tipo Dispatch è identificato dai primi due bit "01"; un selettore a 6 bit identifica il tipo di intestazione immediatamente successivo.
Pattern di bit dei valori Dispatch:
00 xxxxxx: NALP, non è un frame LoWPAN01 000001: IPv6, indirizzi IPv6 non compressi01 000010: LOWPAN_HC1, IPv6 compresso con HC101 010000: LOWPAN_BC0, broadcast BC001 111111: ESC, byte Dispatch aggiuntivo10 xxxxxx: MESH, intestazione mesh11 000xxx: FRAG1, intestazione del primo frammento11 100xxx: FRAGN, intestazione dei frammenti successivi
5.2. Mesh Addressing Type and Header (Tipo e intestazione di indirizzamento mesh)
Il tipo mesh è definito dai primi due bit "10":
|1 0|V|F|HopsLft| originator address, final address
Definizione dei campi:
- V: 1 bit; 0 indica che l'indirizzo dell'originator è a 64 bit, 1 indica un indirizzo breve a 16 bit
- F: 1 bit; 0 indica che l'indirizzo della destinazione finale è a 64 bit, 1 indica un indirizzo breve a 16 bit
- Hops Left: 4 bit; decrementato a ogni inoltro, il pacchetto viene scartato quando raggiunge 0. Il valore 0xF indica che segue un campo di estensione a 8 bit
- Originator Address: indirizzo di livello collegamento dell'originator
- Final Destination Address: indirizzo di livello collegamento della destinazione finale
5.3. Fragmentation Type and Header (Tipo e intestazione di frammentazione)
Se un datagramma non entra in un singolo frame 802.15.4, DEVE essere suddiviso in frammenti di collegamento. Tutti i frammenti tranne l'ultimo DEVONO avere dimensione multipla di 8 ottetti.
Intestazione del primo frammento (FRAG1):
|1 1 0 0 0| datagram_size | datagram_tag |
Intestazione dei frammenti successivi (FRAGN):
|1 1 1 0 0| datagram_size | datagram_tag |
|datagram_offset|
Definizione dei campi:
- datagram_size: 11 bit, codifica la dimensione dell'intero pacchetto IP prima della frammentazione di livello collegamento. Per IPv6, il valore è Payload Length + 40
- datagram_tag: 16 bit, uguale per tutti i frammenti dello stesso datagramma; il mittente incrementa questo valore per datagrammi consecutivi
- datagram_offset: 8 bit, offset del frammento in unità di 8 ottetti; presente solo nei frammenti successivi
Regole di riassemblaggio:
Il ricevitore identifica i frammenti dello stesso datagramma usando:
- indirizzo sorgente 802.15.4 del mittente, o indirizzo originator mesh
- indirizzo 802.15.4 della destinazione, o indirizzo final destination mesh
- datagram_size
- datagram_tag
Il timeout di riassemblaggio DEVE essere al massimo 60 secondi. Quando viene rilevato un evento di disassociazione, tutti i frammenti parzialmente riassemblati DEVONO essere scartati.