CCNA　OSPF

今回はルーティングプロトコルのOSPFについて書いていこうと思います。

OSPFは何かと言うとOpen Shortest Path Firstの略で、
接続情報を交換し合い、その中で最適な経路を計算するルーティングプロトコルになります。

ルート情報が行き渡ることをコンバージェンスと言って、
まずはどのようにコンバージェンスができるかを見ていきましょう。

※アウトプットなので、画像は貼っていません。文字のみの説明になります。

STEP1 ネイバーを検出します。

ネイバーと言って、隣接するルータを探します。
仮に2つのルータがあるとします。どちらも初期状態はDownの状態です。
この状態からネイバーかどうか確認します。
まず、Helloパケットを送信します。これはネイバーの発見と生存確認に使われます。
この中にはネイバーテーブルの情報が含まれます。

STEP２ ネイバーテーブルにネイバーを登録します。

先程Helloパケットを受け取ったルータはルータIDを登録して、init状態に変わります。
これはネイバーを認識したが、相手は分かっていない状態です。
そして、Helloパケットを送り返します。そのパケットの中には
相手のルータIDが載ったネイバーテーブルが含まれています。
そのパケットを受け取ったルータはお互いに知っている状態だと分かります。
これだと2-Way状態になります。
もう一度Helloパケットを送り返すことで、お互いに2-Wayの状態になります。

STEP3　相互確認後、LSDB(Link State Data Base)の交換準備をします。

LSDBの説明をDBD(Data Base Description)と言いますが、
これを送る前の準備に入ります。この状態をExstartになります。
そして、マスターとスレーブを決めるためにDBDのmasterを送ります。
これはどっちが主かを確認している状態です。
どっちがマスターになるかと言うとルータIDが高い方がマスターになります。
マスターとスレーブが決まると実際にDBDを交換してLSDBを同調する段階になります。
この状態をExchangeと言います。

STEP4　ルータ間でDBDパケットを交換する。

マスターからスレーブにスレーブからマスターにDBD(LSDB要約)を送ります。
しかし、片方から送られてきたDBDの情報を片方が知らなかった時、
最新の情報をもらう必要があります。
その時はLoarding状態になります。

STEP5　詳細なLSA(Link State Advertisement)情報を交換する。

LSAは様々なリンクの情報のことを言います。
では、STEP4の知らない方が知っている方にLSR(Link State Request)、つまり新しい
LSAをくださいと要求します。
次にLSRを受け取ったルータはLSU(Link State Update)で最新の情報を
送り返します。これを受け取ったルータは最後に確認しましたよと
LSAck(Link State Acknowledgement)を返します。
この状態が終わると完全な隣接関係ができるので、
お互いにfullの状態になります。これがコンバージェンスです。

その後は30分ごとにhelloパケットを送り、Downしていないか確認して、
LSDBの同期が行われます。

**最適ルートの選択とルートの変更**

最適なルートを決めるために使われるメトリックは帯域幅になります。
これは10Mbpsなら10、100Mbpsなら1、1Gbpsなら1になります。
合計コストはあくまでパケットを送出するインターフェイスにしましょう。
もし、最適ルートが複数あった時はデフォルトで4つまで登録できて、
トラフィックは分散して送られることができます。
これを等コストロードバランシングと言います。

**マルチアクセス**

LSUを30分毎に送り合いますが、隣接しているルータ全てと交換するので
トラフィックの量が多くなります。これをマルチアクセスと言います。
そこを防ぐためにDR(Designated Router)、BDR(Backup Designated Router)を
セグメント毎に選出します。
このDRが隣接関係からLSAを収集し、全ルータへ送信する。
それ以外はDROtherと言い、2-Wayステートのままである。

**DRとBDRの選出方法**

