要約

  • Data OffsetはTCPヘッダー全体を32ビットワードで数え、データの開始位置を示す。
  • EOLはオプションの解釈を終えるが、その後のパディングもヘッダーの一部である。
  • NOPは整列に使えるが、整列は必須ではない。

TCPの基本ヘッダーは5ワード、20オクテットである。オプションが付くと長さが変わるため、受信側には個々の機能を理解していなくても使える外側の境界が必要になる。4ビットのData Offsetは完全なTCPヘッダーが何個の32ビットワードで構成されるかを表す。その値を4倍したオクテットがデータの開始点になる。5は基本ヘッダーを示し、それより大きい値にはオプションと末尾のパディングが含まれる。表現できる上限は15ワード、60オクテットである。

Data Offsetが5を超える場合、RFC 9293はオプション領域を(DOffset-5)*32ビットと表す。この値には実際のオプションの後ろにあるパディングも含まれる。

EOLはオプション列の終端を示すが、Data Offsetの境界まで進んだことを示すものではない。残りはゼロのヘッダーパディングでなければならない。1オクテットのNOPは後続オプションの整列に使える一方、オプションは任意のオクテット境界から始まり得る。その他のオプションには長さがあり、未知でも正しい形式なら読み飛ばせる。

Data Offsetが解析の上限を与える。オプションとパディングはTCPチェックサムの対象だが、アプリケーションデータではない。不正な長さは処理しなければならず、RFC 9293は接続のリセットと原因の記録を提案手順として挙げている。

出典