要約
- grace-LSAはbounded grace periodとrestart reasonを示す依頼である。隣接はlocal policyにより拒否、時間制限、理由制限を選べるため、受信や送信だけではhelper acceptanceにならない。
- 各segmentの判断と終了理由に加え、LSA IDとprefix、Interface IDと実体interfaceの対応、保持FIBとpacket結果を結び付けて初めて継続性を説明できる。
変更記録には「grace-LSA送信成功」とあり、オーケストレーターは全隣接がhelperになったと表示した。実際には一台が、upgrade以外を助けないlocal policyによって要求を拒否していた。
再起動が始まると、その隣接は通常どおり関係を落とした。他のsegmentはhelperを続けた。単一の緑色ステータスは、異なるローカル判断を一つの架空の合意へ変えていた。
要求と受理の境界
RFC 5187はOSPFv2のRFC 3623をOSPFv3へ適用する。再起動ルーターはlink-local scopeのgrace-LSAを発行し、指定期間だけFULLとして広告を続けるよう求める。LS typeは0x000b、function codeは11である。
必須TLVはgrace periodとreasonであり、理由はunknown、software restart、reload/upgrade、redundant control processorへの切替である。Link State IDは送信interfaceのInterface IDとなる。OSPFv3は全linkでRouter IDによりneighborを識別するため、OSPFv2のrouter-address TLVは不要である。
しかし要求は分散した権限を消さない。neighborはhelperを常に拒否でき、最大時間を制限し、理由を選び、自身のrestart中は拒める。helping relationshipはsegment単位である。
acceptanceを観測可能なobjectにする
必要な記録は、送信時刻だけではない。neighbor Router ID、interface、受信したgrace-LSAのageとsequence、local policy version、accept/reject、実効deadline、helper開始時刻、終了時刻と理由を保存する。
同じrouterが複数segmentで異なる結果を持ち得る。aggregate statusは、その集合から導出されなければならない。一つでも拒否があり、そこを通る転送が重要なら「一部保護」を「graceful」と短縮してはいけない。
この境界は高速な自動化と矛盾しない。判断をローカルに残したまま、その判断をreceiptとして共有すればよい。
helperは前提が崩れれば退出する
graceful restartはtopologyが安定し、restart前のforwarding tableが保持されるときに安全である。helperは成功、grace period expiry、または関連topology changeで終了する。strict LSA checkingはさらに保守的な退出を選べる。
退出は協調の失敗ではない。restart中のrouterが保持FIBを迅速に修正できないとき、通常OSPF convergenceへ戻す安全弁である。元のtimerが残っていても、helper authorityはすでに終わっている。
dashboardは各helperの状態を追跡し、最後に送ったgrace periodを唯一の真実にしてはならない。
LSA IDはprefixとの対応を保つ
OSPFv3のinter-area-prefixおよびexternal LSA IDは、prefixそのものではなく32-bit integerである。RFC 5187はrestartをまたいでID-to-prefix correspondenceを保存するようMUSTで要求する。
同じIDが別prefixを指せば、数字は継続しても意味は変わる。同じprefixが別IDになれば、不要なchurnを起こす。IDの集合や件数だけでなく、完全なkey-value mapを比較する必要がある。
Interface IDも隣接状態の意味を固定する
Link-LSA、Network-LSA、Router-LSAのlink descriptionはInterface IDに依存する。restartで変わるとpre-restart LSAとneighbor adjacency stateが一致せず、graceful restartは早期終了する。
多くの実装はIfIndexを利用する。interface labelが同じでも再初期化後の値が同じとは限らない。physical port、ifName、IfIndex、OSPF Interface ID、link-local address、neighbor Router IDをbefore/afterで保存する。
RFCが再起動側に保存責任を置くのは、neighbors間で変化を同期するよりrobust、deterministic、simpleだからである。小さな共通仕様が将来の実装判断を局所化している。
forwarding continuityは別の証拠
planned restartでは事前にFIBがcurrentで保持可能と確かめる。unplanned crashにはその準備がない。いずれもFULL広告だけでpacket deliveryを証明できない。
FIB fingerprint、next-hop reachability、interface counter、active probe、loss、pathを保存する。保持tableが古いnext hopを向いている場合、完全に保存されたこと自体が正しさを改善しない。
本篇の中心は一般的な「保存状態は真実ではない」ではない。OSPFv3固有の二つのsemantic mapと、helper受理という分散判断が、保存状態を同じobjectへ結び付ける条件である。
replayはfreshnessを問い直す
古いLink-Update内のgrace-LSAをreplayすれば、停止したrouterをrestart中に見せられる可能性がある。RFC 5187は、Hello replayの方がadjacencyを維持しやすいと説明し、新しいsecurity categoryとはしていない。
正確な運用判断は、リスクを誇張も消去もしない。authentication、sequence、age、anti-replayと実際のneighbor/forwarding observationを別々に残す。
受理を推測しないreceipt
change ID、planned/unplanned、buildとprocessor、Router ID、grace-LSA、reason、period、全helperのpolicy/decision/exit、FIB、packet、LSA-ID/prefix map、port/IfIndex/Interface-ID map、adjacency、LSDB/RIB/FIB、topology change、security、fallback、rollbackを保存する。
Heng Luのreality layersで考えると、送信済みmessageはsymbolic action、helper acceptanceは別主体のdecision、FIBはrunning code、packetはoutcomeである。Grace-LSAを受理へ昇格させないことが、分散制御のclarityを守る。
情報源
- RFC 5187 HTML
- RFC 5187 text
- RFC Editor情報
- IETF Datatracker
- 履歴
- 参照
- RFC 5187 errata
- RFC 3623 Graceful OSPF Restart
- RFC 3623情報
- RFC 5340 OSPFv3
- RFC 5340情報
- RFC 2740 初期OSPFv3
- RFC 2863 Interfaces Group MIB
- RFC 1213 MIB-II
- RFC 4552 OSPFv3認証
- RFC 7166 Authentication Trailer
- IANA OSPFv3 Parameters
- Heng Lu:現実の層
- Heng Lu:最小仕様と自発的採用
- Heng Lu:稼働コードの優先
会員向け解説
プロフィールの詳細
適切な会員レベルでログインすると、解説全文と出典メモをご覧いただけます。
Strategic Circle 限定
Strategic Circle
すべての読者に公開されています。参加してログインすると プロフィール解説 を閲覧できます。
Strategic Circle に参加Leadership Alliance 会員限定
Leadership Alliance
対象となる IP 資産の所有者・管理者向けです。ログインすると Leadership Alliance の解説を閲覧できます。
Leadership Alliance に参加
