sFlowエージェントがモニターしたトラフィック情報は,「sFlowパケット」を使ってsFlowコレクタに送信されます。sFlowパケットは,UDP上にカプセル化されて,標準ではsFlowコレクタが動作するワークステーションのUDP6343番ポートあてに送信されます。

 sFlowコレクタは,sFlowパケットを受信しても応答パケットを返しません。また,sFlowが下位プロトコルとして使うUDPは,TCPと異なり,パケットが相手に届かなくても再送処理を行いません。このように応答確認も再送処理も行われないので,sFlowパケットはネットワーク上でお互いが気付かないまま完全に失われる可能性があります。

 「そんなプロトコルでまともに管理ができるのか?」といぶかる人もいるかもしれません。しかし,心配は無用です。sFlowの場合,1つのsFlowパケットで情報は完結しています。仮に前後のパケットが失われても,届いたsFlowパケットだけでトラフィック情報を解析できます。大きな割合でパケットが失われる場合は問題ですが,少ない割合で失われる場合は,推定値の誤差が若干大きくなるという影響があるだけです。

sFlowパケットの構造を理解する

 sFlowパケットの構造をのぞいてみましょう(図5)。sFlowパケットは,先頭にバージョンやエージェントのアドレスなどを示すヘッダーがあり,そのうしろに通信量を示すカウンタ・サンプル,パケットのヘッダー・サンプル,補助的な情報が続きます。パケットのヘッダー・サンプルと補助的な情報は,合わせて「フロー・サンプル」と呼ばれます。

図5●sFlowパケットのフォーマット
図5●sFlowパケットのフォーマット  [画像のクリックで拡大表示]

 sFlowパケットの構造をより詳細に知りたい場合は,「sFflowの仕様」のWebページに,パケットの詳細なフォーマットが書かれているので参照してください。なお,カウンタ・サンプルやヘッダー・サンプル,補助適な情報は,すべてのsFlowパケットに存在するわけではないので注意が必要です。カウンタ・サンプルだけ,ヘッダー・サンプルだけというケースもあります。

 sFlowパケット中の主要フィールドについてもう少しだけ詳しく見ておきましょう。

sFlowパケット・ヘッダー

 sFlowのパケット・ヘッダーには,sFlowのバージョン番号(2,4または5),エージェントのIPアドレス(IPv4とIPv6に対応),サブエージェント番号,シーケンス番号(sFlowコレクタが同じパケットを2度処理しないための識別番号),エージェントが起動してからの経過時間(ミリ秒単位),サンプル・データ数などのフィールドがあります。

カウンタ・サンプル

 sFlowエージェントがモニターしているポートごとに,実際に流れたパケット数やバイト数,エラー数といった通信量に関する情報を転送するためのデータです。カウンタ・サンプルには,ポートのメディア種別(イーサネット,トークン・リングなど)に依存しない汎用のカウンタ・データと,メディア種別ごとに特別な形式を持つカウンタ・データが定義されています。

 しかし,実際のところは汎用のカウンタ・データだけが使用されます。汎用のカウンタ・データは,SNMPのインタフェース・テーブルの情報とほぼ同じ情報が含まれます(表1)。ただし,送受信のバイト数は,大容量・高速回線を初めから想定しているので,64ビットのカウンタとして定義しています。

表1●汎用カウンタ・データの一覧
表1●汎用カウンタ・データの一覧  [画像のクリックで拡大表示]