メインコンテンツまでスキップ

8.1 上位層チェックサム (Upper-Layer Checksums)

チェックサム計算に IP ヘッダーのアドレスを含むトランスポートまたは他の上位層プロトコルは、32 ビットの IPv4 アドレスではなく 128 ビットの IPv6 アドレスを含めるように IPv6 用に変更されなければなりません。特に、以下に IPv6 用の TCP および UDP の「疑似ヘッダー (pseudo-header)」を示します。

+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
+ +
| |
+ Source Address +
| |
+ +
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
+ +
| |
+ Destination Address +
| |
+ +
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Upper-Layer Packet Length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| zero | Next Header |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

o IPv6 パケットに Routing ヘッダーが含まれる場合、疑似ヘッダーで使用される Destination Address は最終宛先のアドレスです。発信ノードでは、このアドレスは Routing ヘッダーの最後の要素にあります。受信側では、このアドレスは IPv6 ヘッダーの Destination Address フィールドにあります。

o 疑似ヘッダーの Next Header 値は上位層プロトコルを識別します(例: TCP は 6、UDP は 17)。IPv6 ヘッダーと上位層ヘッダーの間に拡張ヘッダーが存在する場合、IPv6 ヘッダーの Next Header 値とは異なります。

o 疑似ヘッダーの Upper-Layer Packet Length は、上位層ヘッダーとデータの長さです(例: TCP ヘッダー + TCP データ)。一部の上位層プロトコルは独自の長さ情報を持ちます(例: UDP ヘッダーの Length フィールド)。そのようなプロトコルでは、疑似ヘッダーで使用される長さはこの長さです。他のプロトコル(TCP など)は独自の長さ情報を持たないため、疑似ヘッダーで使用される長さは IPv6 ヘッダーの Payload Length から IPv6 ヘッダーと上位層ヘッダーの間に存在する拡張ヘッダーの長さを引いた値です。

o IPv4 とは異なり、UDP パケットが IPv6 ノードによって発信される場合、UDP チェックサムはオプションではありません。すなわち、UDP パケットを発信するたびに、IPv6 ノードはパケットと疑似ヘッダーの UDP チェックサムを計算しなければならず、その計算結果がゼロになる場合は UDP ヘッダーに配置するために 16 進数の FFFF に変更しなければなりません。IPv6 受信者はゼロのチェックサムを含む UDP パケットを破棄しなければならず、そのエラーを記録すべきです。

IPv6 版の ICMP [ICMPv6] は、チェックサム計算に上記の疑似ヘッダーを含みます。これは、疑似ヘッダーをチェックサムに含まない IPv4 版 ICMP からの変更です。変更の理由は、IPv4 とは異なりインターネット層チェックサムでカバーされない、ICMP が依存する IPv6 ヘッダーのフィールドの誤配送または破損から ICMP を保護するためです。ICMP の疑似ヘッダーの Next Header フィールドには値 58 が含まれ、IPv6 版の ICMP を識別します。