大規模ネットワークのルーティングにも対応-OSPF

 皆さんは既にディスタンスベクタ型のルーティングプロトコルについて学びました。そこで、ディスタンスベクタ型では大規模ネットワークでのルーティングは難しいようだということを理解していただけたのではないでしょうか。そこで、今度はディスタンスベクタ型に代わるべきものとして期待されているリンクステート型のルーティングプロトコルについて説明したいと思います。リンクステート型のルーティングプロトコルにもいくつかの種類がありますが、代表的なものがOSPF(Open Shortest Path First)です。

 OSPFはRIPと同様にIGPsのプロトコルですので、AS内部でのルーティングに利用します。クラスレスのルーティングプロトコルで、メトリックにはコスト値を使っています。コスト値は帯域幅に基づいて予め定義されていて、パス毎にコスト値を合計することで、パスの優劣を決めていきます。OSPFは収束が速いという特性を持っていますが、これが大規模ネットワークに対応できる秘密です。そして、この収束の速さの原因が、ルーティングテーブルと実際のネットワークトポロジーの矛盾を早期に解消するための工夫です。この工夫にはいくつかの側面がありますが、その第一がネットワークを階層構造で把握すること、その第二がOSPFルータ間でデータベースを同期させてから、各自がルーティングテーブルの計算をすることです。

 階層構造でネットワークを把握するということはネットワークをエリアに細分化して、このエリア内で情報を交換するということです。このときに交換する情報をリンクステートと言います。RIPの場合にはルーティングテーブルそのものを交換していましたが、リンクステートはルーティングテーブルではなく、ルータとネットワーク(リンク)の接続関係(状態)です。このリンクの状態をエリア内から集めて各自がデータベースを構築します。そして、エリア内のルータがこのリンクステートのデータベースを同期させた上で、用意ドンで各自ルートの計算を行い、自分でルーティングテーブルを作成します。ループ発生の原因はディスタンスベクタ型やRIPのところで説明したように、新しいネットワークトポロジにマッチしたルーティングテーブルを持っているルータと、マッチしていない(まだ古いネットワークトポロジにマッチしたルーティングテーブルを保持している)ルータが混在していることです。しかし、リンクステート型はエリア内のOSPFルータがデータベースを同期させた上に、一斉にルートの計算に入るので、ループが生成される可能性が極めて小さくなります。
 ネットワークをエリアに細分化して、その中でルートの計算を行いますので、エリア内のルートの計算は簡単になります。そして、エリア間で共有する情報は必要最小限にしています。つまり、エリア間では簡略化されたリンクステートをやり取りします。そのため、ネットワークトポロジが変更されても、それがエリアの外ならば、そのことに関係した情報はエリアには入ってきません。ということは、エリア外でトポロジに変化が起きても、ルート再計算の必要はないということになります。

 そんなにうまくいくのかと疑問に思う人もいるかもしれませんが、どうしたらそんなにうまくいくのか細かく検討してみたいと思います。





1 OSPFの基本知識

 OSPFはRIPと比べると遙かに複雑なプロトコルですので、様々な特有の用語を使います。ここでは、OSPFを理解するために必要な基本的な知識を整理しておきたいと思います。

用語 説明
コスト 帯域幅に基づいてインターフェースに割り当てられた値。コストはインターフェースからリンクに出て行くときに関連付けられる。インターフェースの出力側に割り当てられるので、「インターフェースアウトプットコスト」と呼ばれる。
AS OSPFでいうASとは「同じルーティングプロトコル(OSPF)を利用してルートに関する情報をお互いに交換するルータのグループ」のことで、BGPで使うAS(同じルーティングポリシーで管理運用されているネットワーク)とは意味が違う。
エリア 同じエリア識別番号を持つネットワークとルータの集合体。同一エリアのルータは同じリンクステートデータベースを持つ。
隣接ルータ 同じリンクにインターフェースを持つルータのことを互いに隣接ルータ(Neighbor、ネイバー)と言う。
隣接テーブル ルータ同士がお互いに隣接であると認識した状態を双方向状態(2-Way State)と言い、双方向状態にある隣接ルータのリストを隣接テーブルと言う。
リンクステートテーブル ネットワーク全体のルータが送信してくるLSAをまとめたもの。このデータベースがネットワークのトポロジを表す。1つのエリア内の全てのルータは同じリンクステートデータベースを持つ。
ルーティングテーブル リンクステートデータベースを基にして各ルータがルーティングテーブルを算出


2 ルーティングテーブル作成までの流れ

 OSPFではルーティングテーブルを作成するまでに、さまざまな手順を踏んでいきますので、まずはじめにルーティングテーブル作成までの流れを大まかに説明したいと思います。

 OSPFルータ同士が交換するルートに関する情報をLSA(Link State Advertisement、リンク状態広告)といいます。LSAはルータやネットワークの状態に関する情報広告ですが、詳細な情報はある特定の範囲でやり取りし、その範囲外とはもっと簡略化したLSAをやり取りします。詳細情報のLSAをやり取りする範囲をエリアといいます。簡略化したLSAをやり取りすのはエリア外ということになります。詳細なLSAにもいくつかの種類があり、簡略化したLSAにもいくつかの種類があります。これらについては後で説明することにします。

※OSPFはIPパケットのペイロード情報として送信されます(プロトコル番号は89)。RIPのようなアプリケーション層のプロトコルではなく、TCPやUDPと同様のトランスポート層のプロトコル




2.1 エリアの構築

 エリアの設計はネットワーク管理者が手作業で行います。エリアの設定は、各ルータ毎にネットワークアドレスに対して、エリアIDを対応付けます。そうすると、そのネットワークアドレスを持つインターフェースがそのエリアに所属することになります。1つのエリア内に丸ごと(全てのインターフェースが)納まっているルータでは、このコマンドを1回実行します。複数のエリアにまたがっているルータ(境界ルータ)は所属するエリアの分だけコマンドを実行します。これによって特定エリアに所属するルータインターフェースは同じエリアIDを持つことになります。

 複数エリア(マルチエリアOSPF)に分割する場合には、複数のエリアを接続するための特別のエリアを必要とします。このエリアをバックボーンエリアといいます。バックボーンエリアは、エリア番号(ID)0をセットします。バックボーン以外の全てのエリアは原則として(例外はVirtual-Link、仮想リンク)、バックボーンエリアに接続していなくてはなりません。

 複数エリアを接続するルータをエリア境界ルータ(ABR、Area Border Router)といいます。

バックボーンエリアを中心として、全部のエリアが接続

※CiscoルータでOSPFを稼働させるには、"router ospf <プロセスID>"コマンドを使用します。この後、network areaコマンドで、インターフェースが所属するエリアのIDを指定します("network <address> <wildcard-mask> area <area -id>")。wildcard-maskは"0"がマッチ、"1"が「don't care」ですので、通常のサブネットワークマスクと逆になります。0.0.255.255は上位16ビットがマッチしていればいいという意味になります。バックボーンエリアのエリアIDは0です。例)"network 10.2.0.0 0.0.255.255 area 0"


2.2 情報交換に使う5つのパケット

 OSPFではエリア内の状況を把握しつつ情報の交換を行い、データベースを作成していきますので、その間にさまざまな種類のパケットを交換していきます。細かく分類すると十数種類のパケットを使い分けます。十数種類のパケットは大きく分けると5つに分類されます。

 5種類のパケットはそれぞれタイプ番号を与えられています。1:Hello、2:DBD、3:LSR、4:LSU、5:LSAckの5種類です。Helloはエリア内の状況を最初に把握するために使用います。エリアは最初にネットワーク管理者がルータに対してセットするものですから、当のルータは仲間がどんなルータか知りません。そこで、最初にOSPFルータはHelloパケットを出して隣近所の様子を伺います。この隣近所の様子をOSPFでは双方向状態といっています。双方向状態が分かってきたら、次にもっと濃密な関係を築いていきます。この関係を隣接関係といいます。

 隣接関係では、お互いにどのようなリンクステートデータベース(Link State Database)を持っているか探り合います。リンクステートデータベースは、OSPFルータ同士がやり取りするLSA(Link State Advertisement)というメッセージの集合体です。この集合体をお互いに知らせ合うということになります。ただし、データベースそのものでは容量が大きくなりすぎますので、LSAのヘッダ情報だけ交換します。LSAのヘッダ情報をペイロードとして運ぶのがDBD(Database Description、データベース記述)パケットです。これで相手が何を知っていて何を知らないかが分かります。

 自分の知らない情報を相手が知っていればそれをLSR(Link State Request)パケットで要求します。LSRパケットには欲しいLSAのリスト(ヘッダのリスト)が示されます。

 LSRによって要求を受けたルータは、指定されたLSA(本体)をLSU(Link State Update)パケットを使って送信します。LSAを受信したらLSAck(Link State Acknowledgemnt)で確認応答します。LSAckには受信したLSAのヘッダのリストが示されます。



2.3 双方向状態の構築

 双方向状態の構築はお互いを同じネットワーク上のルータとして認識する段階です。この段階で交換するパケットはHelloです。Helloパケットには隣接ルータの情報が入っていますので、相手の隣接ルータのリストに自分(受信ルータ)のIPアドレスが入っていれば、相手が自分を知っていることが分かります。

 Helloをもらったルータは、相手(Helloの送信元)のIPアドレスを隣接ルータのフィールドに格納して、Helloパケットを送れば、相手も自分を知ってくれることになります。これで双方向状態が構築されました。ネットワーク上の全てのOSPFルータと双方向状態が構築できれば、双方向状態が確立されたことになります。

2.4 指名ルータ(DR)、バックアップ指名ルータ(BDR)の選出

 双方向状態が確立したら次は隣接関係の構築なのですが、マルチアクセスネットワークの場合は、そのまま隣接関係の構築とはいきません。マルチアクセスネットワークでは全部のルータが隣接関係を構築するのは大変です。隣接関係が多くなり過ぎると、隣接関係構築・維持のために交換するLSAメッセージの量が膨大になり、帯域を圧迫することになります。また、LSAを格納するリンクステートデータベースも巨大になり、リンクステートデータベースから最適ルートを算出するための計算量も膨大になってしまいます。つまり、帯域、メモリ、CPUへの負荷が大きくなります。そこで、マルチアクセスネットワークでは、ネットワークを代表するルータ(DR、Designated Router、指名ルータあるいは代表ルータ)を選出します。指名ルータにもしものことがあった場合に、取って代われるようにバックアップ指名ルータ(Backuup Designated Router、BDR)も選んでおきます。

 指名ルータ(バックアップ指名ルータ)の選出もHelloパケットの交換によって行います。Helloパケットには優先度フィールドがあります。Helloパケットの交換によってどのルータが最も大きなプライオリティ値を持っているかが分かります。

※マルチアクセス型のネットワーク:イーサネットの様に1つのインターフェースを通じて複数のルータやホストと通信ができるネットワーク、つまり回線共有型のネットワークのこと。
※ ポイントツーポイントネットワーク:ノード同士が一対一で直接接続しているネットワークのこと



