要約

  • RFC 3366は、リンク層ARQの持続性を、あきらめるまでにフレームの回復へ費やす時間の予算として扱った。信頼性が無料で増えるという話ではない。
  • 再送は一つのフローを助ける一方、経路全体の遅延、ジッター、後続パケットの滞留を増やすことがある。フレームACKは、アプリケーションへの時間内の配送を証明しない。

フレームはパケット全体ではない

話はIPより下の層から始まる。自動再送要求(Automatic Repeat reQuest、ARQ)は、欠落または破損したリンクフレームを検出し、再送する。リンクの方式によって、フレームはIPパケットの一部、パケット全体、あるいは複数のパケットの断片を運ぶ。リンクACKが答えるのは、「このリンクプロトコルの条件でフレームを受理したか」という狭い問いだ。パケットが端から端まで届いたことも、アプリケーションがまだ使える時刻に届いたことも保証しない。

Best Current Practice 62として公開されたRFC 3366は、この境界を設計者に意識させた。特定の無線方式を定義したり、試行回数を一律に命じたりする文書ではない。リンク内の回復ループが、その上を流れるインターネット通信にどう作用するかを説明する。

再送予算が使うのは共有された時間

RFCは、再試行を続ける意欲を「持続性」と呼ぶ。リンクは試行回数を固定できるし、タイマーやリンク障害の判定で打ち切りを決めることもできる。回数は時計ではない。伝搬時間、共有媒体でのバックオフ、キュー、フレーム長、処理が経過時間を左右する。

だから信頼性には条件が付く。ローカルなリンク制御ループはTCPの端から端までのループより速く、送信側が再送する前にチャネルエラーを直すことがある。だが、回復したフレームの到着が遅れて、トランスポートのタイマーに影響する場合もある。順序を保つリンクでは、まだ再送中のフレームの後ろで、すでに完全に受信したパケットが止まることがある。共有チャネルでは、その試行が他のノードの送信時間も消費する。

「完全な持続性」は対比を明確にする。受信側がまだフレームを受け取れる可能性があれば、無期限に再送し続ける。確実な配送が目的の転送なら有用かもしれない。しかし複数リンクを通る経路では、何度もの回復が端点間の機能と重複しうる。端末間トランスポートと同じ信頼性を保証するものでもない。ストリーミングなど時間に敏感なUDP通信では、遅れて届くパケットが、欠落したパケットより役に立たないこともある。

リンクが安全に分かること、推測すべきでないこと

「信頼性が必要そうな」通信だけ再送を長くする発想は自然に見える。RFC 3366は、観測だけでは不十分だと説明する。リンクは輻輳制御の挙動を見ても、アプリケーションの締切や、完全性と新しさのどちらが重要かを知らないかもしれない。ポート番号は誤解を招き、アドレス変換で変更されることもある。トンネルは異なるフローを一つにまとめ、暗号化は内容の検査を妨げ、サービス標識は上書きされたり、ローカルな意味しか持たなかったりする。

したがって勧告は条件付きだ。サービスクラスを安全に識別できるなら、異なる再送方針が役立つことがある。できなければ全フローが同じリンク挙動を受ける。安全な分類が困難なリンクでは、BCPは概して低い持続性を勧める。一つの未完了パケットが後続をいつまでも塞がないようにしつつ、回復できるフレームは回復する。文書は例外も残す。エラー率が大きく変わる条件や一時的な停止からの復旧では、高い持続性がTCPに有利な場合がある。万能の設定はない。

2004年のRFC 3819は、より広いサブネット設計の指針として、損失、平均遅延、遅延の変動という三つのコストの関係に議論を広げた。そこでも柔軟性が重視されるが、RFC 3366の「2〜5回」という例が現代の一律ルールや導入実態の計測に変わるわけではない。

ACKはリンク内の受領証

RFC 3366の教訓は性能だけでなく、証拠の層にもある。フレームACKが記録するのはローカルな出来事だ。パケットがリンクを出たこと、トランスポートがデータを受け入れたこと、アプリケーションが間に合う時刻に受け取ったことは後続の別々の出来事であり、それぞれに証拠が要る。再送はチャネル起因の損失を減らす一方、ジッターを増やし、輻輳情報を遅らせ、他フローの時間を奪うことがある。

設計者が決めるのはローカルな予算で、その影響は経路全体に積み重なる。経路の残りやアプリケーションの鮮度要件を知らない装置が、「試行を増やす」ことを「サービス改善」の保証に変えることはできない。BCP 62は、その不確実さを信頼性というラベルの下に隠さず、設計に含めるよう求めた。

出典

Lu HengはRFC 3366の著者ではない。これらのエッセイは、勧告、稼働中の実装、設定、観測結果を分けるための分析視点として明示している。