要約
- 従来の HoldTimer が測るのは、隣接者から適格な BGP メッセージを最後に受け取った時刻である。逆方向の UPDATE、撤回、KEEPALIVE がすべて詰まっていても更新され続ける場合がある。
- RFC 9687 は局所設定の SendHoldTimer を追加する。設定時間に BGP メッセージを一つも送信できなければ、理由を記録し、BGP 資源と TCP を解放して Idle に戻る。
- 安全な導入には、生成・送信進捗・相手の処理・実転送を分けた証拠、ネゴシエートした HoldTime より長い値、再接続の反復を抑える設計が必要である。
境界ルータは障害経路の撤回を生成し、代替経路を選んだ。ところが相手は三十秒ごとに KEEPALIVE を送り続けるため、通常の HoldTimer は切れない。相手の BGP プロセスは受信ストリームを読まず、ローカル送信キューだけが伸びる。最後に相手へ届いた古い広告が、最新の判断より長く効力を持つ。
問題は経路選択ではない。選んだ事実を共有できないのに、セッション状態だけが共有を装うことにある。
一本の TCP 接続に二つの状態がある
TCP は双方向のバイトストリームだが、両方向の進捗を同時には保証しない。RFC 9687 の代表例は、相手の受信ウィンドウがゼロになる状況である。相手はローカル側へ BGP を送信し続けられる一方、こちらからのバイトは受け入れない。過負荷、読み取りスレッドの停止、内部キュー障害も同じ非対称性を作る。
RFC 4271 の HoldTimer は受信側の証拠である。UPDATE や KEEPALIVE が届くと再始動する。それは相手が何かを送った証明だが、こちらの撤回を相手が処理した証明ではない。UPDATE の生成は送信ではなく、カーネルバッファへの書き込みは遠端の読み取りではなく、TCP Established は BGP アプリケーションの健全性ではない。
撤回が詰まれば、相手は既に無効な経路へトラフィックを送る。したがって重要なのは最後の受信時刻だけでなく、最後に BGP メッセージを送信できた時刻である。
RFC 9687 が閉鎖判断を局所化する
RFC 9687 は SendHoldTime、SendHoldTimer、イベント 29 SendHoldTimer_Expires を状態機械に加える。SendHoldTime はピアごとの局所方針で、能力としてネゴシエートしない。相手が機能を知らなくても、送信不能を観測した側が自分のセッションを守れる。
OpenConfirm から Established に入る際、値がゼロでなければタイマーを開始する。BGP メッセージを正常に送信するたびに再始動し、Established を離れると停止する。SendHoldTime またはネゴシエートされた HoldTime がゼロの場合も停止する。非ゼロの SendHoldTime は HoldTime より大きくなければならない。
RFC は既定での有効化を推奨し、八分と HoldTime の二倍の大きい方を既定値として示す。しかしこれは全ピア共通の正解ではない。ルートサーバ、リフレクタ、トランジット、資源の乏しい装置では負荷とリセット費用が異なる。
満了時には Send Hold Timer Expired を記録し、BGP 資源を解放し、TCP を切断し、再試行状態を更新して Idle に移る。NOTIFICATION は終了処理を遅らせない場合にだけ試せる。IANA のエラーコードは 8、サブコードは 0 である。まさに送信不能が原因なので、遠端の受信記録ではなくローカル記録が一次証拠になる。
異なる検出器の不一致を残す
HoldTimer は BGP 受信、SendHoldTimer は BGP 送信進捗、BFD は転送経路の連続性、TCP の再送や keepalive は輸送状態を問う。BFD と TCP が正常で、入ってくる KEEPALIVE が HoldTimer を更新していても、SendHoldTimer は満了できる。
この不一致が診断である。監視は、ローカル受信、ローカル送信、遠端の経路処理、データ面転送を別々に保存すべきだ。SendHoldTimer はすべての BGP ゾンビや古い経路を検出せず、転送障害も証明しない。持続的な送信不能に待機上限を与えるだけである。
修復リセットには副作用がある
セッションを落とせば、学習経路が無効になり、最良経路再計算、FIB 更新、代替広告が走る。再接続ではフルテーブル転送も起こり得る。多数のピアを持つリフレクタやルートサーバで同時満了が起きれば、収束波になる。
値が短すぎると、一時的なスケジューリング遅延やバックプレッシャーを不要な切断へ変える。相手の読み取り能力が戻らなければ、再接続とフルテーブルがさらに負荷を加え、リセットが周期化する。長すぎれば、古い経路の権限が延命する。
HoldTime の制約に加え、実測したキュー遅延、保守停止、UPDATE バースト、CPU、経路量、再試行費用で値を決める。ピア種別ごとに余裕を変えるべきだ。振動抑制は再試行を遅らせられるが、容量不足や停止した読み取りを直さない。
正しいカナリアは下位経路を残す
インターフェースを抜く試験では BFD や HoldTimer が先に働く。必要なのは、転送経路と入ってくる BGP を維持しながら、遠端の受信処理だけを制御して止める試験である。
BIRD 3.3.0 は試験用 disable rx を説明し、本番利用を明確に警告する。隔離ラボでこれを使うなら、事前にビルド、HoldTime、SendHoldTime、タイマーと通常キューを記録する。障害中は KEEPALIVE の継続、最後の送信時刻の停止、送信キューまたはゼロウィンドウ、制御された撤回の滞留を証明する。
満了時に原因、時刻、NOTIFICATION の試行、TCP 閉鎖、Idle 遷移を取得する。解除後は再接続ループがなく、経路、FIB、実パケットが回復したことを確認する。FRRouting の対応一覧や BIRD の設定項目は製品の主張であり、展開中のバイナリの挙動は実験で確かめる。
切断権限と証拠の所有者を一致させる
重要な相互接続を切る主体は、最後に生成したメッセージ、最後の成功送信、キューの年齢と深さ、TCP ウィンドウ、再送、受信時刻、タイマー履歴、最終理由を保持すべきだ。どの撤回が止まり、相手の古い見え方が何分続き、復旧後どう収束したかも必要である。
情報はデーモン、OS、コレクタ、相手のポータル、NOC に分散する。実務上のデータ主権とは、それらを結合し、保存し、判断に使えることだ。証拠なき権限は恣意的で、権限なき証拠は経路を直せない。
会員向け解説
プロフィールの詳細
適切な会員レベルでログインすると、解説全文と出典メモをご覧いただけます。
Strategic Circle 限定
Strategic Circle
すべての読者に公開されています。参加してログインすると プロフィール解説 を閲覧できます。
Strategic Circle に参加Leadership Alliance 会員限定
Leadership Alliance
対象となる IP 資産の所有者・管理者向けです。ログインすると Leadership Alliance の解説を閲覧できます。
Leadership Alliance に参加