2.5 隣接関係の確立

 マルチアクセスネットワークでは、指名ルータ(バックアップ指名ルータ)とそれ以外のルータとの間で、隣接関係を構築します。指名ルータ(バックアップ指名ルータ)でないルータ同士が隣接関係を構築することはありません。

 ポイントツーポイントネットワークでは指名ルータ(バックアップ指名ルータ)を選出する必要はありません。リンクの両端同士で隣接関係を構築します。

 ルータAとルータBが隣接関係を構築する場合について考えてみます。ルータAとルータBは持っているリンクステートを交換し合います。リンクステートの集合がリンクステートデータベースですので、データベースを見せ合うことになります。ただし、データベースの中身を見せ合うのは効率が悪いので、リストを見せ合うことになっています。このリストがLSAヘッダのリストということになります。自分の持っているLSAのヘッダのリストを示す方法がDBDパケットの送信です。

 お互いにLSAヘッダのリストを見せ合うと、相手が何を知っていて何を知らないかが分かります。自分の知らないLSAを相手が持っていることが分かれば、そのLSAヘッダを指摘して送信を要請します。このとき使用するパケットがLSR(Link State Request、リンク状態要求)パケットです。

 LSRで要求されたときは、要求されたLSAをLSUで送信します。LSUを受け取ったルータは確認のためにLSAckパケットを送ります。

 隣接ルータ同士はパケットのやり取りの後に同じリンクステートデータベースを持ちます。隣接ルータが同じリンクステートデータベースを持った段階を「リンクステートデータベースが同期」したといいます。リンクステートデータベースが同期したとき、隣接関係が確立したといいます。

 各LSA(のヘッダ)にはLSAが作成されてから経過した秒数を示すリンク状態年齢フィールドがあります。LSAがリンクステートデータベースにある間も、このフィールドは増加し続けMAXエイジ(3,600秒)に達すると失効します。LSAの発行元は、LSAが失効する前に新しいLSAを発行します(30分毎)(30分=1,800秒)。



2.6 ルーティングテーブルの作成

 隣接関係が確立するとその時点で各隣接ルータのリンクステートデータベースは同じになっていますので、各ルータはデータベースを基にして、自分自身をルート(root)とする最短パスツリーを作成し、そのツリーを基にして、各宛先に対する最適ルートを作成します。この後、最適ルートはルーティングテーブルに注入され、ルーティングに利用されます。

2.7 隣接関係の維持

 隣接関係が確立してからのルータは定期的にHelloパケットを送信します。この時間間隔がHelloインターバルです。

 相手からHelloが届かないで一定時間が経過すれば、相手がダウンしたものと判断します。この時間のことをルータDeadインターバルと言います。

 ネットワークダウンなどの障害を検知したルータは、リアルタイムでLSUパケットを隣接ルータ宛に送信します。マルチアクセスネットワークでは指名ルータにLSUを送信します。それを受けた指名ルータは自分の隣接ルータに配信します。LSUパケットを受信したルータが他のネットワークに接続している場合は、更にそのネットワークにLSUパケットを送信します。この一連の手続きをフラディング(flooding、洪水のように一気に全体に行きわたらせる動作)といいます。

 LSUパケットを受信したルータはリンクステートデータベースを更新し、最適ルートを再計算し、ルーティングテーブルに注入します。


 ここまでで、OSPFの概略は大体説明しました。ここからは、もう少し突っ込んだ説明になります。もっと詳しく知りたい方はこのまま読み進んでください。




* ここからは少し専門的、具体的になります *


3 双方向状態の確立

 双方向状態(2-Way State)の確立は、ネイバー(Neighbor)の確立とも言います。隣にどんなルータがいるかを確認する段階です。ルータAとルータBがお互いに相手が自分を知っていると分かれば、双方向状態が確立します。

 双方向状態になるまでステップを踏んで理解しましょう。

≪ステップ1≫(Down State、停止状態)
 OSPFルータが他のルータとの交換情報を持たない段階をDown Stateと言います(ただし、ルータは稼働状態)。このとき、ルータはOSPFに参加しているインターフェースを介して、マルチキャストアドレス(224.0.0.5)宛にHelloパケットを送信します。

≪ステップ2≫(Init State、初期状態) 
 Helloパケットには隣接ルータがリストアップされています。Helloパケットを送信するルータをA、受信するルータをBとします。ルータAから送信されてくるHelloパケットの隣接ルータのリストには、まだBはリストアップされていません。OSPFを実行する全ルータはルータAからのHelloパケットを受信したら、自身の隣接ルータのリストにルータAを追加します。

≪ステップ3≫
 Helloを受信した全ルータは、ユニキャスト宛(Helloの送信元であるA宛)にHelloを返します。この返信のHelloの隣接ルータのフィールドには、そのルータが知っている隣接ルータの全てが記載されます。先ほどルータAからHelloがあり、その返事ですので、この返事のHelloの隣接にはルータAが載っているはずです。

≪ステップ4≫(2-Way State、双方向状態)
 ルータAは受信Helloの隣接に自分のIDが入っていれば、相手が自分を知っていることが分かります。このようにして、全てのルータが、隣接が自分を知っていることを確認できたら、双方向状態が完成します。
 ポイントツーポイント接続のネットワークでは、次に隣接関係の確立に移ります。マルチアクセスネットワークの場合は、次に指名ルータ(DR)、バックアップ指名ルータ(BDR)の選出に移ります。



4 指名ルータ、バックアップ指名ルータの選出

4.1 マルチアクセスネットワークでの指名ルータの必要性

 マルチアクセスネットワークでは指名ルータ(Designated Router、DR、代表ルータ)、バックアップ指名ルータ(Backup Designated Router、BDR、バックアップ代表ルータ)を選出し、指名ルータ(バックアップ指名ルータ)とその他のルータとの間だけで隣接関係(Adjacency、アジェイスンシー)を構築します。隣接関係の構築はルーティングテーブルを作成するのが目的です。OSPFでは、SPF(Shortest Path First)というアルゴリズムを使って最適ルートの計算をしますが、その元になっているのは自分をルートとした最短パスツリーです。

4.2 指名ルータ、バックアップ指名ルータの選出基準

 ルータはHelloパケットの交換プロセスの実行中に、相互の優先度をチェックし、指名ルータ、バックアップ指名ルータを選出します。選出基準は次の通りです。

指名ルータ、バックアップ指名ルータ選出基準
① もっとも大きな優先度(プライオリティ値、Helloパケットのヘッダフィールド参照)を持つルータを指名ルータに選出し、2番目に大きな値を持つルータをバックアップ指名ルータとする
② 優先度が同じ場合は、ルータIDの大きなルータを指名ルータ、バックアップ指名ルータとする

※Ciscoルータの場合は、OSPFインターフェースの優先度はデフォルトで1になっています。したがって、ルータIDが選出基準になります。ルータIDとしてはアクティブになっている(up設定)インターフェースに割り振られたIPアドレスの中で一番大きな値が利用されます。インターフェースがダウン(down設定)すると、ルータIDが変わる可能性があるのは困ります。Ciscoルータではループバックインターフェースが設定されていれば優先的にそのアドレス(ループバックインターフェースに割り当てられたアドレスで、127.0.0.1のことではない)を利用することになっています。ループバックインターフェースが複数設定されていれば、その中のもっとも大きな値が使われます。Cisco IOS12.0(8)以降では、インターフェースがダウンしても、そのインターフェースのアドレスがそのままルータIDとして機能することを認めています。更に、"router-id"コマンドで手動で定義することも可能です。この場合には他のOSPFルータとルータIDが重複しないように注意して下さい。router-idコマンドで、ルータIDを設定した場合には、ルータを再起動するか、"clear ip ospf process"コマンドで、OSPFプロセスを再起動する必要があります。

※Cisco IOS(Cisco Internetwork Operating System):シスコシステムズの殆どのルータとスイッチで使用されるOS。スイッチに関しては、以前はCatOSを使うものもありましたが、現在ではCisco IOSを使っています。Cisco IOSは独特のコマンドラインインターフェース(CLI)を有しており、その形式は他社のネットワーク製品によって広く模倣されています。

※Ciscoルータは優先度はデフォルトで1になっていますが、コマンドで指定することもできます。優先度の指定は、"interface <インターフェース名>"でインターフェースを指定して、"ip ospf priority <プライオリティ>"で指定します。


4.3 指名ルータの粘着性

 より高い優先度のルータが後からネットワークに加わっても、指名ルータやバックアップ指名ルータは変更されません。新たなルータがネットワークに追加される度に指名ルータ選出のプロセスと隣接関係構築のプロセスを繰り返していたのでは効率が悪くなるからです。優先度の高いルータが後から追加されても指名ルータ(バックアップ指名ルータ)は変更されないという性質を指名ルータの粘着性といいます。

 指名ルータ(バックアップ指名ルータ)が変更されるのは、どちらかが故障した場合だけです。指名ルータがダウンすると、直ちにバックアップ指名ルータが、指名ルータに昇格し、バックアップ指名ルータの選出手順が開始されます。バックアップ指名ルータがダウンした時も直ちに、バックアップ指名ルータの選出手順が開始されます。

 指名ルータになるルータにはかなりの負荷がかかりますので、ネットワーク管理者は予めどのルータを指名ルータにするかを決めて、優先度やルータIDを設定しなくてはなりません。また、1つのルータが複数のセグメント(マルチアクセスネットワーク)の指名ルータにならないように注意すべきです。



5 隣接関係の確立

 指名ルータ、バックアップ指名ルータの選出が済むと、リンクステートデータベースの作成手順を開始できる状態になります。なお、バックアップ指名ルータの役割ですが、バックアップ指名ルータは指名ルータに万が一のことがあった場合にそれに取って代わるために準備しているだけで、アクティブな行動は何一つしません。しかし、何かあったときに直ぐに指名ルータとして働き始める必要がありますので、他のルータとの間に隣接関係を構築しておくことは必要です。

 それでは隣接関係確立の手順をステップ毎に説明していきます。

《ステップ1》(Exstart State、起動後状態)
 指名ルータ、バックアップ指名ルータの選出が済むと、起動後状態(Exstart State)にあるとみなされます。隣接関係の構築はマルチアクセスネットワークだけでなく、ポイントツーポイントネットワークのように指名ルータ(バックアップ指名ルータ)を選出しないネットワークでも行われます。
 2台のルータが隣接関係を構築するためには、どちらが最初に交信を始めるかを決めておく必要があります。最初に交信を始めるルータがマスターで、そうでないほうがスレーブとなります。より大きなルータIDを持つルータがマスターになります。

《ステップ2》(Exchange State、交換状態)
 マスターとスレーブの間の隣接関係構築手順は、ポーリング応答モードによって行われます。ポーリング応答モードでは、マスターがDBDパケットを送信し、スレーブからのDBDパケットを送信します。DBDパケットヘッダにはデータベース記述シーケンス番号フィールドがあります。マスターは最初のDBDパケットの送信時に初期値を定義します。

《ステップ3》(Loading State、ロード状態)
 DBDパケットを受信したルータは次のように行動します。

● LSAckパケットでDBDパケットを受信したことを通知(受信DBDパケットのシーケンス番号をコピーして、LSAヘッダのシーケンス番号フィールドに貼り付け、LSAckで送り返す)
● 受信したDBDパケットのLSAヘッダ内のリンク状態シーケンス番号をチェックして、現在持っている情報と受信した情報を比較。受信したDBDパケットのリンク状態エントリ(ただし、LSAヘッダで表示)の方が新しいことが分かったら、LSR(リンク状態要求)パケットを送信して、最新情報の部分を要求
● LSRを受信したルータはLSU(リンク状態更新)パケットで、要求に応答。LSUパケットを受信したルータはLSAckで確認応答。

《ステップ4》
 全てのルータは、新しいリンクステートエントリを自身のリンクステートデータベースに追加

《ステップ5》(Full State、完全状態)
 あるルータに対して全てのLSRパケットの処理が終了すると、その隣接ルータは同期して、完全状態(Full State)になったとみなされます。この時点で隣接関係が確立し、隣接関係にある全てのルータが同一のリンクステートデータベースを持ちます。

 完全状態になるとルーティングテーブル作成の手順を始めることができます。各ルータはリンクステートデータベースに基づいて、各宛先ごとに最適ルートを計算し、それをルーティングテーブルに注入していきます。リンクステートデータベースに基づいて最適ルートを計算する際に利用するアルゴリズムがSPFです。 

SPFアルゴリズム(省略可)

 次にSPFアルゴリズムの働きについて説明しますが、ネットワーク管理者にとってはブラックボックスでも構いません。論理的には面白いところですので、興味のある人はお読みください。



