要約
- MSS オプションは Kind 2、長さ 4 で、SYN の中だけに現れ、送信側が一つのセグメントで受信できる TCP データ量の上限を示します。
- 方向ごとの値は独立しています。値は IP と TCP のヘッダーを含まず、送信側は実際のヘッダーと経路の制約を別途考慮します。
二つの SYN、二つの受信境界
MSS を「交渉」と呼ぶと意味を取り違えます。A の通知は A の受信側を、B の通知は B の受信側を説明します。値が違っていても、それは反対方向の通信を制限しているためであり、矛盾ではありません。
RFC 9293 の形式は明確です。Kind 2、Length 4、そして 16 ビットの MSS 値です。初期接続要求の SYN には含められますが、後続のセグメントには含めてはなりません。これは接続開始時の制約であり、継続的な能力報告ではありません。
MSS が数えるのは TCP データのオクテットで、IP と TCP のヘッダーは除外します。IP データグラムの大きさ、インターフェースの MTU、アプリケーションの書き込みサイズとは別物です。送信側は相手の値に、自分の経路情報と実際のヘッダー長を組み合わせます。
RFC 879 は 1983 年の時点で、MSS を「しばしば誤って交渉と呼ぶ」と説明していました。受信側は受け入れられる量を示し、送信側が個々のパケットを組み立てます。
536 は経路の法則ではなかった
RFC 879 の IPv4 の既定例では、ホストは 576 オクテットの IP データグラムを再構成できる必要がありました。最小の IPv4 ヘッダー 20 オクテットと TCP ヘッダー 20 オクテットを引くと、TCP データは 536 オクテットになります。
この計算は互換性のための既定値であり、経路の測定ではありません。すべての経路の MTU が 576 だという意味でも、特定のリンクが普遍的な値を決めるという意味でもありません。
MSS は経路 MTU 探索とも異なります。PMTUD は変化し得る経路の性質を調べますが、MSS は接続開始時に交換され、端点の受信能力を表します。
オプションをめぐる修正
実装によっては、将来の IP または TCP オプション用に空間を残すため、広告する MSS を小さくしていました。RFC 6691 はこれを正し、受信側は再構成できる最大 TCP ペイロードを広告し、仮想的なヘッダー空間を差し引くべきではないとしました。
送信側は各パケットを作る時点で、実際に存在するオプションと適用される IP サイズ制約に合わせてデータ量を調整します。大きな MSS は経路の制約を無視する許可ではなく、小さな MSS は各ホップの MTU の証明でもありません。
中間装置による書き換え
中間装置は、トンネルのオーバーヘッドに対応するためなどに、SYN の MSS を書き換えることがあります。変わるのは相手に提示される受信制約であって、経路容量を認証付きで測定した値になるわけではありません。
キャプチャが示すのは観測地点で見えた値です。元の端点の通知、全ホップの MTU、より小さいペイロードが選ばれた理由を、それだけで特定することはできません。
教訓は権限を分けることです。受信側は限界を示し、送信側はパケットを作り、経路は外部の制約として残ります。
参考資料
会員向け解説
プロフィールの詳細
適切な会員レベルでログインすると、解説全文と出典メモをご覧いただけます。
Strategic Circle 限定
Strategic Circle
すべての読者に公開されています。参加してログインすると プロフィール解説 を閲覧できます。
Strategic Circle に参加Leadership Alliance 会員限定
Leadership Alliance
対象となる IP 資産の所有者・管理者向けです。ログインすると Leadership Alliance の解説を閲覧できます。
Leadership Alliance に参加
