要約

  • 累積ACKはシーケンス空間の前進を証明する。再送後には、最初のセグメントと後のコピーのどちらが到着したかを識別できない。
  • RFC 1122とRFC 6298はKarnの規則を要求する。再送済みセグメントからRTTを採らず、RTO満了後はタイマーを二倍にする。
  • 交渉済みのTCPタイムスタンプは送信インスタンスを区別できるが、経路、損失原因、本人性、実時刻の証明ではない。

正しい受領証に、二つの時間が残った

送信側がセグメントを送り、時計を動かす。ACKより先に期限が来たため、同じシーケンス番号を再送する。その直後にACKが届く。

RFC 793 の確認番号は、受信側が次に待つバイトを示す。送信窓を進め、保持していたデータを解放する根拠になる。しかし、最初のコピーが遅れて到着したのか、最初は失われ再送だけが成功したのかは書かれていない。

最初の送信から測ればRTTは長い。再送から測れば短い。同じACKが、相反する二つの標本と整合する。配送の証拠としてのACKは壊れていない。所要時間の証拠として使おうとした推論の方が、ACKの知識を越えている。

タイマーは自分の誤りを学習し得た

経路は一定の応答期限を公表しない。TCPは観測からRTOを作る。短すぎれば不要なコピーを増やし、長すぎれば回復可能な損失を放置する。

再送は観測の因果ラベルを失わせる。曖昧なACKを再送への速い応答と扱えば、RTTが縮み、次の期限がさらに早まり、曖昧な標本が増えることがある。常に最初の送信へ帰属させれば、逆に時計を過度に遅くできる。平均式を改良しても、出所を取り違えた一点は正しくならない。

Karnは「測らない」を実装要件にした

RFC 1122 は二つの別の修正を必須とした。JacobsonはRTTの変動をRTO計算へ入れる。Karnは、その計算へ入れてよい標本を選ぶ。計算能力と証拠の入口は同じ問題ではない。

Karnの規則は狭い。再送されたセグメントのACKからRTT標本を作らない。RFC 6298 はこれを MUST NOT として維持する。一方、ACKは累積進展のために受理できる。拒むのはパケットではなく、時間の帰属だけである。

したがって標本を捨てることは、相手の不正や経路故障を宣言することではない。送信側が、時計を更新するのに必要なコピー名を持っていないと認める行為だ。

バックオフが不確実性を記憶した

RFC 1122は指数バックオフも要求する。RFC 2988 が手順を標準化し、RFC 6298が引き継いだ。RTOが満了すると、最も古い未確認セグメントを再送し、RTO <- RTO * 2 とする。

二倍化は経路が正確に二倍遅くなったという測定ではない。沈黙に対して送信側が次第に攻撃的になるのを防ぐ行動規則である。直後の曖昧なACKで、この慎重さを消してはならない。新しいデータが再送なしで確認されたとき、初めて有効な標本が通常の推定器を通じてRTOを下げられる。

バックオフは可逆的な抑制であり、永久の刑罰ではない。

タイムスタンプは限定された例外を作った

RFC 7323 は TSval と折り返される TSecr を定める。オプションが交渉され、ACKを特定のタイムスタンプ付き送信へ結び付けられるなら、RFC 6298は再送データからの測定を認める。

ここでいうタイムスタンプは公的な時刻証明ではない。相手を認証せず、経路を示さず、片道遅延や損失理由も証明しない。一つの接続内で送信インスタンスを区別する、折り返し可能な値にすぎない。

RFC 7323はさらに、受信セグメントが送信窓の左端を前進させた場合にだけ、返された値を平均RTTの更新へ使えるとする。値が存在するだけで、すべてのACKが測定になるわけではない。

標本の多さが履歴を短くする

タイムスタンプを使えば、一つのRTTで多数の観測が得られる。しかしRFC 6298の重みは、おおむね一往復一標本の履歴を前提にしている。全ACKをそのまま投入すれば、以前の経路状態が急速に忘れられる。数往復の尺度で変動する経路では、短い記憶が不要な再送を増やし得る。

RFC 7323が推奨するのは、推定器が意図した履歴の長さを守ることだ。同じ窓から来た相関の強い十個の値は、十の独立した時代ではない。観測量だけでなく、出所と投入速度がモデルの意味を決める。

ACKの権限が知っている範囲へ戻った

ACKは SND.UNA を進め、保存データを退役させ、アプリケーションを再開できる。それでも、どの物理コピーが通ったか、遅延がどこにあったか、損失が輻輳か並べ替えかは証明しない。

Karnが残したのはタイマーの小技以上のものだった。一つの証拠を、それが支える判断にだけ使う。TCPはACKを配送進展として信頼しながら、経過時間の帰属としては信頼しない。中央時計や架空の経路説明なしに、送信端が自分の推定を管理できた。

出典と限界

閉じた出典集合はRFC 793、RFC 1122、RFC 2988、RFC 6298、RFC 7323である。これらは意味と要件を示すが、現在の全実装の既定値や個別タイムアウトの原因は示さない。曖昧な標本が偶然正しいことはある。Karnの規則は、送信側に正しさを判定する根拠がないと言っている。