OSPF

OSPF ( Open Shortest Path First )とは

OSPFとは

OSPFとはダイナミックルーティングのプロトコルの一つです。ダイナミックルーティングは大きく2つにわけることが出来ます。ディスタンスベクタ型(RIP)、リンクステート型(OSPF、IS-IS)があります。OSPFはリンクステート型のダイナミックルーティングプロトコルになります。

今回紹介しているIPv4で利用するOSPFv2を紹介します。IPv6はOSPFv2機能を拡張したOSPFv3が利用されています。

ディスタンスベクタ型(RIP)

ディスタンスベクタ型のRIPは最大ホップ数に制限があり、ルーティング情報を常に交換し非効率、また障害が発生した際の経路収束も遅いプロトコルです。
RIPでは受信したルーティングにHop数を追加し、さらに自身のルーティング情報を追加し隣接に情報伝達を30秒単位で実施しています。30秒単位で情報を伝達する仕組みのため、経路収束に時間がかかります。

R1 RIP ルーティングテーブル

R1#show ip route rip
      2.0.0.0/32 is subnetted, 1 subnets
R        2.2.2.2 [120/1] via 192.168.12.2, 00:00:08, GigabitEthernet0/1
      3.0.0.0/32 is subnetted, 1 subnets
R        3.3.3.3 [120/2] via 192.168.12.2, 00:00:08, GigabitEthernet0/1
R     192.168.23.0/24 [120/1] via 192.168.12.2, 00:00:08, GigabitEthernet0/1
R1#

R2 RIP ルーティングテーブル

R2#show ip route rip
      1.0.0.0/32 is subnetted, 1 subnets
R        1.1.1.1 [120/1] via 192.168.12.1, 00:00:17, GigabitEthernet0/1
      3.0.0.0/32 is subnetted, 1 subnets
R        3.3.3.3 [120/1] via 192.168.23.3, 00:00:28, GigabitEthernet0/2
R2#

R3 RIP ルーティングテーブル

R3#show ip route rip
      1.0.0.0/32 is subnetted, 1 subnets
R        1.1.1.1 [120/2] via 192.168.23.2, 00:00:05, GigabitEthernet0/1
      2.0.0.0/32 is subnetted, 1 subnets
R        2.2.2.2 [120/1] via 192.168.23.2, 00:00:05, GigabitEthernet0/1
R     192.168.12.0/24 [120/1] via 192.168.23.2, 00:00:05, GigabitEthernet0/1
R3#

R1〜R2間RIP パケットキャプチャファイル  

リンクステート型(OSPF)

neighbor(隣接関係)を確立する。


OSPFのHello間隔時間はNETWORK Typeで異なりますが、10秒もしくは30秒毎にhelloパケットを送信することでneighbor関係を維持します。
R1 OSPF neighbor

R1#show ip ospf neighbor

Neighbor ID     Pri   State           Dead Time   Address         Interface
2.2.2.2           0   FULL/  -        00:00:39    192.168.12.2    GigabitEthernet0/1
R1#

R2 OSPF neighbor

R2#show ip ospf neighbor

Neighbor ID     Pri   State           Dead Time   Address         Interface
3.3.3.3           0   FULL/  -        00:00:32    192.168.23.3    GigabitEthernet0/2
1.1.1.1           0   FULL/  -        00:00:36    192.168.12.1    GigabitEthernet0/1
R2#

R3 OSPF neighbor

R3#show ip ospf neighbor

Neighbor ID     Pri   State           Dead Time   Address         Interface
2.2.2.2           0   FULL/  -        00:00:35    192.168.23.2    GigabitEthernet0/1
R3#

※今回はLSAの数を減らすためにルータ間のOSPFのNetwork Typeは POINT_TO_POINTで設定しています。

LSA交換によるデータベース同期


neighborを確立すると保持しているLSA(Link State Advertisement)情報を交換し、自身が保持していないLSAを要求し取得することで、LSAを同期します。

