OSPFv2パケットフォーマット
OSPF関連のパケットを見ると、OSPFのしくみがより詳しく理解できます。
本項では、OSPFv2関連のフォーマットについて説明します。
OSPFパケット
OSPFは、パケットで説明したパケットヘッダー構造をしています。
フレームタイプはTCP/IPなのでEthernetII形式です。また、OSPFのプロトコル番号は、89です。
ペイロード部分に、次から示すOSPFのフォーマットに従った情報が入ります。
OSPFパケットヘッダー
OSPF関連では、OSPFパケットヘッダーが必ずあります。以下は、OSPFパケットヘッダーのフォーマットです。
それぞれの項目の説明は、以下のとおりです。
項目 | 英語 | ビット | 説明 |
---|---|---|---|
バージョン | Version | 8 | 2固定です。 |
タイプ | Type | 8 | 1:Hello 2:Database Description(DBDパケット) 3:Link State Request(LSRパケット) 4:Link State Update(LSUパケット) 5:Link State Acknowledgment(LSAckパケット) |
パケット長 | Packet length | 16 | OSPFヘッダーを含む以降の長さです。 |
ルーターID | Router ID | 32 | 送信元のルーターIDです。 |
エリア番号 | Area ID | 32 | 0.0.0.0などのエリア番号です。 |
チェックサム | Checksum | 16 | データの誤り検出。 | 認証タイプ | AuType | 16 | 認証しない場合は0。 | 認証用データ | Authentication | 64 | 認証しない場合は0(何でもよい)。 |
OSPFパケットヘッダーの後に続くデータは、タイプの値によって以下5種類のパケットに分類され、フォーマットが別になります。
つまり、OSPFパケットは以下の構成になっているということです。
- IPパケットのペイロードにOSPF関連の情報が入る。TCPやUDPではない。
- ペイロード部分には、最初に必ずOSPFヘッダーがある。
- OSPFヘッダーに続いて、タイプによって異なるフォーマットを持つOSPFの情報が入る。
次からは、タイプ別のパケットフォーマットについて説明します。
Helloパケット
Helloパケットは、イーサネットでは10秒間隔で送信されます。ネイバー関係を結んだり、死活監視用で使われます。宛先IPアドレスは224.0.0.5で、すべてのOSPFルーターが受信します。OSPFパケットヘッダーに続いて、以下のフォーマットとなっています。
それぞれの項目の説明は、以下のとおりです。
項目 | 英語 | ビット | 説明 |
---|---|---|---|
ネットワークマスク | Network Mask | 32 | サブネットマスクです。 |
送信間隔 | HelloInterval | 16 | デフォルトは10秒です。 |
オプション | Options | 8 | オプションフラグです。 |
ルーター優先度 | Router Priority | 8 | 一番大きい数字のルーターがDRになります。 |
Helloパケット待ち時間 | RouterDeadInterval | 32 | この時間Helloを受信できないと、ネイバーがダウンしたと見なします。デフォルトは40秒です。 |
DR | Designated Router | 32 | DRのルーターIDです。DRがない場合、0.0.0.0になります。 |
BDR | Backup Designated Router | 32 | BDRのルーターIDです。BDRがない場合、0.0.0.0になります。 |
ネイバーのルーターID | Neighbor | 32 | 検出できたネイバーのルーターID。複数台ある場合は、その数続きます。 |
DBDパケット
DBD(Database Description)パケットは、FULL(隣接関係)になる時に交換されるパケットです。宛先はユニキャストアドレスです。OSPFパケットヘッダーに続いて、以下のフォーマットとなっています。
それぞれの項目の説明は、以下のとおりです。
項目 | 英語 | ビット | 説明 |
---|---|---|---|
MTUサイズ | Interface MTU | 16 | パケット全体の長さです。イーサネットでは1500byteの場合が多いです。 |
オプション | Options | 8 | オプションフラグです。 |
状態遷移関連 | - | 8 | 1〜5bit目:0固定。 6bit目:Iビット(Initビット)。DBDの最初のパケットで1。 7bit目:Mビット(Moreビット)。DBDが続く場合は1。 8bit目:MSビット(Master/Slaveビット)。状態遷移中は1台がマスターになり、1。 |
DDシーケンス番号 | DD sequence number | 32 | 通信が進むと増加。 |
LSAヘッダー | LSA Header | 160 | LSA要約です。必要な数続きます。 |
DBD交換の最初は自身がマスターと認識しますが、ルーターIDが低い機器はスレーブになり、MSビットを0に変更します。DBD交換の間はマスター側から送信し、スレーブ側が応答する形でLSAヘッダーを交換します。マスター側から送信する度にDDシーケンス番号が増えます。
LSAヘッダーは必要な数繰り返しますが、MTUを超える場合はパケットが分割されます。
LSRパケット
LSR(Link State Request)パケットは、LSU(Link State Update)を要求するパケットです。宛先はユニキャストアドレスです。OSPFパケットヘッダーに続いて、以下のフォーマットとなっています。
それぞれの項目の説明は、以下のとおりです。
項目 | 英語 | ビット | 説明 |
---|---|---|---|
LSタイプ | LS type | 32 | LSAタイプ。 |
リンクステートID | Link State ID | 32 | LSAタイプによって変わります。ルーターIDやネットワーク番号です。 |
広報ルーター | Advertising Router | 32 | 情報送信元のルーターIDです。 |
上記を1セットとして、リクエストが必要な分、続きます。
LSUパケット
LSU(Link State Update)パケットは、LSRに対する応答や経路変更時に送信されます。宛先は、DR/BDRは224.0.0.5(すべてのルーターが受信)、他のルーターは224.0.0.6(DR/BDRが受信)を使います。再送信では、ユニキャストも使います。OSPFパケットヘッダーに続いて、以下のフォーマットとなっています。
それぞれの項目の説明は、以下のとおりです。
項目 | 英語 | ビット | 説明 |
---|---|---|---|
LSA数 | LSAs | 32 | 以降からのLSA数。 |
LSA | LSA | 可変 | LSAタイプによって変わります。ルーターIDやネットワーク番号です。必要なLSAの数、繰り返します。 |
LSA部分には、以下のLSAヘッダーが必ず入ります。これは、DBDやLSAckで使われる20バイトのLSAヘッダーと同じフォーマットです。
それぞれの項目の説明は、以下のとおりです。
項目 | 英語 | ビット | 説明 |
---|---|---|---|
LSA経過時間 | LS age | 16 | LSAが生成されてからの秒数。 |
オプション | Options | 8 | オプションフラグです。 |
LSAタイプ | LS type | 8 | 1:ルーターLSA 2:ネットワークLSA 3:サマリーLSA 4:ASBRサマリーLSA 5:AS外部LSA 7:NSSA外部LSA |
リンクステートID | Link State ID | 32 | LSAタイプによって変わります。ルーターIDやネットワーク番号です。 |
広報ルーター | Advertising Router | 32 | 情報送信元のルーターIDです。 |
LSシーケンス番号 | LS sequence number | 32 | 各LSAが更新される度に増加。重複するLSAでは、数字が大きい方が新しいと判断。 |
LSチェックサム | LS checksum | 16 | データの誤り検出。 |
長さ | length | 16 | 1つのLSAの長さです。LSAタイプによって変わります。 |
LS ageは、LSAの生存時間を管理します。通常、LSAに変更がなくても30分に一回LSAは送信されますが、60分間受信がなかったLSAは使われなくなります。これによって、存在しなくなった経路などが永遠に残ることを防げます。
LSAヘッダー以降は、LSAタイプによって内容が変わります。例えば、ルーターLSAでは、ルーターIDとともに、ABRやASBRなどがわかるフラグが含まれます。
このLSAヘッダーとルーターLSAなどの情報をセットにして、必要な分繰り返されます。また、この情報を元にLSDB(Link State DataBase)が作成されます。
LSAの情報は、ルーターを介してエリア内、および必要に応じて他エリアに転送されます。
LSAckパケット
LSAck(Link State Acknowledgment)パケットは、LSUに対する確認応答です。宛先は、DR/BDRは224.0.0.5(すべてのルーターが受信)、他のルーターは224.0.0.6(DR/BDRが受信)を使います。再送信の応答では、ユニキャストも使います。OSPFパケットヘッダーに続いて、以下のフォーマットとなっています。
項目 | 英語 | ビット | 説明 |
---|---|---|---|
LSAヘッダー | LSA Header | 160 | 先ほど説明したLSAヘッダーと同じです。 |
これらは、必要なLSAの数だけ繰り返されます。
LSAckによって、LSAが反映されていることが確認できます。
パケットのやりとり
OSPFのインターフェースが起動してからのパケットのやり取りを以下に示します。
- Helloパケットをやり取りし、DR/BDRが決定します。DR/BDR以外とは、ネイバー関係となります。
- DR/BDRと他のルーターとの間で隣接関係を結ぶため、DBDパケットをやり取りします。この時、自身が知っているLSAヘッダー情報も送信します。
- 受信したLSAヘッダーに基づいて、LSRによって相手のLSA情報を要求します。
- LSRで要求されたLSAを、LSUで送信します。
- LSAckによって、LSAが正常に受信できたことを応答します。
上記のやり取りによって、ルーター間で同一のLSA情報を保存したデータベース(LSDB)を持つようになります。
補足
OSPFパケットの宛先として、224.0.0.5や224.0.0.6などのマルチキャストアドレスになることを説明しましたが、これはイーサネットのブロードキャスト環境の時を想定しています。
宛先の使われ方は、接続されるネットワークによって変わります。例えば、仮想リンクでは宛先はすべてユニキャストで行われます。
最初のページ「OSPF状態遷移とLSDB」