4. IPv6 拡張ヘッダー (IPv6 Extension Headers)
IPv6 では、オプションのインターネット層情報は個別のヘッダーにエンコードされ、IPv6 ヘッダーと上位層ヘッダーの間に配置できます。このような拡張ヘッダーは少数存在し、それぞれ異なる Next Header 値によって識別されます。以下の例に示すように、IPv6 パケットはゼロ個、一個、または複数の拡張ヘッダーを持つことができ、各拡張ヘッダーは前のヘッダーの Next Header フィールドによって識別されます。
+---------------+------------------------
| IPv6 header | TCP header + data
| |
| Next Header = |
| TCP |
+---------------+------------------------
+---------------+----------------+------------------------
| IPv6 header | Routing header | TCP header + data
| | |
| Next Header = | Next Header = |
| Routing | TCP |
+---------------+----------------+------------------------
+---------------+----------------+-----------------+-----------------
| IPv6 header | Routing header | Fragment header | fragment of TCP
| | | | header + data
| Next Header = | Next Header = | Next Header = |
| Routing | Fragment | TCP |
+---------------+----------------+-----------------+-----------------
一つの例外を除き、拡張ヘッダーはパケット配送経路上のいかなるノードによっても検査または処理されません。パケットが IPv6 ヘッダーの Destination Address フィールドで識別されるノード(マルチキャストの場合はノードの集合の各ノード)に到達するまでは処理されません。そこで、IPv6 ヘッダーの Next Header フィールドの通常の逆多重化により、最初の拡張ヘッダーを処理するモジュール、または拡張ヘッダーが存在しない場合は上位層ヘッダーを処理するモジュールが呼び出されます。各拡張ヘッダーの内容とセマンティクスが、次のヘッダーの処理を続けるかどうかを決定します。したがって、拡張ヘッダーはパケット内に現れる順序で厳密に処理されなければなりません。例えば、受信者は特定のタイプの拡張ヘッダーを探してパケットをスキャンし、前のすべてのヘッダーを処理する前にそのヘッダーを処理してはなりません。
前段で述べた例外は、Hop-by-Hop Options ヘッダー(逐跳オプションヘッダー)です。このヘッダーは、パケット配送経路上のすべてのノード(送信元ノードと宛先ノードを含む)が検査および処理しなければならない情報を運びます。Hop-by-Hop Options ヘッダーが存在する場合、IPv6 ヘッダーの直後に続かなければなりません。その存在は、IPv6 ヘッダーの Next Header フィールドの値ゼロによって示されます。
ヘッダーを処理した結果として、ノードが次のヘッダーの処理を続ける必要があるが、現在のヘッダーの Next Header 値がノードに認識されない場合、ノードはそのパケットを破棄し、パケットの送信元アドレスに ICMP Parameter Problem メッセージを送信すべきです。ICMP Code 値は 1(「認識されない Next Header タイプに遭遇 (unrecognized Next Header type encountered)」)、ICMP Pointer フィールドには元のパケット内の認識されない値のオフセットが含まれます。IPv6 ヘッダー以外のヘッダーで Next Header 値がゼロに遭遇した場合も同様の処置を取るべきです。
各拡張ヘッダーの長さは 8 オクテットの整数倍であり、後続のヘッダーに対して 8 オクテットのアライメントを維持します。各拡張ヘッダー内の複数オクテットフィールドは自然境界にアライメントされます。すなわち、幅 n オクテットのフィールドは、ヘッダーの先頭から n オクテットの整数倍の位置に配置されます(n = 1、2、4、または 8)。
IPv6 の完全な実装には、以下の拡張ヘッダーの実装が含まれます。
Hop-by-Hop Options(逐跳オプション)
Routing (Type 0)(ルーティング)
Fragment(フラグメント)
Destination Options(宛先オプション)
Authentication(認証)
Encapsulating Security Payload(カプセル化セキュリティペイロード)
最初の四つは本文書で規定されており、後の二つはそれぞれ [RFC-2402] および [RFC-2406] で規定されています。