要約

  • 1997年4月にInformationalとして公表されたRFC 2140は、TCP制御ブロックの一部の測定値を接続ごとでなくホストの組に結び付ける構想を示した。標準化済みの機能や、測定された普及効果を報告した文書ではない。
  • 終了した接続から値を受け取る「時間的共有」と、同時に動く接続の間で情報を使う「集合的共有」では、更新時刻も混雑の勘定も異なる。MSSやRTTの候補値は渡せても、混雑ウィンドウを接続ごとに丸ごと複製すれば総送信量が増える。
  • 古い値や改変された値の影響も接続間を移る。文書は初期値の検証、汚染された状態の隔離を求め、TCPのシーケンス番号を共有対象から除外した。

使い終えた制御ブロックの中身

一つの接続が閉じる直前、相手が示した最大セグメントサイズと、その経路で測った往復時間は手元にある。次の接続は同じ相手に向かうかもしれない。それでも新しい制御ブロックをすべて白紙から始めれば、短い通信では学習が終わるころに転送も終わってしまう。RFC 2140 は、こうした初期の無駄を小さくするために、制御ブロックの「どの部分が誰のものか」を問い直した。

アプリケーションのバッファへのポインタ、再送キュー、ポート、接続状態、タイマーは個々の会話に属する。MSSとRTTはホストの組についての観測として、別の接続にも役立つ可能性がある。一方、混雑ウィンドウや送信ウィンドウの意味は同じ経路に負荷をかける接続全体にも及ぶ。RFCが後者を「集計において」ホストの組に依存すると区別したのは、そのためだ。

この分類は当時の短命なWeb接続を念頭に置く。狙いは定常状態のTCPを変えることではなく、接続の立ち上がりを改善することだった。しかし文書自身がInternet Standardではないと明記し、期待される改善をインターネット全体の実測結果として示してはいない。

閉じた後と、閉じる前

時間的共有では、先に終わった接続が残した値で新しい制御ブロックを初期化する。RFC 2140はSunOS 4.1.3のT/TCP拡張とFreeBSDへの移植を、MSSとRTTを保存した限定的な例として挙げた。MSSオプションを受け取れば保存値を更新でき、RTTとそのばらつきは接続終了時にまとめられる。この例で混雑ウィンドウの再利用は論じられていたものの、実装済みではなかった。接続間で平均したRTTは一接続内の推定手順とは異なり、不適切な値になり得るという注意も本文にある。

集合的共有は待てない。複数の接続が次々に開き、まだどれも閉じていなければ、終了時にしか書き込まないキャッシュには新しい観測がない。そこで早い段階の更新が検討された。MSSやRTTを写す場合と異なり、混雑ウィンドウを写すと、各接続が同じ余裕を別々に持つことになる。文書が想定した当時の一セグメントの初期ウィンドウでさえ、接続を増やせば合計値は増す。

RFC 2140は、既存のN接続と新しい一接続で総ウィンドウを分け、古い接続側も取り分を減らす案を掲げた。均等配分が適切かどうかは未確定だと明言し、さらなる検討を求めている。提案された算術を、実証済みの公平性や広範な実装と読み替えてはならない。

誤った値にも受取人ができる

共有によって、値の間違いも一接続の外へ出る。RFCはゼロや偽の小さなウィンドウが後続接続を遅らせ得ると論じた。特に短い通信は、測定し直して回復する前に終わる。新接続に値を渡す際の既定の下限による検証、継続中の共有状態へ加わる入力の制限、アプリケーションが直接変更した状態や認証されていない情報の隔離が必要とされた。シーケンス番号は性能上の参考値ではなく、共有してはならない。

ホストの組が同じであることは経路やボトルネックが不変である証明ではない。RFC 9040 は2021年にRFC 2140を廃止して説明を置き換えたが、後年の整理を1997年の実装証拠にしてはいけない。最初の提案が残したのは、過去の測定が次の接続に移る際の出所、時刻、範囲、失効条件を明示するという課題である。

資料と限界

  • RFC 2140:時間的共有、集合的共有、互換性、安全性に関する一次資料。
  • RFC 1644:RFC 2140が参照したT/TCPの背景。
  • RFC 9040:2021年の後継文書。

これらから現在のOSの挙動、定量的な高速化、同一経路の保証、世界規模の採用率は導けない。