要約

  • RFC 791 の Total Length は、IPv4 ヘッダーとデータを合わせたデータグラム全体の長さを八ビット単位で示します。
  • RFC 894 によれば、Ethernet の最小データ長を満たすためのパディングは IP パケットに含まれません。

短い IPv4 データグラムは、層ごとの境界の違いを明らかにします。Ethernet のデータフィールドは少なくとも 46 オクテット必要なので、短いデータグラムにはゼロのパディングが続きます。受信側が見るフレームは、IPv4 が所有するデータより長くなり得ます。

その境界を外側のフレームに任せないため、IPv4 ヘッダーには 16 ビットの Total Length があります。これはヘッダーを含むデータグラム全体を数えます。フレームは運搬を担当し、データグラムは自分の終端を示します。

IHL と Total Length

IHL は 32 ビット語でヘッダー長を表し、最小値は 5、つまり 20 オクテットです。Total Length は全体をオクテットで表します。したがってデータ長は、Total Length から IHL に基づくヘッダー長を引いて求められます。オプションがヘッダーを拡張しても、IHL がデータの開始位置を動かし、Total Length が終端を示す役割は変わりません。

この値は Ethernet のアドレス、制御情報、プリアンブル、チェック情報、パディングを数えません。IPv4 に渡されたデータのうち、どこまでが現在のデータグラムかを示す値です。

表現可能な大きさと配送可能性

16 ビットで表せる上限は 65,535 オクテットです。しかし RFC 791 は、この大きさを多くのホストやネットワークには実用的でないと説明しています。ホストは完全なものでも断片化されたものでも 576 オクテットまで受け入れられる必要があり、より大きい送信には宛先の能力への確信が求められます。Ethernet の IP データグラム上限は 1,500 オクテットです。したがって上限値はパス MTU でも受信保証でもありません。

断片化された場合

各断片は自身のヘッダーを持ち、その Total Length は自身のヘッダーと断片データを含みます。Identification、Fragment Offset、More Fragments は別の役割を持ちます。Total Length が示すのは現在転送される IPv4 オブジェクトの境界であり、アプリケーションメッセージの長さではありません。

宣言された長さが不正な場合や、キャプチャが途中で切れている場合もあります。IHL、利用可能なバイト、パディング、キャプチャの出所を併せて確認する必要があります。長さは解釈の基準であって、完全性や配送を証明するものではありません。

出典