|
White Paper
更新日:2003年6月19日
概要
Cisco IOS® NetFlowサービスは、ネットワーク上のIPフローについてネットワーク管理者が情報収集する手段を提供します。エクスポートされたNetFlowデータは、ネットワークの管理やプランニング、社内アカウント管理、部門別の課金、ISP(Internet Service Provider)における課金処理、データ ウェアハウジング、DoS(Denial of Service)攻撃対策、マーケティング向けデータ マイニングなど、様々な用途に利用できます。
NetFlowが出力する基本データは、「フロー レコード」と呼ばれます。NetFlowの成熟とともに、様々なフロー レコードを格納する複数のフォーマットが定義されてきました。フロー レコードの既存のflow-record-formatについては、次のWebページに多くの情報が掲載されています。
http://www.cisco.com/univercd/cc/td/doc/cisintwk/intsolns/netflsol/nfwhite.htm
この文書では、Version 9と呼ばれる最新版のNetFlowフロー レコード フォーマットについて解説します。NetFlow Version 9フォーマットの大きな特徴は、テンプレート ベースのフォーマットである点です。テンプレートの導入によって、フロー レコード フォーマットに拡張性が備わりました。これにより、将来NetFlowサービスに拡張を加える場合でも、基本フォーマットの変更は不要となります。またテンプレートは、主に以下のようなメリットを提供します。
- サードパーティのパートナーがNetFlow対応のデータ収集または表示アプリケーションを開発する場合、NetFlowの機能追加のたびにアプリケーションの再構築を繰り返す必要がなくなります。あらかじめテンプレートで定義されたドキュメントをそのまま外部データファイルとして使うことで対応できるようになります。
- 既存のシステムに影響を及ぼすことなく、NetFlowへの新機能の追加をより短期間で行えます。
- 将来、登場するであろう、また開発中の新しいプロトコルのサポートについて、NetFlowではVersion 9フォーマットをサポートすることで適応可能であり、将来的拡張性に富んでいます。
この文書で使用される用語
NetFlow Version 9フォーマットの各部分を説明する上では、いくつもの紛らわしい用語が出てきます。混乱を前もって避けるため、ここではそれらの用語について解説します。
- エクスポート パケット――NetFlowサービスが動作するデバイス(ルータなど)が生成するパケットです。他のデバイス(NetFlow Collectorなど)に向けて送信され、受信側のデバイスでこのパケットは処理されます(パースやアグリゲート、IPフロー情報の保存など)。
- パケット ヘッダー――エクスポート パケットの先頭部分を指します。NetFlowバージョンをはじめ、パケット内のレコード数、パケット ロス検出のためのシーケンス番号など、パケットの基本情報を含みます。
- フローセット――エクスポート パケットにおいて、パケット ヘッダーの後に続く部分を指します。データ収集デバイスによってパースと解析が行われます。パケット ヘッダーの後ろに位置する一連のレコードの総称として用いられます。フローセットには、「テンプレート」と「データ」の2つのタイプがあります。エクスポート パケットには1つ以上のフローセットが含まれており、テンプレートとデータの両タイプを同じパケット内に混在させることができます。
- テンプレート フローセット――エクスポート パケット内でグループ化された、1つもしくは複数のテンプレート レコードの集まりを指します。
- テンプレート レコード――後続のエクスポート パケットに含まれるデータ レコードのフォーマットを指定するために用いられます。このテンプレート レコードは、必ずしも同一パケット内のデータ レコードのフォーマット指定だけに用いられるわけではないことに注意してください。そのためデータ収集アプリケーションでは、受信したすべてのテンプレート レコードを一時保存する必要があります。そして、受信した様々なデータ レコードをパースする際に、一時保存したテンプレート レコードから適切なものを参照します。
- テンプレートID――同じエクスポート デバイスによって生成される個々のテンプレート レコードを識別するための番号です。複数のデバイスにわたる唯一性は保証されていないので、複数デバイスからエクスポート パケットを受信するデータ収集アプリケーションでは、その点に留意する必要があります。つまり、テンプレートIDを発行したエクスポート デバイスのアドレスも一時保存し、デバイス間での識別を行わなくてはなりません。
- データ フローセット――エクスポート パケット内でグループ化された、1つもしくは複数のデータ レコードの集まりを指します。
- データ レコード――エクスポート パケットを生成したデバイスを流れるIPフローの情報を提供します。 データ レコードの各グループ(個々のデータ フローセット)は、それ以前に送信されたテンプレートIDを含んでおり、レコード内のデータをパースするために使用します。
- オプション テンプレート――NetFlowプロセスに関連するデータのフォーマットを通知するための、特殊なタイプのテンプレート レコードです。
- オプション データ レコード――オプション テンプレートをベースとする特殊なタイプのデータ レコードです。NetFlowプロセスそのものの情報を表す特定のテンプレートIDを参照します。
NetFlow Version 9パケット レイアウト
NetFlow Version 9のレコード フォーマットは、パケット ヘッダーと、それに続く1つ以上のテンプレート フローセットもしくはデータ フローセットで構成されます。テンプレート フローセットは、後続のデータ フローセットの各フィールドについて記述したものです。対象となるデータ フローセットは、同一のエクスポート パケットもしくは後続のエクスポート パケットに含まれます。
テンプレート フローセットとデータ フローセットは、1つのエクスポート パケット内に混在させることが可能です(表1)。
エクスポート パケット内部には、各フローセットを以下の組み合わせで含めることができます。
- テンプレート フローセットとデータ フローセットが混在するエクスポート パケット――データ収集デバイスでは、同じエクスポート パケットに含まれるテンプレート フローセットとデータ フローセットが、何らかの関係を持つと仮定することはありません。よって、受信したテンプレートはすべて一時保存しておき、データを解析する際にはその中から適切なテンプレートを選択するようにします。
- データ フローセットだけで構成されるエクスポート パケット――適切なテンプレートIDが定義され、データ収集デバイスに送信されると、その後の大半のエクスポート パケットはデータ フローセットだけで構成されます。
- テンプレート フローセットだけで構成されるエクスポート パケット――例外的なケースですが、テンプレート レコードだけを含むエクスポート パケットが送信されることもあります。通常、テンプレートは、データ フローセットに付加される形で送信されます。とはいえ、次のような状況では、テンプレートだけが送信されます。例えば、ルータが起動もしくは再起動した。場合、ルータはただちにデータ収集デバイスとの同期を行おうとします。その際、テンプレート フローセットを頻繁に送信し、後続のデータ フローセットをデータ収集デバイスにて解析するために必要な情報を提供します。また、テンプレート レコードの有効期限は限られているため、定期的にリフレッシュしなくてはなりません。テンプレートの有効期限が切れたとき、データ収集デバイスに送信すべきデータ フローセットがない場合は、テンプレート フローセットだけを含むエクスポート パケットが送信されます。
テンプレート フローセットおよびデータ フローセットそれぞれのフォーマットについては、この文書の後半で説明します。
NetFlow Version 9パケット ヘッダー フォーマット
NetFlow Version 9のパケット ヘッダーは、前バージョンのものとほぼ同一のフォーマットを使用しています。表2に、NetFlow Version 9のパケット ヘッダー フォーマットを示します。これは、NetFlow Version 5のパケット ヘッダーをベースとしています。また、表3に、各フィールドの内容を示します。
|
0
|
1
|
2
|
3
|
4
|
5
|
6
|
7
|
8
|
9
|
10
|
11
|
12
|
13
|
14
|
15
|
16
|
17
|
18
|
19
|
20
|
21
|
22
|
23
|
24
|
25
|
26
|
27
|
28
|
29
|
30
|
31
|
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
バージョン |
カウント |
||||||||||||||||||||||||||||||
|
システム稼働時間 |
|||||||||||||||||||||||||||||||
|
UNIX秒 |
|||||||||||||||||||||||||||||||
|
パケット シーケンス番号 |
|||||||||||||||||||||||||||||||
|
ソースID |
|||||||||||||||||||||||||||||||
表3:NetFlow Version 9パケット ヘッダーのフィールド内容
NetFlow Version 5およびVersion 8のパケット ヘッダーに含まれていたその他の値(サンプリング インターバルやアグリゲーション スキーム)は、既定のオプション データ レコードで送信されます。オプション テンプレートおよびオプション データ レコードそれぞれのフォーマットについては、この文書の後半で説明します。
NetFlow Version 9テンプレート フローセット フォーマット
NetFlow Version 9フォーマットの主要な要素と言えるのが、テンプレート フローセットです。テンプレートの導入によって、NetFlow対応のデータ収集または表示用アプリケーションでは、事前に登録されていないフォーマットのNetFlowデータを扱えるようになります。これにより、NetFlowのレコード フォーマットの柔軟性が大幅に改善します。テンプレートは、あるテンプレートIDを持つNetFlowデータについて、各フィールドのタイプや長さを規定するために使用します。
テンプレート フローセットのフォーマットを表4に、各フィールドの内容を表5にそれぞれ示します。
表4:NetFlow Version 9テンプレート フローセット フォーマット
表5:NetFlow Version 9テンプレート フローセットの各フィールドの内容
以下の点に留意してください。
- テンプレートIDは、ルータの再起動によって変化します。その他の状況では、エクスポート デバイスのNetFlow設定が変化した場合のみ、テンプレートIDが変化します。
- テンプレートがリフレッシュされない場合、一定期間後に無効となります。テンプレートのリフレッシュ方法には、次の2種類があります。1つは、エクスポート パケットをN個送信するたびに、テンプレートを再送信する方法です。もう1つは、タイマーによってN分間隔で再送信し、リフレッシュする方法です。いずれの方法もユーザ設定によって選択できます。
表6:NetFlow Version 9フィールド タイプ定義
エンコード済みフィールドの内容
IPV6_OPTIONS_HEADERS
このフィールドは以下のようにエンコードされています。
| Bit 15 | Bit 14 | Bit 13 | Bit 12 | Bit 11 | Bit 10 | Bit 9 | Bit 8 |
| 予約 | 予約 | 予約 | 予約 | 予約 | ESP(Encapsulating Security Payload)(50) | AH(認証ヘッダー)(51) |
ペイロード圧縮ヘッダー(108) |
| Bit 7 | Bit 6 | Bit 5 | Bit 4 | Bit 3 | Bit 2 | Bit 1 | Bit 0 |
| 宛先オプション ヘッダー(60) | ホップバイホップ オプション ヘッダー(0) | 予約 | レイヤ4到達不可ヘッダー(compressed, encrypted, not supported) | フラグメンテーション ヘッダー(44)――先頭フラグメント | ルーティング ヘッダー(43) | フラグメンテーション ヘッダー(44)――先頭フラグメント以外 | 予約 |
NetFlow Version 9データ フローセット フォーマット
データ フローセットのフォーマットを表7に、各フィールドの内容を表8にそれぞれ示します。
表8:NetFlow Version 9データ フローセットの各フィールドの内容
NetFlow Version 9のデータ フローセット フォーマットを解釈する際には、対応するテンプレートIDが必要となることに注意してください。対応するテンプレートIDを事前に受信していない場合は、データ レコードを破棄しなくてはなりません。
NetFlow Version 9オプション テンプレート フォーマット
オプション テンプレート(および対応するオプション データ レコード)は、NetFlow Version 9における仕様で重要な役割を担う新しいレコード タイプです。オプション テンプレートは、IPフローに関する情報ではなく、NetFlowプロセスそのもののメタデータを提供するために使用します。オプション テンプレートのフォーマットを表9に、各フィールドの内容を表10にそれぞれ示します。
|
0
|
1
|
2
|
3
|
4
|
5
|
6
|
7
|
8
|
9
|
10
|
11
|
12
|
13
|
14
|
15
|
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
フローセットID = 1 |
|||||||||||||||
|
レングス |
|||||||||||||||
|
テンプレートID |
|||||||||||||||
|
オプション スコープ レングス |
|||||||||||||||
|
オプション レングス |
|||||||||||||||
|
スコープ フィールド1タイプ |
|||||||||||||||
|
スコープ フィールド1レングス |
|||||||||||||||
|
― |
|||||||||||||||
|
スコープ フィールドNレングス |
|||||||||||||||
|
オプション フィールド1タイプ |
|||||||||||||||
|
オプション フィールド1レングス |
|||||||||||||||
|
― |
|||||||||||||||
|
オプション フィールドNレングス |
|||||||||||||||
|
パディング |
|||||||||||||||
表10: NetFlow Version 9のオプション テンプレートのフィールド定義
例
例1:
図1に、オプション テンプレートを示します。
図1:
オプション テンプレートの例