下記がR1〜R2間でパケットキャプチャしたパケット一部です。R1がLSA Type1 で 1.1.1.1/32 および19.168.12.0/24 のLinkを持っていてる情報を送信しています。このようなLSAを互いに交換します。※今回はLSAの数を減らすためにルータ間のOSPFのNetwork Typeは POINT_TO_POINTで設定およびコスト1を設定しています。
一度交換すると以降は30分間隔で同期を行います。ただし障害などトポロジーが変化があれば即時にLSAをアップデートして各ルータに伝達します。

LSDBを作成しトポロジーマップを作成

LSAを交換した後にLSDB(Link State Database)を展開し、ルータのトポロジーマップを作成する。トポロジーは同期している為、全て同じ結果になります。

下記は OSPF databaaseの結果ですが、同じ状態になります。

R1#show ip ospf database

            OSPF Router with ID (1.1.1.1) (Process ID 1)

		Router Link States (Area 0)

Link ID         ADV Router      Age         Seq#       Checksum Link count
1.1.1.1         1.1.1.1         1696        0x8000002F 0x009053 3
2.2.2.2         2.2.2.2         1663        0x80000032 0x005850 5
3.3.3.3         3.3.3.3         1741        0x8000002C 0x00F6BF 3
R1#
R2#show ip ospf database

            OSPF Router with ID (2.2.2.2) (Process ID 1)

		Router Link States (Area 0)

Link ID         ADV Router      Age         Seq#       Checksum Link count
1.1.1.1         1.1.1.1         1769        0x8000002F 0x009053 3
2.2.2.2         2.2.2.2         1734        0x80000032 0x005850 5
3.3.3.3         3.3.3.3         1812        0x8000002C 0x00F6BF 3
R2#
R3#show ip ospf database

            OSPF Router with ID (3.3.3.3) (Process ID 1)

		Router Link States (Area 0)

Link ID         ADV Router      Age         Seq#       Checksum Link count
1.1.1.1         1.1.1.1         1800        0x8000002F 0x009053 3
2.2.2.2         2.2.2.2         1765        0x80000032 0x005850 5
3.3.3.3         3.3.3.3         1841        0x8000002C 0x00F6BF 3
R3#

SPFツリーを作成してルーティングテーブルの作成

LSDBのトポロジー情報を元に、自身を起点した最短ルートを計算し、ルーティングテーブルを作成する。
R1

R1#show ip route ospf

      2.0.0.0/32 is subnetted, 1 subnets
O        2.2.2.2 [110/2] via 192.168.12.2, 1d01h, GigabitEthernet0/1
      3.0.0.0/32 is subnetted, 1 subnets
O        3.3.3.3 [110/3] via 192.168.12.2, 1d01h, GigabitEthernet0/1
O     192.168.23.0/24 [110/2] via 192.168.12.2, 1d01h, GigabitEthernet0/1
R1#

R2

R2#show ip route ospf

      1.0.0.0/32 is subnetted, 1 subnets
O        1.1.1.1 [110/2] via 192.168.12.1, 1d01h, GigabitEthernet0/1
      3.0.0.0/32 is subnetted, 1 subnets
O        3.3.3.3 [110/2] via 192.168.23.3, 1d01h, GigabitEthernet0/2
R2#

R3

R3#show ip route ospf

      1.0.0.0/32 is subnetted, 1 subnets
O        1.1.1.1 [110/3] via 192.168.23.2, 1d01h, GigabitEthernet0/1
      2.0.0.0/32 is subnetted, 1 subnets
O        2.2.2.2 [110/2] via 192.168.23.2, 1d01h, GigabitEthernet0/1
O     192.168.12.0/24 [110/2] via 192.168.23.2, 1d01h, GigabitEthernet0/1
R3#

Configファイルおよびパケットキャプチャファイル

R1,R2,R3のConfigファイル


R1〜R2間のOSPFパケットをキャプチャーしたファイルを添付しています。neighborの確立とLSAの交換を確認出来ます。

スポンサーリンク

OSPF 関連記事一覧

OSPFプロトコル解説記事

OSPF設定例記事

OSPF RFC

OSPF関連図書

私が所持しているOSPF本の紹介です。ただし絶版になっている本も紹介していますがご容赦ください。

著:ジョン・T. モイ, 監修:泰弘, 小原, 原著:Moy,John T., 翻訳:トップスタジオ

他ネットワークプロトコル解説記事

-OSPF
-