前回は、AS内で利用するルーティング・プロトコル(IGP)として、RIPと比較した際のOSPFの特徴と、LSA交換とLSDB作成の仕組み、エリアの概念などについて説明してきました。今回は、OSPF対応ルータ同士が隣接関係を確立する仕組みと、運用上の注意点についてまとめていきます
(編集局)
Adjacencyの形成
前回(第5回「大規模で複雑なネットワークでの運用に堪えるOSPF」)、OSPFでは、経路情報そのものではなく、LSAの交換が行われると説明しました。しかし、このLSAの交換は、すべてのOSPFルータ間でフル・メッシュ状に行われるわけではありません。
まず、OSPFが起動すると、Helloプロトコルを用いて、同一セグメント上のOSPFルータとNeighborを確立しようとします。その後、必要なルータ同士が隣接関係(Adjacency)を確立します*1。LSAの交換は、このAdjacencyを形成したルータ間において行われます。
*1Point-to-PointネットワークではAdjacencyを確立します。また、マルチアクセスのネットワークでは、DRやBDRと呼ばれる代表ルータとのみAdjacencyを確立します(各ネットワーク・タイプや代表ルータについては後述)
ここでは、このAdjacencyの形成過程を説明します。
・Adjacency形成時の各ステート
まず、最初にHelloプロトコルを用いたNeighborの確立が行われます(図1)。
DOWN
最初の状態です
Attempt
この状態は、NBMAネットワークにのみ適用されます(後述)。この状態では、NeighborからのHelloパケットを受け取っていませんが、Neighborとコンタクトを取るべく、一定間隔でHelloパケットを送信し続けています
Init
この状態は、NeighborからのHelloパケットを受け取ったことを表します。しかし、Neighborとの双方向の関係は、まだ確立できていません
2-Way
この状態は、Neighborとの双方向の関係が確立されたことを表します。具体的には、Neighborから受け取ったHelloパケットに、自ルータの情報(ルータID)が含まれていた場合に、この2-Wayの状態になります
この段階で、Neighborの確立がなされたことになります。また、マルチアクセス・ネットワークなどでは、DR/BDRの選出が行われます(後述)。Adjacencyの確立が必要ないルータ同士は、この段階の最終状態(2-Way)を維持することになります。
この後、前述のように、必要なルータ同士がAdjacencyを確立します(図2)。
ExStart
この状態は、Neighborを確立した2つのルータが、さらにAdjacencyを確立するための最初のステップになります。ここでは、DDパケット(Database Description Packet)交換時のマスタとなるルータを決定します。また、最初のDD sequence numberもここで決定されます
Exchange
この段階では、DDパケットを交換します。このDDパケットは、自分が知っているLSDBの情報を、互いに伝え合うために用いられます(実際には、LSAそのものを交換するのではなく、自分が知っているLSAのヘッダ部分のみを交換します)
Loading
先の状態(Exchange)において交換した情報に基づき、自身が保持していない、または、保持しているLSAよりも新しい情報を受信していた場合、相手に対して最新のLSAを要求します
Full
この状態は、Adjacencyが完全に確立されたことを表します。Adjacencyが確立されたルータ同士は、同じLSDBを保持することになります
「DR」と「BDR」とは?
OSPFには、大きく分けて2つのネットワーク・タイプが存在します。Point-to-Pointネットワークと、それ以外のマルチアクセス・ネットワークです。また、マルチアクセス・ネットワークには、ブロードキャスト・ネットワークとノンブロードキャスト・ネットワークが存在します。さらに、ノンブロードキャスト・ネットワークには、ノンブロードキャスト・マルチアクセス・ネットワーク(NBMA)と、Point-to-MultiPointネットワークが存在します(表1)。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
上記マルチアクセス・ネットワーク(ブロードキャスト・ネットワークとNBMAネットワーク)においては、ネットワーク・セグメントごとにDR(Designated Router)やBDR(Backup Designated Router)が選出されます。
・DRの選出
DRやBDRは、ネットワーク・セグメントごとに1台ずつ選出されます。このDRやBDRの選出は、Neighborを確立する際のHelloプロトコルの交換により行われます。Helloパケットには、DRやBDRの選出に使用されるプライオリティ値やルータIDなどの情報が入力されており、基本的にはプライオリティ値が一番高いものがDR、2番目に高いものがBDRに選出されます*2。
*2通常、このプライオリティのデフォルト値は1です。この値は、0〜255の範囲内で手動設定することが可能です(プライオリティ値を0に設定した場合、そのルータはDRにもBDRにも選出されません)。また、プライオリティ値が等しい場合、最も高いルータIDを持つものがDRやBDRに選出されます
・DRの役割
DRやBDRが選出されると、各OSPFルータは、この両者とのみAdjacencyを形成します。それ以外のOSPFルータ同士は、「Neighbor」と呼ばれる関係になります(図3)。Adjacencyを形成したOSPFルータ間では、LSAの交換が行われ、LSDBが同じになるように同期が図られます。そして、更新などが発生した際には、DRが代表してその情報をマルチキャストによりアナウンスします。
このように、DRを選出することで、マルチアクセス・ネットワークにおいて複数のOSPFルータがメッシュ上に接続された環境でも、大幅にAdjacencyの数を減らすことが可能となります。その結果、ネットワーク上に流れるLSAの数も減らすことが可能となります。
またBDRは、DRに障害が起きた際に、次にDRの役割を引き継ぐバックアップ機能を果たします(図4)。
図4 DRによる更新情報のアナウンス。この図のように、実際にはマルチキャスト・アドレスを使用して更新情報が伝播される
・マルチキャスト・アドレス=224.0.0.5 は、すべてのOSPFルータあて
・マルチキャスト・アドレス=224.0.0.6 は、DR/BDRあて
OSPFパケットについて
OSPFには、5種類のパケットが存在します(表2)。ここでは、OSPFパケットの紹介と、その主な役割について説明します。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
Type1 Helloパケット
Helloパケットは、Neighborの確立や、マルチアクセス・ネットワーク(ブロードキャスト・ネットワークとNBMAネットワーク)において、DRやBDRを選出するために使用されます。また、NeighborやAdjacencyの確立がなされた後は、これらの関係を維持するための生存確認のパケットとしても使用されます。
このHelloパケットは、定期的にアナウンス(通常は10秒間隔)されます。そして、ある一定期間内(通常は40秒)にHelloパケットが受信されなかった場合、当該ルータに障害が発生したと見なし、Neighborの関係は維持されなくなります
Type2 Database Descriptionパケット
Database Descriptionパケットは、Adjacencyの確立の際、最初に交換されるパケットです。OSPFルータは、このDatabase Descriptionパケットを用いて、各ルータが保持しているLSDBの情報を交換します。この際、相手がアナウンスしてきたLSDBの情報の中に、自分が所持していないLSAや、自分が所持しているものより新しいLSAの情報が発見された場合は、Link State Requestパケットを送信し、相手ルータに当該LSAの送信を要求します
Type3 Link State Requestパケット
Link State Requestパケットは、相手ルータにLSAの送信を要求する際に使用されます
Type4 Link State Updateパケット
Link State Updateパケットは、Link State Requestパケットにより要求された各種LSA(後述)を相手ルータにアナウンスするために使用されます。また、Adjacencyの確立後は、このパケットを用いてLSAをアナウンスします
Type5 LinkState Acknowledgmentパケット
LinkState Acknowledgmentパケットは、Link State Updateパケットを受信した際に、相手ルータにその旨を伝えるための受信確認用のパケットとして使用されます
・LSAのタイプ
LSAにはいくつかのタイプが存在します。ここでは、一般的によく使用されるLSAのタイプと、そこに含まれる主な情報について説明します。
LS Type1 Router-LSAs
Router-LSAsは、エリアに属する各ルータが生成し、そのエリア内部でのみ伝播されます。このLSAには、エリアへのルータのリンクの情報や、インターフェイスのコスト値などが含まれています。以下、Router-LSAsに含まれる主な情報を記します
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
LS Type2 Network-LSAs
Network-LSAsはDRが作成し、DRが所属するネットワーク・セグメントが含まれるエリア内部でのみ伝播されます。このLSAには、DRが所属しているセグメントに接続されているルータの一覧(ルータIDの一覧)や、ネットワークのマスク情報などが含まれています。以下、Network-LSAsに含まれる主な情報を記します
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
LS Type3 Summary-LSAs
LS Type3のSummary-LSAsは、ABRが作成しアナウンスします。このLSAには、エリア間のネットワーク情報が含まれており、ルートのサマライゼーションにも使われます。以下、LS Type3のSummary-LSAsに含まれる主な情報を記します
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
LS Type4 Summary-LSAs (ASBR-summary-LSAs)
LS Type4のSummary-LSAs には、ASBRまでのルート情報が含まれています。このLSAもABRが作成しアナウンスします。以下、LS Type4のSummary-LSAsに含まれる主な情報を記します
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
LS Type5 AS-external-LSAs
AS-external-LSAsはASBRが作成し、スタブ・エリアやNSSAを除くAS全体に伝播されます。このLSAには、AS外部のネットワークへのルート情報が含まれています。以下、AS-external-LSAsに含まれる主な情報を記します
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
・Type1と2のコストについて
LS Type5 AS-external-LSAsのコストには、Type1とType2の2種類が存在します。この両者では、OSPF外部ネットワークまでのコスト値の計算が異なります。
external Type1
コスト値は、外部コストにASBRまでのコストを足した値になります
external Type2
コスト値は、外部コストのみの値になります
また、同一のOSPF外部ネットワークに対してType1とType2の2つが存在した場合は、常にType1が優先されます。
運用上の注意点運用上の注意点
・各種タイマの設定
OSPFでは、Hello IntervalとDead IntervalによりAdjacencyを管理しています。もし、各ルータのIntervalが異なる場合、Adjacencyを確立することができません。これらのIntervalを変更する場合には、すべてのルータで一致させる必要があります。
Hello Interval (デフォルト10秒)
Helloパケットの送信間隔
Dead Interval(デフォルト40秒)
相手からのHelloパケットを受信するまでに経過してもよい時間。この間、相手からHelloパケットを受信しなかった場合、そのルータはダウンしたと見なされる
・インターフェイス・コスト
ルータの各インターフェイスに割り当てられるコストのデフォルト値は、ほとんどのベンダの製品が以下の計算式に基づいています*3。
計算式: 100Mbps / インターフェイス速度 = COST
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
*3この計算式は、100Mbpsが最速の時代に考えられたもので、100Mbpsより速い回線速度には対応していません(100Mbps以上はすべて「cost 1」と計算されます)
現在のネットワーク環境では、Gigabit Ethernetやトランキング技術(複数のラインを仮想的に束ねる技術)の登場により、100Mbps以上のインターフェイスを利用することが多くなっています。このため、従来の計算式ではコストを正しく計算できないため、以下のどちらかの対策を施す必要があります。
対策1 各インターフェイスのコストを手動で設定する
あらかじめ各インターフェイスの速度ごとのコストを決定し、各インターフェイスに手動でコストを設定します。
対策2 上記の計算式を変更する
ほとんどのルータ・ベンダでは、上記計算式の100Mbpsの部分を変更することが可能です(例:1Gbps/インターフェイス速度=COST)。これにより、自動計算でも100Mbps以上の速度に対応できます*4。
*4最近のレイヤ3スイッチ機器では、高速インターフェイスに対応できるように、あらかじめデフォルトの計算式が変更されているものもあります。従って、たとえすべてのインターフェイスが100Mbps以下の場合でも、マルチ・ベンダ環境下においては上記のような対策が必要になる場合があります
・ルータIDの設定
各OSPFルータは、それぞれルータIDと呼ばれる識別子を持ちます。OSPFでは、このルータIDを用いて各ルータを管理しているため、必ず重複がないようにする必要があります。ほとんどのルータ・ベンダでは、ルータIDは次の方法で自動的に設定されます。
ルータIDの選択方法
ループバック・インターフェイスにIPアドレスが設定されている場合、それをルータIDとする。そうでない場合は、現在UPしているIPインターフェイスのうち、最も大きいIPアドレスをルータIDとする
上記の自動設定で、現在UPしているIPインターフェイスのうち、最も大きいIPアドレスをルータIDとしている場合には、問題が発生する可能性があります。
もし、現在ルータIDとして選択されているインターフェイスがダウンした場合、ルータは自動的に次に大きいIPアドレスにルータIDを変更します。このとき、OSPFプロセスを再起動するため、すべてのOSPF経路がなくなり、一時的に通信不能に陥ります(OSPFはルータIDで管理されているため、ルータIDを変更するとすべての接続プロセスをやり直す必要があります)。
この現象が発生すると、たとえ迂回パスがあったとしても、それを瞬時に利用することができなくなります。ルータID変更によるOSPFプロセスの再起動を防ぐためには、以下のどちらかの対策を施す必要があります。
対策1 ループバック・インターフェイスにIPアドレスを設定する
ループバック・インターフェイスにIPアドレスを設定すると、そのIPアドレスが自動的にルータIDとして使用されます。ループバック・インターフェイスは、常にUPしているインターフェイスであるため、ルータIDを固定することが可能です。通常ループバック・インターフェイスには、32ビット・マスクのアドレスを設定することが多いようです(例:1.1.1.1/32)
対策2 ルータIDを手動で設定する
ルータIDを手動で設定します。これにより、ルータIDを固定することが可能です。ただし、重複がないように注意する必要があります。通常、自分のインターフェイス・アドレスのいずれかを設定することが多いようです。
・OSPFの安定度の確認
OSPFでは、エリア単位でLSAが更新されるたびに各ルータがSPF計算を行い、新たな最短パス・ツリーを作成します。ルータは、この計算した回数をカウントしているため、その値をコマンドまたはSNMP(ospfSpfRuns)などで参照することが可能です。
安定しているネットワークでは、通常はほとんど計算が発生しないため、このカウントの増加数は少なくなります*5。これに対し、不安定なネットワークでは常にリンクのUP/DOWNなどが発生するため、このカウント数が著しく増加していることが考えられます。
OSPFネットワークの安定度は、このカウントの増加を定期的に確認しておくことで、ある程度把握することが可能です。
*5安定しているネットワークでも、LSAは30分周期で更新されるため、多少カウントは増加します
本連載は、今回をもちまして最終回となります。これまで、ルーティング・プロトコルの概要から始まり、BGP/RIP/OSPFと代表的なプロトコルの仕組みや運用のコツについて紹介してきましたが、皆さまのネットワーク運用につながるヒントは得られたでしょうか?
大規模、複雑化するネットワーク環境において、ルーティング・プロトコルの重要性は次第に大きくなってきています。@ITでは、今後ともルーティング・プロトコル技術やルータの運用に役立つ情報の提供を続けていく予定ですので、ぜひ期待してお待ちください。
(編集局)
Copyright © ITmedia, Inc. All Rights Reserved.