5. Couche d'adaptation LoWPAN et format de trame (LoWPAN Adaptation Layer and Frame Format)
Les formats d'encapsulation (Encapsulation Formats, ci-après dénommés « encapsulation LoWPAN ») définis dans cette section constituent la charge utile des unités de données de protocole (Protocol Data Unit, PDU) MAC IEEE 802.15.4. La charge utile LoWPAN (par exemple, un paquet IPv6) suit immédiatement cet en-tête d'encapsulation.
Tous les datagrammes encapsulés LoWPAN (Datagrams) transmis via IEEE 802.15.4 sont précédés d'une pile d'en-têtes d'encapsulation (Encapsulation Header Stack). Chaque en-tête de la pile contient un type d'en-tête (Header Type), suivi de zéro ou plusieurs champs d'en-tête. Dans l'en-tête IPv6, la pile contiendra dans l'ordre suivant : adressage (Addressing), options saut par saut (Hop-by-Hop Options), routage (Routing), fragmentation (Fragmentation), options de destination (Destination Options), et enfin la charge utile [RFC2460] ; dans l'en-tête LoWPAN, une séquence d'en-têtes similaire est : adressage réseau maillé (L2), options saut par saut (incluant la diffusion/multidiffusion L2), fragmentation, et enfin la charge utile.
Exemple typique de pile d'en-têtes :
Datagramme IPv6 encapsulé LoWPAN :
+---------------+-------------+---------+
| IPv6 Dispatch | IPv6 Header | Payload |
+---------------+-------------+---------+
Cas nécessitant un adressage en réseau maillé et une fragmentation :
+-------+-------+-------+-------+---------+---------+---------+
| M Typ | M Hdr | F Typ | F Hdr | HC1 Dsp | HC1 Hdr | Payload |
+-------+-------+-------+-------+---------+---------+---------+
Lorsque plusieurs en-têtes LoWPAN sont utilisés dans le même paquet, ils DOIVENT apparaître dans l'ordre suivant : en-tête d'adressage réseau maillé, en-tête de diffusion, en-tête de fragmentation.
5.1. Type de dispatch et en-tête (Dispatch Type and Header)
Le type de dispatch est défini par les deux premiers bits « 01 », suivis d'un sélecteur de 6 bits identifiant le type d'en-tête suivant.
Schémas de bits des valeurs de dispatch :
00 xxxxxx- NALP : n'est pas une trame LoWPAN01 000001- IPv6 : adresse IPv6 non compressée01 000010- LOWPAN_HC1 : IPv6 compressé HC101 010000- LOWPAN_BC0 : diffusion BC001 111111- ESC : octet de dispatch supplémentaire10 xxxxxx- MESH : en-tête réseau maillé11 000xxx- FRAG1 : en-tête du premier fragment11 100xxx- FRAGN : en-tête des fragments suivants
5.2. Type et en-tête d'adressage réseau maillé (Mesh Addressing Type and Header)
Le type réseau maillé est défini par les deux premiers bits « 10 » :
|1 0|V|F|HopsLft| adresse de l'émetteur, adresse finale
Définition des champs :
- V : 1 bit, 0 indique que l'adresse de l'émetteur est sur 64 bits, 1 indique une adresse courte 16 bits
- F : 1 bit, 0 indique que l'adresse de destination finale est sur 64 bits, 1 indique une adresse courte 16 bits
- Hops Left : 4 bits, décrémenté à chaque transfert, le paquet est rejeté lorsqu'il atteint 0. La valeur 0xF indique qu'un champ d'extension de 8 bits suit
- Originator Address : adresse de couche liaison de l'émetteur
- Final Destination Address : adresse de couche liaison de la destination finale
5.3. Type et en-tête de fragmentation (Fragmentation Type and Header)
Si le datagramme ne tient pas dans une seule trame 802.15.4, il DEVRA être décomposé en fragments de liaison. Tous les fragments sauf le dernier DOIVENT être des multiples de 8 octets.
En-tête du premier fragment (FRAG1) :
|1 1 0 0 0| datagram_size | datagram_tag |
En-tête des fragments suivants (FRAGN) :
|1 1 1 0 0| datagram_size | datagram_tag |
|datagram_offset|
Définition des champs :
- datagram_size : 11 bits, encode la taille totale du paquet IP (avant la fragmentation au niveau de la couche liaison). Pour IPv6, la valeur est Payload Length + 40
- datagram_tag : 16 bits, tous les fragments du même datagramme ont le même tag, l'émetteur incrémente cette valeur pour les datagrammes consécutifs
- datagram_offset : 8 bits, décalage du fragment en unités de 8 octets, présent uniquement dans les fragments suivants
Règles de réassemblage :
Le récepteur utilise les informations suivantes pour identifier les fragments appartenant au même datagramme :
- L'adresse source 802.15.4 de l'émetteur (ou l'adresse de l'émetteur du réseau maillé)
- L'adresse 802.15.4 de destination (ou l'adresse de destination finale du réseau maillé)
- datagram_size
- datagram_tag
Le délai de réassemblage DOIT être fixé à 60 secondes au maximum. Lors de la détection d'un événement de désassociation, tous les fragments partiellement réassemblés DOIVENT être rejetés.