CCNAの試験に向けて学習中。
復習に見返せるようにメモしていきます。
ほぼ自分の勉強メモです。
過度な期待はしないでください。
1.OSPFの概要
1-1.OSPFの特徴
OSPF(Open Shortest Path First)は、ダイナミックルーティングで使用する
プロコトルの一つです。
■1-1-1.IGPに分類
OSPFは、IGP※1に分類されます。同じくIGPに分類されるディスタンスベクタ型の
RIP※2で、問題となっていた部分が改良されたもので、RIPなどよりも大規模なネットワークを
主な対象としています。
※1 IGPは、自律システム(AS)内で経路情報交換をするルーティングプロトコルです。
※2 RIPは、ネットワークで接続したルータ間で使用するルーティングプロトコルです。
ホップ数(メトリック)を通知し合う事によって経路情報を生成します。
■1-1-2.様々なルータのメーカーで使用出来る
OSPFは、RFCで標準仕様が規定されています。
その為、EIGRPなどのCisco独自のダイナミックルーティングプロトコルとは違い、
様々なルータのメーカーで使用出来ます。
■1-1-3.リンクステート型のプロトコルである
リンクステート型のルーティングプロトコルは、ルーティングテーブルではなく、
各ルータのインタフェースの情報(リンクステート情報)を交換します。
このリンクステート情報は「LSA(Link State Advertisement)」といい、
ルータが持つインタフェースの種類、そのインタフェースのIPアドレス、インタフェースのコスト、
接続されているネットワークのタイプなどが含まれ、ネットワーク内のOSPFが動作している、
他のルータに通知します。
OSPFでは、各ルータがネットワークのトポロジ※3を記録した「LSDB(Link-State Database)」と、
呼ばれるデータベースを持っています。
各ルータから収集されたこのLSAはこのデータベースに格納され、各ルータに同一の内容になります。
OSPFでは、トポロジ内の各ルータはルータIDによて識別されています。
各ルータは、このLSDBを基にSFPアルゴリズムを使用して自身を基点とした、
SFPツリー(最短経路ツリー)を作成し、そこから最短の経路を作成し、
ルーティングテーブルに登録します。
※3 トポロジについては「ネットワークトポロジ」の記事参照
■1-1-4.ルーティングテーブルのトラフィック量を軽減出来る
ディスタンスベクタ型のRIPなどでは、定期的にルーティングテーブルのほぼ全てを、
ルーティングアップデートにより隣のルータに送りますが、
OSPFでは、通常隣接するルータの生存確認の為に小さなHelloパケット※4だけを送信します。
その為、全ての情報を含むルーティングアップデートを定期的に送るRIPなどより、
トラフィック量※5が少なくすみます。
また、ネットワーク情報の変更があったとしても、全ての情報ではなく差分情報のみアップデートします。
※4 宛先の最短パスを構築するために機器がお互いに自身の情報を交換し合うパケットの事。
HELLOパケットは10秒間隔で送信されます。
※5 インターネットやLANなどのコンピューターなどの通信回線において、一定時間内に
ネットワーク上で転送されるデータ量の事
■1-1-5.コンバージェンスが速い
コンバージェンスとは、「全てのルーターにルート情報が行き渡った状態の事」をいいます。
OSPFでは、定期的にルーティングアップデートを送って変更を伝えていくディスタンスベクタ型とは
異なり、ネットワークに変更があると変更内容をすぐに送信して、他のルータに伝えます。
OSPFでは、あらかじめ全てのルータがネットワークの構成を把握しているので、
変更があれば、各ルータが変更箇所を把握し、データベースを更新して再計算するので、
高速にコンバージェンスが出来ます。
■1-1-6.VLSMに対応している
OSPFは、サブネットマスクの情報をルーティングアップデートに含める事が出来る、
クラスレスルーティングプロトコルなので、VLSM(可変長サブネットマスク)を利用し、
異なるサブネットマスクのネットワークがある環境でも問題なく対応出来ます。
クラスレスルーティングプロトコルとは、ルーティングアップデートにサブネットマスク情報を
含めるルーティングプロトコルで、RIPv2、OSPF、EIGRPなどある。
逆にクラスフルルーティングプロトコルは、ルーティングアップデートにサブネットマスク情報を
含めないルーティングプロトコルで、RIPv1、IGRPなどがある。
■1-1-7.ネットワークを階層化出来る
OSPFは、全てのルータで共通です。
なので、大規模なネットワークでは、交換されるルート情報の数が非常に多くなり、
それにともなってデータベースサイズが巨大になります。
その結果、ルータのCPUサイクルやメモリを消費する事になるので、
このような事を解消するために、OSPFではネットワークを「エリア」という単位で、
分割し大規模ネットワークでもより効率よくルーティング出来るようにしています。
また、エリア分割の際、中心となるエリア(バックボーンエリア)とその他のエリアに分けて、
ネットワークを階層化し管理します。
■1-1-8.メトリックとして「コスト」を使用する
メトリックとは、「最適なルートの選択基準」を決めるためのもので、
最適な経路を判断する際の判断基準になります。
OSPFでは、メトリックにコストを使用します。
コストは以下の計算式に基づき、算出されます。
コスト = 100M(bps) ÷ インターフェイスの帯域幅(bps)
例えば、
インターフェイスの帯域幅が「10Mbps」の場合は、コスト値は 100Mbps ÷ 10Mbps = 10となり、
コストは、「10」となります。
インターフェイスの帯域幅が「100Mbps」の場合は、コスト値は 100Mbps ÷ 100Mbps = 1となり、
コストは、「1」となります。
そして、宛先までのインターフェイスのコストを加算していき、合計が最小値になるルートが、
最適なルートなります。
下記の画像で見てみると、
R1 - R2 - R4を通るルートのコストは、30(10+10+10)
R1 - R3 - R4を通るルートのコストは、21(10+10+1)
なので、コストが小さいR3経由の通信経路を最適経路として判断します。
■1-1-9.ルーティング認証をサポートしている
OSPFでは、全ての情報交換で認証を行うように設定出来ます。そうすることで、
信頼出来るルータとだけ情報を交換出来るようになります。
■1-1-10.OSPFデメリット
OSPFは、各ルータにデータベースを持ち、そこから計算を行う為、
メモリやCPUへの負荷が大きくなります。
#### 1-2.OSPFの基本動作
■1-2-1. ①Helloパケットを交換してネイバーを検出する
OSPFを動作させたルータは、マルチキャスト(224.0.0.5:全OSPFルータ宛)で、
OSPFパケットを送信しOSPFルータを自動検出します。これをHelloパケットといいます。
Helloパケットの役割は、隣接ルータの発見と生存確認です。Helloパケットを受け取り、
隣として認識したルータを、ネイバーと呼びます。
Helloパケットには認識されているネイバーの一覧が格納されており、受け取ったルータは、
その一覧を確認する事で、相手が自分を認識していかどうか判断します。
各ルータは、ルータIDで識別されています。
Helloパケットを受け取る前のネイバー関係の初期状態は、Downステートになっています。
■1-2-2. ②ネイバーテーブルにネイバーを登録する
Helloパケットを受け取ったルータは、ネイバー一覧を保持するネイバーテーブルに、
送信元のルータを登録するが、この時 Helloパケットを受け取ったからといって、
送信元のルータを無条件にネイバーとして登録する訳ではありません。
OSPFでは近接ルータから受信した Helloパケットに、自身のルータの情報が含まれていると、
隣接関係が確立されます。
2台のルータで、以下の情報が一致していないと隣接関係は確立されません。
- Helloインターバル(Helloパケットの送信間隔)
- Deadインターバル(ネイバーがダウンしたとみなす時間)
- 認証の情報
- エリアID
- サブネットマスク
- スタブフラグ
Helloパケットを受け取ったルータは、ネイバー一覧を保持するネイバーテーブルに送信元の
ルータを登録します。が、送信元のルータはまだ認識していない為、
Helloパケットを受け取ったルータは、initステートという状態になります。
■1-2-3. ③相互を認識し、LSDBの交換の準備をする
ネイバーを認識したルータは、Helloパケットに自分の認識しているネイバー一覧を格納し、
送信元ルータにHelloパケットを返します。
そこで相手から受け取ったHelloパケットのネイバー一覧に自身が記録されていた場合、
送信元のルータは、自身に認識されていと分かったので、2-Wayステートという状態になります。
その後、送信元ルータから届くHelloパケットのネイバー一覧に自身の記録が格納されている為、
Helloパケットを受け取ったルータのネイバーテーブルでも、2-Wayステートという状態になります。
これで、お互いを認識し他のでLSDBを同期させる準備が出来た状態です。
ここまでの一連の動作をまとめたのが下記の画像になります。
ルータの状態は、【 】の中に記載されています。
Helloパケットの送受信と共に変化しているのが認識出来ると思います。
■1-2-4. ④ルータ間で DBDパケットを交換する
ルータ間でHelloパケットを交換し、相互に2-Wayステートになった後
DBD(Database Description)パケット※6を使用して各ルータが持つLSDBの情報を交換します。
DBDパケットを交換する時に、2つのルータ間でマスター(管理・制御する側)と、
スレーブ(制御される側)の関係を築きます。DBDパケットはシーケンス番号で管理されており、
その決定を行うルータがマスターになります。
マスターとスレーブの役割を選択しているルータの状態を Exstartステートといい、
役割が決定し、DBDパケットを交換してお互いのLSDBを同期させている状態を、
Exchangeステートといいます。
ここの一連の動作をまとめたのが下記の画像になります。
DBDパケットはシーケンス番号(seq)を付けて送付します。
また、マスターはルータIDが大きい方がなります。
※6 自身のLSDBに含まれているLSAのリスト一覧。
ネイバールータとこのDBDを交換し合うことにより、自身に不足しているLSAが何なのかを
認識する事が出来る。
■1-2-5. ⑤詳細なLSA情報を交換する
ルータは、Exchangeステートの時に相手から受け取ったDBDパケットに新しいLSAの情報が
見つかった場合、ネイバーに対して LSR(Link State Request)パケットを送信して詳細情報を、
要求します。
LSRパケットを受け取ったネイバーは、更新用のLSU(Link State Update)パケットを送信します。
ルータは、LSUパケットを受け取るとLSDBを最新の情報に更新します。
また、LSUパケットの確認応答として、LSAckパケットを送信します。
LSRパケットとLSUパケットを送信している時は、Loadingステートになります。
お互いに最新の状態を取得し、最終的にLSDBの同期が完了すると、
アジャセンシー(完全な隣接状態)になります。この状態を、Fullステートといいます。
Fullステートとなった後は、LSDBからSPFアルゴリズムを使用してSPFツリーを作成し、
最短経路をルーティングテーブルに登録します。
その後は、Helloパケットを送信してお互い生存確認を行う。
■1-2-6. OSPFの状態遷移纏め
状態 | 説明 |
---|---|
Downステート | Helloパケットを受け取る前の初期状態 |
initステート | ネイバーからHelloパケットを受け取ったが、相手がこちらを確認してない状態 |
2-Wayステート | ルータが相互に認識している状態 |
Exstartステート | DBDパケットを交換する為のマスターとレシーブを選択している状態 |
Exchangeステート | DBDパケットを交換してお互いLSDBを同期させている状態 |
Loadingステート | LSRパケットを送信して最新のLSAをLSUパケットとして取得している状態 |
Fullステート | 完全な隣接関係(アジャセンシー)を築いた状態 |
#### 1-3.マルチアクセスの場合
■1-3-1.マルチアクセスとは?
マルチアクセスとは、1つのインタフェースを通じて複数のルータなどと通信ができる状況です。
マルチアクセス環境では、DR (Designated Router:代表ルータ) と、BDR (Backup Designated Router:バックアップ代表ルータ)を選択し、
完全な隣接関係をDRとBDRとの間のみに限定する事で、LSUパケットなどのトラフィックを軽減します。
そうする事によって、各ルータがそれぞれ1対1で完全な隣接関係を結ばなくても、DRから全ての
LSAの情報を得ることが出来る為効率がアップします。
また、DRとBDRに選出されなかったルータを DROtherといい、DROtherのルータは、
お互いにネイバーとして認識はしているものの、DBDパケットなどを直接交換する事はありません。
その為、DROther同士は 2-Wayステートで止まったままとなります。
■1-3-2.DRとBDRの選択
DRとBDRの選択基準として、ルータプライオリティとルータIDを規定しています。
● ルータプライオリティ
ルータプライオリティは、ルータのインターフェイス事に決定できる値です。
Helloパケットに含まれている為、Helloパケットを送受信する事でお互いのルータプライオリティを
知る事が出来ます。
ルータプライオリティのデフォルト値は 1で、0を設定すると、DR及びBDRに選出されなくなります。
マルチアクセス環境では、ルータプライオリティの値が最も大きいルータが DR、
2番目に大きいルータが BDRに選出されます。
● ルータID
ルータプライオリティが同じである場合、ルータIDを比較します。
ルータIDは、ルータIDの値が最も大きいルータが DR、2番目に大きいルータが BDRに、
選出されます。
そして、ルータIDは次の順番で決定されます。
- コマンドによって手動で設定する
- ルータの有効なループバックインターフェイス※7のIPアドレスの中で最も大きなIPアドレスが選択される
- 有効な物理インターフェイスのIPアドレスの中で最も大きなIPアドレスが選択される
上から順に優先度が高いルータIDの決定方法です。
ルータIDが変わってしまうと、ネイバーの確立からOSPFの処理をやり直さなければいけなくなります。
その為、ルータIDが変更されることがないように上記の優先度が決まっています。
※7 ループバックインターフェイスは、任意で作成することが出来る仮想的なインターフェイスで、
意図的にシャットダウンしない限りダウンしません。
従って、ループバックインターフェイスの方が物理インターフェイスよりも優先されます。
● ルータIDの決定例
DRとBDRの選出方法は、先ずルータプライオリティの値が最も大きいルータになります。
なので、ルータプライオリティの値が 255の上記の図の下2つが選択されます。
次に、ルータプライオリティが同じである場合、ルータIDを比較し、その値が大きい方がDR、
2番目に大きいルータが BDRとなります。
ルータIDを比較すると、左側のルータが 2.2.2.2 右側のルータが 1.1.1.1. なので、
左側のルータの方が値が大きので DRとなり、右側のルータが BDRとなります。
#### 1-4.ルートの変更
■1-4-1.メトリックの計算
※メトリックの計算は上記のメトリックとして「コスト」を使用するを参照
OSPFでは、コストを基に最適なルートが選択されて、そのルートがルーティングテーブルに、
登録されます。
■1-4-2.等コストロードバランシング
最短のルートが複数ある場合には、デフォルトでで4つ迄ルートがルーティングテーブルに、
登録されます。これにより、トラフィックを分散する機能を等コストロードバランシングと、
いいます。
下記の場合、コストが 20のルートが2つある事になります。
この時、RT-A(ルータA)は両方のルートをルーティングテーブルに登録します。
■1-4-3.ルートの変更
デフォルトで帯域幅をそのまま使用してコストの計算をした場合、
1Gbpsでも100Mbpsでも同じコストになる為、1Gbpsの方を最適なルートとしたくても
出来ませんでした。そこで、コストの値を調整する事で経路を変更します。
コスト値を変更するには、
● インターフェイスのコストの値を直接設定する
コマンドは、「(config-if)# ip ospf cost」
● インターフェイスの帯域幅を変えてコストの計算結果を変える
コマンドは、「(config-if)# bandwidth」
● コスト計算式の分母を「10の8乗」の値に変更する
コマンドは、「(config-router)# auto-cost reference-bandwidth」
コストを直接設定したり、帯域幅を変更したりする事で、最適なルートを変更する事が出来ます。
※コマンドの詳細についてはOSPFという記事参照
#### 1-5.OSPFでの考慮事項
■1-5-1.OSPFのネットワークタイプ
OSPFでは、ネットワークタイプにより動作が変わるプロトコルです。
マルチキャスト環境ではないネットワークでは、DRとBDRの選出をしなかったり、
マルチキャスト通信が行えないネットワークでは、ネイバーを自動で検出出来なかったりします。
下記の表がOSPFのネットワークタイプになります。
タイプ | ネイバー検出 | DR/BDR選出 | 適切なトポロジー | Helloインターバル |
---|---|---|---|---|
ブロードキャスト | 自動 | 有 | フルメッシュ | 10 |
NBMA ※7 | 手動 | 有 | フルメッシュ | 30 |
ポイントツーマルチポイント | 自動 | 無 | スター | 30 |
ポイントツーマルチポイント(Non Broadcast ) | 手動 | 無 | スター | 30 |
ポイントツーポイント ※8 | 自動 | 無 | スター | 10 |
※7 フレームリレーやATM接続などのWANリンクでセグメント上に2台以上のルータが接続できますが、
ブロードキャスト機能のないネットワークで、このネットワークではDR/BDRの選出がされますが、
OSPFネイバーは手動で設定する必要があります。
※8 PPPまたはHDLC接続などのWANリンクで2台のルータだけで接続されるネットワーク、
このネットワークでは2台のルータ間では必ずアジャセンシー関係(Full)になります
##### ■1-5-2.パッシブインターフェイス パッシブインターフェイスとは、OSPFは有効にしつつもHelloパケットを送信しないように、 する設定の事をいいます。
この設定を行うと、Helloパケットを送信しなくなります。また、受信したHelloパケットは、
無視するようになります。結果、ネイバーとして認識されなくなります。
● パッシブインターフェイスの設定例
下図のように、「R1」や「R3」では、PC側のネットワーク(192.168.0.0/24 と 172.16.0.0/16)も
経路情報として伝えるためにnetworkコマンドで設定する必要がありますが、
PC側のネットワークに隣接ルータがいない場合、ルーティングアップデートの送信は必要ありません。
パッシブインターフェイスの設定をする事で無駄なアップデートを抑制する事が出来ます。
##### ■1-5-3.MTUサイズ MTUとは、1回の通信で送信する事が出来るパケットの最大サイズの事をいいます。 OSPFでネイバーとやりとりする際、ネイバーのインターフェイスのMTUと自身のインターフェイスの MTUのサイズが異なると、完全な隣接環境を築く事が出来ません。
なので、自身のMTUのサイズよりも大きいパケットを受け取った場合、それを無視しまい
結果、ネイバーとの状態が Exstartもしくは Exchangeステートから先に進まなくなります。
#### 1-6.マルチエリア OSPF
■1-6-1.ネットワークの階層化
OSPFでは、ネットワークの集まりをグループとして管理出来ます。
このグループをエリアといい、同一エリア内のルータ同士は詳細なトポロジを把握しますが、
他のエリアに関しては詳細な情報でなくルートの情報情報のみを保持します。
エリア間では、ルート情報を伝えるLSAをやり取りする事でトラフィック量を減らし、
メモリやCPUの負荷を軽減させます。
また、OSPFのエリアは、中心となるエリア(バックボーンエリア)に、
他のエリアが隣接する構成、バックボーンエリアを中心とした2階層の構成となります。
1つのエリアだけでOSPFを動作させる事を、シングルエリア OSPFといい、
複数のエリアを作成してOSPFを動作させる事を、マルチエリア OSPFといいます。
##### ■1-6-2.エリアを作成する際の注意点 エリアを作成する際、適当に作成しても上手く作動しません。 その為、下記の点を注意する必要があります。
● バックボーンエリアの作成
OSPFでは、エリアをわけるときに必ずバックボーンエリアというエリアを作成する必要があります。
エリアには識別番号を付けますが、バックボーンエリアは、エリア番号0で表されます。
● 他のエリアをバックボーンエリアに接するように作成する
エリア間で通信する場合、必ずバックボーンエリアを通過しなければなりません。
なので、エリアを分割する際は必ずバックボーンエリアに接するように作成します。
● ルータをエリアの境界に配置する
##### ■1-6-3.ルータの役割 ルータはどのエリアに位置するかで役割が異なります。
ルータの役割 | 説明 |
---|---|
内部ルータ | 全てのインターフェースが同じエリアに接続しており、その他のエリアには一切接していないルータ |
バックボーンルータ | インターフェイスが1つでもバックボーンエリアに接しているルータ |
ABR(Area Border Router) | エリア境界ルータ。つまり、インターフェイスが2つ以上のエリアと接しているルータ |
ASBR(AS Boundary Router) | インターフェイスが異なるASに所属しているルータ |
関連投稿記事
参考記事
※OSPF DR/BDRという記事参照
※OSPF - router-id / ip ospf priority / ip ospf costという記事参照
※OSPF - ABR / ASBRという記事参照