6 最適ルートの算出

 OSPFとは、SPF(Shortest Path First)アルゴリズムをOpenな形で使うという意味です。SPFはオランダの計算機科学者であるエドガー・ダイクストラ(Edsger Dijkstra)という人が考案したアルゴリズムです。ダイクストラのアルゴリズムは、重み付きのグラフの2点間の最短経路を求めるためのものです。重み付きグラフとは、グラフの辺に重み(コスト)がついているグラフのことを言います。なお、SPFアルゴリズムは各ルータがツリー状にポイントツーポイント接続しているトポロジーを前提としています。

※Ciscoルータの場合は、インターフェースの帯域幅によってデフォルトのコスト値が自動的に決まります。各インターフェース毎にコマンド("ip ospf cost <コスト値>")で設定することもできます。何もしなければ、デフォルト値が設定されます。インターフェースのコスト値=100M/帯域幅となります。"auto-cost reference-bandwidth"コマンドで、コスト計算式の分子の「100M」という値を自由に変えることも可能です。

 マルチアクセスネットワークではルータとルータが1対1で接続しているわけではありませんので、とりあえず実際のネットワークからSPFアルゴリズムを適用できるネットワークを論理的に抽出していく必要があります。この論理的ネットワークを最短パスツリーといいます。したがって、最初は如何にして最短パスツリーを論理的に導き出すかということになります。

コストを割り当てたネットワーク図

 上の図のネットワークで考えてみましょう。

6.1 リンクステートデータベースの作成

 リンクステートデータベースは、ネットワークの情報を、ルータ同士やルータとネットワークなどの間を辺で結んだグラフ(有向グラフ)構造で表現し、それを表形式にしたものです。

 上の図でネットワークに割り当てた数字はコストです。ルータからネットワークに到達するためのコスト、ポイントツーポイント接続のルータからルータに至るコストです。ルータ間のコストはリンクの方向によって非対称に割り当てることも可能ですが、そうすると行きと帰りでコストが異なることになり、ルーティングに問題が生じたときのデバック作業が大変です。通常は対称的にコストを割り当てます。上の図でも対称的にコストを割り当てました。ただし、ネットワークからルータへのコストは0です。

 上のネットワーク図からリンクステートデータベースを作成すると次のようになります。表の最上位の行が矢印の元、下の左側の欄が矢印の進む先となっています。

From
/to
Router-A Router-B Router-C NW3
Router-A 1 5 0
Router-B 1 2
Router-C 5 2 0
NW1 3
NW2 1
NW3 2 3
if-A 1
if-B 1

 ネットワークの性質によってリンクステートデータベースの作り方が異なっていますので、ネットワークの種類ごとに説明します。

● トランジットネットワーク
 マルチアクセスネットワークに2台以上のルータが接続された状態をトランジェットネットワークといいます(上の例では、NW3)。トランジェットネットワークでは、グラフを双方向グラフと考え、両方の向きにコストをセットします。上の表では、ルータとネットワークが交差するセルにコストをセットします。ネットワークからルータへのコストは0となります。ルータからネットワークへの方向だけコストが設定されますので、分かり易いように片方向のグラフを両方向に1本ずつで表現しました。

● スタブネットワーク
 ルータが1台しか設定されていないネットワークをスタブネットワークといいます(上の例では、NW1とNW2)。このような行き止まりのネットワークでは、ルータからネットワークへと進む片方向の矢印で表現します。

● ポイントツーポイントネットワーク
 ポイントツーポイントネットワークではインターフェースにIPアドレスを振っても(Numbered)構いませんが、振らない(Unnumbered)でも通信は可能です。リンクの先には1台のコンピュータしかないからです。
 ポイントツーポイントネットワークでは、それぞれのルータが対向側のルータと双方向で結ばれる形をとります。IPアドレスを割り振らない場合はこれだけですが、IPアドレスを割り当てた場合は、インターフェースをスタブリンク(行き止まりのリンク)とみなして、さらに対向側インターフェースに向けた片方向の辺を考えます。今回の例では、ルータAとルータBのポイントツーポイントリンクにはIPアドレスが割り当てられていますので、リンクステートデータベースの左側の欄にはif-Aとif-Bが記載されています。



6.2 最短パスツリーの作成

 リンクステートデータベースが完成したら、各ルータはこれを基にして、自分自身をルートとする最短パスツリー(Shortest Path Tree)を作ります。このときに利用するアルゴリズムがSPFアルゴリズムです。

SPFアルゴリズム
全てのノードの中でコストが最小のノードを確定し、そのノードから次のノードを加えて更に最小ノードを確定していく作業を繰り返す。

 このアルゴリズムは単純で、「全てのノードの中でコストが最小のノードを確定し、そのノードから次のノードを加えていく」作業を繰り返します。ここで言うノードとは、ルータ、ネットワーク、ポイントツーポイントリンクの対向側のIPアドレスの割り当てられた(Numbered)インターフェース、あるいはホストです。今回の例ではホストは考慮していません。

 では、ルータAをrootとする最短パスツリーの例を考えてみることにします。

≪ステップ1≫
 ルータAをルートとするパスツリーを作るわけですから、初めにルータAを書きます。次に、リンクステートデータベースのRouter-Aの列(FromがRouter-Aの列)のRouter-B、Router-C、NW1、NW3、if-Bをパスツリーに追加して、線分に対してコストを書き入れます。更にトランジェットネットワークNW3からコスト0で到達できるRouter-CをNW3の先に追加します。

最短パスツリー:ステップ1

 この時点で確定しているのはルートのRouter-Aだけです。次にSPFアルゴリズムの「全てのノードの中でコストが最小のノードを確定し、そのノードから次のノードを加えていく」という原理に沿って作業を続けます。「全てのノードの中でコストが最小のノード」とはリーフノードへのコストが最小のものです。この例では、Router-Bとif-Bが該当します。
 Router-Cへのパスは直接行くパスと、NW3を経由していくパスがありますが、直接行くパスの方がコストが高いので、このパスを削除します(図では取り消し線で削除)。

≪ステップ2≫
 ステップ1で確定したノードの次のコードを見つけます。ただし、ポイントツーポイントリンクのインターフェースであるif-Bから先は検査対象から外します。従って、Router-Bの先に次のノードを見つければいいということになります。

 リンクステートデータベースで、FromがRouter-Bの列を見て、グラフに追加して下さい。Router-Aは自分自身、if-Aは自分のインターフェースですから、グラフには追加しません。そうすると、追加すべきはNW2とRouter-Cだけになります。

最短パスツリー:ステップ2

 ここでもRouter-Aから見てリーフへのコストが最も小さいものを選択します。ステップ1で確定したものを除くと最小コストは2なので、コストのNW2と、NW3経由のRouter-Cを確定します。Router-B経由のRouter-Cはコスト合計3で、NW3経由のものより高いので消去します。

≪ステップ3≫
 ステップ2で確定したノードの次ノードを探します。NW2はスタブネットワークなので、この先は行き止まりです。次にRouter-Cの先を探します。リンクステートデータベースのFromがRouter-Cの列を見ると、Router-A、Router-B、NW3です。Router-Aはルート自身ですので省きます。Router-Bは既に確定していますので、これは検査対象外です。NW3も既に経由してきているので、検査対象外です。確定したもの以外で、最小のものはNW1ですので、これを確定します。

最短パスツリー:ステップ3

≪ステップ4≫
 ステップ3で確定したノードの次のノードを探します。NW1はスタブネットワークなのでこの先は行き止まりです。これでルートをRouter-Aとする最短パスツリーが完成しました。


6.3 ルーティングテーブルの作成

 最短パスツリーを基にしてルータAのルーティングテーブルを作成すると次のようになります。

  ルータAのルーティングテーブル
宛先  ネクストホップ  コスト 
NW1 * 3
NW2 Router-B 2
NW3 * 2
Router-B * 1
Router-C * 2
if B * 1

 最短パスツリーによって各宛先への最短パスが見つかります。この最短パスがルーティングテーブルに注入されます。ある宛先に対して等コストの最短パスが複数見つかった場合は、最大6本までルーティングテーブルに保持し、ロードバランシングを行うことが出来ます。

※Ciscoルータの場合は、デフォルトでは等コストパスは4本まで



7 隣接関係の維持

 リンクステート型のルーティング環境では全てのルータのリンクステートデータベースを常に同期させておくことが非常に重要です。リンク状態が変化したかは、Helloパケットを使って検出します。ある特定の隣接ルータからHelloパケットが送られてこない状態のままルータDeadインターバルで指定された時間が経過すると、そのルータはダウンしているものとみなされます。

 リンク状態に変化が生じた場合、それを検知したルータはフラッディングプロセスを利用してエリア内の他のルータにそのことを知らせます。そのことを次の図を使って説明します。

隣接関係の維持

≪ステップ1≫
 ルータBはルータAがHelloを送ってこない時間がルータDeadインターバルを越えたので、ダウンしたものと判断して、隣接関係を利用して、マルチアクセスネットワークの指名ルータ(DR)、バックアップ指名ルータ(BDR)宛(224.0.0.6)に更新したLSAエントリを含むLSUを送信します。

≪ステップ2≫
 ルータC(DR)はLSUを受信したことを通知するLSAckを返します。続いてマルチアクセスネットワーク内の全てのOSPFルータ宛(224.0.0.5)にLSUをフラッディングします。ルータCからのLSUを受信したルータはLSAckで確認応答します。

≪ステップ3≫
 ステップ2でLSUを受信したルータがもし別のネットワークにも接続している場合には、受信したLSUを更にフラッディングします。そのネットワークがマルチアクセスネットワークの場合には指名ルータとバックアップ指名ルータに送信します(この場合には、指名ルータが更にフラッディングしてくれます)。ポイントツーポイントネットワークの場合には、対向ルータにフラッディングします。必要ならば、更にそのルータがフラッディングしてくれます。

≪ステップ4≫
 変更されたLSAを含むLSUを受信したルータは、自身のリンクステートデータベースを更新し、新しくなったリンクステートデータベースを使って、新しいルートの計算をします。ただし、直ぐにルーティングテーブルには注入しません。直ぐにルーティングテーブルを更新すると、ルートフラッピング(短時間にルート消失/出現を繰り返す現象)を引き起こす可能性があります。ルートフラッピング問題を回避するため若干の時間をおいてからルートを新しいものに取り換えます。

※シリアル回線のように、リンクが急速にアップ(up)とダウン(down)を繰り返す場合は、最適ルートを計算しても、直ぐにLSUを受信し、ルートの再計算が必要となる場合があります。このような場合は、ルートの計算が終わっても直ぐにルーティングテーブルに注入することはせず、若干のタイムラグの後にルートに注入する方が得策です。このタイムラグのデフォルト値は5秒です。Cisco IOSでは、"timers spf <spf-delay> <spf-holdtime>"コマンドで、このタイムラグ値と連続する2回のSPF計算の最小間隔(デフォルトでは10秒)を調整することが出来ます。

 LSUを受信したルータの動作は次の通りです。

 自身のリンクステートデータベースにまだ存在しないエントリを受信した場合は、そのエントリをデータベースに追加して、SPFで新しいルートを計算し、ルーティングテーブルに注入します。
 既に存在しているエントリを受信した場合は、LSUパケットに含まれる情報も既知の時は、ルータはそのLSAエントリを無視します。
 エントリが既に存在していても、LSUパケットに新しい情報が含まれていた場合は、リンクステートデータベースを更新し、更にSPF計算をして、新しいルートをルーティングテーブルに注入します。
 エントリが既に存在し、LSUパケットに含まれる情報の方が古いという場合には、ルータは自身の持っている新しい情報をLSUの送信元に送ります。





8 いろいろのネットワークでの適用

 専門的な話です。必要になったらその都度参照してください。通読の対象外です。とりあえず、1回目に読むときは省略して下さい。

 ここまでは基本的にネットワークはマルチアクセスネットワークであるという前提でお話をしてきましたが、実はマルチアクセスネットワークでは舌足らずで、正確にはブロードキャストマルチアクセスネットワークです。OSPFで定義しているネットワークはこのブロードキャストマルチアクセスネットワークの他に、ポイントツーポイントネットワーク、NBMA(Non-Broadcast Multi Access Network;マルチキャストであるが、ブロードキャストはできないネットワーク)、ポイントツーマルチポイントネットワーク、バーチャルネットワークです。

