OSPFとは ― エリア・コストの仕組み
OSPFは、
OSPFは、ルータどうしがネットワーク全体の地図を共有するプロトコル
OSPF(Open Shortest Path First)は、組織内のネットワークで使うリンクステート型のルーティングプロトコルです。同じエリア(ルータのまとまり)のルータは、ネットワークのつながり方をまとめた同じ地図を持ち、各ルータがその地図から自分を起点にした最短経路を計算します。
この地図をリンクステートデータベースと呼びます。経路を選ぶ基準は、帯域幅などから決まるコストの合計です。経路が切れると、ルータは地図を更新して別の経路を計算し直します。コストの決まり方、隣接関係と代表ルータ(DR・BDR)、エリアを分ける理由を順に説明します。
リンクステート型の考え方:LSAとLSDB
各ルータは、自分につながっている回線の状態(相手のルータ・帯域幅・コストなど)を、小さな単位のデータにまとめます。このデータがLSA(Link State Advertisement、リンクステート広告)です。ルータは自分のLSAをエリア内の他のルータへ転送します。これをフラッディングと呼びます。
フラッディングによって、エリア内の全ルータが、エリア内の全LSAを持つようになります。集まったLSAの集合がリンクステートデータベース(LSDB)です。RFC 2328の1.2節は、LSAを「ルータやネットワークの局所的な状態を表すデータの単位」と定義しています。
同じエリアのルータは、最終的にすべて同じLSDBを持ちます。これが「各ルータがネットワーク全体の地図を持つ」という意味です。地図がそろえば、各ルータは自分で最短経路を計算できます。
コストの計算:帯域幅との関係
OSPFは、経路を選ぶときに区間ごとのコストを使います。コストは、ルータのインタフェース(回線をつなぐ口)の出力側に設定する値です。RFC 2328の2.1.2節は、このコストを「管理者が設定できる値で、値が小さいほどそのインタフェースが使われやすくなる」と説明しています。帯域幅からコストを求める式はRFCにはありません。
コストの決め方は製品ごとの実装に任されています。Ciscoのルータは、管理者がコストを設定しなければ、次の式で自動的に決めます。
コスト = 基準帯域(kbps) ÷ インタフェースの帯域(kbps) # Ciscoのルータの基準帯域は、既定で100,000kbps(100Mbps)。 # 割り算の結果が小数になる場合は、小数点以下を切り捨てる。 # 帯域が太いインタフェースほど、コストは小さくなる。
この式で代表的な帯域のコストを計算すると、次のようになります。
| 区間の | 基準帯域 | 区間の | コスト |
|---|---|---|---|
| FastEthernet(100Mbps) | 100,000 | 100,000 | 100,000 ÷ 100,000 = 1 |
| イーサネット(10Mbps) | 100,000 | 10,000 | 100,000 ÷ 10,000 = 10 |
| T1回線(1.544Mbps) | 100,000 | 1,544 | 100,000 ÷ 1,544 ≈ 64.77 → 64 |
100,000 ÷ 1,544 は 64.766…なので、小数点以下を切り捨てて64です。FastEthernetの帯域はイーサネットの10倍で、コストは10分の1(10から1)になっています。このように、コストは帯域幅の逆数に比例します。
既定の基準帯域のままだと、1Gbpsや10Gbpsの区間は計算結果が1未満になり、すべてコスト1として扱われます。100Mbpsより速い回線どうしを区別したいときは、Ciscoのルータでは基準帯域の値を大きく設定し直します。
SPFで最短経路を選ぶ
リンクステートデータベースがそろうと、各ルータは自分を起点にしてSPF(Shortest Path First)というアルゴリズムを実行します。SPFはグラフ理論のダイクストラ法を使って、自分からエリア内の全ルータまでの最短経路を木の形に求めます。この「最短」は、区間ごとのコストの合計が最小という意味です。
次の例で、R1からR4までの経路を比べます。1つ目は、R1-R2-R3-R4の順にFastEthernet(100Mbps)を3区間通る経路です。2つ目は、R1とR4をT1回線(1.544Mbps)で直結する経路です。
1つ目の経路はコスト1の区間を3つ通るので、合計は1+1+1=3です。2つ目の経路はコスト64の区間を1つ通るだけなので、合計は64です。区間の数は1つ目の方が多いのに、合計コストは小さくなります。SPFは合計コストが小さい経路を選ぶので、区間数の多いR1-R2-R3-R4が選ばれます。
ホップ数(区間の数)だけで経路を選ぶ方式だと、1区間で直結する2つ目の経路が選ばれますが、そちらは帯域が細いT1回線です。コストで選べば、帯域の太い経路を選べます。ホップ数との違いは、後のRIPとの比較でもう一度取り上げます。
ネイバーと隣接の状態遷移
OSPFルータは、まずHelloパケットを定期的に送り合い、近くのルータを見つけます。Helloを送り合う相手をネイバーと呼びます。ネイバーどうしの関係は、次の表の状態を順に進みます。この状態はRFC 2328の10.1節で定義されています。NBMA網(ブロードキャストができない網)だけで使うAttemptという状態もありますが、表では省きます。
| 状態 | 何が |
|---|---|
| Down | 相手からHelloパケットをまだ受け取っていない状態。相手が停止している場合と、起動直後の場合がある |
| Init | 相手からHelloパケットを受け取った。ただし、そのHelloの中に自分のルータIDがまだ載っていない |
| 2-Way | 相手のHelloの中に自分のルータIDが載っており、双方向の通信を確認できた。ブロードキャスト網のDR・BDRは、2-Way以上の相手の中から選ぶ |
| ExStart | データベース記述パケットを交換する準備として、どちらが主導するか(マスタ・スレーブ)を決める |
| Exchange | データベース記述パケットで、お互いが持つLSAの一覧(要約)を送り合う |
| Loading | 一覧を比べて足りないとわかったLSAを、LSR(Link State Request)で相手に要求する |
| Full | 足りないLSAがすべて届き、リンクステートデータベースが一致した。この状態で初めて「隣接(アジェイセンシー)」が完成する |
LSAを交換し合い、リンクステートデータベースが完全に一致した状態がFullです。Fullになって初めて、2台のルータの「隣接(アジェイセンシー)が完成した」と言います。2-WayやInitの段階は、まだネイバーとして認識しただけで、隣接は完成していません。次の節で説明するDR・BDRを置くLANでは、DRでもBDRでもないルータどうしは2-Wayのまま止まります。これは正常な状態です。
DR・BDRの役割
同じLAN(ブロードキャスト網)にOSPFルータが何台もある場合、全台が総当たりで隣接を作ると、隣接の数が急に増えます。5台なら10本、10台なら45本です。隣接が1本増えるたびに、LSAをやり取りする手間も増えます。
この手間を減らすため、OSPFは同じLANの中からDR(Designated Router、代表ルータ)を1台選びます。RFC 2328は、DRについて「2台以上のルータが接続するブロードキャスト網・NBMA網には、DRが置かれる」「DRの仕組みによって、ブロードキャスト網・NBMA網で必要な隣接の数を減らせる」と説明しています(1.2節)。
あわせてBDR(Backup Designated Router、予備の代表ルータ)も1台選ばれます。DRでもBDRでもないルータは、総当たりではなく、DRとBDRの2台とだけ隣接を作ります。BDRは、DRが故障したときにDRへ昇格します。BDRはすでに全台と隣接しているので、切り替えは短時間で済みます。
DR・BDRは、Helloパケットに含まれる優先度の値などをもとに選びます。1つのLANは1つのサブネットに対応するので、選出もサブネットの単位で行われます。
エリアとバックボーン(エリア0)
OSPFは、ネットワークをエリアという単位に分割できます。RFC 2328の第3章は、エリアを「連続したネットワークとホストの集まりをグループ化したもの」と定義しています。ルータやネットワークのつながりを表すLSAは、同じエリアの中だけにフラッディングされます。
ルータの台数が増えるほど、LSDBは大きくなり、SPF計算の負荷も増えます。エリアを分けると、1つのエリアに含まれるルータの台数を抑えられます。各ルータが持つLSDBは自分のエリアの分だけになるので、SPF計算の負荷も小さくなります。
エリアを2つ以上に分ける場合、エリア0(バックボーンエリア)が必ず必要です。RFC 2328は「OSPFのバックボーンは、特別なOSPFエリア0である」「バックボーンは、バックボーン以外のエリアどうしの間で経路情報を分配する役目を持つ」としています(3.1節)。エリア0以外のエリアどうしは直接つながらず、エリア0を経由してやり取りします。
2つのエリアにまたがるルータをABR(Area Border Router、エリア境界ルータ)と呼びます。ABRは、エリアの中のつながり方の詳細をエリアの外へは伝えず、宛先のネットワークとそこまでのコストだけを伝えます。これにより、エリアの外のルータは、エリアの中の細かい構成を知らなくても経路を選べます。
ネットワーク全体を1つのエリアだけで構成することもできます。この形をシングルエリアOSPFと呼びます。
距離ベクトル型(RIP)との違い
OSPFのようなリンクステート型と対になる方式が、距離ベクトル型です。ディスタンスベクタ型とも呼びます。代表例のRIPは、ホップ数だけで経路を選ぶ、小規模なネットワーク向けの古いプロトコルです。隣から聞いた距離に1を足して経路を決める流れは、RIPの記事に図で示しています。
| 観点 | RIP | OSPF |
|---|---|---|
| 隣接ルータに渡す情報 | 自分のルーティングテーブルそのもの | リンクの状態を表す小さな単位(LSA) |
| 送る相手 | 直接つながっている隣のルータだけ | 同じエリア内のルータ全体(フラッディング) |
| 経路選びの基準 | ホップ数(経由するルータの台数) | コストの合計(Ciscoの既定では帯域幅から決まる) |
| 各ルータが持つ情報 | 隣から聞いた「経路と距離」の一覧だけ | エリア内のつながり方全体(リンクステートデータベース) |
RIPは、自分のルーティングテーブルの中身をそのまま、直接つながっている隣のルータへ定期的に送ります。隣のルータは、それを自分のテーブルに取り込んで、さらに隣へ送ります。このため、遠くのルータの情報ほど、伝わるまでに時間がかかります。
OSPFは、LSAをエリア内の全ルータへフラッディングします。変化があった区間のLSAだけを送り直せばよいので、その情報が全ルータへ伝わるまでの時間は短くなります。さらに、SPFの節で説明したとおり、ホップ数ではなく、帯域幅から決まるコストの合計で経路を選びます。
OSPFとスタティックルート、OSPFとBGPのように、違う情報源から同じ宛先への経路を同時に受け取ることもあります。その場合にどちらを信頼するかは、アドミニストレーティブディスタンスの記事で説明しています。
練習問題(全5問)
正解:LSA
LSAは、
正解:10
コストは
正解:どちらか
合計コストが
正解:全ルータが
ルータが
正解:他の
エリア0は、
選んでから「採点する」を押すと、解説つきで答え合わせができます。
関連記事
OSPFは、同じ組織の中(AS内)で使うルーティングプロトコル(IGP)の1つです。他のIGPや、組織と組織の間で使うBGPとの関係は、ルーティングの記事にまとめています。BGPの仕組みは、BGPの記事で説明しています。エリアを分ける例でサブネットを区切る考え方は、サブネットマスクの記事で説明しています。コストが等しい経路を複数使う例は、スパインリーフ型の記事にあります。
おすすめの本 PR
ネットワークを初めて学ぶ人向けの入門書です。
![『[改訂新版]3分間ネットワーク基礎講座』の表紙](https://m.media-amazon.com/images/P/4774143731.09.MZZZZZZZ.jpg)
