要約

  • RFC 1644のTAOは、最初のSYNに入ったCCをクライアントごとの保存値と比較した。大きければ新しい接続と判断し、通常の3ウェイハンドシェイク完了前にデータをプロセスへ渡した。
  • CC.NEWは再起動やカウント周回で連続性を信用できないことを示し、キャッシュを無効化して通常確認へ戻した。CC.ECHOはSYN/ACKを今回の開始値に結び付けた。
  • 境界は古いトランスポート複製までで、主体の認証やアプリのコミットではない。RFC 6247は普及不足と報告された安全上の問題を踏まえT/TCPをHistoricにした。

先に動いたのは受信側の台帳だった

RFC 1644は、短い要求・応答向けのExperimentalなTCP拡張である。クライアントは32ビットのconnection countと要求データを最初のSYNに載せ、サーバーは相手ホストから最後に受け入れた値を保存した。

新しい値が保存値を上回ればTAOが成功し、サーバーはキャッシュを更新してデータをユーザープロセスへ渡す。上回らなければ、古い複製か順序逆転かを判別できないため、通常の3ウェイハンドシェイクでSYNを検証した。

この判定が確認するのは、二つのカウントの局所的な順序である。単調増加が保たれ、キャッシュの寿命と相手の対応付けが正しいことに依存する。相手の組織やユーザー、処理の正当性までは確認しない。

クライアントが再起動した場合、古い連続性を装わないためにCC.NEWを送る。サーバーは項目を消し、完全なハンドシェイクを要求する。応答側のCC.ECHOは、SYN/ACKに最初のCCを写してクライアントに照合させる。これは交換の対応関係であり、暗号的本人確認ではない。

トランスポートの一回性と業務の一回性

RFC 1644はat-most-onceを掲げた一方、「transaction」をアプリケーションの多段コミットとは区別した。最小交換も三つのセグメントを必要とした。

データがプロセスへ届いても、解析、権限確認、永続書き込み、下流処理、応答生成は別々に失敗し得る。クライアントが応答を失ったとき、未到着、到着後の拒否、実行後の応答喪失をCCだけでは区別できない。

不可逆な命令には、アプリケーション固有の操作ID、永続的な重複排除と結果受領証が要る。パケットの古い複製を抑えるキャッシュは、業務完了の権限を持たない。

また、現在の仕組みとして描いてはならない。RFC 6247は2011年にRFC 1644をHistoricへ移し、広範な利用がなく安全上の問題も報告されたとした。現在のTCP基準はRFC 9293である。

TIME-WAIT短縮にも期限があった

CCは短い接続の新旧を区別し、TIME-WAITを縮める材料にもなった。しかし接続が最大セグメント寿命を超えれば通常の待ち時間が必要で、前提が崩れれば標準TCPへ戻る設計だった。

一つの局所テストが許すのは一つの遷移だけである。実行、本人性、経路、現在の配備まで同じ証拠から推論してはならない。

資料と限界

これらは現在の配備、認証済み本人性、アプリケーションの正確な一回実行を証明しない。