以下の3つのフロー レコードをレポートする例を示します。
ソースIPアドレス | 宛先IPアドレス |ネクスト ホップ アドレス| パケット数| バイト数
198.168.1.12 | 10.5.12.254 | 192.168.1. | 5009 | 5344385
192.168.1.27 | 10.5.12.23 | 192.168.1.1 | 748 | 388934
192.168.1.56 | 10.5.12.65 | 192.168.1.1 | 5 | 6534
図2は、NetFlow Version 9のエクスポート パケットを表す図です。以下の点に注目してください。
- エクスポート パケットは、テンプレート フローセットとデータ フローセットの両方を含むことができる。
- テンプレート フローセットとデータ フローセットは混在できる。
- テンプレート レコードのテンプレートIDは、データ フローセットのフローセットIDに対応する。
- データ レコードにおけるデータ配置は、対応するテンプレート レコードで定義されたフィールド フォーマットに従う。
- ここでは、テンプレートID「256」のテンプレート フローセットに続き、同IDを参照するデータ フローセットを受信した例を紹介していますが、実際には、あるエクスポート パケットにおいて、テンプレートとそれを参照するデータが連続するとは限らないことに注意してください。
NetFlow Version 9 エクスポート パケットの例

データ収集 中継デバイス
通常、コレクターは、エクスポート デバイスからフロー レコードを受信し始める前に、テンプレート定義を受信します。その後、フロー レコードのデコードを行い、コレクター内に保存します。フロー レコードを受信した時点でテンプレート定義が届いていない場合は、コレクターは、同レコードを保存し、追ってテンプレート定義が届いた時点でデコードするようにします。コレクターでは、データ フローセットとそれに対応するテンプレートが同じエクスポート パケットに含まれると仮定してはいけません。
また、1つのエクスポート パケットには1つのテンプレート フローセットだけ含まれると仮定することもできません。まれに、複数のテンプレート フローセットが1つのエクスポート パケットに入ることがあります。
テンプレートは、一定の有効期限を備えています。データ収集デバイスでは、エクスポート デバイスからテンプレート フローセットを最後に受信した時間に基づき、テンプレートの有効期限を計算する必要があります。有効期限の切れたテンプレートを用いてフロー レコードのデコードを行ってはいけません。よって、データ収集デバイスでは、以下のようなリストを管理する必要があります。
<エクスポート デバイス、エクスポート インタフェース、テンプレートID、テンプレート定義、最終受信時間>
エクスポート デバイスの再起動などによって、新しいテンプレート定義を受信した場合は、直ちに古いテンプレート定義を置き換える必要があります。