要約

  • Data Offsetはヘッダーの物理境界を示し、EOLはその内側で論理的な列を終えます。
  • NOPは後続オプションの配置を調整できますが、受信側に整列を要求しません。

役割を分ける境界

受信側はオプション領域をオクテット単位で進みます。Kind 1のNOPなら1バイト進み、長さを持つオプションならその長さ全体を越えます。Kind 0のEOLに達すると、意味のあるオプションの解釈を止めます。EOLからData Offsetまでの残りはゼロパディングであり、ペイロードはData Offsetの位置から始まります。

RFC 793は、単一オクテットだけの形式と、種類・長さ・データを持つ形式を定義しました。長さには種類と長さ自身も含まれます。RFC 9293も、EOLとNOP以外のすべてのオプション、将来のオプションを含めて、長さフィールドを要求します。これにより、未知の意味でも長さが妥当ならエラーにせず通過できます。

NOPは配置の道具

送信側はNOPを挿入して、次のオプションをワード境界などに置けます。しかし、それは受信側が依存できる条件ではありません。RFC 793は非整列のオプションを受信できるよう求め、RFC 9293もこの要件を明記しています。NOPが常に高速化するという保証もありません。

EOLはヘッダー長を変更せず、Data Offsetの代わりにもなりません。EOLは論理列だけを閉じます。自然にヘッダー境界まで達する場合はEOL不要で、早く現れた場合は残りをゼロにします。

長さが支える拡張性

未知のオプションを越えられることがTCPの拡張性を支えます。ゼロや矛盾した長さは不正であり、解析器は安全な進行を失わないよう処理しなければなりません。1981年の構文は、現在のRFC 9293にも保たれています。

Sources