OSPF:パケットの種類

OSPF:パケットの種類

OSPFのパケット

OSPFではネイバー確立や経路情報の交換などに使われるいくつかのパケットがあります.ここではそれらを紹介していきます.

OSPFヘッダー

OSPFパケットに共通して付与されるヘッダー情報があります.このヘッダーに加えてOSPFパケットの種類ごとにパケットデータが組み合わされます.

バージョン

OSPFのバージョンを示します.IPv4で利用されるOSPFはバージョン2となっています.IPv6の場合はバージョン3を使用します.

タイプ

OSPFパケットのタイプが入ります.次の通りで識別されます.

  • 1:Helloパケット
  • 2:Database Descriptionパケット
  • 3:Link State Requestパケット
  • 4:LinkState Updateパケット
  • 5:Link State Acknowledgementパケット

パケット長

ヘッダを含めたOSPFパケットの長さをバイト単位で表した値が入ります.

ルーターID

OSPFルーターのルーターIDが入ります.

エリアID

パケットが生成されたエリアのIDが入ります.

チェックサム

エラーチェックのためのチェックサム計算に使用します.

認証タイプ

OSPFの認証タイプを示します.認証タイプが取り値は次の通りです.

  • 0:認証なし
  • 1:シンプルパスワード認証
  • 2:MD5認証

認証データ

認証タイプが0の時はこのフィールドは使われません.認証タイプ1の時は認証パスワードが入ります.認証タイプ2の時は次のようなデータが入ります.

  • キーID:メッセージダイジェストを作成するためのキー番号
  • 認証データ長:パケットの後に付けられるメッセージダイジェストの長さ
  • 暗号化シーケンス:暗号化されたシーケンス番号

Helloパケット

主な用途はネイバーやアジャセンシーの確立と生存確認です.マルチアクセスネットワークにおいてはDR/BDRの選定に使用されます.Helloパケットを定期的にアナウンスし,一定期間Helloパケットが受信されなかった場合には当該ルーターに障害が発生したものとしてネイバー関係を解消します.

ネットワークマスク

Helloパケットが送信されたインタフェースのサブネットマスクです.受信したHelloパケットのネットワークマスクと受信したインタフェースのサブネットマスクが一致していないと,そのパケットは破棄されます.

Helloインターバル

HelloインターバルはHelloパケットの送信間隔を定義します.DeadインターバルはHelloパケットを受信できない状態になってからOSPFネイバーがダウンしたとみなすまでの時間です.Deadインターバルは常にHelloインターバルの4倍になります.以下は各ネットワークタイプごとのHelloインターバルのデフォルト値です.ネイバー同士でHelloインターバルとDeadインターバルは完全に一致している必要があります.

ネットワークタイプHelloインターバル[s]Deadインターバル[s]
ブロードキャスト1040
P2P1040
NBMA30120
P2MP30120
P2MP(NBMA)30120

オプション

OSPFルーターの様々な機能を表します.このフィールドはHelloパケット,DDパケット,LSUパケットに含まれています.8ビットの内上位2ビットは使用しませず,0が入ります.

  • DCビット:生成したルーターがOSPFデマンドサーキットをサポートするかを示す.
  • EAビット:生成したルーターが外部属性LSAをサポートするか示す.
  • N/Pビット:NビットはHelloパケットでのみ利用され,1がセットされていればLSA Type7をサポートしている.Nビットが一致していなければアジャセンシーを確立できない.PビットはLSA Type7ヘッダでのみ利用される.NSSAのABRがType7からType5に変換することを示す.
  • MCビット:生成したルーターがマルチキャストパケットを転送できることを示す.
  • Eビット:LSA Type5をサポートするかどうかを示す.1であればサポートするので,スタブエリア以外では1がセットされる.
  • Tビット:OSPFルーターがToS(Type of Service)をサポートするか示す.

プライオリティ

DR/BDRの選定に利用されるプライオリティです.プライオリティが高いルーターが選定時に優先される.この値が0だとDR/BDRになることはできない.

Deadインターバル

ネイバーがダウンしたとみなすまでの間隔を示します.最後にHelloパケットを受信してからDeadインターバルの間までにHelloパケットを受信できなければネイバーがダウンしたとみなします.

