OSPFで使用できるネットワークのタイプとインターフェースの状態について説明します。
Contents
ネットワークで使用される回線には様々な種類のものが存在しますが、OSPFではそれらの回線の種類をインターフェースから読み取り、タイプに分類して認識します。OSPFで使用するネットワークタイプは下表のとおりです。ネットワークの種類に応じてOSPFのインターフェースのタイプが決定します。
回線の種類 | OSPFインターフェースのタイプ | OSPFインターフェースの状態 |
ポイントツーポイント回線 (シリアル回線やPPPなどの1対1の回線) |
Point-to-Point | point-to-point |
ブロードキャスト回線 (Ethernetなどのブロードキャストをベースとした回線) |
Bloadcast | DR, BDR, DR Other |
NBMA (フレームリレーなどのブロードキャストを使用しないマルチアクセス回線) |
NBMA | Point-to Point DR, BDR, DR Other |
ポイントツーマルチポイント (EPONなどの一部の光回線や無線通信などの一対多の回線) |
Point-to-Multipoint | Point-to Point |
バーチャルリンク (OSPFで作成する仮想的な回線) |
Virtual Link | Point-to Point |
ポイントツーポイント回線は下図のようにルータが一対一で接続される回線です。このポイントツーポイントでは回線上に存在するルータが2台に決まっているためHelloによって相手の存在が確認できると必ず隣接関係になります。そのためポイントツーポイント回線に接続するルータの最終的なインターフェースの状態はPoint-to-Pointの1つだけになります。IPのアドレッシングはIPサブネットを割り当てることも可能ですが、unnumberedを使用することも可能です。
ブロードキャスト回線の場合は下図のようにルータが回線を共有する形で接続されていると解釈されます。ポイントツーポイント回線と異なり回線に接続するルータの数は決まっていないため、すべてのルータ同士が隣接関係になると回線内を流れるデータ量が不必要に増えることになります。そのためネイバーの中からルータを2台選出し、それ以外のルータは特別なルータとのみ隣接関係となることで隣接関係の総数を減らします。ブロードキャスト回線の最終的なインターフェースの状態はDR、BDR(正しくはBackup)、DR Otherのいずれかになります。DRとBDRの選出はそれぞれのインターフェースに設定されたPriorityかIPアドレスによって決まります。Priority値が大きいと優先順位が高くなり、Priority値で決定しない場合はIPアドレスの大きいものが優先順位が高くなります。このDR、BDRの選定はHelloパケットの交換によって行われます。IPのアドレッシングはIPサブネットを割り当てます。OSPFv2はCIDRに対応しているためクラスにとらわれないサブネットを付与することができます。
ポイントツーマルチポイント回線は一対多の接続形態の回線です。ポイントツーマルチポイントでは回線上に複数のルータが存在しますが、個々のルータ同士の関係は一対一になるため2者間にポイントツーポイントと同じ概念が適用されます。回線全体としてはポイントツーポイントの集合として動作することになります。そのためポイントツーマルチポイント回線に接続するルータの最終的なインターフェースの状態はPoint-to-Pointになります。ポイントツーマルチポイントではIPアドレスは必須です。ただし、リンク表現では共通のIPサブネットを必要としないため実装次第です。
NBMAはブロードキャストを使用しないマルチアクセス可能な回線です。この回線ではブロードキャストを持たないため、OSPFからするとリンクローカルのマルチキャストを使用することができずHelloパケットを送信することができません。そこで代替の方法としてNBMAモードとポイントツーマルチポイントモードの2つを使用します。NBMAモードはマルチキャストの代わりにユニキャストを使用する方法で、ポイントツーマルチポイントモードは回線をポイントツーポイントとして解釈してマルチキャストを使用可能にする方法です。
NBMA回線でOSPFをNBMAモードで動作させると、OSPFはブロードキャスト回線と同じ動作を取ろうとします。しかしこの回線ではネイバーの存在を知るためにブロードキャストを使用できないため、Helloパケットを送ることができず自動でネイバーを知ることはできません。そのため前提としてレイヤ2で回線内のすべてのネイバー同士で直接通信ができるようにしておきます。OSPFはユニキャストでHelloパケットを送信することでブロードキャスト回線と同様にDR、BDRを選択して動作することになります。IPアドレッシングはブロードキャスト回線と同様に設定できます。このモードの最終的なインターフェースの状態はDR、BDR、DR Otherのいずれかになります。
NBMA回線でOSPFをポイントツーマルチポイントモードで動作させると、OSPFはNBMA(の各論理回線)をポイントツーポイントと認識して動作します。ポイントツーポイントは回線上に2者しか存在しないという特徴からマルチキャストを使用できるようになります。つまりNBMA全体としてポイントツーマルチポイントと同様の動作を行います。IPアドレッシングはポイントツーマルチポイントと同様に設定できます。このモードの最終的なインターフェースの状態はPoint-to-Pointになります。
バーチャルリンクはOSPFの作成する論理的な回線です。IPルーティングによって同じエリア内の特定の2つのルータ間で作成する回線であるため、ポイントツーポイントと同じ特徴を持ちます。そのためバーチャルリンクの最終的なインターフェースの状態はPoint-to-Pointになります。バーチャルリンクがポイントツーポイント回線と異なるのは必ずIPアドレスが必要である点です。バーチャルリンクはリモートのルータと隣接する関係上IPアドレスが必要となります。しかし使用するIPアドレスは既存のインターフェースのものが流用されるためバーチャルリンク自体に付与する必要はありません。
OSPFルータのインターフェースの状態遷移動作について説明します。
上で説明したDR・BDRやPoint-to-Pointなどのインターフェースの状態(State)はInaterface state machineによって決まります。Inaterface state machineは接続する回線内でのルータの役割を明確にする動作で、下図に示すようにDown状態から始まり、赤い枠で示したものが最終の状態です。ネイバー同士は隣接関係を構築しますが、並行してこのインターフェースの状態が決まります。
インターフェースがアップしてからある状態に落ち着くまでの手順は以下のようになります。
1)Loopback状態のインターフェースは機能チェックなどのために機能しますが、このインターフェースがLoopback以外の状態に変化できる場合には状態をDownに遷移します。
2)通常のインターフェースの初めの状態はDownです。インターフェースがアップするとそのインターフェースの種別が判別されます。そしてポイントツーポイント回線に接続されている場合は状態をPoint-to-Pointへ遷移させ確定します。それ以外の場合はDR・BDRの選出が必要であるためWaitingに移行しますが、このインターフェースが明らかにDRになる資格がない場合にはDR Otherに遷移します。
3)Waitingの状態では選定のイベントが発生しない限りWait Timer(デフォルト40秒)だけ待機してからDR・BDRの選定を開始します。もしこの状態でHelloを受信しBDRが存在していることを検知するか、これまでBDRは存在したが現在は不在であることを検知すると即座にDR・BDRの選定を開始します。このBDRの状態を認識するのは下表(A or B)のHelloパケットを受信した場合です。これ以外の場合(DR・BDRの両方が空のHelloパケットを受信している間)はタイマーが満了するのを待って選定が行われます。ネイバーの状態を同時に考えた場合、このWait Timer中に2-Wayまで進んでいるとDR・BDRの選定対象とみなされます。
ケース | Helloパケットの状態 | 意味 |
A | BDRの設定されたHelloパケットを受信する | BDRの存在を検知 |
B | DRが設定されてBDRが空のHelloパケットを受信する | これまで存在したBDRが不在であることを検知 |
上記の3を少し乱暴にまとめると、同じ回線上の全てのルータが初めてほぼ同時に起動する場合には40秒を待機してから選定を開始することになり、回線上に1台でも先に起動しているルータが存在する場合には即座に選定が開始されるという意味になります。また同時に現在DRとして選定されているものとは異なるDRが含まれたHelloパケットを受け取った場合には即座に再選定が行われるという意味にもなります(例えば異なるネットワークが結合された場合など)。
DRは回線中の重要な役割を担っています。そのため概要で説明している通り再選定が行われない限り役割を勝手に終える事はありません。しかしDRが不在になるような不測の事態に備えてBDRが控えており、もしもの場合は即座にDRに昇格できなくてはなりません。また同時に新しいBDRの選定も行わなくてはなりません。DR・BDRの選定ではこのBDRのDRへの昇格と、BDRの再選定を同時に行うために以下の手順(a, b)を2回繰り返して決定します。手順aはBDRの選出。手順bはDRへの昇格です。この手順はブロードキャスト回線を下図のイメージで考えています。左の円がDRとBDRになるための候補、右が確定したDR、BDRが入るための行列です。行列には接続されたルータの中からRouter Priority(インターフェースデータ構造)の高いルータが優先的に入ることになります。Router Priorityが0の場合は選出から除外されます。
DR・BDRの選出手順
a)BDRが不在の場合、DR以外の全ルータからBDRが選出される
b)DRが不在の場合、BDRは即座にDRに昇格する
DRとBDRを選出する条件
・Router Priorityの一番高いルータを優先
・Router Priorityが設定されていない場合はルータIDの高い順
・Router Priorityが0のルータは選択されない
DR・BDRが存在していない状態では次のようにDR・BDRが決まっていきます。
1)初めに候補の中から最もRouter Priorityの一番高いルータを選択します。もしRouter Priorityが同じ場合はIPアドレスが一番大きいルータを選択します。下図では一番Router Priority高いのでR6が選定されます。そしてR6はBDRに収まります。これは手順aの動作です。
2)BDRになったR6はDRが不在であるため行列の奥に詰めてDRに収まります。これは手順bの動作です。
3)次にBDRが不在になったためDRであるR6を省いて一番Router Priorityの高いR5が行列に入りBDRとして収まります。これは2回目の手順aの動作です。続いて手順bが行われますがDRが決定しているため変更されず終了します。
もしここで新しくRouter Priorityが100のR10が候補に追加されたとしてもすでにDR・BDRが確定して行列が埋まっているいるため変更されません。
もし、DRもしくはBDRが不在になった場合は(上で説明したHelloによるBDRの不在の検知によって)再選出が行われます。
1)DRが不在になると再選定が始まります。まず手順aはR5がまだBDRとして存在しているためスキップされます。続いて手順bでBDRが行列をスライドして新たにDRに昇格します。
2)残りのルータの中からRouter Priorityの一番高いR10がBDRに入ります。これは2回目の手順aの動作です。続いて手順bが行われますがDRが決定しているため変更されず終了します。
このようにDR・BDRの選定は行列に埋まっていくイメージの動作となります。
インターフェースに設定するエリアIDとコストについて説明します。OSPFはインターフェースに対してエリアIDとコストの設定を行います。
エリアIDはそのインターフェースがどのエリアに属するのかを表す情報です。エリアIDを設定することによってエリア構成情報に紐づくことになりそのインターフェースから送信するすべてのOSPFパケットにエリアIDが設定されて送信されることになります。エリアIDはOSPFパケットのヘッダに記述されますが、OSPFの構造的に回線を共有するルータはすべて同じエリアIDに設定しなければなりません。エリアIDが異なる場合はネイバーになることはできません。バーチャルリンクはバックボーンエリアに属するため必ず0になります。
コストはOSPFのメトリックでそのインターフェースからパケットを送信する際に掛かる回線の相対的な重みを表します。値の小さいほうが優先度が高くなり、インターフェースには0より大きい値(65535まで)を設定します。どのようなコストを設定するかは任意です。エリアIDと同様に回線上のネイバーと同じコスト値を設定するのが原則ですが、チェックがあるわけではないので異なるコスト値を設定しても機能します。ただしその際にはルータによって回線の評価が変わるためルート計算の統一性が崩れてしまうことになります。バーチャルリンクのコストはネイバーまでのトータルコストが設定されます。
OSPFではインターフェースごとに認証設定を行います。OSPFの認証はパスワードもしくはハッシュを使用した二者間の認証です。RFC2328の認証タイプは下表の3つが定義されていて、認証を行う場合はパスワード認証か暗号認証を選択することができます。暗号認証を使用する場合はハッシュ関数によってシークレットキーは秘匿されますが、OSPFパケット自体の機密性はありません。
AuType | 種類 | 特徴 |
0 | 認証なし | 認証処理なし |
1 | パスワード認証 | クリアテキストによる認証 |
2 | 暗号認証 | 暗号を使用した認証 |
認証なしの場合は認証を行いません。OSPFパケットには認証情報を含めずに送信し、受信したOSPFパケットに対しても認証処理を行いません。もし受け取ったOPSFパケットに認証情報が含まれている場合パケットは破棄されネイバー関係が確立しません。認証処理を行わないため、どのような相手でもエリアIDやその他のパラメータが揃っていればネイバーとして認識します。
パスワード認証は平文のパスワードを用いて認証します。すべてのOSPFパケットにパスワードをそのまま格納し送信します。ネイバー関係を構築する前にパスワードのチェックが行われ認証された相手のみネイバー関係を構築します。ただしこの認証はクリアテキストでOSPFのヘッダにパスワードが設定されるため悪意のある脅威に対しては脆弱です。
暗号認証は暗号化した情報を用いて認証します。暗号化された情報(ハッシュ値)はOSPFパケットの後部に格納されて送信されます。シークレットキーとパケットの組み合わせによってがハッシュ化されているため、認証情報を見るだけでシークレットキーを知ることはできずパスワード認証に比べると悪意ある脅威に対して安全と言えます。ただしOSPFパケットに機密性はありません。なお暗号認証の場合はチェックサムは計算されません。
認証については「OSPF パケットフォーマット」ページの認証フィールドでも説明しています。
OSPFは様々なタイマーとインターバルによって制御されています。ここではインターフェース構成情報で規定されているパケットに対するタイマーとインターバルを説明します。下図ではLANを前提とした値を使用しています。なお表内のInactivity Tymerだけはネイバー(ネイバーデータ構造)に対するタイマーです。
タイマー | インターバル | 値 | 意味 | |
1 | Hello Timer | HelloInterval | 10秒 or 30秒 |
Hello TimerはHelloIntervalを使用したHelloパケットの送信間隔。この時間を経過するとHelloパケットを送信する。すべてのルータで同じ必要がある RFCのサンプル値 ・X.25 PDN(WAN):30秒 ・local area network;10秒 |
2 | Wait Timer | RouterDeadInterval | 40秒 or 120秒 |
Wait Timerはインターフェースの待機時間。RouterDeadIntervalを使用し、この時間を経過するとDR・BDRの選定が開始する。インターフェース起動時のみ動作するシングルショットタイマー。 RouterDeadIntervalはHelloIntervalの整数倍の値。RFCでは「(say 4)」となっている |
3 | Inactivity Timer | Inactivity Tymerはネイバーが消失したと判断するタイマー。RouterDeadIntervalを使用し、この時間を経過するとネイバー関係を解消する。すべてのルータで同じ必要がある。Helloパケットを受信するとタイマーをリセットする | ||
4 | – | PollInterval | 2分 | WAN回線においてダウンしたネイバーへのHelloの間隔。 RFCのサンプル値 ・X.25 PDN(WAN):2分 |
5 | – | InfTransDelay | 1秒 | 推定送信遅延時間(秒数)。インターフェースでLSA送信・転送を行う場合にかかる遅延の推定値。LSAを転送する際にはLS ageにこの時間を加算する。そのため0より大きな値である必要がある RFCのサンプル値 ・local area network;1秒 |
6 | – | RxmtInterval | 5秒 | 再送間隔(秒数)。確認応答などを受け取っていないDatabase DescriptionパケットもしくはRequestパケット、Updateパケットを再送信する際の間隔 RFCのサンプル値 ・local area network;5秒 |
インターフェースの状態は以下の遷移図で管理されています。
インターフェースの状態(Interface states)
状態 | 意味 |
Down | インターフェースの初期状態 |
Loopback | ループバックの状態 |
Waiting | DR・BDRの選定待機状態 |
Point-to-Point | ポイントツーポイントとして回線に接続する状態 |
DR Other | ブロードキャスト回線もしくはNBMAにDR Otherとして接続する状態 |
Backup | ブロードキャスト回線もしくはNBMAにBDRとして接続する状態 |
DR | ブロードキャスト回線もしくはNBMAにDRとして接続する状態 |
遷移図(Interface state machine)
インターフェースの状態は下図の矢印のように変化していきます。状態変化のきっかけはインターフェース(下位レイヤー)からの通知やパケットの受信などで発生するイベントです。
トリガーイベント
上図に対応するイベントです。図に示す状態遷移とともにアクションを実行します。
トリガーイベント | アクション | |
a | InterfaceUp | Hello Timerを開始しHelloパケットを送信開始。回線がポイントツーポイントの場合はPoint-to-point、そうでない場合で、DR・DBRの資格がない場合はDR Other、それ以外の場合はWaitingに遷移。WaitingではWait Timerを開始、NBMAの場合はネイバーイベントStartを生成。 |
b | BackupSeen | BDRを再選定 |
c | WaitTimer | DR、BDR、DR Otherを選定してそれぞれの状態に遷移 |
d | NeighborChange | DR、BDR、DR Otherを選定してそれぞれの状態に遷移 |
e | InterfaceDown | インターフェースのすべての変数とタイマーがリセット。ネイバーイベントKillNbrを生成しすべてのネイバー接続を削除。 |
f | LoopInd | InterfaceDownと同じアクション |
g | UnloopInd | なし |
インターフェースイベント(Events causing interface state changes)
インターフェースイベントの一覧です。意味に示した原因によって発生します。
イベント | 意味 |
InterfaceUp | 下位のプロトコルからインターフェースの起動が示された |
BackupSeen | BDRの存在もしくは不在を検知した |
WaitTimer | Wait Timerが起動した |
NeighborChange | ネイバーの状態が変化した(2-Way以上、init以下、新たなDRの宣言など) |
InterfaceDown | 下位のプロトコルからインターフェースのダウンが示された |
LoopInd | 下位のプロトコルからループバックが示された |
UnloopInd | 下位のプロトコルからループバックでないことが示された |
このページで使用しているインターフェースデータ構造の各要素の正確な表現は下表のとおりです。表は「OSPFネットワークの構造」の補足で用いたものと同じです。特に説明をしていないIP interface address、IP interface maskはそれぞれインターフェースから取得します。List of neighboring routersはHelloを受信することで取得します。List of all other attached routersはNBMA回線でネイバーを指定します。
” * “がついているものは設定可能なパラメータです。
パラメータ、要素 | 意味 |
Type | インターフェースの種類 point-to-point、broadcast、NBMA、Point-to-MultiPoint、virtual linkのいずれか |
State | インターフェースの機能レベル 隣接になることができるかを表す |
IP interface address* | インターフェースに付与されるIPアドレス |
IP interface mask* | インターフェースに付与されるサブネットマスク |
Area ID* | インターフェースの属するエリアID |
HelloInterval* | インターフェースから送信するHelloパケットの間隔 |
RouterDeadInterval* | Helloパケットを受け取らなくなりネイバーがダウンしたと判断する時間。HelloIntervalの整数倍 |
InfTransDelay* | LSAの送信(伝搬遅延を含む)に係る推定時間。0より大きな数字 LSAを送信する際MaxAgeに加算 |
Router Priority* | 回線内でルータの優先度を表す数値。0はDR選出に参加しない |
Hello Timer | Helloパケットを送信すためのタイマー。HelloInterval間隔 |
Wait Timer | インターフェースをWaitingに待機させるタイマー。RouterDeadIntervalが経過するとDR・BDRの選定を開始 |
List of neighboring routers | インターフェースから到達できるネイバーの一覧 |
Designated Router | 回線内で選択されたDR |
Backup Designated Router | 回線内で選択されたBDR |
Interface output cost(s)* | インターフェースでパケットを送信するコスト。0より大きな数字 |
RxmtInterval* | このインターフェースの隣接に対するDatabaseDescription、Request、Updateの再送信の間隔 |
AuType* | このインターフェースのネイバー、隣接に対する認証方式 |
Authentication key* | 認証方式による認証情報 |
List of all other attached routers* | NBMAに接続されているネイバーのリスト |
PollInterval* | ネイバーがアクティブでなくなった場合にHelloパケットを送信する間隔(サンプル値:2分) |