8.1 OSPFで利用可能なネットワーク

● ブロードキャストマルチアクセスネットワーク
 相互に接続された3台以上のルータをサポートするネットワークで、全ての接続ルータにブロードキャストを送ることができます。イーサネット、トークンリング、FDDIなどの通常のLANテクノロジーが、ブロードキャストマルチアクセスネットワークの例です。

トークンリング(token ring):LANの物理層、データリンク層の規格の一つ;IBM社の開発。IEEE802.5で規格化。通信速度は4Mbpsおよび16Mbps。ノードがリング状に接続され、トークンがリング上を高速回転(トークンパッシング)。情報を送信したいノードはトークンを捉えて、それをフレームに変えてデータを搭載して送り出します。衝突が発生しないという特徴を持っているため、10Mbpsの標準イーサネットと比べると性能や安定性の面で優れていますが、イーサネットの高速化・低価格化、スイッチングハブの登場などにより優位性を失い、現在は殆どイーサネットに置き換えられています。

※FDDI(Fiber-Distributed Data Interface):アクセス制御にトークンパッシング方式を使って、光ファイバー回線で100Mbpsの通信速度を出すLAN規格

 論理的にはブロードキャストネットワークに属するルータは他の全てのルータとの間で隣接関係を構築することは可能ですがそれでは大変ですので、指名ルータが選出され、指名ルータと他のルータとの間で隣接関係が結ばれることになります。

● ポイントツーポイントネットワーク
 1対のルータを接続したネットワークです。T1専用シリアル回線などがポイントツーポイントの例です。ポイントツーポイントネットワークでは、指名ルータを選出する必要はありません。

※T1回線:通信速度1.5Mbpsのデジタル専用回線の規格。インターネットの普及期には基幹回線として利用されました。日本では、企業向けの高速デジタル専用線などに利用されていました。現在はほとんど、ADSLや光回線(FTTH)に置き換えられています。

 フレームリレー、X.25、ATMなどのネットワークは論理的(レイア3レベル)にはマルチアクセスネットワークですが、物理ネットワーク(レイア2)レベルでは、イーサネットなどのような回線共有の形ではなく、VC接続の集合という形態をとっており、VC回線を特定しないとデータを流すことができません。したがって、ブロードキャストやマルチキャストを使うことができません。このようなネットワークをNBMA(Non-Broadcast Multi Access Network)といいます。NBMAをブロードキャストマルチアクセスネットワークの特別な形と考えれば指名ルータの選出が必要ということになります。

※X.25:パケット交換WAN通信のためのネットワーク層通信プロトコル。障害の頻発するネットワークでも信頼性の高い通信を実現できるように厳格な誤り検出訂正の機能を持ちます。このため効率的な通信はできません。現在はほとんど利用されていません。

※フレームリレー:通信品質が改善されるとX.25のような厳格な誤り制御は必要とされず、かえって通信効率を下げるものとみなされるようになりました。そこで、X.25から誤り制御の機能を除いたフレームリレー方式が必要とされるようになりました。しかし、現在はより単純で効率的な通信方式が求められており、フレームリレーもWAN回線としてはほとんど利用されていません・・・>現在は、通信事業者から顧客に提供されるWANサービスは、IP-VPNや広域イーサネットなどが主流となっています。

※IP-VPN:通信事業者などが、TCP/IPの技術を使って構築した閉鎖された(契約者にだけ開放)IPネットワーク。

※広域イーサネット:顧客の離れたイーサネットを結ぶ技術;顧客LANのイーサネットフレームを離れたLANに送信することで、2つの離れたLANをまるで1つのLANであるかのように透過的に結びつける技術。通信事業者が構築する広域イーサネットの場合は、スイッチで構成されることが多くなっています。1つの網で複数の顧客がイーサネットフレームを送信しますので、顧客のフレームを何らかの方法で分離する必要がありますが、スイッチで構築した網の場合は、VLAN(Virtual LAN)の技術を使うと、IEEE802.1QのVLANタグによって分離が可能となります。1つのVLANタグだけだと、特定企業のイーサネットフレームを分離できるだけで、企業内でのVLANは利用できません。2つのVLANタグを多重化すると、離れた拠点間でVLANを利用することができます。・・・>広域イーサネットはMPLS網で実現することもできます。この場合は、イーサネットフレームにラベルを付加することで、ラベルスイッチングが可能となります。

※ATM(Asynchronous Transfer Mode):ATMは53バイトの固定長データ(セル)を基本的な通信単位とします。ATMの技術を利用したセルリレーのWANはフレームリレーと同様に1つの物理回線を共有して、複数の仮想回線(VC、Virtual Circuit)を生成します。フレームリレーと同様に現在はほとんど利用されていません。

 更にNBMAネットワークの特別な形として、ポイントツーマルチポイントネットワークと呼ばれるタイプのネットワークがあります。ポイントツーマルチポイントネットワークは、ネットワークをポイントツーポイントネットワークの集合と捉えます。ポイントツーポイントの集合ですから、指名ルータが選出されることはありません。また、パケットの送信にはマルチキャストが使われます。


8.2 ポイントツーポイントネットワークでの動作

 ポイントツーポイントネットワークは1対のルータの接続です。ポイントツーポイントでは指名ルータ、バックアップ指名ルータは選出されません。

 ポイントツーポイントネットワークでも、Helloパケットを使用して隣接ルータを検出します。Helloパケットの宛先はポイントツーポイントでも224.0.0.5(全てのOSPFルータ宛)に送信します。

 ルータIDの使い方もブロードキャストマルチアクセスネットワークとは少し違います。ブロードキャストマルチアクセスネットワークでは、OSPFヘッダのルータIDフィールドは指名ルータの指定などで使います。また、メッセージの交換はマルチキャスト(224.0.0.5、224.0.0.6)を使いますので、送信元のアドレスを示すことも必要ありません。従って、インターフェースに中で最も大きなIPアドレスにしたり、あるいはインターフェースのIPアドレスとは無関係の値をコマンドで指定したりしますが、ポイントツーポイントネットワークでは指名ルータの指定は関係ありません。ポイントツーポイントでは、返事をもらう時に使用してもらえるようにインターフェースのIPアドレスを使います。

 ポイントツーポイントの場合は相手先は1台しかありませんので、相手をIPアドレスで指定しなくても、確実にメッセージを届けることは出来ます。ポイントツーポイントでは、IP Unnumberedインターフェースを認めています。この場合にはOSPFヘッダのルータIDフィールドには送信インターフェース以外のIPアドレスが設定されることになります。


8.3 NBMAネットワークでの動作

※ NBMAについてこれ以上説明する必要があるか疑問ですが、CiscoのCCNA等の試験範囲になっていますので、とりあえず説明をしておきます。ここからはフレームリレーの知識が必要です。フレームリレーについて知識を持ち合わせていないと言う方は、参考資料をご覧ください

8.3.1 NBMAネットワークとOSPFのトポロジー

 NBMAはマルチアクセスが可能であるが、ブロードキャスト、マルチキャストができないネットワークです。OSPFではHelloを使ってルータの存在確認や指名ルータ、バックアップ指名ルータの選出などを行っています。OSPFの使うHelloはマルチキャストアドレスに宛てて送信されますので、NBMAではこれが使えないということになります。したがって、WANクラウドの中で、マルチキャストアドレスを使うこと無しに、如何にしてマルチキャストトラフィックスをエミュレートしてネットワーク情報を交換し、隣接関係を構築し、リンクステートデータベースの同期を取るかという点が問題となります。ポイントツーポイントにエミュレートすれば、指名ルータは選出する必要がないということになりますし、マルチアクセスにエミュレートするなら、ユニキャストを使ってマルチキャストと同様の結果を実現する必要があります。あるいは、何とかしてマルチキャストを実現するということで結果を求めることになる場合もあるでしょう。

 ネットワークをどのように捉えるか、どのようにマルチキャストをエミュレートするかで、さまざまな方式(モード)がサポートされています。RFC標準がサポートしているのはNBMAモードと、ポイントツーマルチポイントモードです。

 フレームリレーでは、第2層のレベルでどのようなPVCを構築するかという観点から取りうるトポロジーとして「フルメッシュ」、「パーシャルメッシュ」、「スター、ハブ&スポーク」があります。

フレームリレーの取りうるトポロジ
フルメッシュ 全てのルータ同士が相互にPVCを確立する
パーシャルメッシュ 一部のルータがPVCを確立する。直接PVCが確立されていないルータ同士は、別のルータ経由でアクセスする。
スター、ハブ&スポーク 1つのルータが、それ以外の全てのルータとPVCを確立する。

 Ciscoシステムズでは、これらのトポロジにきめ細かく対応しようとしたのだと思います。Ciscoでは標準のNBMAとポイントツーマルチポイント以外に、更にポイントツーマルチポイント非ブロードキャストモード、ブロードキャストモード、ポイントツーポイントモードの3つのモードをサポートしています。

※フレームリレーでは、相手先を固定して予めVCを確立させておくPVC(Permanent Virtual Circuit、相手先固定接続)と接続の度に呼を確立して用が済んだら終了するSVC(Switched Virtual Circuit、相手先選択接続)がありますが、日本のフレームリレー網ではPVCだけが提供されています。


● サブインターフェース
 NBMAでは1つの物理インターフェースで複数の論理インターフェースを使う場合があります。これをサブインターフェースといいます。1つの物理インターフェースを複数の論理的なインターフェースに分割し、それぞれのサブインターフェースは、ポイントツーポイント、またはポイントツーマルチポイントして定義します。WANクラウドに1本の物理リンクで接続しているルータも、2つのサブインターフェースを設定することでスピリットホライズンの原則に沿った動作をすることができます。

※サブインターフェースの設定:interface serial <number>.<subinterface-number> [multipoint | point-to-point]



8.3.2 NBMAネットワーク上での動作モード

/ NBMAトポロジー
マルチアクセスをエミュレート ポイントツーポイントをエミュレート ポイントツーポイント
モード NBMA ブロードキャスト ポイントツーマルチポイント ポイントツーマルチポイント非ブロードキャスト
定義 RFC2328 Cisco RFC2328 Cisco Cisco
アドレッシング ユニキャスト マルチキャスト マルチキャスト ユニキャスト マルチキャスト
DR/BDR 有(手動設定) 有(自動検出) なし なし なし
隣接ルータ 手動設定 自動検出 自動検出 手動設定 自動検出
サブネットワーク 同じ 同じ 同じ 同じ 接続ごとに1つ
Hello 30秒(dead=120) 10秒(dead=40) 30秒(dead=120) 30秒(dead=120) 10秒(dead=40)
パケットのコピー
推奨ネットワーク フルメッシュ フルメッシュ スター、パーシャルメッシュ(ポイントツーポイントとみなせること) スター、パーシャルメッシュ スター、パーシャルメッシュ(サブインターフェースを利用)

● マルチアクセスネットワークをエミュレートする場合
 NBMAでマルチアクセスネットワークをエミュレートしようとすれば指名ルータ(バックアップ指名ルータ)を選出しなくてはなりません。しかし、ブロードキャスト(マルチキャスト)を使えません。無理やりブロードキャスト(マルチキャスト)を使おうとすると、ルータがブロードキャストを複製し、スプリットホライズンの原則に従って個々の宛先毎に複製を送信するしかありません。このプロセスは通常大量のリソース(CPUと大域幅)を消費します。

● ポイントツーポイントリンクの集合体として捉える場合
 NBMAをポイントツーポイントの集合体として捉えることもできます。この場合は、指名ルータ(バックアップ指名ルータ)を選出する必要はありません。