ではどうやってDRやBDRを選出するのでしょうか。
① ルータプライオリティを確認します。
これはルータのインターフェースに設定できます。(0~255)
デフォルトは1で、0だとDRやDBRには選出されない。
最も大きいのがDR、次に大きいのがDBRになります。
② ルータIDを確認する。
ルータIDはルータを識別する一意の値です。
その後の順番は
1.router-idコマンドによる手動設定
2.有効なループバックインターフェイスのうち最大のIPアドレス
3.有効な物理インターフェイスのうち最大のIPアドレス
※ループバックインターフェイスとは自身のアドレスのことを言います。

パケットの流れはまずはDRに投げられて、その後に全体に
投げられます。

**ネットワークのタイプの違い**

トポロジによって今までのことができる時とできない時があります。
まず、マルチキャストでは無い時、ポイントツーマルチポイントやポイントツーポイント
ポイントツーマルチポイントだとDRやBDRは必要ありません。
あくまで、DRやBDRはマルチアクセスの時に使うのです。
Helloパケットはブロードキャストができるときに隣接ルーターに
送ります。なので、Non Broadcastの時は検出できません。
また、ブロードキャストとポイントツーポイントはHelloインターバルが10秒で、
Deadインターバルが40sです。その他は３０秒と120秒です。
1:4の関係と思って下さい。
ちなみにHelloインターバルはHelloパケットを送る間隔で、
Deadインターバルはネイバーがダウンしたとみなす時間です。

**エリア分割**

1つのエリアだけでOSPFを作動させることをシングルエリアOSPF、複数のエリアに
分けることをマルチエリアOSPFと言います。1つのエリアに100台のルータがあると
それぞれのルータが100台分のLSAを持つことになります。
なので、マルチエリアOSPFがメリットとしてあります。
必ずバックボーンエリア(エリア番号0)を作成します。各エリアがバックボーンエリアに
接するように作成します。
同一エリア内では詳細なトポロジを把握するが、
他のエリアに関してはルート情報のみを保持する。
いくつか覚えておくべき言葉を書いていきます。
他のエリアに一切接していないルータを内部ルータ、1つ以上のインターフェイスが
バックボーンエリアに属しているルータをバックボーンルータと言い、
複数のエリアにまたがっているルータをABR(Area Border Router)、
他のASを跨いでいるルータをASBR(Autonomous System Boundary Router)があります。

**OSPFコマンド**

次はOSPFの設定コマンドを学習していきましょう。
まずは、インターフェイスでOSPFを有効化する必要があります。
その方法は2種類あります。
ネットワークcommandからいきましょう。

(router)# router ospf 14
(config-router)#network 192.168.1.0 0.0.0.255 area0
(config-router)#network 192.168.2.0 0.0.0.255 area1

上記のようにルータ全体に設定します。まずはコンフィグモードで
router ospf プロセス番号を入力します。
その次、network IPアドレス　ワイルドカードマスク　エリアで設定します。

もう一つはコンフィギュレーションモードで設定します。
対象のインターフェイスに入ります。
その後にip ospf プロセス番号　エリアで設定をします。

ネイバー関係を見たい時はshow ip ospf neighborを使います。

次は設定後にIPルートを見るときはどうなるか見てみましょう。
show ip routeを入力します。これは特権モードで大丈夫です。
すると　O IAと出ている部分があります。
これはOSPFによって学習しているエリアにことを言っています。[AD値/コスト]も
書いています。

最後はインターフェイスの情報を確認するコマンドです。
show ip ospf interfaceを使います。
ネイバー関係を確立させるために一致させる情報はこれです。
・　Hello/Deadの間隔
・　エリアID
・　サブネットマスク
この辺りは確認しましょう。

その他のコマンドも紹介しておきます。

● デフォルトルートの配布
default-information originate always
これを使うことで何かあれば私のところに送って下さいねと指示を与えることができます。

● パッシブインターフェイスの設定
router ospf プロセスID
passive-interface インターフェイス
これにより設定できますが、これはアップデート情報を流す必要がない時に使います。

● ルータIDの設定
router-id 1.1.1.1

● ネットワークタイプの変更
ip ospf network [point-to-point|broadcast]で設定ができます。