DRのIPアドレス

DRのインタフェースIPアドレスです.P2Pネットワークでは0.0.0.0という値が入ります.

BDRのIPアドレス

BDRのインタフェースIPアドレスです.P2Pネットワークでは0.0.0.0という値が入ります.

ネイバー

ルーターが認識している全てのネイバーのルーターIDが入ります.Helloパケットをやりとりして,お互いのネイバーフィールドにルーターIDがリストされあっている状態が2way状態です.

Database Descriptionパケット(DDパケット)

アジャセンシー確立の際,最初に交換されるパケットです.DDを用いて各ルーターが保持しているLSDBの情報を交換します.このとき,受信したLSDBの中に自身が所持していないLSAや最新のLSAがあった場合はLSRを送信し,相手のルーターにそのLSAを送信するよう要求します.

インタフェースMTU

DDパケットの送信ルーターがフラグメントせずに送れる最大IPパケットサイズですバーチャルリンク上でやりとりされる場合は0x0000という値になります.

オプション

Helloパケットと同じフィールドで使用されます.このフィールドの後の5ビットは00000で予約されています.

Iビット

一連のDDパケットのうち,先頭のDDパケットには1がセットされます.2番目以降のパケットでは0がセットされます.

Mビット

DDパケットがまだ続いてることを示すビットです.後続のDDパケットがある場合は1がセットされ,そうでなければ0がセットされます.

MSビット

DDパケット交換時のマスターとスレーブを表すためのビットです.ルーターIDの大きいルーターがマスターとなり,LSDBの同期を取ります.マスタールーターのパケットには1がセットされ,スレーブルーターには0がセットされます.

DDシーケンス番号

LSDBの同期を取るときに使用するシーケンス番号です.マスタールーターが一意の値を決め,同期プロセスの中で増加していきます.

LSAヘッダ

DDパケットを発信するルーターが保持する全て,もしくは一部のLSAヘッダが含まれます.

Link State Requestパケット(LSRパケット)

相手のルーターにLSAの送信を要求するさいに使用されます.

リンクステートタイプ

ルーターリンクやネットワークリンクなど,LSAのタイプを示すコードが入ります.

リンクステートID

リンクステートIDはリンクステートタイプによって内容が変わります.

アドバタイジングルーター

LSAを生成したルーターのルーターIDが入ります.

LinkState Updateパケット(LSUパケット)

LSRにより要求された各種LSAを相手ルーターに広報するさいに使用されます.また,アジャセンシーの確立後はこのパケットを用いてLSAをアナウンスします.

LSA数

LSUパケットに含まれるLSAの数が入ります.1パケットに含めるLSAのサイズは最大パケットサイズによって決まります.

LSA

完全なLSAが格納されます.LSAはリンクステートタイプによって内容が異なります.

Link State Acknowledgementパケット(LSAckパケット)

LSUを受信したことを相手に知らせるためのパケットです.LSUパケットによって通知されたLSAを受信したことを相手に伝えます.パケット内にはLSUで受け取ったLSAヘッダのみが格納されます.

LSA (Link State Advertisement)

LSAはOSPFで使用されるパケットです.いくつかのタイプが用意されており,それぞれ利用用途や含まれる情報が異なります.

Type 1:Router LSA

エリア内のOSPFルーターが生成し,所属しているエリア内にのみアドバタイズされます.Router LSAにはOSPFルーターのリンク情報が全て含まれます.リンク情報にはリンクの種類やコスト,保持しているリンク数,IPアドレスが含まれます.

リンクタイプリンクIDリンクデータメトリック
1(P2P)ネイバールーターのルーターIDインタフェースIPアドレス
(未設定の場合はI/FのMIB-II IfIndex)
各リンクのコスト
2(Transit)DRのインタフェースIPアドレスインタフェースIPアドレス各リンクのコスト
3(Stub)IPネットワークアドレスIPアドレスマスク各リンクのコスト
4(Virtual Link)ネイバールーターのルーターIDインタフェースIPアドレス各リンクのコスト

LSAヘッダ(40 Bytes)とリンク数情報(4 Bytes)に加えてルーター1台ごとにルーターLSA(16 Bytes)が追加されていきます.