8.3.3 NBMAモード

 NBMAモード(RFC2328)では、OSPFはブロードキャストマルチアクセスネットワーク(LAN)上の動作をエミュレートしますので、指名ルータ(バックアップ指名ルータ)を選出します。この動作モードではマルチキャスト、ブロードキャストを使えませんので、Helloを使って隣接ルータを発見することは出来ません。従って、隣接ルータはネットワーク管理者が手動で設定する必要があります。ルータ間のトポロジーがフルメッシュならば、後はユニキャストを使って指名ルータ(バックアップ指名ルータ)を選出することが出来ますが、フルメッシュでない場合は、指名ルータ(バックアップ指名ルータ)も手動で設定しなくてはなりません。

PVCレベルではフルメッシュ


 このモードではマルチアクセスネットワークをエミュレートするわけですので、NBMAに参加するインターフェースは同じサブネットワーク上に存在しています。

 NBMAモードに設定されたインターフェースからフラッディングを行う場合、LSUパケット、LSAckパケットを指名ルータでコピーし、隣接(ネイバー)テーブルの定義通りにインターフェースの各隣接ルータに送信することで、ブロードキャスト(マルチキャスト)をエミュレートします。

 多くの隣接ルータが存在しないようなネットワーク環境では、NBMAモードが効率的です。リンクステートデータベースも大きくなり過ぎないしトラフィックもそれほど増加しません。

8.3.4 ブロードキャストモード

 ブロードキャストモードはCiscoシステムズが独自に定義したモードです。標準のNBMAモードとほとんど同じですが、ルータにブロードキャストネットワークにおけるOSPFの動作をエミュレートさせる方法が異なります。

 Cisco IOSでは、NBMAネットワークに参加しているインターフェースを、論理的にブロードキャストとして設定します。これにより、ブロードキャストのコピーを全てのVCに送信することが出来るとともに、ブロードキャストに設定されたインターフェースは、ブロードキャストのコピーを受け入れることが出来ます。論理的にマルチキャスト、ブロードキャストを実行できることになり、ルータはLANに接続しているのとほとんど同様に動作できます。

 Helloもコピーされますので、Helloで隣接を検出することが出来ますし、隣接関係の構築後のLSUパケットの交換でも、マルチキャストアドレッシングを使用することが出来ます。

 Cisco IOSでは指定された全てのVCでブロードキャストのコピーを送信します。トポロジによってはコピーを送信すべきVCが非常に多くなることもあります。そこで、Cisco IOSでは、ブロードキャストの影響を最小限に抑えるために、ブロードキャストパケットをユーザトラフィックとは別の出力キューに格納し、コピーされたブロードキャストがVCに配信されるたびにユーザパケットの大幅な遅延が発生することがないようにしています。また、Cisco IOSではコピーされたブロードキャストが使用できる帯域幅をある一定程度まで制限するようにことも可能です。


8.3.5 ポイントツーマルチポイントモード

 ポイントツーマルチポイントモード(RFC2328)は、隣接ルータとの接続性を記述した多数の情報要素を含む追加のLSUパケットを交換することで機能します。
 
 ポイントツーマルチポイントモードでは、NBMAをポイントツーポイントリンクの集合として捉えますので、指名ルータ(バックアップ指名ルータ)を選出する必要はありません。指名ルータ(バックアップ指名ルータ)が選出されませんので、指名ルータ(バックアップ指名ルータ)とその他のルータとの隣接関係を記述したNetwork-LSAは生成されません。

 このモードはポイントツーマルチポイントVCをサポートするために開発されていますので、ブロードキャスト(マルチキャスト)をサポートします。Helloも機能しますので、隣接を自動で探すことができます。

NBMA内は同一サブネット

 NBMAモードと同様にルータは全て同じIPアドレス上に存在し、ノンブロードキャストインターフェースからフラッデングすると、LSUパケットまたはLSAckパケットは複製されて、隣接テーブルの定義通りに各隣接ルータに送信されます。

 トポロジーはフルメッシュである必要はありませんので、大規模ネットワークで適用してもPVCの数はそれほど増えません。また、フルメッシュを使用しなければ、隣接テーブルも大きくなりません。


8.3.6 ポイントツーマルチポイント非ブロードキャストモード

 ポイントツーマルチポイント非ブロードキャストモードはCiscoシステムズが独自に定義したモードです。RFC2328で定義されたポイントツーマルチポイントモードでは、マルチキャストとブロードキャストをサポートします。しかし、ポイントツーマルチポイントネットワークの中にはブロードキャストができないものもあります(ATMの従来型IP、フレームリレーのSVC)。このようなネットワークではHelloによる隣接の検出ができないために、RFCのポイントツーマルチポイントを使うことができません。そこで、Ciscoでは、このような場合にもOSPFを使えるようにRFC2328のポイントツーマルチポイントモードを拡張して、ポイントツーマルチポイント非ブロードキャストモードを定義しました。ポイントツーマルチポイント非ブロードキャストモードでは、隣接ルータを手動で設定します。

8.3.7 ポイントツーポイントモード

 ポイントツーポイントモード(Cisco独自のモード)はサブインターフェースを使うことで、ポイントツーポイント接続毎に別のサブネットワークを構築します。つまり、サブインターフェース毎に完全なポイントツーポイント接続となります。隣接関係はリンク毎に構築します。隣接ルータは自動で検出します。指名(バックアップ指名)ルータは選出しません。

サブネット毎に別々のNBMA


 ポイントツーポイントモードを利用する場合は、1対のポイントツーポイント接続に1つのNBMAが対応します。別のポイントツーポイント接続を構築すると、そこは別のNBMAとなります。






 * ここからはマルチエリアの話です *


9 OSPFエリアの相互接続

 ここまではシングルエリアでのOSPFの動作について説明してきました。本章では、エリアをいくつかに分割したマルチエリアでのOSPFについて説明します。

 初めに何故マルチエリアにする必要があるかということについて考えてみたいと思います。大規模ネットワークを分割せずに1つのエリアとして扱う場合の不都合は次のようになります。

大規模ネットワークをエリアに分割しないことによる不都合
① リンクステートデータベースが巨大になり、そのための大きなメモリを必要とする
② LSUパケットが大きくなり、LSUトラフィックが帯域を圧迫する
③ SPFアルゴリズムを適用するために高性能のCPUが必要となる
④ 最短パスツリーのための大きなメモリを必要とする
⑤ 障害の発生割合が増加し、そのためLSUパケットの量が増加し、ルーティングテーブル再計算の確率も増大する

 上にあげた不都合はネットワークをエリアに細分化し、そのエリア毎に内部でシングルエリアOSPFとして動作させれば解消できそうです。エリアを小さくすることでリンクステートデータベースは小さくなります。そのためLSUパケットのサイズも小さくなります。SPFアルゴリズムを適用する場合の計算量も小さくなります。最短パスツリーも小さいサイズになります。エリアが小さくなればエリアに所属するルータの数も減るので、ルータダウンの数も減り、LSUパケットをフラッディングする回数も減ることになります。

 ただし、各エリアの内部でシングルエリアOSPFと同じ動きをしているだけでは、分割したエリアが孤立してしまい、エリア間のルーティングを行うことが出来なくなります。したがって、何とかしてエリア間の相互関係を構築していかなくてはなりません。エリアを小さくし過ぎると、相互関係の構築に手間がかかりすぎてしまいます。リンクステートデータベース、SPFの計算量、最短パスツリーのメモリ消費量などを考慮して、エリアの数を調整する必要があります。


9.1 マルチエリアの基本知識

 マルチエリアの説明をするときにはいろいろの知識が必要です。まず、ルータには様々なタイプがあります。それからエリアにもさまざまなタイプがあります。更に交換するLSAにもさまざまなものがあります。ルータのタイプの説明をする際には、LSAの様々なタイプ、エリアタイプの知識が必要で、LSAの説明をするときにはルータのタイプ、エリアのタイプの知識が必要です。エリアの説明をする際にはルータ、LSAの知識が必要になります。そこで、それぞれの話を始める前に、とりあえず全体的なイメージを掴んでいただけるように概略の話をしたいと思います。

 OSPFでは大きなネットワークをエリアに分割するわけですが、このエリアがバラバラにならないように、そのうちの1つをバックボーンエリアとして、その他のエリアはこのバックボーンエリアに接続するという形を取っています(一時的な処置として、例外を認めることはあります)。エリアを接続するのはルータです。ルータには全てのインターフェースが同一のエリア内にすっぽりと収まっているタイプと、いくつかのエリアにまたがっているタイプがあります。エリアにまたがっているルータはエリア境界ルータ(ABR)といいます。

 エリア内部のルータのOSPFはシングルエリアOSPFと同じ動きをします。エリア境界ルータは、エリア相互間のルートを知るために簡略化されたLSA(Summary-LSA、集約リンク)を交換します。

 エリア分割の結果、各エリアのルータは、ネットワーク全体ではなく、自分の所属するエリア内のネットワーク構成が分かるようなリンクステートデータベースを共有するようになります。自分のエリア外のネットワークに関しては、ネットワーク構成までは把握せず、単にエリア境界ルータの向こう側にどんなネットワークがあるかだけを把握するようにします。つまり、どのエリア境界ルータを越えていけば、どのネットワークにたどり着けるかという情報だけを保持することになります。これによって、エリア間のルーティングが可能となります。

 更に他のASとの間のルーティングも必要ですので、AS相互を取り持つルータが必要となります。これをAS境界ルータ(ASBR)といいます。AS境界ルータがやり取りするLSAはエリア内でやり取りされるLSAとも、エリア間でやり取りされるLSAとも違います。


9.2 ルータのタイプとLSAのタイプ

 ルータのタイプは次の3つです

ルータのタイプ 説明
内部ルータ 全てのインターフェースが同一エリア内にあるルータ
エリア境界ルータ (ABR=Area Border Router)複数のインターフェースが異なるエリアに所属しているルータ
AS境界ルータ (ASBR=Autonomous System Boundary Router)少なくても1つが他と違うASに所属しているルータ

 ルータのタイプを論じるためにはLSAのタイプ(LSタイプ)に関する知識が必要です。詳細については、LSAメッセージのフォーマットの説明をご覧ください。ここでは、簡単にLSAのタイプについて説明しておきます。

LSタイプ 送信するルータ 説明 
1 Router-LSA 全ルータ エリア内のルータの各インターフェースの情報(エリア内のみにフラッディング) 
2 Network-LSA 指名ルータ マルチアクセスネットワークの指名ルータによって作成されるエリア内のルータの一覧情報(エリア内のみにフラッディング) 
3 Summary-LSA エリア境界ルータ エリア境界ルータがあるエリアからもらった情報を簡略化して、バックボーンエリアの介して他のエリアに配信するもの。完全スタブエリア内へはフラッディングされない。  
4 ASBR-Summary-LSA エリア境界ルータ ASBRへの到達可能性について記述。完全スタブエリア内へはフラッディングされない。 
5 AS-External-LSA AS境界ルータ 外部ASへのルートを記述。これらのエントリは、スタブ、完全スタブ、およびNSSAを除くAS全体にフラッディングされる。 
7 NSSA-External-LSA AS境界ルータ NSSAのAS境界ルータが作成。外部ASにある宛先へのルートを記述。タイプ5と似ているが、タイプ7はNSSAにだけ配信。 

 Router-LSAとNetwork-LSAはエリア内にのみフラッディングされます。エリア境界にあるエリア境界ルータは、タイプ1とタイプ2のLSAをタイプ3のLSAに簡略化(ルートの集約)、バックボーンエリア経由でエリア外にフラッディングします。タイプ3は特定エリア内のネットワークへのルートを記述しています。タイプ4はエリア境界ルータが所属するエリア内に、非OSPFドメインと接続しているAS境界ルータがある場合に、そのAS境界ルータへの到達可能性を記述したものです。タイプ5は他のAS(非OSPFドメイン)へのルートをASBRが記述して流したものです。

タイプ4とタイプ5の違い


9.4 エリアのタイプ

 LSAのタイプを知るには更にエリアのタイプについてもよく知っている必要があります。エリアのタイプには次のような5つのタイプがあります。

エリアのタイプ
標準エリア
バックボーンエリア
スタブエリア
完全スタブエリア
NSSA(Not-So-Stubby-Area)

