要約

  • RFC 1267 は接続の開始時に BGP 経路表全体を送り、その後は差分だけを送るため、各スピーカーに接続中の対向経路表を保持させた。
  • RFC 4271 は接続断を暗黙の撤回にした。RFC 4724 は、交渉済みアドレスファミリーの経路だけを stale として一時保持し、更新、End-of-RIB、期限切れで終える例外を設けた。
  • RFC 8538 は Hard Reset で完全初期化の境界を示し、RFC 9494 は長期保持に LLGR 表示、最低優先、伝播制限、ファミリー単位の明示設定を要求した。

接続の内側にだけ存在する履歴

RFC 1267 の BGP-3 は、毎回すべてを言い直すプロトコルではなかった。二つのスピーカーがトランスポート接続を確立し、開始メッセージを交換すると、最初のデータフローで BGP 経路表全体を送る。それ以降の UPDATE は変化分だけでよい。

差分を理解するには、その前の全体が必要になる。このため各スピーカーは、接続が続くあいだ、各ピアの経路表の現在版を保持しなければならなかった。これは通信量を減らす実装上の工夫であると同時に、メッセージの意味を成立させる状態条件だった。

保持期間には明確な端がある。KEEPALIVE は接続の生存を確かめ、エラーは NOTIFICATION と切断につながる。有限状態機械は接続に属する資源を解放し、再試行に向かう状態へ戻る。

したがって、保持表は恒久的な身元、所有権、認可ではない。一つの対話から受け取った制御入力である。TCP が生きていても全経路の正しさは証明されず、メモリーに行があっても転送表との一致やパケット到達は証明されない。

基本規則は切断を撤回として扱った

RFC 4271 は、ピアから受信した Adj-RIBs-In、ローカルに選択した Loc-RIB、送信準備をした Adj-RIBs-Out を概念上分離した。受信したこと、採用したこと、外へ知らせたことは別々の記録である。

経路をサービスから外す方法も三つに整理した。NLRI を明示撤回する、別の経路で置き換える、または BGP 接続を閉じる。接続が閉じれば、二者が互いに広告した経路はすべて暗黙に撤回される。

エラー処理では、その接続の Adj-RIB-In を消去し、ピアに依存する Loc-RIB の選択を無効にし、最良経路を再計算して、必要な撤回または代替を広告する。物理的な隣接装置が同時に消えたという意味ではない。接続固有の制御証拠を、基本規則の下では現行として扱えないという意味だ。

転送装置に古い結果が残ることはあり得る。しかしそれは別の層の事実であり、残像だけで失効した入力を再認証することはできない。

Graceful Restart は越境許可を交渉した

RFC 4724 は、BGP 制御面が再起動しても転送状態が残っているかもしれない場合に、TCP の終了と再確立をまたいだ一時保持を認めた。重要なのは「かもしれない」を既定値にしなかったことだ。Graceful Restart Capability を交換し、AFI/SAFI ごとに対象を決める。

Capability の対応、Restart State、Forwarding State は別の問いへの回答である。機構を理解していること、再起動中であること、あるファミリーの転送状態を保持したと表明することは同義ではない。どのビットもパケット結果までは保証しない。

受信側が保持できるのは交渉対象のファミリーだけで、経路には stale の印を付ける。この印は承認ではない。古い接続の経路を暫定利用しているという不確実性を、普通の現行経路から区別する。

出口は複数ある。Restart Time 内にセッションが戻らなければ削除する。新セッションで転送状態が肯定されない、ファミリーがない、Capability がない場合も直ちに削除する。新しい UPDATE が届けば一致する古い経路を置き換える。

そして End-of-RIB が初期更新の終端を確定する。経路が一つもないファミリーでも空の UPDATE を送れる。これは沈黙ではなく「ここで全部」という記録であり、到着後にまだ stale の経路は除去される。

この完了は制御面の交換に限られる。RFC 4724 は、一時的なループやブラックホール、IGP と BGP が同時に再起動して連続性が揃わない場合の効果低下を警告する。経路保持、転送保持、到達性、サービス回復を一つの結果にまとめてはいけない。

Hard Reset は例外を止める意思表示だった

NOTIFICATION を受けたすべての故障が優雅な保持に向くわけではない。RFC 8538 は N bit を追加し、双方が交換した場合に限って、NOTIFICATION 受信や Hold Time 満了にも Graceful Restart の意味を適用できるようにした。

同時に Cease/Hard Reset サブコードを定め、基本規則どおりの完全リセットを明示的に要求できるようにした。観測した障害理由と、過去の状態を残さない判断は別記録である。Hard Reset は根本原因を診断しないが、記憶の許可を取り消す。

RFC 8538 は stale 用の設定可能なタイマーを必須とし、180 秒を提案し、無限保持を既定にしてはならないとした。繰り返すリセットが、再確認されない状態を永続化する抜け道になってはいけない。

LLGR は長さに見合う警戒表示を加えた

RFC 9494 の Long-Lived Graceful Restart は通常の Restart Time を越えて保持する。helper は推移的な LLGR_STALE community を付け、NO_LLGR の経路を除外する。長期 stale 経路は最も低い優先度となり、通常は LLGR 非対応ピアへ広告しない。

Long-Lived Stale Time は AFI/SAFI ごとで、ローカルに短くできる。各ファミリーで肯定的な設定が必要で、既定で有効にしてはならない。長い時間は可用性の無償追加ではなく、管理者が引き受ける露出だからである。

仕様は、通常の到達性に長期 stale 経路を使うと接続性を失い得ると警告する。最低優先は代替があるときの選択規則にすぎない。伝播制限も、次ホップ、現行ポリシー、転送の安全を証明しない。

情報源