OSPF

いろいろなルータ

  • ルータID
    • ルータの識別子(デフォルトでは自IPアドレスの中で最大のものを採用
  • 隣接ルータ(neighbor)
    • ルーティング情報を交換する候補(最大2台だけど基本的にDRとのみ交換).この中からDRとBDRを選ぶ
  • 指名ルータ(DR)
    • 他のネットワークとも隣接関係作る代表.副代表がBDR
    • priority値の大きい方がDRに.同じならルータIDの大きい方がDR
    • ※主に起動順に左右されるのでDRにしたいものがあれば先に起動させる必要あり
  • 内部ルータ
    • 接続しているネットワークがどれも同じエリアにあるルータ
  • エリア境界ルータ(ABR)
    • 複数のエリアにまたがってるルータ
  • AS境界ルータ(ASBR)
    • 複数のASにまたがってるルータ.異なるルーティングまたぐときとかも

いろいろなパケット

  • Helloパケット
    • 隣接ルータを探したり確立したり維持したりする
  • DDパケット
    • データベース記述パケット.複数のLSAを含む
  • LSRパケット
    • リンク状態要求パケット.隣接ルータに送ってリンク状態を送ってもらう
  • LSUパケット
    • リンク状態更新パケット.LSRに対する応答.複数のLSAを含む
  • LSA(リンク状態広告)
    • ルータLSA:ルータが属しているネットワークを表す.エリア毎に独立.各OSPFルータが告知
    • ネットワークLSA:ネットワークに属しているルータを表す.エリア毎に独立.指名ルータがエリア内に告知
    • サマリーLSA(2種類有):エリアに属しているネットワークを表す.エリア境界ルータがエリア外に告知
    • AS外部LSA(2種類有):AS外部へのルートを表す.エリア境界がエリア内に告知.デフォルトルートの告知にも使用

おおまかな流れ

起動時
  1. 起動したルータがHelloパケットをマルチキャスト(224.0.0.5)で送信して隣接ルータを探す
  2. 隣接ルータが起動したルータを確認してHelloパケットを送信
  3. 隣接ルータとDDパケットを交換してデータベース情報(LSA)を交換
  4. LSRパケットとLSUパケットを交換してデータベースを同期(これが終わった段階で完全隣接関係になる
  5. データベースを基に自分を起点としたSPTを作成してルーティングに反映する
安定状態時
  • 各ルータが定期的にHelloパケットを送信(hello interval: default 10s)
  • 隣接ルータからhelloが一定時間内にhelloが来なければdownしたとみなす(dead interval: default 40s)
  • 定期的に自身のLSAを広告(LS refresh: default 10s)

※各default値はブロードキャストネットワーク時のもの.ネットワークのタイプによって異なる

何らかの変化を検知したとき
  • 検知したルータがその変化を隣接ルータに報告

いろいろなエリア

  • エリア
    • 管理しやすいようにinternetを分割
    • エリア内のルータはすべて同じデータベースを保持
  • バックボーンエリア
    • エリア0(0.0.0.0)
    • 他エリアは必ずこのバックボーンと接続する
    • またぐようならvirtual linkを使って実現
  • 標準エリア
    • 全てのLSAが通知される
  • スタブエリア
    • 外部ルート(他プロトコル動作の)はデフォルトルートとしてだけ通知されるのでルーティングテーブルが小さくなる
    • ASBRは置けない
  • 準スタブエリア(NSSA)
    • 外部ルートを流し込む(flooding)ことで直接つなぐことができる.
    • なのでASBRを置ける

設計上の注意?

  • リンク数は多すぎにならないように
  • ルータIDは必ずユニークに
  • DR役が集中しないようにpriorityとか使ってうまく分散させる
  • 経路数を減らすためにアドレスを計画的に割り振って集約する