● 標準エリア(ノーマルエリア)
 シングルエリアでのOSPFと同じ動きをするエリアです。このリンクでは、タイプ1のRouter-LSA、タイプ2のNetwork-LSA、タイプ3、4の集約リンク(Summary-LSA、ASBR-Summary-LSA)、タイプ5のAS-External-LSAを受け取ります。

エリアのタイプ 流れるLSA ASBR設置 デフォルトルート
標準エリア Router-LSA 可能 特に必要なし
Network-LSA
Summary-LSA
ASBR-Summary-LSA
AS-External-LSA

● バックボーンエリア(通過エリア)
 全てのエリアはバックボーンエリアに接続します。バックボーンエリアは標準エリアの全ての特性を備えています。ただし、例外的にバックボーンエリアに接続できないエリア(例えば企業合併の場合など)がある場合は、仮想リンクという方法を利用します。

エリアのタイプ 流れるLSA ASBRの設置 デフォルトルート
バックボーンエリア Router-LSA 可能 特に必要なし
Network-LSA
Summary-LSA
ASBR-Summary-LSA
AS-External-LSA

● スタブエリア
 他の非OSPFからOSPFに再配布されたルートを含めて、外部AS内のネットワークへのルート情報(タイプ5、AS-External-LSA)を受け取らないエリアです。バックボーンエリアや標準エリアには外部ASへのルート(AS-External-LSA)がアドバタイズされますが、時として外部ルートは膨大な量となりますので、スタブエリアはこれを回避するために導入されました。スタブエリアに属するエリア境界ルータは、スタブエリアに向けてAS-External-LSAをアドバタイズする代わりに、デフォルトルートをアドバタイズします(タイプ3)。スタブエリアはAS-External-LSAを受け取りませんので、ASBRを設置することは出来ません。また、スタブエリアをバックボーンとすることは出来ませんし、仮想リンクを通すこともできません。タイプ3では、デフォルトルート以外に、他のエリアのルートも受け取ります。

エリアのタイプ 流れるLSA ASBRの設置 デフォルトルート
スタブエリア Router-LSA 不可 必要(ABRが広告)
Network-LSA
Summary-LSA

スタブエリア内へはタイプ3を配信


※完全スタブエリア:Ciscoルータで定義されているエリアで、スタブエリアを更に徹底させたもの。タイプ4、タイプ5だけでなく、タイプ3も受け付けません(ただし、タイプ3のデフォルトルートは受け取ります)。受け取るのはエリア内のルートだけです(タイプ7も受け取らない)。自エリア外へのルーティングは全てデフォルトルートを使用します。完全スタブエリア内のルートは劇的に減少します。多くの場合、スタブエリアよりも完全スタブエリアの方が良い結果をもたらしますが、対象とするエリアをCiscoルータだけで構築する必要があります。

● NSSA(Not-So-Stubby Area)
 NSSAは、「ASBRが存在するスタブエリア」です。スタブエリア(完全スタブエリア)はASBRを設置することが出来ません。ASBRを設置するには、標準エリア(バックボーンも標準エリアの特性を持つ)でなくてはなりませんが、標準エリアでは、AS外部リンクをフラディング(AS-External-LSA)します。しかし、ASBRを設置する必要があるが、エリア内に外部ASリンクをフラッディングしたくない(する必要がない)という場合もあります(フラッディングの必要のない所にフラッディングするのは帯域の無駄遣い)。

このような場合のために考案されたのがNSSAです。

エリアのタイプ 流れるLSA ASBRの設置 デフォルトルート
NSSA Router-LSA 可能(NSSA-External-LSAのサポートが必要) 必要(ABRがアナウンス)
Network-LSA
Summary-LSA
NSSA-External-LSA

ABRはタイプ7をタイプ5に変換してフラッディング

 標準エリア(バックボーンエリアも含めて)にだけAS外部ルートをインポートし、NSSA内にはインポートしたくないという場合は、該当するルータ上で、NSSA内にNSSA-External-LSAを配布しない設定をします。

※no-redistributionオプション:"area <エリアID> nssa no-redistribution"
※NSSAのABRでのデフォルトルートの設定:area <エリアID> nssa default-information originate

 LSAタイプ7の特徴をまとめると次のようになります。

LSAタイプ7の特徴
①NSSAと外部ASを接続するASBRによってのみ生成される。
②NSSA内部でのみ配信される。
③別の非スタブエリアに接続するABRがある場合は、このABRによってタイプ7からタイプ5に書き換えられてフラッディングされる。
④転送アドレスフィールドを含む。このフィールドは、タイプ5のLSAタイプに変換されても保持される。
⑤NSSAのABRは、タイプ7のデフォルトルートを通知することが出来る。
⑥タイプ7のLSAはタイプ5のLSAよりも優先度が低い。タイプ5とタイプ7でルートを学習した場合は、タイプ5のLSAで学習したルートが優先される。

● スタブエリアの設置基準
 スタブエリア内のルータはAS内部のことしか知りません。AS外部はデフォルトルートを使います。完全スタブエリアは自分のエリア内のことしか知りません。エリア外は全部デフォルトルートにお任せです。ただ、デフォルトルートが必ずしも最適ルートとは限りません。スタブエリア(完全スタブエリア)を設定する場合には、次のような条件を満たしていることが必要です。

スタブエリア(完全スタブエリア)設置基準
①エリアからの出口が1つだけ
②スタブエリア内の全てのOSPFルータが(ABRと内部ルータ)がスタブルータとして設定されていること
③エリアが仮想リンクの通過エリアとして必要とされていない事
④スタブエリア内にASBRが存在しない事
⑤エリアがバックボーンエリアでない事

