OSPFってなに？（CCNA第４回） 座学編


# OSPFってなに？（CCNA第４回） 座学編

## ルーティング
まず、このようなネットワークがあったとする。
![スクリーンショット 2024-09-03 0.04.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3847927/f1a71f37-a66e-50ef-c0a1-5dccc49fcb19.png)

### 今までは...
ルーター１つ１つに次の転送先のルーターのIPを入力していた。
![スクリーンショット 2024-09-03 0.04.42のコピー.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3847927/d8402613-1532-b2cd-e7f4-b1e44dc55c07.png)
もし上記の画像のようにルーティングが行われていた場合、PCから**4ルーター**を経由して目的のサーバーにアクセスすることになる。
![スクリーンショット 2024-09-03 0.04.42のコピー2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3847927/7906deb1-5277-c628-9963-a8aa6c09892f.png)

また、ルート内で障害が起きた場合、PCから**7ルーター**を経由して目的のサーバーにアクセスすることになる。
![スクリーンショット 2024-09-03 0.04.42のコピー6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3847927/e8815fb0-2c8e-907a-5701-2a82d72d1b59.png)

### OSPFだと...
OSPFの場合、**あらかじめルーティングを行う必要がなく**、ルーターのコスト計算によって自動で最短ルートが選択される。
![スクリーンショット 2024-09-02 184028のコピー2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3847927/3ac72f1b-6e58-d130-f1d4-1485e8a134ff.png)
また、ルート内で障害が起きた場合でも自動でコスト計算によって自動で最短ルートが選択される。
![スクリーンショット 2024-09-02 184028のコピー.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3847927/8c35c4af-8944-730f-c1fd-77c7d254d022.png)

## では、どうやって最短ルートを導いているのか？

### OSPFの基本動作

OSPFでは以下のやり取りをルーター間で行った後、コンバージェンス(有効化)になる。

1. Hello パケットを交換しネイバーを検出
2. ネイバーテーブルにネイバーを登録
3. 相互で認識し、LSDBの交換の準備
4. ルーター間でDBDパケットを交換
5. 詳細なLSA情報を交換する


> **ネイバーとは？**
ネイバーとは隣りとして認識したルーターのことを指す。
![スクリーンショット 2024-09-03 1.32.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3847927/264f47c0-4180-235f-ecf3-f985b9556392.png)

> **LSAとは？**
Link State Advertisement
IPアドレスなどのインターフェイス情報( Link State )を交換する。その情報のこと。

> **LSDBとは？**
Link State Database
各ルーターから収集したLSAを格納するためのデータベース。各ルーター間で共有される。

### Helloパケットとは？
Helloパケットは、隣接したルータの発見と生存確認のために送られる。
隣接したルータに対して自分の存在を知らせる。また定期的に送信され、それが途絶えると受信側のルーターで停止したと判断される。

マルチキャストアドレスは「224.0.0.5」が使われる。

また、Helloパケット送信時に、ネイバーの情報も一緒に送られる。

EIGRPやHSRPでも使われる。


## テーブルで見てみる

### 状態(ステート)遷移
| 状態 | 詳細 |
| -- | -- |
| Down | Helloパケットを受け取る前の初期状態 |
| Init | Helloパケットを受け取ったが、相手はまだ認識していない状態 |
| 2-Way | お互いに認識している状態 |
| Exstart | DBDパケットを交換するためマスタースレーブを選択している状態 |
| Exchange | DBDパケットを交換している状態 |
| Load | LSRパケットを送信し最新のLSAをLSUパケットとして取得している状態 |
| Full | 完全な隣接関係を築いた状態 |

### パケット
| パケット | 詳細 |
| -- | -- |
| Helloパケット | ネイバー発見と生存確認 |
| DBDパケット | LSDBの要約情報の送信 | 
| LSRパケット | LSDBの詳細情報問い合わせ | 
| LSUパケット | LSDBの更新。LSAの集合体がLSU | 
| LSAckパケット | LSUパケットの確認応答 | 

### パケット
| パケット | 詳細 |
| -- | -- |
| Helloパケット | ネイバー発見と生存確認 |
| DBDパケット | LSDBの要約情報の送信 | 
| LSRパケット | LSDBの詳細情報問い合わせ | 
| LSUパケット | LSDBの更新。LSAの集合体がLSU | 
| LSAckパケット | LSUパケットの確認応答 | 

### テーブル
| テーブル | 詳細 |
| -- | -- |
| ネイバーテーブル | 認識しているネイバーを登録する |
| トポロジテーブル(LSDB) | 収集したLSAを登録する。同じエリア内の全ルーターで同一の情報になる | 
| ルーティングテーブル | 最適なルート情報を登録 |

## 具体的な流れ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3847927/f798a9f0-cbbe-fb0b-39ce-c85a8329eff1.png)
このネットワーク上に、`1.1.1.1`が新しく追加されたとする。

### ステップ1
OSPFを動作させたルーターは、まずHelloパケットを全OSPFルーター宛(マルチキャストアドレス 224.0.0.5)に送信される。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3847927/23005d9d-f588-a4b9-16d5-a1a90e4468d7.png)
Helloパケットが返ってきたルーターをネイバーとして検出する。

### ステップ2
ネイバーとしてネイバーテーブルにお互いが登録する
![スライド3.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3847927/44a0afec-8990-3bbc-828b-0ea335cd014d.png)
![スライド5.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3847927/29b20f2d-4831-cff5-5042-32c3397c429e.png)

### ステップ3
お互いにシーケンス番号を交換し、master/slaveを決める
![スライド7.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3847927/6456421a-5578-b253-8bb1-e1c4bea26c11.png)
![スライド9.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3847927/2204b23a-7b47-b091-f63e-90018e457687.png)

### ステップ4
LSDBの要約情報を交換する
![スライド11.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3847927/b9bda954-5065-cc80-79cb-928e497f6a9b.png)
![スライド14.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3847927/abe54fc8-3044-3d3c-c5ac-7de090e3bd76.png)

### ステップ5
もし、知らない情報があれば詳細情報をもらう
![スライド15.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3847927/3bd07b2f-8c02-67db-cdb0-3efc2d5ef2e4.png)

### ステップ6
LSAckパケットで完了したことを知らせる
![スライド20.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3847927/8ea69e09-fe1d-b036-7a15-79b8806ea187.png)

### 2~6をネイバー分繰り返す

## Gifで理解する
![OSPF.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3847927/4356150a-2ddb-3d13-a774-bdfe4afe1fc9.gif)


## 互換性
RFCで標準仕様が規定。いろんなメーカー間で使用できる

# 参考文献
- 林口 裕志; 浦川 晃. シスコ技術者認定教科書 CCNA 完全合格テキスト＆問題集［対応試験］200 -301 (p.325). 株式会社 翔泳社. Kindle 版. 
- https://note.com/sato_manabi/n/nb179b5e60762