next up previous contents
Next: 8.2 マルチキャスト Up: 8.1 OSPFの概略 Previous: 8.1 OSPFの概略

8.1.1 リンク状態広告(LSA)

各ルータは自身のつながっているネットワークとそのコストについての情報を 近隣ルータに知らせます。これをリンク状態広告(LSA)と呼びます。従って、 全てのルータのLSAを集めれば、そこにはネットワークについての全ての 情報が入っていることになります。距離ベクトル型と同じくコストは様々な 観点から決める事が出来ます。例えば、早さや、あるいは値段などです。 但し、注意すべきはこれらのコストは最終的にどの経路を選択するかという 点で利用される訳ですから、異なる観点をコストに持ち込んでしまっては 意味がありません。つまり、和を取ったときに意味のあるものであること、 比較したときに意味がなければならないのです。

さて、こうした LSA が 全部のルータに知らせるにはどうしたら良いでしょうか。距離ベクトル型では、 個々のルータは近隣から得た情報を再計算して流していましたが、LSA では その情報をそのままネットワーク上全てに流さなくてはなりません。その ために通常フラッディング(flooding:氾濫)が利用されます。 フラッディングは文字通りLSAをネットワーク全体に氾濫(flood)させる ものです。確かに全てのルータが受け取ったLSAを自身のLSDBに格納すると 同時に、その全てのリンクに流せば最終的にはネットワーク上の全ての ルータが同じLSAを受け取る事が出来ますが、当然こうした原始的な方法は 無駄が多いことが分かります。そこで OSPF などでは、簡単な方法でこの 無駄を減少させています。

今、簡単に次のような場合を考えてみましょう。 4台のルータが相互につながっており、どの3台も 同じネットワークにつながっていないと考えると、この4台のルータを 接続するラインは 6 本あります。この内の1台がLSAをフラッディング させた場合、3個のLSAパケットを出します。次にこれを受け取った3台 のルータは、LSAを受け取ったリンク以外の2つのリンクに対して LSAをフラッディングさせるので、3台で合わせて9個のLSAパケットを 出します。従って、ネットワーク全体にLSAが行き渡るためには トータルで12個のLSAパケットが流れる訳です (図 8.1)。

図 8.1: 無駄なLSAフラッディング
\begin{figure}\begin{center}
\epsfile{file=dr-flood1,scale=0.5}
\end{center}
\end{figure}

これに対して、OSPF では代表ルータ(Designated Router:DR) を選出し、各ルータはこの代表ルータに対してフラッディング を実行します。これによって流されるLSAパケットは、代表ルータ へのパケットと、代表ルータから各ルータへのLSAパケットの3個に減少 します (図 8.2)。 。これは規模が大きくなる程効果的です。

図 8.2: 代表ルータ方式
\begin{figure}\begin{center}
\epsfile{file=dr-flood2,scale=0.5}\end{center}\end{figure}

勿論、こうした方式をとると逆に DR が故障したり、DR へのリンクが切れた 場合に問題になります。そこで、OSPF では DR の他にバックアップ代表ルータ (Backup Designated Router:BDR)を用意することで対処しています。 BDRはDRのフラッディングを監視し、もしフラッディングが流れない場合には素早く 交替してフラッディングを代わりに行います。

一方、LSAパケットの数を減少させても、LSAパケット情報に無駄があればやはり ネットワークを無駄に浪費します。このために通常 LSA は LSDB 全体では なく、 情報を細分化して生成されます(逆に言えば、LSA の集合が LSDB です)。 これによって、一つのリンクに障害があった場合には、それに関するLSAのみを 更新してフラッディングさせれば良いことになります。

次に、LSAで知らせるべき内容について簡単に触れましょう。 まず、必要な内容は近隣ルータについての 情報です。どのルータとどのルータがつながっているかを知ることは ネットワークの経路を構成するために必要不可欠なことだからです。 このために、OSPF ではLSAにはいくつかの種類があり、近隣ルータ情報は Router LSA に納められています(一つのRouter LSA に自身のルータに 近隣する全てのルータについて情報が入っています)。 近隣ルータの探索には hello プロトコルが利用されます。従って、 一定時間 hello パケットが届かないならば、そのルータとの間に障害 があると判断し、LSAを更新すると共に、ルーティング再計算を行います。 但し、自らのインターフェースのダウンや、リンクダウンに比較すると この処理は非常に時間がかかるものになります。 同時に、hello プロトコルでは相手との双方向のリンクであることも 確認します。これによって、一方向のみのリンクを排除できます( これはRIPでは排除されないので、RIPではこうした障害を検知出来ません)。

一方、自らが接続しているネットワークについての情報は Network LSA に納められます。Network LSA が必要な理由は、OSPFでのフラッディング の非効率に対するもう一つの解答を含んでいるからです。それは、 ルータが同じブロードキャストネットワークにつながっている場合には、 ブロードキャストあるいはマルチキャストを用いてLSAを流せば、一つの パケットで情報伝達を行うことが可能なのですから、それを知る必要が あるという訳です。実際には、OSPF ではマルチキャスト(AllSPFRouters:224.0.0.5 または AllDRouters:224.0.0.6) を用います。 マルチキャストはセグメントを越えた伝達が難しく、未だにインターネット 上では完全には実現されていません。しかし、同一ネットワーク上と言う 条件ならば問題はないでしょう(実践的には実はマルチキャストが一番 設定やネットワーク設計で問題になります。OSPFを使う際にはマルチキャスト を常に念頭に置かなければなりませんし、もしマルチキャストを使わない のであれば、特別な設定が必要になります)。

特に、マルチキャストのルーティングプロトコルを使わずにOSPFを使う場合には、 それらのマルチキャストをループバックアドレスにルーティングしておくという 少し変な設定をしなければなりません(全てのインターフェースからマルチキャスト が出て行くようにするためです)。

マルチキャストを知らない、あるいは詳しくない方々のために、少しマルチキャスト について次の節で簡単に説明することにします。



Noriyo Kanayama