※スタブ化(Ciscoルータの例):インターフェースに対してOSPFの設定(router ospfやnetwork areaコマンド等)をした後、"area stub"コマンド(area <area-id> stub [no-summary];no-summaryは完全スタブにする場合(ただし、no-summaryオプションが有効なのはABRだけ)

 エリアの出口が複数ある場合は、デフォルトルートが必ずしも最適ルートとは限りませんので、エリア外のルーティングがそれほど頻繁ではなく、デフォルトルートがたとえ最適でなくても、ルーティングテーブルが簡略化された方が好都合であるなどの特別な場合だけにして下さい。

9.5 ルートの集約

 ABRではSummary-LSAで集約リンクを送信すると言いましたが、ルートの集約そのものは手動で行う必要があります。手動で集約しないと、リンク特有のLSAがバックボーン経由で他のエリアにフラッディングされてしまいます。集約の設定をしていないと、エリア内で発生した障害情報がエリア外に流出してしまいますので、それを受信したエリアではルートの再計算をしなくてはなりません。

 ルートの集約を利用すると、バックボーンエリアには集約ルートだけが伝わります。ネットワークの一部に障害が発生しても、フラッディングされるのは集約ルートだけですので、障害は外部に伝わりません。集約ルートを受信したエリアではルート再計算の必要はありません。ルートの集約には2種類があります。

● エリア間ルートの集約
 エリア間ルートはABR上で集約され、それぞれのエリアからのルートに適用されます。この集約は、再配布によってOSPFに提供されるAS外部ルートには適用されません。

● 外部ルートの集約
 外部ルート集約は、再配布によってOSPF内に提供されるAS外部ルートに特有の機能です。2つの異なるルータからの集約の範囲に重複があると、問題が発生する可能性があります。通常は、ASBRが集約しますが、ABRもこの機能を備えています。

 エリア間ルート集約、外部ルート集約のいずれも、ルート集約の利点を生かすためにはネットワークアドレスが連続していることが重要です。

● 集約の例
 192.168.97.0/24~192.168.126.0/24の連続した30のネットワークを集約することを考えてみましょう。

第3オクテット 
10進表示 2進表示 
97= 011 0 0001
98= 011 0 0010
99= 011 0 0011
100= 011 0 0100
101= 011 0 0101
102= 011 0 0110
103= 011 0 0111
104= 011 0 1000
105= 011 0 1001
106= 011 0 1010
107= 011 0 1011
108= 011 0 1100
109= 011 0 1101
110= 011 0 1110
111= 011 0 1111
112= 011 1 0000
113= 011 1 0001
114= 011 1 0010
115= 011 1 0011
116= 011 1 0100
117= 011 1 0101
118= 011 1 0110
119= 011 1 0111
120= 011 1 1000
121= 011 1 1001
122= 011 1 1010
123= 011 1 1011
124= 011 1 1100
125= 011 1 1101
126= 011 1 1110

 上の表を見ると、第三オクテットの上位3ビットがいずれも"011"であることが分かります。0110 0000は十進表示では96ですから、192.168.97.0/24~192.168.126.0/24は192.168.96.0/19と集約することが出来ます。

 もう1つ別の例を見てみましょう。今度は、172.16.209.0/23~172.16.222.0/23の15個のルートを集約してみましょう。第三オクテットをバイナリ表示すると次のようになります。

第三オクテット
10進表示 2進表示
209= 1101 0001
210= 1101 0010
211= 1101 0011
212= 1101 0100
213= 1101 0101
214= 1101 0110
215= 1101 0111
216= 1101 1000
217= 1101 1001
218= 1101 1010
219= 1101 1011
220= 1101 1100
221= 1101 1101
222= 1101 1110

 172.16.209.0/23~172.16.222.0/23は第三オクテットの上位4ビットが"1101"で共通です。"1101 0000"は十進表示にすると208ですので、172.16.208.0/20と集約することが出来ます。

ルートの集約


※ABR上でのCiscoルータの設定例
>area 10 range 192.168.96.0 255.255.224.0
>area 0 range 172.16.208.0 255.255.240.0


※ASBR上でsummary-addressコマンドを使って集約することもできます。このコマンドを使うと、ASBRで外部ルートを集約してから、OSPFドメインに提供するように指定できます。このコマンドは通常は、AS外部ルートをOSPFドメインに提供しているASBRで設定しますが、ABRで設定することも可能です。コマンドは"summary-address <address> <mask> [prefix [mask]] [not-advertise] [tag <tag>]"です。"[not-advertise]"は"prefix [mask]"にマッチするルートを排除するために利用します。[tag]はルートマップまたはEIGRPやBGPなどのルーティングプロトコルによる再配布を制御するための一致エントリとして使用できます。



9.6 仮想リンク

 全てのエリアはバックボーンエリアに接続していなくてはならないというのがマルチエリアOSPFの原則です。しかし、この原則を貫くと困ることもあります。例えば、会社の合併等でエリアを新たに追加しなくてはならない場合などで物理的な位置関係からどうしてもバックボーンエリアに接続できないという場合もあります。また、バックボーンエリアに不連続箇所が発生することもあります。このような場合に利用できるのが仮想リンクです。

 仮想リンクは、バックボーンエリアから切り離されたエリアに対して、バックボーンエリアへの論理的なリンクを提供する手法です。ただし、仮想リンクを利用するには次の2つの条件を満たしていなくてはなりません。

仮想リンクの利用の条件
仮想リンクを確立するのは、1つのエリアを共有する2台のABR間であること
2台のABRのいずれかはバックボーンエリアに属していること

 OSPFでは、仮想リンクで接続された2台のルータを、番号なしポイントツーポイントネットワークとみなします。2台のABRは物理的に直接接続していなくても構いません。

※"area <area-number> virtual-link <router-id>"で設定します。router-idは隣接ルータのルータIDです。

新しいエリアを追加した場合


 何らかの原因でバックアップエリアが分断した場合も仮想リンクの出番となります。

バックボーンエリアの分断

 仮想リンクは両端のルータで相手のルータIDを指定して設定します。

バーチャルリンクでは相手のルータIDを指定

※Ciscoルータの例(上図のABR-1の例):area 10 virtual-link 10.2.2.2
エリアのidは追加エリアではなく、バーチャルリンクが通過するエリア。バーチャルリンクで指定するのはインターフェースではなくルータID



9.7 別エリアへのコスト計算

 OSPFでは、最適ルートはコストによって判断されますが、集約ルートや他のASへのルートについては他と少し違った考え方でコストが算出されます。

● 集約ルートに関連付けられるコスト
 集約ルートに関連付けられるコストは、集約ルートに指定されている所定のエリア間ルートの最小コストと、バックボーンABRへのコストの合計です。

● 外部ルートのコスト計算
 外部ルートのコストは、ASBRに設定された外部タイプに依存します。外部タイプはタイプ1(E2)とタイプ2(E2)の2種類があります。

E1タイプのコスト計算例


 タイプ1(E1)は外部ASへ接続するASBRが複数台ある場合です。この場合は、内部コストと外部コストの合計値が最適ルート選択の判断基準となります。タイプ2(E2)は外部ASへ接続するASBRが1台しかない場合です。この場合は、内部で優劣を競う必要がありませんので、外部コストだけで、最適ルートを決定します。

ここからはパケットのフォーマットの話です

 ここからはOSPFのパケットのフォーマットについて説明しています。RIPなどと比較すると格段に複雑ですので、本文を読んでいるときに疑問に思ったら参照してください。通読する必要はないと思います。


10 OSPFパケット

 OSPFパケットのヘッダは次の通りです。

OSPFパケットヘッダ  
8 8 16
バージョン タイプ パケット長
ルータID
エリアID
チェックサム 認証タイプ
認証

  

 タイプフィールドには1~5まである5つのパケットタイプのいずれかが入ります。タイプ番号は1:Hello、2:DBD、3:LSR、4:LSU、5:LSAckとなります。この中で、「4」のLSUは更にLS(リンク状態)タイプによって6種類に分かれます。この中で、更にLSタイプ1のRouter-LSAはLinkタイプによって4つに分かれます。これをまとめると次のようになります。

OSPFタイプ、LSタイプ、Linkタイプの対応関係
 タイプ LSタイプ  Linkタイプ 
1 Hello 使用せず 使用せず
2 DBD
3 LSR
4 LSU 1 Router-LSA 1 ポイントツーポイント接続
2 トランジットネットワークへの接続
3 スタブネットワークへの接続
4 バーチャルリンク
2 Network-LSA 使用せず
3 Summary-LSA
(IPネットワーク)
4 ASBR-Summary-LSA
(ASBR)
5 AS-External-LSA
7 NSSA-External-LSA
5 LSAck 使用せず 使用せず

 ルータIDはそのOSPFパケットを送信したルータのIDです。通常はインターフェースに割り当てられているIPアドレスのうちのいずれかになります。ただし、このインターフェースはアクティブでなくてはなりません。ルータIDとなっているインターフェースがダウンしてしまうと、OSPFプロセスを最初からやり直す必要があります。

※ルータIDはCiscoルータの場合は、デフォルトではインターフェースのIPアドレスのうちの最大のものが使用されますが、上の問題があるので、最近のCiscoルータでは、コマンド(router-id)を使って、明示的に設定することが可能

 エリアIDはパケットの送信元ルータが属するエリアを示します。

10.1 Helloパケット

 Helloパケットは双方向状態の確立(ネイバーの発見)/維持(ネイバーの維持)のために使われます。また、マルチアクセス型のネットワークでは、指名ルータ(DR)、バックアップ指名ルータ(BDR)の選出にも使われます。Helloパケットには、サブネットマスク、Helloインターバル、ルータの優先度(プライオリティ)、指名ルータ(DR)とバックアップ指名ルータ(BDR)のIPアドレス、自分が認識している隣接ルータのIPアドレスなどが記載されています。Helloパケットはマルチキャストアドレス「224.0.0.5」宛(全OSPFルータ)に送信されます。

 次にHelloパケットのフォーマットを示します。


OSPFヘッダ(タイプ=1、ルータID、エリアID等)

サブネットマスク(32)
Helloインターバル(16) オプション(8) 優先度(8)
ルータDeadインターバル(32)
指名ルータ(32)
バックアップ指名ルータ(32)
隣接ルータ1
・・・
隣接ルータn

 オプションについては、LSAヘッダをご覧ください。
 優先度は送信元のルータが持つプライオリティ値で、指名ルータ(DR)、バックアップ指名ルータ(BDR)を選出するときの判断基準となります。プライオリティ値が高いほど指名ルータ(DR)、バックアップ指名ルータ(BDR)に選ばれる可能性が高くなります。指名ルータ(DR)、バックアップ指名ルータ(BDR)は高性能のルータが担うべき役割ですので、高性能のルータのプライオリティ値を高く設定して下さい。
 ルータDeadインターバルは、その時間ルータが応答しないとダウンとみなされる時間です。
 指名ルータは、このHelloパケットを送信したインターフェースが所属するネットワークの指名ルータ(DR)をIPアドレスで指定したものです。このルータがHelloパケットを送信する時点で指名ルータ(DR)と認識していたルータという意味になります。バックアップ指名ルータ(BDR)についても同様です。
 隣接ルータはHelloパケットを送信する時点で、自分が認識している全てのルータのリストです。


10.2 DBDパケット

 DBD(Database Description、データベース記述)パケットは、リンクステートデータベースの内容を記述したもので、隣接関係(Adjacency)を初期化する段階で交換します。DBDパケットのフォーマットは次の通りです。


OSPFヘッダ(タイプ=2、ルータID、エリアID等)

インターフェースMTU(16) オプション(8) フラグ(8)
データベース記述シーケンス番号(32)
LSAヘッダ1
・・・
LSAヘッダn

 オプションについてはLSAヘッダの項を見てください。
 フラグは8ビットのうち、最初の5ビットは使用していません(0をセット)。後の3ビットは、I(Init)、M(More)、MS(Master/Slave)ビットとして使われます。フラグフィールドのフォーマットは次の通りです。

0 0 0 0 0 I M MS

 I(Init)ビットはそのパケットが一連のDBDパケットのうちの最初のものであることを示します。Iビットが1にセットされている場合は、データベース記述シーケンス番号は初期値が入っています。M(More)ビットは後続のDBDパケットが続くことを示します。
 M/S(Master/Slave)ビットはこのDBDパケットの送信者がマスターなのかスレーブなのかを示します。1がマスター、0がスレーブです。

 データベース記述シーケンス番号は、DBDパケットの交換順序を表します。データベース記述シーケンス番号は、DBDパケットの転送が完了するまで、パケットが送信される度に増分されます。初期値はマスターが定義します。

 LSAヘッダは、リンクステートデータベース内のLSAエントリの要約です。LSAヘッダはDBDだけでなく、LSU、LSAckでも使われています。LSAヘッダのフォーマットについてはこちらをご覧ください。


10.3 LSR

 DBDパケットを交換し、相手からもらったLSA(ヘッダ)のリストと自分のリンクステートデータベース(LSAの集合)と比較すると、相手がどんなLSAを持っているか分かります。相手が自分の持っていない最新のLSAを持っていることが分かれば、LSR(Link State Request、リンク状態要求)パケットで、欲しいLSAのリスト(LSAヘッダのリスト)を示して、送信を依頼します。

 LSRパケットのフォーマットは次の通りです。


OSPFヘッダ(タイプ=3、ルータID、エリアID等

LSR1(LSタイプ、LS ID、広告ルータID)
・・・
LSRn


10.4 LSU

 リンクステートデータベースの元になっているのがLSAです。このLSAを更新するパケットが、LSU(Link State Update、リンク状態更新)パケットです。LSUパケットのフォーマットは次の通りです。


OSPFヘッダ(タイプ=4、ルータID、エリアID等)
 
広告数


広告数で示された数のLSA


10.5 LSAck

 LSAck(Link State Acknowledgement、リンク状態確認応答)パケットは、LSAを受信した時の確認のために使用します。1つのLSAckで複数のLSA受信確認を行うことが出来ます。LSAckパケットのフォーマットは次の通りです。


OSPFヘッダ(タイプ=5、ルータID、エリアID等)

LSAヘッダ

10.6 LSA

 LSAヘッダのフォーマットは次の通りです。

LSAヘッダフォーマット
リンク状態年齢(16) オプション(8) LSタイプ(8)
LS ID(32)
広告元ルータ(32)
リンク状態シーケンス番号(32)
リンク状態チェックサム(16) 長さ(16)


 LS(Link State、リンク状態)IDは、LS(Link State、リンク状態)タイプによって異なります。LS IDとLSタイプの対応関係は次の通りです。

LSタイプ番号 LSタイプ LS ID
1 Router-LSA そのLSAを生成したルータのID
2 Network-LSA そのネットワークのDRのインターフェースIPアドレス
3 Summary-LSA エリア外のネットワークアドレス
4 ASBR-Summary-LSA AS境界ルータのID
5 AS-External-LSA AS外ルートのネットワークアドレス
7 NSSA-External-LSA AS外ルートのネットワークアドレス

 オプションフィールドはそのルータが使えるオプション、もしくは使おうとしているオプション能力を指定します。このフィールドは能力レベルの異なるルータ同士が同一のOSPFルーティングドメインに参加できるようにネゴシエーションする場合に使います。このオプションはHelloパケット、DBDパケット、全てのLSAで共通に利用しています。オプションのフォーマットは次の通りです。

未使用 未使用 DC EA N/P MC E 未使用

 DCビットは、Demand Circuitに対応しているかどうかを示します。Demand Circuitとは、ISDNやダイヤルアップ電話回線、X.25などのように、接続時間やデータトラフィック量などによって料金が変わるネットワークセグメントです。

 EAビットは、External-Attributes-LSA(外部属性LSA)に対応しているかどうかを示します。一般的には使用しません。

 N/PビットはHelloパケットと、NSSA-External-LSA(LSタイプ7)だけで利用されます。Helloパケットで利用する場合は、Nビット、NSSA-External-LSAで利用する場合はPビットと呼ばれます。
 NビットはHelloパケットを使ったネゴシエーションで、NSSA-External-LSAをサポートしているかどうかを示すために使います。サポートしている場合は"1"にセットします。"0"にセットされる場合は、NSSA-External-LSAを送信も受信もしません。Nビットがマッチしていないと、双方向状態(ネイバー)になることが出来ません。もし、Nビットが1にセットされている場合は、Eビットは"0"でなくてはなりません。
 PビットはNSSA-External-LSAヘッダでだけ利用されます。このビットが"1"にセットされた場合、NSSAのエリア境界ルータに対して、LSタイプ7 LSAをLSタイプ5に変換するように促します。

 MCビットは、IPマルチキャストのパケットがRFC1584(Multicast Extentions to OSPF、MOSPF)の定義に従って転送されるかどうかを示します。

 EビットはAS外部ルートの流され方を示します。発信元ルータがAS-External-LSAを受け入れる能力がある場合は、Eビットがセットされます。全てのAS-External-LSAと、バックボーンエリアあるいは非スタブエリアから発信されるLSAは、Eビットが1にセットされています。これに対して、スタブエリアから発信されたLSAは、Eビットが0にセットされています。

 リンク状態(LS)シーケンス番号は、古いLSAや重複したLSAを検出するために使用します。

● Router-LSA(LSタイプ1)
 Router-LSAは全てのOSPFルータによって生成されます。Router-LSAの内容は、そのルータに接続しているリンクの状態とコストです。そのルータに接続され、そのルータと同じエリアに属するリンクに関する情報です。LSAヘッダのLSタイプフィールドには「1」がセットされ、LS IDにはそのLSAを生成したルータのIDが入ります。

 主なフィールドとして、LS(Link State、リンク状態)ID、フラグフィールド、リンクIDフィールド、タイプフィールドがあります。


LSAヘッダ

未使用(5) フラグ(3) 未使用(8) リンク数(16)
リンクID(32)
リンクデータ(32)
タイプ(8) TOS数(8) メトリック(16)
TOS 未使用(8) TOSメトリック
・・・ ・・・ ・・・
TOS 未使用(8)  TOSメトリック

 フラグフィールドはV、E、Bの3つのビットから構成され、ルータとリンクについての追加情報を示します。VはVirtual Linkの"V"を表します。ルータが仮想リンクのエンドポイント(終端)である 場合は、Vビットが"1"にセットされます。EはExternalの"E"です。ルータがASBR(AS境界ルータ、AS Border Router)である場合は、"1"にセットされます。BはBorderの"B"でルータがABR(エリア境界ルータ、Area Border Router)である場合に、"1"にセットされます。

 タイプフィールドにはリンクタイプ(Link Type)が入ります。LS(Link State、リンク状態)タイプが1のRouter-LSAの場合にはリンクタイプが4つに分かれます。リンクタイプと、リンクの種類、リンクID、リンクデータの関係は次のようになります。

リンクタイプ リンクの種類 リンクID リンクデータ
1 ポイントツーポイント 隣接ルータのID 発信元ルータのインターフェースのIPアドレス
2 トランジットネットワークへの接続 そのネットワークのDRのIPアドレス 発信元ルータのインターフェースのIPアドレス
3 スタブネットワークへの接続 そのネットワークのネットワークアドレス そのネットワークのサブネットマスク
4 バーチャルリンク 隣接ルータのルータID 発信元ルータのMIB-Ⅱifindex値

 TOS/TOSメトリックはかつてTOS値に基づくルートを規定していたため、互換性確保のためにおいているだけで、現在はほとんど使われていません。
 TOS数フィールドはTOSメトリックの種類を示します。通常のコストはTOS値0のメトリックで、これは必須のメトリックであり、TOS数にカウントはされていません。TOS値が0以外のメトリックは、そのTOS値におけるコストを示します。現在はTOS値が0以外のメトリックを使用していませんので、通常は0が入ります。

 メトリックはTOS値が0の場合のメトリック(コスト)を示します。

● Network-LSA(LSタイプ2)

 指名ルータは、そのネットワークのマスクとそのネットワークに属している(自分を含めた)全ルータ(指名ルータと隣接関係を構築しているルータ)のIDのリストを格納してNetwork-LSAを作成します。LSAヘッダの中のLS(リンク状態)IDフィールドにはそのネットワークの指名ルータのインターフェースのIPアドレスが入ります。


LSAヘッダ

ネットワークマスク(32)
ネットワークに接続しているルータ1(32)
・・・
ネットワークに接続しているルータn(32)

● Summary-LSA(LSタイプ3、4)
≪LSタイプ3≫
 ABRが自分の属するある特定エリア内のネットワーク(プレフィックス)を記述し、それがバックボーンを経由で他のエリアにフラッディングされたものです。LSAヘッダのLS(Link State、リンク状態)IDフィールドにはそのネットワークのアドレス(プレフィックス)が入ります。

≪LSタイプ4≫(ASBR-Summary-LSA)
 あるエリア境界ルータが所属するエリアに非OSPFドメインと接続しているAS境界ルータがある場合に、そのAS境界ルータへの到達可能性についてエリア境界ルータが他のエリアにフラッディングする場合に利用します。LSAヘッダのLS IDフィールドには、そのASBRのルータIDが入ります。

 Summary-LSAのフォーマットは次の通りです。


LSAヘッダ

ネットワークマスク(32)
0(8) メトリック(24)
TOS(8) TOSメトリック(24)
・・・ ・・・

 ネットワークマスクフィールドはLSタイプ3と、LSタイプ4で違います。
 LSタイプ3の場合は、ネットワークマスクを示します。LSタイプ3はエリア外のネットワークを伝えるものですが、そのネットワークの情報は、このネットワークマスクフィールドの値と、LSAヘッダのLS(リンク状態)ID(LSタイプ3の場合は、LS IDはネットワークアドレス)によって伝えられます。
 LSタイプ4(ASBR-Summary-LSA)の場合は、伝えたい情報はASBRのルータIDで、LSタイプ4の場合は、LSAヘッダのLS IDフィールドに格納されていますので、ネットワークマスクフィールドには「0.0.0.0」が入ります。

 メトリックフィールドにはコストが入ります。LSタイプ3の場合は、そのネットワークまでのコスト、LSタイプ4の場合は、ASBRまでのコストになります。

 TOS/TOSメトリックフィールドは通常使いません。

● AS-External-LSA(LSタイプ5)
 LSタイプ5のAS-External-LSAは、ASBRによって作成され、AS外部(External)のネットワークの情報を伝えます。LSAヘッダのLS(リンク状態)IDフィールドには、そのAS外部ルートのネットワークアドレスが入ります。また、AS-External-LSAはデフォルトルートを示すためにも使われます。ただし、スタブエリアでエリアの出口を示すために使用されるデフォルトルートには、LSタイプ3のSummary-LSAが使用されます。


LSAヘッダ

ネットワークマスク(32)
E 0(7) メトリック(24)
転送アドレス(32)
外部ルートタグ(32)
E TOS(7) TOSメトリック(24)
転送アドレス(32)
外部ルートタグ(32)
・・・


 EビットフィールドはAS外部ルートのメトリックの種類です。E1(タイプ1)とE2(タイプ2)があります。Eビットが0のE1、1の場合がE2となります。

 メトリックフィールドは、E1(タイプ1)とE2(タイプ2)で異なります。E1の場合は、あるルータからAS外部ネットワークまでのコストは、外部コスト(AS外のコスト)と内部コスト(AS境界ルータまでのコスト)を加算します。E2の場合は、AS外部ネットワークまでのコストに内部コストを加算しません。

 転送アドレスは、広告したネットワークへ向かうデータトラフィックが転送されるアドレスです。もし、このフィールドが「0.0.0.0」(デフォルトルート)なら、データトラフィックはこのLSAを生成したルータ(AS境界ルータ)に送信されます。

 E/TOS/TOSメトリック以下のフィールドは通常は使いません。

● NSSA-External-LSA(LSタイプ7)
 NSSA-External-LSAはLSタイプ5のAS-External-LSAとフォーマットが同じで、フィールドの定義もLS ID(LSAヘッダ)、ネットワークマスク、メトリックフィールド、外部ルートタグは同じです。

 違っているフィールドは、転送アドレスフィールドと、LSAヘッダのオプションフィールドです。

 転送アドレスフィールドは、宛先へデータを送信するときの転送先ですから、タイプ5とは若干異なります。また、当然のことながら、LSAヘッダのLSタイプは5ではなく、7になります。

 LSAヘッダのオプションフィールドのN/Pビットは、NSSA-External-LSAが使うときはPビットと呼ばれます。Pビットが1にセットされているときは、それを受信したABRはAS-External-LSA(LSタイプ5)に変換して、バックボーンエリアに流します。



参考資料 フレームリレー

 フレームリレーはパケット交換方式のWANサービスです。フレームリレーの前身として、銀行のATMなどに使われたX.25というプロトコルがあリますが、X.25では厳格な誤り訂正機能を採用していました。これは通信品質の低いネットワークでも信頼性の高いサービスを提供できるようにするためです。しかし、通信品質が向上するとこの厳格な誤り訂正機能が高速データ伝送の妨げになります。そこで、X.25のエラー訂正機能を取り除いたWANサービスが登場しました。これがフレームリレーです。

※フレームリレーはWANサービスとしては今は殆ど利用されていません。現在、WANサービスの主流はIP-VPN、インターネット-VPN、広域イーサネットなどです。

● フレームリレーの概要
 フレームリレーはフレームリレー網を構築するフレームリレースイッチと顧客のネットワークにあるルータの間でフレームをやり取りします。各拠点のルータ間ではVC(Virtual Circuit)と呼ぶ仮想回線を定義して通信をします。

 フレームリレーではHDLCを拡張したLAPF(Link Access Procedure for Frame Relay)というプロトコルをレイア2として利用しています。

※HDLC:レイア2(データリンク層)のプロトコルの1つです。さまざまな動作モードを持ちコネクション型でもコネクションレス型でも使用できます。また、ポイントツーポイント接続でも、ポイントツーマルチポイント接続にも対応が可能です。IBM社が自社のSNA(Systems Network Architecture)のプロトコルとして開発したSDLC(Synchronous Data Link Control)が元になっており、その後ITUやISOで標準化されました。

 フレームリレーは上位層のプロトコルを選びませんので、IPやIPXで利用が可能です。

 フレームリレーは1つの物理回線上に複数の仮想回線(VC)を構築して、複数の拠点間の通信を可能とします。VCにはPVC(Permanent Virtual Circuit、相手先固定接続)とSVC(Switched Virtual Circuit、相手先選択接続)があります。PVCは契約時に定義した相手と固定的に接続する方式で、SVCは接続を動的に確立して、通信終了時に呼を切断する方式です。日本の通信事業者はPVCのみをサポートしています。

 次にフレームリレーで使う用語について説明します。

用語 説明
DLCI サービスを提供する事業者によって割り当てられるデータリンク接続識別子。VCを識別する情報で、フレームリレーのヘッダに記述する。ルータとローカルのフレームリレースイッチの間でだけ意味を持つので、接続先の拠点とDLCI番号が同じでも問題はない。
Inverse ARP ローカルのDLCI番号と宛先のルータのIPアドレスのフレームリレーマップを動的に生成するプロトコル
フレームリレーマップ ローカルのDLCI番号と宛先ルータのIPアドレスを静的に対応付けたマッピング情報
※一般的にはInverse ARPではなく、こちらを使用する。
LMI Local Management Interface。顧客のルータと通信事業者のフレームリレーの間のシグナリングで、ルータとフレームリレースイッチ間のステータスを保持する。LMIタイプにはcisco、ansi、q933aがある。

● フレームリレーの動作

 次の具体例で説明します。

ルーティングテーブルとフレームリレーマップの対応

 DSU(Degital Service Unit)はルータ(DTE=Data Terminal Unit、フレームリレーの場合はルータが担当)をフレームリレーの通信回線に接続して、信号の同期や通信速度の制御を行う回線終端装置です。上の図で分かる通りルータのフレームリレーマップで、宛先IPアドレスに対してローカルのDLCIを割り当てるのは、ルータのルーティングテーブルで、ネクストポップに対して、出口のインターフェースを対応付けているようなものです。

● LMIのステータス
 LMI(ローカル管理インターフェース)は顧客の拠点ルータとフレームリレースイッチの間でやり取りする信号です。10秒毎に送信して、ステータス保持などのキープアライブの役割を果たします。LMIにはcisco、ansi、q933aの3種類のタイプがあり、対向側のタイプと合わせなくてはなりません。

 LMIのステータスにはactive、inactive、deletedがあります。

LMIステータスの意味

 activeはPVCが有効になっている状態です。inactiveはローカルのルータとフレームリレースイッチの間は問題ないが、接続先のルータとフレームリレースイッチの間に問題が発生している状態を表します。deletedはローカルのルータとフレームリレースイッチの間に接続の問題があることを表します。

● 輻輳時の制御
 フレームリレー網は複数の顧客が共有する網ですので、時として網が混雑し、フレームの転送が滞ったり、フレームロスが発生することがあります。これを輻輳といいます。通信事業者と契約する場合は、それぞれのPVCである程度保障される速度を決定します。この速度をCIR(Commited Information Rate、認定情報レート)と言います。これによって価格が決定するわけですが、CIRを越えて送信することも可能です。また、重度の輻輳が発生した場合は、CIRは保障されません。

 フレームリレー網の中で輻輳が発生している場合は、フレームリレースイッチはFECN(Forward Explicit Congestion Notification、順方向輻輳通知ビット)とBECN(Backward Explicit Congestion Nortification、逆方向輻輳通知ビット)を使って輻輳を通知します。フレームリレー網内の輻輳を宛先に知らせるためのヘッダフィールドがFECNで、スイッチは輻輳を検知すると、ビットを1にセットします。輻輳を送信元に知らせる場合は、送信元への戻りのパケットのBECNフィールドを1にセットして送信します。FECNとBECNが1にセットされているフレームを受信したルータはフレームの送信を控えるなどの動作を行います。




更新履歴

2016/03/10 作成


























 ページの先頭