[実施の形態1]
図1に、システム構成例を示す。物理サーバ装置103aは、仮想スイッチ107aを有し、物理サーバ装置103bは、仮想スイッチ107bを有し、更に物理サーバ装置103cは、仮想スイッチ107cを有する。仮想スイッチ107aの仮想ポート109aには、仮想マシン105aが接続されている。仮想スイッチ107aの仮想ポート109bには、仮想マシン105bが接続されている。仮想スイッチ107bの仮想ポート109cには、仮想マシン105cが接続されている。仮想スイッチ107cの仮想ポート109dには、仮想マシン105dが接続されている。また、仮想スイッチ107a乃至cは、それぞれネットワークに接続している。ネットワークは、例えば、LAN(Local Area Network)である。
例えば、仮想マシン105aから仮想マシン105bへパケットを送る場合、仮想マシン105aから仮想ポート109aへ入力されたパケットは、仮想ポート109bから出力され仮想マシン105bに至る。逆に、仮想マシン105bから仮想マシン105aへパケットを送る場合、仮想マシン105bから仮想ポート109bへ入力されたパケットは、仮想ポート109aから出力され仮想マシン105aに至る。
また、仮想マシン105aから仮想マシン105cへパケットを送る場合、仮想マシン105aから仮想ポート109aへ入力されたパケットは、ネットワークを介して仮想スイッチ107aから仮想スイッチ107bへ送信される。そして、当該パケットは、仮想ポート109cから出力され仮想マシン105cに至る。逆に、仮想マシン105cから仮想マシン105aへパケットを送る場合、仮想マシン105cから仮想ポート109cへ入力されたパケットは、ネットワークを介して仮想スイッチ107bから仮想スイッチ107aへ送信される。そして、当該パケットは、仮想ポート109aから出力され仮想マシン105aに至る。
他の仮想マシン105間におけるパケットの伝送も同様である。この例における診断対象のシステム101は、物理サーバ装置103a及び物理サーバ装置103b他と、これらが有する仮想マシン105a乃至仮想マシン105c他と、同じく仮想スイッチ107a及び仮想スイッチ107b他とを含む。
仮想マシン105dに設けられた診断部113は、診断対象のシステム101に含まれる仮想マシン105a乃至c間のデータ伝送の状態を診断する。ここでは、仮想ポート109aを通過するパケットを監視する場合を説明する。ポートミラーリング部111は、仮想ポート109aを通過するパケットをミラーリングして、複製されたパケットを診断部113宛に転送する。
診断部113は、ポートミラーリング部111から受信したパケットを解析する。具体的には、診断部113は、例えばL4(OSI(Open Systems Interconnection)参照モデルの第4層、トランスポート層)診断又はL7(OSI参照モデルの第7層、アプリケーション層)診断を行う。
このとき、ポートミラーリング部111から診断部113へのパケットの転送によって、ネットワークにおける伝送負荷が増加する。この伝送負荷を軽減するために、ポートミラーリング部111は、Qos(Quality of Service)制御、具体的には帯域制御を行う。
そのため、ポートミラーリング部111は、ミラーリングで複製したパケットを一旦バッファに蓄積し、使用する帯域が基準を超えない範囲で、パケットを送出するようにする。従って、蓄積するパケットが限界量に至った場合には、限界量を超える分のパケットは廃棄される。
本実施の形態で、ポートミラーリング部111は、診断部113におけるL4診断において重要なパケットを廃棄しないように制御する。尚、L7診断については、通常の帯域制御によってパケットが廃棄されるようにする。断片的なパケットの集まりでは、診断部113がL7診断を行えないからである。
以下、廃棄の対象から除外されるパケットの例について説明する。図2に、TCPにおける接続シーケンスの例を示す。TCP接続は、3ウェイハンドシェイクによって行われる。図2の例では、仮想マシン105aが仮想マシン105cへTCP接続を要求する。
この例では、まず、仮想マシン105aが仮想マシン105cへSYNパケット201を送信する。SYNパケット201は、TCPヘッダに設けられた制御フラグの1つであるSYNフラグがONであって、他の制御フラグはOFFである。SYNパケット201のシーケンス番号は、100であるものとする。
SYNパケット201を受信した仮想マシン105cは、SYN−ACKパケット203を仮想マシン105aへ送信する。SYN−ACKパケット203は、SYNフラグ及び制御フラグの一つであるACKフラグがONであって、他の制御フラグはOFFである。SYN−ACKパケット203のACK番号(確認応答番号)は、SYNパケット201のシーケンス番号:100に1を加えた101である。また、SYN−ACKパケット203のシーケンス番号は、5000であるものとする。
SYN−ACKパケット203を受信した仮想マシン105aは、ACKパケット205を仮想マシン105cへ送信する。ACKパケット205は、ACKフラグがONであって、他の制御フラグはOFFである。ACKパケット205のACK番号は、SYN−ACKパケット203のシーケンス番号:5000に1を加えた5001である。
このように、先に送られたパケットと、その応答のパケットとの対応関係は、先に送られたパケットのシーケンス番号と、応答のパケットのACK番号とによって特定される。
本実施の形態におけるポートミラーリング部111は、TCP接続の手続きにおいて伝送される一連の制御パケット、つまりSYNパケット201、SYN−ACKパケット203及びACKパケット205を廃棄対象から除外する。診断部113は、これらの一連の制御パケットを受け取れば、TCP接続を事象として捉えることができる。
続いて、TCP接続中も伝送されるパケットについて説明する。TCP接続中には、主にデータの伝送を目的として通信が行われる。伝送対象の実データは、TCPパケットにおける本体データとして送られる。
図3に、TCPにおけるデータ伝送のシーケンスの例を示す。図3の例は、交互にデータが送られる例を示している。パケット301乃至パケット311は、いずれも本体データを含んでいる。例えば、仮想マシン105aから仮想マシン105cへ送られるパケット301の本体データのサイズは、200byteである。また、パケット301のシーケンス番号は、101である。パケット301乃至パケット311は、ACKフラグがONであって、他の制御フラグはOFFである。
例えば、仮想マシン105cから仮想マシン105aへ送られるパケット303は、サイズ:500byteの本体データを伝送するとともに、パケット301に対する応答の意味を持つ。パケット303のACK番号は、基礎となるパケット301における本体データのサイズ:200にシーケンス番号:101を加えた301である。パケット303とパケット305との関係、パケット305とパケット307との関係、パケット307とパケット309との関係、及びパケット309とパケット311との関係においても同様である。
このように、先に送られたパケットと、その応答のパケットとの対応関係は、先に送られたパケットにおける本体データのサイズとシーケンス番号との合計と、応答のパケットのACK番号とによって特定される。
本実施の形態におけるポートミラーリング部111は、先に送られたパケットを廃棄対象とした場合に、その応答のパケットを廃棄対象にしないようにする。このようにすれば、診断部113は、伝送データの事象を捉えやすい。もしも、先に送られたパケットとその応答のパケットとに関する内容を得られなければ、診断部113は、伝送データの事象を捉えにくい。
図4に、TCPにおける切断シーケンスの例を示す。TCPでは、何れか一方の装置が他方の装置へ接続の終了を要求することによって、切断の手続きが始まる。
この例では、まず、仮想マシン105cが仮想マシン105aへ、ACK−FINパケット401を送信する。ACK−FINパケット401は、ACKフラグ及び制御フラグの一つであるFINフラグがONであって、他の制御フラグはOFFである。ACK−FINパケット401のシーケンス番号は、20705であるものとする。
ACK−FINパケット401を受信した仮想マシン105aは、ACKパケット403を仮想マシン105cへ送信する。ACKパケット403のACK番号は、ACK−FINパケット401のシーケンス番号:20705に1を加えた20706である。
仮想マシン105aは、続けてACK−FINパケット405を仮想マシン105cへ送信する。ACK−FINパケット405のシーケンス番号は、15300であるものとする。
ACK−FINパケット405を受信した仮想マシン105cは、ACKパケット407を仮想マシン105aへ送信する。ACKパケット407のACK番号は、ACK−FINパケット405のシーケンス番号:15300に1を加えた15301である。
このように、切断シーケンスにおいて、先に送られたACK−FINパケットと、その応答のACKパケットとの対応関係は、先に送られたACK−FINパケットのシーケンス番号と、その応答のACKパケットのACK番号とによって特定される。
本実施の形態におけるポートミラーリング部111は、TCP切断の手続きにおいて伝送される一連の制御パケット、つまりACK−FINパケット401、ACKパケット403、ACK−FINパケット405及びACKパケット407を廃棄対象から除外する。診断部113は、これらの一連の制御パケットを受け取れば、TCP切断を事象として捉えることができる。
尚、図3に示した例に限らず、データ伝送のパケットが連続的に送出されることがある。図5に、TCPにおけるデータ伝送のシーケンスの例をもう一つ示す。
この例で、仮想マシン105aは、本体データを含むパケット501乃至パケット505を連続的に送出する。パケット501乃至パケット505の宛先は、いずれも仮想マシン105cである。パケット501の本体データのサイズは、1300byteであり、パケット501のシーケンス番号は、7901である。パケット503の本体データのサイズは、1300byteであり、パケット503のシーケンス番号は、9201である。また、パケット505の本体データのサイズは、1300byteであり、パケット505のシーケンス番号は、10501である。
一方、仮想マシン105cは、パケット501及びパケット503の受信を完了した時点で、ACKパケット507を仮想マシン105aへ送る。ACKパケット507のACK番号は、後に受信したパケット503における本体データのサイズ:1300にシーケンス番号:9201を加えた10501である。
その後、仮想マシン105cは、パケット505の受信を完了した時点で、ACKパケット509を仮想マシン105aへ送る。ACKパケット509のACK番号は、受信したパケット505における本体データのサイズ:1300にシーケンス番号10501を加えた11801である。
本実施の形態におけるポートミラーリング部111は、パケット503を廃棄対象とした場合に、ACKパケット507を廃棄対象としない。ACKパケット507のACK番号は、パケット503における本体データのサイズとシーケンス番号との合計と一致するので、対応関係が特定される。
また、同じくポートミラーリング部111は、パケット501を廃棄対象とした場合にも、ACKパケット507を廃棄対象としない。ACKパケット507のACK番号は、パケット501における本体データのサイズとシーケンス番号との合計よりも大きいので、対応関係が特定される。
このように、廃棄対象となったパケットにおける本体データのサイズとシーケンス番号の合計と、ACKパケットのACK番号を比較すれば、ACKパケットを廃棄対象から除外すべきか否かを判定できる。
尚、図5の例で、ポートミラーリング部111は、パケット505を廃棄対象とした場合にも、ACKパケット509を廃棄対象としない。以上で本実施の形態における概要の説明を終える。
以下、仮想スイッチ107の動作について説明する。図6に、仮想スイッチ107のモジュール構成例を示す。仮想スイッチ107は、受信部601、送信部603及びポートミラーリング部111を有する。受信部601は、各種データを受信する。送信部603は、各種データを送信する。
ポートミラーリング部111は、初期処理部605、監視部621、書き込み部623、読み取り部625及び廃棄部627を有する。初期処理部605は、初期処理を実行する。初期処理部605は、特定部607、起動部609及び取得部611を有する。特定部607は、監視の対象となる仮想ポート109(以下、対象ポートという)を特定する。起動部609は、各種処理を起動する。取得部611は、診断部113から診断種別を取得する。尚、実施の形態2では、取得部611は、診断部113から条件テーブルを取得する。
監視部621は、監視処理を実行する。監視処理の詳細については、後述する。書き込み部623は、書き込み処理を実行する。書き込み処理の詳細については、後述する。読み取り部625は、読み取り処理を実行する。読み取り処理の詳細については、後述する。廃棄部627は、廃棄処理を実行する。廃棄処理の詳細については、後述する。
ポートミラーリング部111は、更にリングバッファ631、ポインタ記憶部633、フラグ記憶部635、コネクションテーブル記憶部637、統計テーブル記憶部639、制御テーブル記憶部641、内部パラメータ記憶部643及び条件テーブル記憶部645を有する。
リングバッファ631は、パケットを格納するための領域を複数有する。リングバッファ631については、図10を用いて後述する。ポインタ記憶部633は、ライトポインタ及びリードポインタを記憶する。フラグ記憶部635は、無効フラグを記憶する。無効フラグについては、図10を用いて後述する。コネクションテーブル記憶部637は、コネクションテーブルを記憶する。コネクションテーブルについては、図13を用いて後述する。統計テーブル記憶部639は、統計テーブルを記憶する。統計テーブルについては、図15を用いて後述する。制御テーブル記憶部641は、制御テーブルを記憶する。制御テーブルについては、図18を用いて後述する。内部パラメータ記憶部643は、各種内部パラメータを記憶する。条件テーブル記憶部645は、条件テーブルを記憶する。条件テーブルについては、実施の形態2において図32を用いて後述する。
上述した受信部601、送信部603、初期処理部605、特定部607、起動部609、取得部611、監視部621、書き込み部623、読み取り部625及び廃棄部627は、ハードウエア資源(例えば、図43)と、以下で述べる処理をCPU(Central Processing Unit)2503に実行させるプログラムとを用いて実現される。
上述したリングバッファ631、ポインタ記憶部633、フラグ記憶部635、コネクションテーブル記憶部637、統計テーブル記憶部639、制御テーブル記憶部641、内部パラメータ記憶部643及び条件テーブル記憶部645は、ハードウエア資源(例えば、図43)を用いて実現される。
本実施の形態では、まず初期処理(A)が実行される。図7に、初期処理(A)フローを示す。特定部607は、仮想スイッチ107が有する仮想ポート109のうち、対象ポートを特定する(S701)。以下では、仮想ポート109aが特定された場合の例を説明する。特定の仕方は、任意である。
起動部609は、監視部621による監視処理を起動する(S703)。監視部621は、監視処理において、対象ポートを通過するパケットを監視して、通過するパケットを複製する。この例における監視処理は、独立したプロセスとして動作する。
図8に、監視処理フローを示す。以下では、仮想マシン105間で伝送されるパケットをシステムパケットという。そして、ミラーリングによって複製されたパケットをミラーパケットという。
監視部621は、対象ポートに入力されたシステムパケット又は対象ポートから出力されるシステムパケットをフックする(S801)。つまり、対象ポートに入力されたシステムパケット及び対象ポートから出力されるシステムパケットのいずれも、フックの対象である。
監視部621は、システムパケットと同一のミラーパケットを生成する(S803)。そして、監視部621は、フックしたシステムパケットをシステムパケットの宛先へ伝送する(S805)。
監視部621は、ミラーパケットを書き込み部623へ渡して(S807)、S801に示した処理に戻って、上述した処理を繰り返す。
図7の説明に戻る。起動部609は、書き込み部623による書き込み処理(A)を起動する(S705)。この例における書き込み処理(A)は、独立したプロセスとして動作する。書き込み部623は、書き込み処理(A)において、ミラーパケットをリングバッファ631に書き込む。
図9に、書き込み処理(A)フローを示す。書き込み部623は、監視部621からミラーパケットを受けると(S901)、未転送パケットの数がリングバッファ631の領域数Nと一致するか否かを判定する(S903)。
ここで、図10を用いて、リングバッファ631の構成及び無効フラグについて説明する。リングバッファ631の構成及びその操作方法は、従来技術による。この例では、リングバッファ631は、ミラーパケットを格納するための領域をN個有している。N番目の領域の次は、1番目の領域となるように扱われる。
ライトポインタは、次にミラーパケットを格納する領域を指す。従来技術の通り、ライトポインタの値を領域の数Nで除した余りの値によって、領域が特定される。この例で、m周回においてライトポインタの値がN×(m−1)+jであれば、ライトポインタは、j番目の領域を指していることになる。
また、リードポインタは、次にミラーパケットを取得する領域を指す。ライトポインタの場合と同様に、m周回においてリードポインタの値がN×(m−1)+iであれば、リードポインタは、i番目の領域を指していることになる。
従って、i番目の領域からj−1番目の領域に格納されているミラーパケットは、まだ転送されていない。これらのパケットを、未転送パケットという。未転送パケットの数は、ライトポインタの値からリードポインタの値を引くことによって求められる。
例えば、ライトポインタとリードポインタとが一致する場合には、未転送パケットがない。また、ライトポインタの値からリードポインタの値を引いた値がNであれば、リングバッファ631がフルである。
本実施の形態では、各領域に対応する無効フラグを設ける。未転送パケットの領域につき、当該領域に対応する無効フラグがONであれば、当該未転送パケットが廃棄されたことを意味する。従って、当該未転送パケットは、診断部113へ送られない。一方、当該領域に対応する無効フラグがOFFであれば、当該未転送パケットが廃棄されていないことを意味する。従って、当該未転送パケットは、診断部113へ送られる。
図9の説明に戻る。未転送パケットの数がリングバッファ631の領域数Nと一致する場合には、リングバッファ631がフルであるので当該ミラーパケットを格納しない。そのため、そのままS901に示した処理に戻る。従来技術の通り、格納されないミラーパケットは廃棄される。
一方、未転送パケットの数がリングバッファ631の領域数Nと一致しない場合には、書き込み部623は、ライトポインタが指す領域にミラーパケットを格納する(S905)。
また、書き込み部623は、当該領域に対応する無効フラグをOFFに設定し(S907)、ライトポインタに1を加える(S909)。そして、S901に示した処理に戻って、上述した処理を繰り返す。
図7の説明に戻る。起動部609は、読み取り部625による読み取り処理を起動する(S707)。この例における読み取り処理は、独立したプロセスとして動作する。
図11に、読み取り処理フローを示す。読み取り部625は、所定時間の経過を待つ(S1101)。この例では、QoS(Quality of Service)制御の一種である帯域制御を行うものとする。所定時間は、想定される帯域に基づいて予め決められているものとする。
読み取り部625は、リードポインタがライトポインタと一致するか否かを判定する(S1103)。リードポインタがライトポインタと一致する場合には、未転送パケットがないので、そのままS1101の処理に戻る。
一方、リードポインタがライトポインタと一致しない場合には、読み取り部625は、リードポインタが指す領域に対応する無効フラグがONか否かを判定する(S1105)。
リードポインタが指す領域に対応する無効フラグがONである場合には、当該領域に格納されているミラーパケットが廃棄対象であるので、読み取り部625は、リードポインタに1を加えて(S1107)、S1103に示した処理に戻って、上述した処理を繰り返す。
一方、リードポインタが指す領域に対応する無効フラグがOFFである場合には、読み取り部625は、リードポインタが指す領域からミラーパケットを取得して(S1109)、リードポインタに1を加える(S1111)。送信部603は、ミラーパケットを診断部113宛てに送信して(S1113)、S1101に示した処理に戻って、上述した処理を繰り返す。
図7の説明に戻る。取得部611は、診断部113における診断種別を診断部113に問い合わせる(S709)。取得部611は、受信部601を介して回答を受信する(S711)。起動部609は、回答がL4診断であるか否かを判定する(S713)。
回答がL4診断である場合には、起動部609は、廃棄部627による廃棄処理(A)を起動する(S715)。この例における廃棄処理(A)は、独立したプロセスとして動作する。そして、初期処理(A)を終える。回答がL4診断でない場合には、そのまま初期処理(A)を終える。
図12に、廃棄処理(A)フローを示す。廃棄部627は、所定時間の経過を待つ(S1201)。この例では、周期的に未転送パケットの廃棄をおこなうものとする。
廃棄部627は、ライトポインタ及びリードポインタに基づいて未転送パケットの数を算出する(S1203)。具体的には、廃棄部627は、ライトポインタの値からリードポインタの値を引くことによって、未転送パケットの数を求める。
廃棄部627は、未転送パケットの数が閾値以上であるか否かを判定する(S1205)。未転送パケットの数が閾値に満たない場合には、未使用の領域に余裕があるので、そのままS1201に示した処理に戻って、上述した処理を繰り返す。
一方、未転送パケットの数が閾値以上である場合には、廃棄部627は、コネクションテーブルの生成処理を実行する(S1207)。
図13に、コネクションテーブルの例を示す。この例におけるコネクションテーブルは、コネクションに対応するレコードを有している。尚、コネクションテーブルで扱うコネクションは、伝送方向を加味する。つまり、送信元と宛先との関係が逆転する関係を1つのコネクションに纏めない。送信元と宛先との関係が逆転する場合は、逆方向に係る別のコネクションとして扱う。
コネクションテーブルのレコードは、コネクションIDが設定されるフィールドと、送信元IPアドレスが設定されるフィールドと、宛先IPアドレスが設定されるフィールドと、プロトコルが設定されるフィールドと、送信元ポート番号が設定されるフィールドと、宛先ポート番号が設定されるフィールドと、パケット数が設定されるフィールドと、未転送量が設定されるフィールドとを有している。
コネクションIDは、コネクションを識別する。この例における送信元IPアドレスは、送信側の仮想マシン105を特定する。この例における宛先IPアドレスは、受信側の仮想マシン105を特定する。プロトコルは、L4層のプロトコルである。この例における送信元ポート番号は、送信側の仮想マシン105におけるポートを特定する。宛先ポート番号は、受信側の仮想マシン105におけるポートを特定する。パケット数は、当該コネクションに係る未転送パケットの数である。未転送量は、当該コネクションに係る未転送パケットのサイズの合計である。
図14に、コネクションテーブルの生成処理フローを示す。廃棄部627は、未転送パケットを1つ特定する(S1401)。例えば、廃棄部627は、リードポインタが指す領域からライトポインタが指す領域の1つ前の領域まで順次領域を1つ特定し、当該領域に格納されている未転送パケットを特定する。
廃棄部627は、当該未転送パケットのヘッダから、送信元IPアドレス、宛先IPアドレス、プロトコル、送信元ポート番号及び宛先ポート番号のセットを抽出する(S1403)。
廃棄部627は、コネクションテーブルに、当該セットが設定されているレコードがあるか否かを判定する(S1405)。
コネクションテーブルに、当該セットが設定されているレコードがないと判定した場合には、廃棄部627は、コネクションテーブルに新しいレコードを設ける(S1407)。そして、廃棄部627は、コネクションIDを割り当て、当該レコードに当該コネクションIDを設定する(S1409)。
廃棄部627は、当該セット、つまりS1403で抽出した送信元IPアドレス、宛先IPアドレス、プロトコル、送信元ポート番号及び宛先ポート番号を当該レコードに設定する(S1411)。また、廃棄部627は、当該コネクションのパケット数を1にする(S1413)。更に、廃棄部627は、当該コネクションの未転送量に当該未転送パケットのサイズを設定する(S1415)。
S1405において、コネクションテーブルに、当該セットが設定されているレコードがあると判定した場合には、当該セットで特定されるコネクションが既にコネクションテーブルに登録されている。廃棄部627は、当該コネクションのパケット数、つまり当該レコードに設定されているパケット数に1を加える(S1417)。更に、廃棄部627は、当該コネクションの未転送量、つまり当該レコードに設定されている未転送量に当該未転送パケットのサイズを加える(S1419)。
S1415又はS1419の処理を終えると、廃棄部627は、未特定の未転送パケットがあるか否かを判定する(S1421)。未特定の未転送パケットがあると判定した場合には、S1401に示した処理に戻って、上述した処理を繰り返す。
一方、未特定の未転送パケットがないと判定した場合には、コネクションテーブルの生成処理を終え、呼び出し元の廃棄処理(A)に復帰する。
図12の説明に戻る。次に、廃棄部627は、統計テーブルの生成処理(A)を実行する(S1209)。
図15に、統計テーブルの例を示す。この例における統計テーブルは、コネクションに対応するレコードを有している。統計テーブルのレコードは、コネクションIDが設定されるフィールドと、パケット数割合が設定されるフィールドと、未転送量の割合が設定されるフィールドと、平均パケットサイズが設定されるフィールドと、目標削減量が設定されるフィールドとを有している。
コネクションIDは、コネクションを特定する。パケット数割合は、当該コネクションに係る未転送パケットの数が、未転送パケットの総数に占める割合である。未転送量の割合は、当該コネクションに係る未転送量が、全未転送パケットのサイズの合計(全体の未転送量)に占める割合である。平均パケットサイズは、当該コネクションに係る未転送パケットのサイズの平均値である。目標削減量は、当該コネクションに係る未転送量のうち、未転送パケットの廃棄によって削減しようとするデータ量である。
図16に、統計テーブルの生成処理(A)フローを示す。廃棄部627は、コネクションを1つ特定する(S1601)。具体的には、廃棄部627は、コネクションテーブルのレコードを順番に1つ特定し、当該レコードに設定されているコネクションIDを特定する。
廃棄部627は、統計テーブルに新しいレコードを設ける(S1603)。廃棄部627は、S1601で特定したコネクションIDを当該レコードに設定する(S1605)。
廃棄部627は、パケット数割合を算出し、算出したパケット数割合を当該レコードに設定する(S1607)。具体的には、廃棄部627は、各コネクションにおけるパケット数の合計を、当該コネクションにおけるパケット数で割って、パケット数割合を求める。
廃棄部627は、未転送量の割合を算出し、算出した未転送量の割合を当該レコードに設定する(S1609)。具体的には、廃棄部627は、各コネクションにおける未転送量の合計を、当該コネクションにおける未転送量で割って、未転送量の割合を求める。
廃棄部627は、平均パケットサイズを算出し、算出した平均パケットサイズを当該レコードに設定する(S1611)。具体的には、廃棄部627は、当該コネクションにおける未転送量を、当該コネクションにおけるパケット数で割って、平均パケットサイズを求める。
廃棄部627は、未特定のコネクションがあるか否かを判定する(S1613)。未特定のコネクションがあると判定した場合には、S1601に示した処理に戻って、上述した処理を繰り返す。
一方、未特定のコネクションがないと判定した場合には、廃棄部627は、目標削減量の算出処理を実行する(S1615)。廃棄部627は、目標削減量の算出処理において、当該コネクションにおける未転送量のうち、未転送パケットの廃棄によって削減しようとするデータ量を算出する。
図17に、目標削減量の算出処理フローを示す。廃棄部627は、コネクションテーブルの各レコードに設定されている未転送量の合計を算出する(S1701)。
廃棄部627は、未転送量の合計から基準値を引いて削減量を求める(S1703)。廃棄部627は、リングバッファ631の全体サイズに所定の割合を乗じて、基準値を求めるようにしてもよい。
廃棄部627は、コネクションを1つ特定する(S1705)。具体的には、廃棄部627は、統計テーブルのレコードを順番に1つ特定する。
廃棄部627は、当該コネクションに対応する未転送量の割合、つまり特定したレコードに設定されている未転送量の割合を得る(S1707)。廃棄部627は、削減量に当該未転送量の割合を乗じて、当該コネクションの目標削減量を算出し、算出した目標削減量を当該レコードに設定する(S1709)。
廃棄部627は、未特定のコネクションがあるか否かを判定する(S1711)。未特定のコネクションがあると判定した場合には、S1705に示した処理に戻って、上述した処理を繰り返す。
一方、未特定のコネクションがないと判定した場合には、目標削減量の算出処理を終え、呼び出し元の統計テーブルの生成処理(A)に復帰する。
図16の説明に戻る。目標削減量の算出処理を終えると、統計テーブルの生成処理(A)を終え、呼び出し元の廃棄処理(A)に復帰する。
図12の説明に戻る。次に、廃棄部627は、制御テーブルの生成処理(A)を実行する(S1211)。
図18に、制御テーブルの例を示す。この例における制御テーブルは、コネクションに対応するレコードを有している。制御テーブルのレコードは、コネクションIDが設定されるフィールドと、逆方向コネクションのフィールドと、廃棄量が設定されるフィールドと、カウンタのフィールドと、間引き間隔が設定されるフィールドと、複数の廃棄パケットに関するフィールドと、複数の制御パケットに関するフィールドとを有している。一のコネクションに関して、複数のパケットが廃棄されることがあるので、複数の廃棄パケットに関するフィールドが設けられる。また、一のコネクションに関して、複数の制御パケットに関するデータを保持するようにするので、複数の制御パケットに関するフィールドが設けられる。
コネクションIDは、コネクションを特定する。逆方向コネクションのフィールドには、当該コネクションと逆方向のコネクションのIDが設定される。廃棄量は、当該コネクションに係る未転送パケットのうち、廃棄された未転送パケットのサイズの合計である。カウンタは、当該コネクションに係る未転送パケットの計数に用いられる。間引き間隔は、未転送パケットのうち廃棄されるパケットの割合(廃棄割合)の逆数に相当する。
各廃棄パケットに関するフィールドは、廃棄パケットのシーケンス番号が設定されるフィールドと廃棄パケットのデータサイズが設定されるフィールドとを含んでいる。廃棄パケットのシーケンス番号は、当該コネクションに係る未転送パケットのうち、廃棄されたパケットにおけるシーケンス番号である。廃棄パケットのデータサイズは、同じく廃棄されたパケットに含まれる本体データのサイズである。同じ廃棄パケットのシーケンス番号とデータサイズとは、組として扱われる。
各制御パケットに関するフィールドは、制御パケットの制御種別が設定されるフィールドと制御パケットのシーケンス番号が設定されるフィールドとを含んでいる。制御パケットの制御種別は、当該コネクションに係る未転送パケットのうち、制御パケットの制御種別(例えば、SYN、SYN−ACK)である。制御パケットのシーケンス番号は、同じく制御パケットにおけるシーケンス番号である。同じ制御パケットの制御種別とシーケンス番号とは、組として扱われる。
図19に、制御テーブルの生成処理(A)フローを示す。廃棄部627は、コネクションを1つ特定する(S1901)。具体的には、廃棄部627は、コネクションテーブルのレコードを順番に1つ特定し、当該レコードに設定されているコネクションIDを特定する。
廃棄部627は、制御テーブルに新しいレコードを設けて(S1903)、特定したコネクションIDを当該レコードに設定する(S1905)。
廃棄部627は、コネクションテーブルに基づいて、逆方向コネクションを特定する(S1907)。具体的には、S1901で特定したコネクションにおける送信元IPアドレスが宛先IPアドレスに設定され、当該コネクションにおける宛先IPアドレスが送信元IPアドレスに設定され、当該コネクションにおける送信元ポート番号が宛先ポート番号に設定され、当該コネクションにおける宛先ポート番号が送信元ポート番号に設定され、当該コネクションにおけるプロトコルと一致するコネクションが特定される。
廃棄部627は、特定した逆方向のコネクションIDを当該レコードにおける逆方向コネクションのフィールドに設定する(S1909)。
廃棄部627は、当該コネクションの間引き間隔を算出し、算出した間引き間隔を当該レコードに設定する(S1911)。具体的には、廃棄部627は、統計テーブルに基づいて、当該コネクションにおける目標削減量を当該コネクションにおける平均パケットサイズで除することによって廃棄パケット数を算出する。次に、廃棄部627は、コネクションテーブルに基づいて、当該コネクションのパケット数を廃棄パケット数で除することによって、間引き間隔を求める。
廃棄部627は、未特定のコネクションがあるか否かを判定する(S1913)。未特定のコネクションがあると判定した場合には、S1901に示した処理に戻って、上述した処理を繰り返す。
一方、未特定のコネクションがないと判定した場合には、制御テーブルの生成処理(A)を終え、呼び出し元の廃棄処理(A)に復帰する。
図12の説明に戻る。端子Aを介して、図20に示したS2001の処理に移る。
図20の説明に移る。廃棄部627は、図14のS1401の場合と同様に、未転送パケットを1つ特定する(S2001)。
廃棄部627は、選別処理を実行する(S2003)。廃棄部627は、選別処理において、廃棄対象に該当する未転送パケットを選び分ける。本実施の形態では、選別処理(A)を実行する。
図21に、選別処理(A)フローを示す。廃棄部627は、当該未転送パケットのヘッダから、送信元IPアドレス、宛先IPアドレス、プロトコル、送信元ポート番号及び宛先ポート番号のセットを抽出する(S2101)。
廃棄部627は、コネクションテーブルに基づいて、当該セットに合致するコネクションIDを特定する(S2103)。
廃棄部627は、S2101で抽出したプロトコルがUDPであるか否かを判定する(S2105)。当該プロトコルがUDPであると判定した場合には、廃棄部627は、UDP処理を実行する(S2107)。廃棄部627は、UDP処理において、UDPのパケットに関する判定を行う。UDP処理については、図22を用いて後述する。UDP処理を終えると、選別処理(A)を終え、呼び出し元の廃棄処理(A)に復帰する。
一方、当該プロトコルがUDPではないと判定した場合には、廃棄部627は、当該プロトコルがTCPであるか否かを判定する(S2109)。当該プロトコルがTCPであると判定した場合には、廃棄部627は、TCP処理を実行する(S2111)。廃棄部627は、TCP処理において、TCPのパケットに関する判定を行う。TCP処理については、図23乃至図31を用いて後述する。TCP処理を終えると、選別処理(A)を終え、呼び出し元の廃棄処理(A)に復帰する。
一方、当該プロトコルがTCPではないと判定した場合には、廃棄部627は、当該未転送パケットが廃棄対象に該当しないと判定する(S2113)。そして、選別処理(A)を終え、呼び出し元の廃棄処理(A)に復帰する。
図22に、UDP処理フローを示す。廃棄部627は、制御テーブルにおいて、図21のS2103で特定したコネクションIDに対応するカウンタの値に1を加える(S2201)。
廃棄部627は、カウンタの値が間引き間隔以上であるか否かを判定する(S2203)。カウンタの値が間引き間隔以上でないと判定した場合には、廃棄部627は、当該未転送パケットが廃棄対象に該当しないと判定する(S2205)。そして、UDP処理を終えて、呼び出し元の選別処理(A)に復帰する。
一方、カウンタの値が間引き間隔以上であると判定した場合には、廃棄部627は、当該コネクションIDに対応するカウンタに0を設定する(S2207)。廃棄部627は、当該コネクションIDに対応する廃棄量に当該未転送パケットのサイズを加える(S2209)。そして、廃棄部627は、当該未転送パケットが廃棄対象に該当すると判定し(S2211)、UDP処理を終えて、呼び出し元の選別処理(A)に復帰する。
図23に、TCP処理フローを示す。廃棄部627は、制御パケット処理を実行する(S2301)。廃棄部627は、制御パケット処理において、図20のS2001で特定した未転送パケットが所定の制御パケットに該当するか否かを判定する。
図24に、制御パケット処理フローを示す。廃棄部627は、図20のS2001で特定した未転送パケットがSYNパケット(図2:201)であるか否かを判定する(S2401)。
当該未転送パケットがSYNパケットであると判定した場合には、廃棄部627は、当該未転送パケットのヘッダからシーケンス番号を抽出する(S2403)。廃棄部627は、制御テーブルにおいて、図21のS2103で特定したコネクションIDに対応する制御パケットのフィールドに、制御種別(SYN)及びシーケンス番号の組を設定する(S2405)。上述された通り、複数の制御パケットについて、それぞれ制御種別及びシーケンス番号の組が設定されることがある。
そして、廃棄部627は、当該未転送パケットが所定の制御パケットに該当すると判定し(S2407)、制御パケット処理を終えて、呼び出し元のTCP処理に復帰する。
S2401の処理において、当該未転送パケットがSYNパケットでないと判定した場合には、端子Eを介して、図25に示したS2501の処理に移る。
図25の説明に移る。廃棄部627は、図20のS2001で特定した未転送パケットがSYN−ACKパケット(図2:203)であるか否かを判定する(S2501)。
当該未転送パケットがSYN−ACKパケットであると判定した場合には、廃棄部627は、当該未転送パケットのヘッダからACK番号及びシーケンス番号を抽出する(S2503)。
廃棄部627は、制御テーブルに基づいて、逆方向コネクションのIDを特定する(S2505)。そして、廃棄部627は、制御テーブルから、逆方向コネクションのIDに対応する制御パケットに関するフィールドから制御種別及びシーケンス番号を抽出する(S2507)。具体的には、廃棄部627は、制御テーブルにおいて、特定した逆方向コネクションのIDがコネクションIDのフィールドに設定されているレコードを特定し、当該レコードにおける制御パケットに関するフィールドに設定されている制御種別及びシーケンス番号を取得する。
廃棄部627は、S2507において抽出した制御種別がSYNであり、且つ同じく抽出したシーケンス番号が当該未転送パケットから抽出したACK番号から1を引いた値であるか否かを判定する(S2509)。
S2507において抽出した制御種別がSYNでない場合、或いはS2507において抽出したシーケンス番号が当該未転送パケットから抽出したACK番号から1を引いた値ではない場合には、廃棄部627は、制御テーブルにおいて、当該コネクションIDに対応する制御パケットのフィールドに、制御種別(SYN−ACK)及びシーケンス番号を設定する(S2511)。
そして、廃棄部627は、図20のS2001で特定した未転送パケットが所定の制御パケットに該当すると判定し(S2513)、制御パケット処理を終えて、呼び出し元のTCP処理に復帰する。
S2509において、当該制御種別がSYNであり、且つ当該シーケンス番号が当該ACK番号から1を引いた値であると判定した場合には、端子Fを介して、図26に示したS2601の処理に移る。
図26の説明に戻る。廃棄部627は、制御テーブルにおいて、図25のS2505で特定した逆方向コネクションのIDに対応する制御パケットのフィールドに設定されている制御種別及びシーケンス番号を削除する(S2601)。
廃棄部627は、制御テーブルにおいて、当該コネクションIDに対応する制御パケットのフィールドに、制御種別(SYN−ACK)及びシーケンス番号を設定する(S2603)。
そして、廃棄部627は、図20のS2001で特定した未転送パケットが所定の制御パケットに該当すると判定し(S2605)、制御パケット処理を終えて、呼び出し元のTCP処理に復帰する。
図25の説明に戻る。S2501において、当該未転送パケットがSYN−ACKパケットでないと判定した場合には、端子Gを介して、図27に示したS2701の処理に移る。
図27の説明に移る。廃棄部627は、図20のS2001で特定した未転送パケットがACK−FINパケット(図4:401,405)であるか否かを判定する(S2701)。
当該未転送パケットがACK−FINパケットであると判定した場合には、廃棄部627は、当該未転送パケットのヘッダからシーケンス番号を抽出する(S2703)。廃棄部627は、制御テーブルにおいて、当該コネクションIDに対応する制御パケットのフィールドに、制御種別(ACK−FIN)及びシーケンス番号を設定する(S2705)。
そして、廃棄部627は、当該未転送パケットが所定の制御パケットに該当すると判定し(S2707)、制御パケット処理を終えて、呼び出し元のTCP処理に復帰する。
S2701において、当該未転送パケットがACK−FINパケットでないと判定した場合には、廃棄部627は、当該未転送パケットがRSTパケットであるか否かを判定する(S2709)。この例では、制御フラグの1つであるRSTがONであるRSTパケットを、廃棄対象から除外する。
当該未転送パケットがRSTパケットであると判定した場合には、廃棄部627は、当該未転送パケットが所定の制御パケットに該当すると判定する(S2711)。そして、制御パケット処理を終え、呼び出し元のTCP処理に復帰する。
一方、当該未転送パケットがRSTパケットでないと判定した場合には、端子Hを介して、図28に示したS2801の処理に移る。
図28の説明に移る。廃棄部627は、図20のS2001で特定した未転送パケットからACK番号及びシーケンス番号を抽出する(S2801)。例えば図2に示したACKパケット205の場合は、このルートを辿る。図4に示したACKパケット403及びACKパケット407の場合も、このルートを辿る。図3に示したパケット301乃至パケット311の場合も、このルートを辿る。また、図5に示したパケット501乃至パケット505、ACKパケット507及びACKパケット509の場合も、このルートを辿る。
廃棄部627は、制御テーブルに基づいて、逆方向コネクションのIDを特定する(S2803)。廃棄部627は、制御テーブルに基づいて、逆方向コネクションのIDに対応する制御パケットに関するフィールドから制御種別及びシーケンス番号を抽出する(S2805)。
廃棄部627は、S2805において抽出した制御種別がSYN−ACKであり、且つ同じく抽出したシーケンス番号が当該未転送パケットから抽出したACK番号から1を引いた値であるか否かを判定する(S2807)。
当該制御種別がSYN−ACKであり、且つ当該シーケンス番号が当該ACK番号から1を引いた値である場合には、廃棄部627は、逆方向コネクションのIDに対応する制御パケットに関するフィールドに設定されている制御種別及びシーケンス番号を削除する(S2809)。図2に示したACKパケット205の場合は、このルートを辿る。
廃棄部627は、当該未転送パケットが所定の制御パケットに該当すると判定する(S2811)。そして、制御パケット処理を終え、呼び出し元のTCP処理に復帰する。
一方、当該制御種別がSYN−ACKでない場合、或いは当該シーケンス番号が当該ACK番号から1を引いた値ではない場合には、端子Iを介して、図29に示したS2901の処理に移る。
図29の説明に移る。廃棄部627は、図28のS2805で抽出した制御種別がACK−FINであり、且つ図28のS2805で抽出したシーケンス番号が図28のS2801で抽出したACK番号から1を引いた値であるか否かを判定する(S2901)。
当該制御種別がACK−FINであり、且つ当該シーケンス番号が当該ACK番号から1を引いた値である場合には、廃棄部627は、制御テーブルにおいて、逆方向コネクションのIDに対応する制御パケットに関するフィールドに設定されている制御種別及びシーケンス番号を削除する(S2903)。図4に示したACKパケット403及びACKパケット407の場合も、このルートを辿る。
そして、廃棄部627は、当該未転送パケットが所定の制御パケットに該当すると判定し(S2905)、制御パケット処理を終えて、呼び出し元のTCP処理に復帰する。
一方、当該制御種別がACK−FINでない場合、或いは当該シーケンス番号が当該ACK番号から1を引いた値ではない場合には、廃棄部627は、当該未転送パケットが所定の制御パケットに該当しないと判定する(S2907)。そして、制御パケット処理を終え、呼び出し元のTCP処理に復帰する。図3に示したパケット301乃至パケット311の場合は、このルートを辿る。また、図5に示したパケット501乃至パケット505、ACKパケット507及びACKパケット509の場合も、このルートを辿る。
図23の説明に戻る。廃棄部627は、図20のS2001で特定した未転送パケットが所定の制御パケットに該当するか否かによって処理を分岐させる(S2303)。
当該未転送パケットが所定の制御パケットに該当する場合には、廃棄部627は、当該未転送パケットが廃棄対象に該当しないと判定する(S2305)。そして、TCP処理を終え、呼び出し元の選別処理(A)に復帰する。
一方、当該未転送パケットが所定の制御パケットに該当しない場合には、廃棄部627は、当該コネクションIDに対応するカウンタの値に1加える(S2307)。そして、廃棄部627は、逆方向コネクションのIDに対応する廃棄パケットのフィールドにシーケンス番号及びデータサイズが設定されているか否かを判定する(S2309)。
当該廃棄パケットのフィールドにシーケンス番号及びデータサイズが設定されていないと判定した場合には、当該未転送パケットは廃棄対象から除外されない。図3で説明した「先に送られたパケットを廃棄対象とした場合」に該当しないからである。この場合には、端子Dを介して、図31に示したS3101の処理に移る。
一方、当該廃棄パケットのフィールドにシーケンス番号及びデータサイズが設定されていると判定した場合には、廃棄部627は、当該未転送パケットのヘッダからACK番号を抽出する(S2311)。そして、廃棄部627は、当該ACK番号が、当該シーケンス番号と当該データサイズとの合計以上であるか否かを判定する(S2313)。
図5を用いて説明した通り、当該ACK番号が当該合計以上である場合には、当該未転送パケットは廃棄対象から除外される。この場合には、端子Cを介して、図30に示したS3001の処理に移る。
一方、当該ACK番号が当該合計未満である場合には、当該未転送パケットは廃棄対象から除外されない。この場合には、端子Dを介して、図31に示したS3101の処理に移る。
図30の説明に移る。廃棄部627は、制御テーブルにおいて、図25のS2505で特定した逆方向コネクションのIDに対応する廃棄パケットに関するフィールドに設定されているシーケンス番号及びデータサイズを削除する(S3001)。
そして、廃棄部627は、図20のS2001で特定した未転送パケットが廃棄対象に該当しないと判定し(S3003)、TCP処理を終えて、呼び出し元の選別処理(A)に復帰する。
図31の説明に移る。廃棄部627は、図23のS2307で1が加えられたカウンタの値が、間引き間隔以上であるか否かを判定する(S3101)。尚、間引き間隔は、図21のS2103で特定されたコネクションIDが設定されている制御テーブルのレコードから取得される。
当該カウンタの値が、間引き間隔以上でないと判定した場合には、廃棄部627は、図20のS2001で特定した未転送パケットが廃棄対象に該当しないと判定する(S3103)。そして、TCP処理を終え、呼び出し元の選別処理(A)に復帰する。
一方、当該カウンタの値が、間引き間隔以上であると判定した場合には、廃棄部627は、制御テーブルにおいて、図21のS2103で特定したコネクションIDに対応するカウンタに0を設定する(S3105)。また、廃棄部627は、当該コネクションIDに対応する廃棄量に当該未転送パケットのサイズを加える(S3107)。
廃棄部627は、当該未転送パケットのヘッダからシーケンス番号及びデータサイズを抽出する(S3109)。廃棄部627は、制御テーブルにおいて、当該コネクションIDに対応する廃棄パケットのフィールドに、抽出したシーケンス番号及びデータサイズを設定する(S3111)。また、廃棄部627は、当該未転送パケットが廃棄対象に該当すると判定する(S3113)。その後、TCP処理を終えて、呼び出し元の選別処理(A)に復帰する。
図20の説明に戻る。廃棄部627は、S2001で特定した未転送パケットが廃棄対象に該当するか否かによって処理を分岐させる(S2005)。
当該未転送パケットが廃棄対象に該当する場合には、廃棄部627は、当該未転送パケットが格納されている領域に対応する無効フラグをONに設定する(S2007)。そして、S2009の処理に移る。
当該未転送パケットが廃棄対象に該当しないと判定した場合には、そのままS2009の処理に移る。
そして、廃棄部627は、未特定の未転送パケットがあるか否かを判定する(S2009)。未特定の未転送パケットがあると判定した場合には、S2001に示した処理に戻って、上述した処理を繰り返す。
一方、未特定の未転送パケットがないと判定した場合には、端子Bを介して、図12に示したS1201の処理に戻る。
本実施の形態によれば、所定プロトコルにおける接続期間の特定に資する。
また、先に送られた本体データを含むパケットを廃棄対象とした場合に、その応答のパケットを廃棄対象にしないので、データ伝送量の特定に資する。
[実施の形態2]
上述した実施の形態では、ポートミラーリング部111が診断部113から診断種別を取得して動作する例について説明したが、本実施の形態では、ポートミラーリング部111が診断部113から条件テーブルを取得して動作する例について説明する。
図32に、条件テーブルの例を示す。条件テーブルは、非転送条件が設定されるフィールドと、非廃棄条件が設定されるフィールドと、廃棄条件が設定されるフィールドとを有している。
非転送条件は、パケットが診断部113への転送対象から除外される条件である。この例における非転送条件は、当該パケットに設定されているプロトコルがICMP(Internet Control Message Protocol)であることである。
非廃棄条件は、パケットが廃棄対象から除外される条件である。この例における非廃棄条件は、通信相手のIPアドレスがIP−3であることである。つまり、当該パケットに設定されている送信元IPアドレス又は宛先IPアドレスがIP−3であれば、当該パケットは廃棄対象から除外される。
廃棄条件は、パケットが廃棄対象から除外されない条件である。この例における廃棄条件は、通信相手のIPアドレスが、IP−2又はIP−4である。つまり、当該パケットに設定されている送信元IPアドレス又は宛先IPアドレスが、IP−2とIP−4とのいずれかであれば、当該パケットは廃棄対象から除外されない。
本実施の形態では、初期処理(A)に代えて、初期処理(B)を実行する。図33に、初期処理(B)フローを示す。S701及びS703の処理は、初期処理(A)の場合と同様である。
起動部609は、書き込み部623による書き込み処理(B)を起動する(S3301)。この例における書き込み処理(B)は、独立したプロセスとして動作する。
図34に、書き込み処理(B)フローを示す。S901の処理は、書き込み処理(A)の場合と同様である。
書き込み部623は、ミラーパケットが非転送条件を満たすか否かを判定する(S3401)。この例では、ミラーパケットに設定されているプロトコルがICMPであるか否かを判定する。
ミラーパケットが非転送条件を満たすと判定した場合、この例ではミラーパケットに設定されているプロトコルがICMPであると判定した場合には、そのままS901に示した処理に戻って、上述した処理を繰り返す。
一方、ミラーパケットが非転送条件を満たさないと判定した場合、この例ではミラーパケットに設定されているプロトコルがICMPでないと判定した場合には、S903の処理に移る。
S903乃至S909の処理は、書き込み処理(A)の場合と同様である。書き込み処理(B)を終えると、呼び出し元の初期処理(B)に復帰する。
図33の説明に戻る。S707の処理は、初期処理(A)の場合と同様である。
取得部611は、診断部113に条件テーブルを要求する(S3303)。そして、取得部611は、受信部601を介して条件テーブルを受信し、受信した条件テーブルを条件テーブル記憶部645に記憶する(S3305)。
起動部609は、廃棄部627による廃棄処理(B)を起動する(S3307)。この例における廃棄処理(B)は、独立したプロセスとして動作する。図35に、廃棄処理(B)フローを示す。
S1201乃至S1207の処理は、廃棄処理(A)の場合と同様である。
廃棄部627は、除外設定処理を実行する(S3501)。廃棄部627は、除外設定処理において、非廃棄条件及び廃棄条件に基づいて、一部のコネクションを廃棄処理の対象から除外するためのフラグ設定を行う。
図36に、実施の形態2におけるコネクションテーブルの例を示す。実施の形態2におけるコネクションテーブルのレコードは、更に除外フラグのフィールドを有している。除外フラグがONである場合は、当該コネクションに係る未転送パケットは廃棄対象から除外されることを意味する。一方、除外フラグがOFFである場合は、当該コネクションに係る未転送パケットは廃棄対象から除外されないことを意味する。
図36の例は、コネクションID:C3及びC4のコネクションに係る未転送パケットは廃棄対象から除外されることを示している。
図37に、除外設定処理フローを示す。廃棄部627は、コネクションテーブルのレコードを1つ特定する(S3701)。例えば、廃棄部627は、順番にレコードを1つ特定する。
廃棄部627は、当該レコードの設定内容が非廃棄条件を満たすか否かを判定する(S3703)。この例では、廃棄部627は、当該レコードに設定されている送信元IPアドレス又は宛先IPアドレスがIP−3であるか否かを判定する。
当該レコードの設定内容が非廃棄条件を満たすと判定した場合、この例では、当該レコードに設定されている送信元IPアドレス又は宛先IPアドレスがIP−3であると判定した場合には、廃棄部627は、当該レコードにおける除外フラグをONに設定する(S3705)。そして、S3713の処理に移る。
一方、当該レコードの設定内容が非廃棄条件を満たさないと判定した場合、この例では当該レコードに設定されている送信元IPアドレス及び宛先IPアドレスがIP−3でないと判定した場合には、廃棄部627は、当該レコードの設定内容が廃棄条件を満たすか否かを判定する(S3707)。この例では、廃棄部627は、当該レコードに設定されている送信元IPアドレス又は宛先IPアドレスがIP−2とIP−4とのいずれかであるか否かを判定する。
当該レコードの設定内容が廃棄条件を満たすと判定した場合、この例では、当該レコードに設定されている送信元IPアドレス又は宛先IPアドレスがIP−2とIP−4とのいずれかであると判定した場合には、廃棄部627は、当該レコードにおける除外フラグをOFFに設定する(S3709)。
この例では、各コネクションが非廃棄条件又は廃棄条件を満たすことを想定している。非廃棄条件及び廃棄条件のいずれも満たさないコネクションに関しては、予め決められた例外のルールに従うものとする。従って、当該レコードの設定内容が廃棄条件を満たさないと判定した場合、この例では、当該レコードに設定されている送信元IPアドレス及び宛先IPアドレスがIP−2とIP−4とのいずれでもないと判定した場合には、廃棄部627は、例外のルールに従って、除外フラグを設定する(S3711)。
廃棄部627は、未特定のレコードがあるか否かを判定する(S3713)。未特定のレコードがあると判定した場合には、S3701に示した処理に戻って、上述した処理を繰り返す。一方、未特定のレコードがないと判定した場合には、除外設定処理を終え、呼び出し元の廃棄処理(B)に復帰する。
図35に示すように、廃棄部627は、統計テーブルの生成処理(B)を実行する(S3503)。
図38に、統計テーブルの生成処理(B)フローを示す。廃棄部627は、コネクションテーブルにおいて、除外フラグがOFFであるコネクションを1つ特定する(S3801)。
S1603乃至S1615の処理は、統計テーブルの生成処理(A)の場合と同様である。
統計テーブルの生成処理(B)を終えると、呼び出し元の廃棄処理(B)に復帰する。
図39に、実施の形態2における制御テーブルの例を示す。この例では、コネクションID:C3及びC4のレコードが生成されない。
次に、廃棄部627は、制御テーブルの生成処理(B)を実行する(S3505)。
図40に、制御テーブルの生成処理(B)フローを示す。廃棄部627は、コネクションテーブルにおいて、除外フラグがOFFであるコネクションを1つ特定する(S4001)。
S1903乃至S1913の処理は、制御テーブルの生成処理(A)の場合と同様である。制御テーブルの生成処理(B)を終えると、呼び出し元の廃棄処理(B)に復帰する。
図41に、実施の形態2における統計テーブルの例を示す。この例では、コネクションID:C3及びC4のレコードが生成されない。
図35の説明に戻る。端子Aを介して、図20に示したS2001の処理に移る。
図20に示したS2001の処理は、廃棄処理(A)の場合と同様である。
本実施の形態では、S2003において、選別処理(A)に代えて選別処理(B)を実行する。図42に、選別処理(B)フローを示す。S2101及びS2103の処理は、選別処理(A)の場合と同様である。
廃棄部627は、S2103で特定したコネクションIDに対応する除外フラグがONであるか否かを判定する(S4201)。コネクションIDに対応する除外フラグがONであると判定した場合には、廃棄部627は、当該未転送パケットが廃棄対象に該当しないと判定する(S4203)。そして、選別処理(B)を終え、呼び出し元の廃棄処理(B)に復帰する。
一方、コネクションIDに対応する除外フラグがONでないと判定した場合、つまり、当該除外フラグがOFFである場合には、S2105の処理に移る。S2105乃至S2113の処理は、選別処理(A)の場合と同様である。そして、選別処理(B)を終えると、呼び出し元の廃棄処理(B)に復帰する。
本実施の形態によれば、例えばパケットの欠落を許容しないL7診断の対象となっているコネクションに係るパケットの消失を防ぐことができる。
以上、仮想スイッチ107におけるポートミラーリング部111の例を示したが、物理スイッチ装置におけるポートミラーリング部111に本実施の形態を適用するようにしてもよい。
また、廃棄処理において各テーブルの生成処理及び選別処理を行っている間、読み取り処理を中断するようにしてもよい。このようにすれば、目標削減量を達成しやすくなる。但し、読み取り処理を中断している間、パケットの転送は行われなくなる。
具体的には、内部パラメータ記憶部643にリードロックフラグを設ける。そして、実施の形態1の場合、廃棄処理(A)におけるS1205(図12)の処理の後に、廃棄部627は、リードロックフラグをONに設定する。そして、S2009(図20)の処理の後に、廃棄部627は、リードロックフラグをOFFに設定する。また、読み取り処理におけるS1101(図11)の処理の後に、読み取り部625は、リードロックフラグがONであるか否かを判定する。リードロックフラグがONである場合には、S1101の処理に移る。リードロックフラグがONでない場合には、S1103の処理に移る。
実施の形態2の場合、廃棄処理(B)におけるS1205(図35)の処理の後に、廃棄部627は、リードロックフラグをONに設定する。そして、S2009(図20)の処理の後に、廃棄部627は、リードロックフラグをOFFに設定する。また、読み取り処理におけるS1101(図11)の処理の後に、読み取り部625は、リードロックフラグがONであるか否かを判定する。リードロックフラグがONである場合には、S1101の処理に移る。リードロックフラグがONでない場合には、S1103の処理に移る。
以上本発明の実施の形態を説明したが、本発明はこれに限定されるものではない。例えば、上述の機能ブロック構成はプログラムモジュール構成に一致しない場合もある。
また、上で説明した各記憶領域の構成は一例であって、上記のような構成でなければならないわけではない。さらに、処理フローにおいても、処理結果が変わらなければ、処理の順番を入れ替えることや複数の処理を並列に実行させるようにしても良い。
なお、上で述べた物理サーバ装置103は、コンピュータ装置であって、図43に示すように、メモリ2501とCPU2503とハードディスク・ドライブ(HDD:Hard Disk Drive)2505と表示装置2509に接続される表示制御部2507とリムーバブル・ディスク2511用のドライブ装置2513と入力装置2515とネットワークに接続するための通信制御部2517とがバス2519で接続されている。オペレーティング・システム(OS:Operating System)及び本実施例における処理を実施するためのアプリケーション・プログラムは、HDD2505に格納されており、CPU2503により実行される際にはHDD2505からメモリ2501に読み出される。CPU2503は、アプリケーション・プログラムの処理内容に応じて表示制御部2507、通信制御部2517、ドライブ装置2513を制御して、所定の動作を行わせる。また、処理途中のデータについては、主としてメモリ2501に格納されるが、HDD2505に格納されるようにしてもよい。本発明の実施例では、上で述べた処理を実施するためのアプリケーション・プログラムはコンピュータ読み取り可能なリムーバブル・ディスク2511に格納されて頒布され、ドライブ装置2513からHDD2505にインストールされる。インターネットなどのネットワーク及び通信制御部2517を経由して、HDD2505にインストールされる場合もある。このようなコンピュータ装置は、上で述べたCPU2503、メモリ2501などのハードウエアとOS及びアプリケーション・プログラムなどのプログラムとが有機的に協働することにより、上で述べたような各種機能を実現する。
以上述べた本発明の実施の形態をまとめると、以下のようになる。
本実施の形態に係るパケット制御方法は、(A)伝送過程のパケットから複製されたパケットをバッファに書き込む処理と、(B)通信状況を診断する装置へ転送するパケットをバッファから読み取る処理と、(C)バッファに蓄積された未転送パケットのうち、所定プロトコルにおける接続手続及び切断手続に含まれる制御パケットを選別し、当該制御パケット以外の未転送パケットの一部を廃棄する廃棄処理とを含む。
このようにすれば、通信状態の診断において重要なパケットの消失を防ぐことができる。特に、所定プロトコルにおける接続期間の特定に資する。
更に、上記廃棄処理において、本体データを含むパケットを廃棄した場合に、当該パケットに対する応答パケットを選別し、当該応答パケットを廃棄しないようにしてもよい。
このようにすれば、データ伝送量の特定に資する。
更に、上記廃棄処理において、パケットの送信元又は宛先に関する条件に基づいて特定されるコネクションに係る未転送パケットを廃棄しないようにしてもよい。
このようにすれば、例えばパケットの欠落を許容しない分析の対象となっているコネクションに係るパケットの消失を防ぐことができる。
なお、上記方法による処理をコンピュータに行わせるためのプログラムを作成することができ、当該プログラムは、例えばフレキシブルディスク、CD−ROM、光磁気ディスク、半導体メモリ、ハードディスク等のコンピュータ読み取り可能な記憶媒体又は記憶装置に格納されるようにしてもよい。尚、中間的な処理結果は、一般的にメインメモリ等の記憶装置に一時保管される。
以上の実施例を含む実施形態に関し、さらに以下の付記を開示する。
(付記1)
伝送過程のパケットから複製されたパケットをバッファに書き込む処理と、
通信状況を診断する装置へ転送する前記パケットを前記バッファから読み取る処理と、
前記バッファに蓄積された未転送パケットのうち、所定プロトコルにおける接続手続及び切断手続に含まれる制御パケットを選別し、当該制御パケット以外の未転送パケットの一部を廃棄する廃棄処理と
をコンピュータに実行させるパケット制御プログラム。
(付記2)
前記廃棄処理において、本体データを含むパケットを廃棄した場合に、当該パケットに対する応答パケットを選別し、当該応答パケットを廃棄しない
付記1記載のパケット制御プログラム。
(付記3)
前記廃棄処理において、前記パケットの送信元又は宛先に関する条件に基づいて特定されるコネクションに係る前記未転送パケットを廃棄しない
付記1又は2記載のパケット制御プログラム。
(付記4)
伝送過程のパケットから複製されたパケットをバッファに書き込む処理と、
通信状況を診断する装置へ転送する前記パケットを前記バッファから読み取る処理と、
前記バッファに蓄積された未転送パケットのうち、所定プロトコルにおける接続手続及び切断手続に含まれる制御パケットを選別し、当該制御パケット以外の未転送パケットの一部を廃棄する廃棄処理と
を含み、コンピュータにより実行されるパケット制御方法。
(付記5)
伝送過程のパケットから複製されたパケットをバッファに書き込む書込部と、
通信状況を診断する装置へ転送する前記パケットを前記バッファから読み取る読取部と、
前記バッファに蓄積された未転送パケットのうち、所定プロトコルにおける接続手続及び切断手続に含まれる制御パケットを選別し、当該制御パケット以外の未転送パケットの一部を廃棄する廃棄部と
を有するパケット制御装置。