4.2. IPv6 拡張ヘッダー圧縮
LOWPAN_NHC を使用してヘッダーをエンコードする際の必要なプロパティは、直前のヘッダーが LOWPAN_IPHC または LOWPAN_NHC を使用してエンコードされている必要があることです。つまり、このドキュメントで定義されている 6LoWPAN エンコーディング形式を使用してエンコードされたすべてのヘッダーは連続している必要があります。その結果、このドキュメントでは、セクション 4.3 で定義されている UDP ヘッダー圧縮がそれらの拡張ヘッダーの存在下で使用できるように、選択された IPv6 拡張ヘッダーの LOWPAN_NHC エンコーディングのセットを定義します。
IPv6 拡張ヘッダーの LOWPAN_NHC エンコーディングは、単一の LOWPAN_NHC オクテットとそれに続く IPv6 拡張ヘッダーで構成されます。LOWPAN_NHC オクテットの形式を図 13 に示します。最初の 7 ビットは、LOWPAN_NHC オクテットの直後に続く IPv6 拡張ヘッダーの識別子として機能します。残りのビットは、後続のヘッダーが LOWPAN_NHC エンコーディングを利用するかどうかを示します。
0 1 2 3 4 5 6 7
+---+---+---+---+---+---+---+---+
| 1 | 1 | 1 | 0 | EID |NH |
+---+---+---+---+---+---+---+---+
Figure 13: IPv6 Extension Header Encoding
EID: IPv6 拡張ヘッダー ID:
0: IPv6 ホップバイホップオプションヘッダー [RFC2460]1: IPv6 ルーティングヘッダー [RFC2460]2: IPv6 フラグメントヘッダー [RFC2460]3: IPv6 宛先オプションヘッダー [RFC2460]4: IPv6 モビリティヘッダー [RFC6275]5: 予約済み6: 予約済み7: IPv6 ヘッダー
NH: 次のヘッダー:
0: 次のヘッダーの完全な 8 ビットがインラインで伝送されます。1: 次のヘッダーフィールドは省略され、次のヘッダーは LOWPAN_NHC を使用してエンコードされます(セクション 4.1 で説明)。
大部分において、IPv6 拡張ヘッダーは、LOWPAN_NHC オクテットの直後のバイトで変更されずに伝送されますが、2 つの重要な例外があります:長さフィールドと次のヘッダーフィールドです。
LOWPAN_NHC エンコーディングオクテットで NH ビットが設定されている場合、IPv6 拡張ヘッダーに含まれる次のヘッダーフィールドは省略されます。これにより、LOWPAN_NHC は、エンコードされていない IPv6 拡張ヘッダーよりも多くのオーバーヘッドを使用しないようになります。
圧縮された IPv6 拡張ヘッダーに含まれる長さフィールドは、長さフィールドに続く(圧縮された)拡張ヘッダーに関連するオクテット数を示します。[RFC2460] の長さフィールドの定義が、最初の 8 オクテットを含まない 8 オクテット単位のヘッダーサイズを示すものから変更されることに注意してください。長さフィールドをオクテット単位に変更すると、無駄な内部断片化が排除されます。
IPv6 ホップバイホップおよび宛先オプションヘッダーは、8 オクテットのアライメントを実現するために、末尾に Pad1 または PadN を使用する場合があります。7 オクテット以下の単一の末尾 Pad1 または PadN オプションがあり、含まれるヘッダーが 8 オクテットの倍数である場合、末尾の Pad1 または PadN オプションは圧縮器によって省略してもよい(MAY)。解凍器は、必要に応じて Pad1 または PadN オプションを使用して、含まれるヘッダーが長さの 8 オクテットの倍数になるようにパディングされていることを確認しなければなりません(MUST)。末尾以外の場所に表示される Pad1 および PadN オプションは、後続のオプションを整列させるために使用されるため、インラインで伝送する必要があることに注意してください。
オクテット単位を指定することは、圧縮後の長さフィールドの後に 255 オクテットを超える IPv6 拡張ヘッダーをエンコードするために LOWPAN_NHC を使用してはならない(MUST NOT)ことを意味することに注意してください。
識別された次のヘッダーが IPv6 ヘッダー(EID=7)の場合、LOWPAN_NHC エンコーディングの NH ビットは使用されず、ゼロに設定しなければなりません(MUST)。後続のバイトは、セクション 3 で定義されている LOWPAN_IPHC を使用してエンコードしなければなりません(MUST)。