Type 2 :Network LSA

DRから同一エリア内のBDRやDRotherにアドバタイズされます.DRのIPアドレス,セグメントに接続されているルーターの一覧や,ネットワークのマスク情報などが含まれます.このLSAはエリア内すべてにフラッディングされます.

リンクステートIDネットワークマスクアタッチドルーター
DRのインタフェースIPアドレスIPアドレスマスク同一セグメント内のルーターID一覧

Type 3:Summery LSA

ABRが作成し広報します.ABRがバックボーンエリアを経由して到達することができるネットワークアドレスをエリア内にアドバタイズのほか,経路のサマライズにも使われます.アドレスは階層構造に設計することで,ネットワークアドレスを集約することができます.この集約は必須ではなく,本来の目的はエリア外部の経路情報を通知することが重要です.

リンクステートIDネットワークマスクメトリック
宛先ネットワークアドレスネットワークアドレスマスクネットワークまでのコスト

Type 4:ASBR Summary LSA

ABRが生成するASBRに到達するための経路情報を通知するLSAです.AS外部への経路やASBRのルーターIDとASBRまでのメトリックが含まれます.

リンクステートIDネットワークマスクメトリック
ASBRのルーター0.0.0.0ASBRまでのコスト

Type 5:AS External LSA

ASBRが外部の非OSPFドメインのネットワークアドレスを通知するために使用するLSAです.スタブエリアを除くOSPFドメイン内にアドバタイズします.メトリックタイプは2種類あり,デフォルトのE2はAS外部ルートのメトリックは固定,ASBRが一つだけの時に使われます.E1は複数のASBRがある場合に利用され,AS外へのルートのコストに内部コストを足してコストを算出します.

リンクステートIDネットワークマスクメトリックフォワーディングアドレス
宛先ネットワークアドレスIPアドレスマスクそのネットワークまでのコスト通常は0.0.0.0(あるいはネクストホップのアドレス)

OSPFと外部メトリックの関係性

<OSPFコストと外部メトリックが同じ意味を持つ場合>
外部ネットワークとOSPFネットワークを1つのネットワークのように扱いたいケースです.メトリックタイプE1を利用して最適なASBRを選択できます.

<OSPFコストより外部メトリックが重要な意味を持つ場合>
BGPのMEDに基づいて出口となるASBRをコントロールしたいケースなどです.メトリックタイプE2を利用すると外部メトリックのみで最適なASBRを選択できます.

<外部メトリックよりもOSPFコストが重要な意味を持つ場合>
各ルーターから最も理解ASBRを選択させたいケースです.E1でもE2でも外部コストを同じにしておけば内部コストのみで判断されます.

フォワーディングアドレス

AS内から外部へパケットを転送する場合,必ずASBRを経由することになります.しかし,それが最適でないときは,フォワーディングアドレスを用いて各ルーターに直接外部のネクストホップまでの最適パスを計算させます.

Type 7:NSSA External LSA

NSSA内のASBRが作成します.非OSPFドメイン内のネットワークアドレス情報をNSSA内にフラッディングします.ABRはType 7をType 5に変換してバックボーンエリアにアドバタイズします.非OSPFドメインのネットワークアドレス,サブネットマスク,ネクストホップ,メトリックが含まれます.

リンクステートIDネットワークマスクメトリック
宛先ネットワークアドレスIPアドレスマスクそのネットワークまでのコスト

LSAまとめ

LSAのタイプをまとめると以下の表のようになります.

TypeLSA名生成元フラッディング範囲内容
1Router LSA全OSPFルータ同一エリア内ルータID,リンク数,リンクの種類,コスト情報
2Network LSADR同一エリア内DRのIPアドレス,セグメント上のルータID一覧
3Network Summary LSAABR全エリア各エリア毎の経路情報,コスト情報
4ASBR Summary LSAABRAS全体ABRが知るASBRのルータID,コスト情報
5AS External LSAASBRAS全体再配布された経路情報,コスト情報,ネクストホップ
7NSSA External LSANSSA内のASBRNSSA再配布された経路情報,コスト情報,ネクストホップ