(システム)
図1は,ネットワークシステムSYSの構成を説明するハードウェアブロック図の一例である。ネットワークシステムSYSは,送信ノード1と,受信ノード2と,監視装置3と,ネットワークNとを有する。送信ノード1は,送信側の通信装置とも呼ばれ,例えばサーバ装置である。受信ノード2は,受信側の通信装置とも呼ばれ,例えば端末装置である。ネットワークNは,例えばLAN(Local Area Network)である。また,ネットワークNは,有線ネットワークに限らず,無線ネットワークでもよい。
次に,送信ノード1,受信ノード2について説明する。送信ノード1は,受信ノード2にパケットを送信し,受信ノード2は送信ノード1が送信したパケットを受信する。さらに,受信ノード2は,パケットの受信に応答して,応答パケットを送信ノード1に送信する。この応答パケットとしては,例えば肯定応答(ACK:ACKnowledgemen)パケットがある。送信ノード1,受信ノード2は,例えば,TCP(Transmission Control Protocol)/IP(Internet Protocol)プロトコルに基づき,パケットの送受信を実行する。
送信ノード1は,送信用のパケットを作成する際に,全送信用データの何バイト目からのデータが,この送信用のパケットに含まれているかを一意に識別するシーケンス番号を生成し,送信用のパケットに格納する。以下,送信ノード1が受信ノード2に送信する送信用のパケットをデータパケットと適宜記す。受信ノード2は,データパケットを正常に受信すると,データパケットが有するシーケンス番号と,データパケットのパケットサイズとを加算した番号を示すACK番号を有するACKパケットを送信する。このACK番号が,ACKパケットを識別するパケットを識別する識別子の一例である。ACK番号は,換言すれば,受信ノード2が送信ノード1に送信要求するデータを特定する番号でもある。
送信ノード1は,ACKパケットを受信すると,ACKパケットが有するACK番号に対応するシーケンス番号を有するデータパケットを受信ノード2に送信する。送信ノード1が,受信ノード2にデータパケットを送信する際に,ネットワークでデータパケットがロスする第1の場合と,受信ノード2でデータパケットがロスする第2の場合がある。
第1の場合が発生する原因としては,例えば,以下の2つの原因が考えられる。1つ目の原因としては,例えば,通信用ケーブル,ネットワークインターフェイスカード,リピータ,ハブなどのネットワーク機器の不具合による原因がある。この場合,例えば,リピータなどの通信機器が,1データパケット内の全データを最後まで完全に送出(伝送とも呼ぶ)することができず,その結果,パケットロスが発生する。他にも,ネットワーク機器間において無線通信が実行される場合,電波状態が不良であると,パケット伝送不良が発生し,パケットロスが発生する。
また,2つ目の原因としては,ネットワーク機器のバッファ容量不足や処理能力不足による原因がある。この場合,例えば,ネットワーク機器が,輻輳が発生した場合に,バッファ容量不足や処理能力不足により,データパケットを破棄する。その結果,パケットロスが発生する。この場合,他にも,管理者が,不適切なパラメータを通信機器に設定した場合に,発生するコリジョンやブロードキャストストリームによりパケットロスが発生する。
第2の場合が発生する原因としては,例えば受信ノード2における受信パケット用バッファの容量不足による原因がある。この場合,例えば,送信ノード1が,受信ノード2の受信パケット用バッファの容量以上のパケットを連続して送信すると,受信パケット用のバッファの容量が不足し,受信ノード2は,正常に受信したパケットを破棄することがある。他にも,受信ノード2が実行する通信用プログラムの不具合(バグとも呼ぶ)により,受信ノード2が,正常に受信したパケットを破棄することがある。その結果,受信ノード2においてパケットロスが発生する。
次に,監視装置3について説明する。監視装置3は,管理者が適切な障害切り分けを行い,効果的な障害対策を行うための情報を提供する。例えば,監視装置3は,送信ノード1と受信ノード2との間で送受信されるパケットの損失状況を監視し,ネットワークNでパケットロスが発生したか,受信ノード2でパケットロスが発生したかを判定し,判定結果を出力装置4に出力する。監視装置3は,この判定結果出力時においては,例えば,ネットワークNで発生したパケットロスの個数,受信ノード2で発生したパケットロスの個数を時系列でグラフ化して出力する。
監視装置3は,CPU(Central Processing Unit)31と,メモリ32と,記憶装置33と,出力インターフェイス34と,記録媒体読み取り装置35と,通信インターフェイス36とを有する。CPU31は,監視装置3の全体を制御する演算処理装置(制御部,コンピュータとも呼ぶ)である。メモリ32は,CPU31が実行する各種情報処理において処理されたデータや各種プログラムを一時的に記憶する。メモリ32は,例えば, RAM(Random Access Memory)である。記憶装置33は,後記するプログラムや,各種データを記憶する。さらに,記憶装置33は,セッション管理テーブルT1と,解析情報テーブルT2とを記憶する。記憶装置33は,例えば,ハードディスクドライブ(HDD:Hard Disk Drive)などの磁気記憶装置や,不揮発性のメモリ(Non-volatile memory)である。
出力インターフェイス34は,出力装置4とのインターフェイス機能を実行する機能を有する機器であり,例えばグラッフィクカードである。出力装置4は,前記した判定結果を例えば表示出力する装置であり,例えば液晶表示装置である。
記録媒体読み取り装置35は,記録媒体35aに記録されたデータを読み取る装置である。記録媒体35aは,例えば,CD-ROM(Compact Disc Read Only Memory),DVD(Digital Versatile Disc),USB(Universal Serial Bus)メモリなどの可搬型記録媒体である。なお,図4で説明するプログラムを記録媒体35aに記録してもよい。
通信インターフェイス36は,ネットワークインターフェイスカード(NIC:Network Interface Card)などの通信機器であり,ミラーポートMPに接続する。ミラーポートMPは,例えばネットワークNに設けられたスイッチ装置(図示しない)のミラーポートであり,このスイッチ装置は,ネットワークNを流れるパケットを複製(ミラーリングとも呼ぶ)して,ミラーポートMPから監視装置3の通信インターフェイス36に出力する。次に,図1のセッション管理テーブルT1について説明する。
図2は,図1のセッション管理テーブルT1の一例を示す図である。図2において,図示の都合上,セッション管理テーブルT1を,2つのセッション管理テーブルT1a,セッション管理テーブルT1bとして図示している。セッション管理テーブルT1aは,セッションID欄と,送信元IPアドレス欄と,送信元ポート番号欄と,送信先IPアドレス欄と,送信先ポート番号欄と,最大シーケンス番号欄と,ACK期待番号欄と,重複ACK番号欄と,最大ACK番号欄とを有する。
セッションID欄は,セッションを識別するセッションID(識別子)を記憶する。ここでセッションとは,開放型システム間相互接続モデル(OSI:Open Systems Interconnection)基本参照モデル)のトランスポート層で実現している仮想的な通信経路において,この通信経路の使用開始から使用終了までの一連の通信のことを意味している。
送信元IPアドレス欄は,監視装置3が受信したデータパケットが有する送信元のIPアドレスを記憶し,送信元ポート番号欄は,監視装置3が受信したパケットが有する送信元のポート番号を記憶する。送信先IPアドレス欄は,監視装置3が受信したパケットが有する送信先のIPアドレスを記憶し,送信先ポート番号欄は,監視装置3が受信したパケットが有する送信先のポート番号を記憶する。最大シーケンス番号欄は,セッションIDにより識別されたセッションにおいて,監視装置3が受信したパケットが有するシーケンス番号の中で最大のシーケンス番号を記憶する。ACK期待番号欄は,セッションIDにより識別されたセッションにおいて,監視装置3が次回に受信するACKパケットが有するであろうACK番号を記憶する。
重複ACK番号欄は,セッションIDにより識別されたセッションにおいて監視装置3が連続して受信したACKパケットが有するACK番号が同番号の場合に,この同番号のACK番号を記憶する。最大ACK番号欄は,セッションIDにより識別されたセッションにおいて,監視装置3が受信したACKパケットが有するACK番号の中で最大のACK番号を記憶する。
セッション管理テーブルT1bは,セッションID欄と,SACK(Selective Acknowledgement)ブロック欄と,受信ノードロス可能性範囲欄と,受信ノードロス範囲欄と,ウインドウサイズ欄と,最大長欄とを有する。SACKとは,選択確認応答を意味し詳細については後記する。
セッションID欄は,セッション管理テーブルT1aにおけるセッションID欄が記憶するセッションIDと同一のセッションIDを記憶する。SACKブロック欄は,セッションIDにより識別されたセッションにおいて監視装置3が受信したACKパケットが有するSACKブロックを記憶する。受信ノードロス可能性範囲欄は,受信ノード2がロスした可能性があるデータパケットが有するシーケンス番号の範囲を記憶する。受信ノードロス範囲は,受信ノード2がロスしたデータパケットが有するシーケンス番号を記憶する。
ウインドウサイズ欄は,受信ノード2のウインドウサイズを記憶する。ウインドウサイズとは,受信ノード2からの送達確認無しに,送信ノード1が連続して送信できるデータの量(バイト数)である。ウインドウサイズは,受信ノード2の受信可能量である。最大長欄は,パケットが有する最大データ長(バイト数)を記憶する。なお,図2において,"…"は,記載省略を意味し,"0"は初期値を意味し,"×"は,この"×"が示すセルには情報が記憶されないことを示す。他の内容については,後記する。
図3は,図1の解析情報テーブルT2の一例を示す図である。解析情報テーブルT2は,日時欄と,セッションID欄と,パケット数欄と,ネットワークロス数欄と,受信ノードロス数欄と,再送信数欄とを有する。
日時欄は,出力用情報を記憶する日時を記憶する。この日時は,図3においては年月日および時刻として記憶する。出力用情報とは,例えば,パケット数欄が記憶するパケット数,ネットワークロス数欄が記憶するネットワークロス数,受信ノードロス数欄が記憶する受信ノードロス数,再送信数欄が記憶する例外再送信パケット数である。
セッションID欄は,セッション管理テーブルT1aにおけるセッションID欄が記憶するセッションIDに対応するセッションIDを記憶する。パケット数欄は,日時欄が記憶する日時において,セッションIDにより識別されたセッションにおいて監視装置3が受信したデータパケット数を記憶する。ネットワークロス数欄は,日時欄が記憶する日時において,セッションIDにより識別されたセッションにおいてネットワークNでロスしたパケット数を記憶する。受信ノードロス数欄は,日時欄が記憶する日時において,セッションIDにより識別されたセッションにおいて受信ノード2でロスしたパケット数を記憶する。再送信数欄は,日時欄が記憶する日時において,セッションIDにより識別されたセッションにおいて送信ノード1が例外再送信したパケット数を記憶する。なお,各欄が記憶する具体内容は,後記する。
(ソフトウェアモジュールブロック図)
図4は,図1に示した,送信ノード1,受信ノード2,監視装置3のソフトウェアモジュールブロック図の一例である。
送信ノード1は,アプリケーション11と,送信用パケット作成部12と,送信用バッファ13と,送受信部14とを有する。送信ノード1においてハードウェア要素である送信用バッファ13については,点線で図示している。アプリケーション11は,各種情報処理を実行するプログラムであり,送信用データ(アプリケーションデータとも呼ぶ)を生成し,送信用パケット作成部12に出力する。
送信用パケット作成部12は,アプリケーション11から入力された送信用データを,TCP/IPプロトコルに基づいて,パケットサイズ毎に分割し,データパケットを作成し,データパケットを送信用バッファ13に出力する。送信用パケット作成部12は,データパケット作成時に,全送信用データの何バイト目からのデータが,このデータパケットに含まれているかを一意に識別するシーケンス番号を生成し,このデータパケットに格納する。
送信用バッファ13は,RAMなどのメモリ(図示しない)のある領域をデータパケットのバッファリング用領域として送信ノード1の制御プログラムが確保している状態を模式的に示している。送信用バッファ13は,送信用パケット作成部12から入力されたデータパケットを一時的に記憶する。送受信部14は,送信用バッファ13が記憶するデータパケットを受信ノード2に送信する。また,送受信部14は,受信ノード2から送信されたACKパケットを受信する。そして,受信したACKパケットに基づき,データパケットの再送信処理を実行する。
受信ノード2は,送受信部21と,受信用バッファ22と,データ再組み立て部23と,アプリケーション24とを有する。受信ノード2においてハードウェア要素である受信用バッファ22については点線で図示している。
送受信部21は,送信ノード1から送信されたデータパケットを受信し,データパケットを正常に受信したか判定し,正常に受信した場合,受信したデータパケットを受信用バッファ22に記憶する。また,送受信部21は,TCP/IPプロトコルに基づき,ACKパケットを生成し,送信ノード1に送信する。ACKパケットは,受信したデータパケットが有する"シーケンス番号"番目までのデータを正常に受信したことを示す情報を有する。ACKパケットは,"シーケンス番号+パケットサイズ"の番号,つまり,送信要求するデータを特定する番号を示すACK番号を有する。さらに,ACKパケットは,選択確認応答を示す情報であるSACK番号を有する。SACKについては,後記する。
受信用バッファ22は,RAMなどのメモリ(図示しない)のある領域を受信データパケットのバッファリング用領域として受信ノード2の制御プログラムが確保している状態を模式的に示している。この受信用バッファ22のサイズ(バイト数)が,ウインドウサイズに対応する。受信用バッファ22は,送受信部21から入力されたデータパケットを一時的に記憶する。データ再組み立て部23は,TCPプロトコルに基づいて,受信用バッファ22が記憶するデータパケットにおける送受信制御データ以外のデータを抽出する。この抽出されたデータが,送信ノード1が送信対象とするアプリケーションデータである。そして,データ再組み立て部23は,データパケットが有するシーケンス番号に基づき,前記した送信対象となるデータの再組み立て処理を実行し,アプリケーション24に出力する。アプリケーション24は,データ再組み立て部23から入力されたデータに基づき,各種情報処理を実行するプログラムである。
監視装置3は,全体管理部311と,受信部312と,パケット情報管理部313と,セッション情報管理部314と,ロス解析部315と,受信ロス解析部3151と,解析情報出力部316とを有する。監視装置3においてハードウェア要素である,記憶装置33,出力インターフェイス34,通信インターフェイス36については点線で図示している。
全体管理部311は,受信部312と,パケット情報管理部313と,セッション情報管理部314と,ロス解析部315と,受信ロス解析部3151と,解析情報出力部316とを管理する。
受信部312は,通信インターフェイス36を介して,ネットワークNを流れるデータパケット,ACKパケットを受信(キャプチャとも呼ぶ)する。具体的には,送信ノード1からネットワークNを介して送信されたデータパケットを受信した受信ノード2がネットワークNを介して送信ノード1に送信した,ACK番号とSACK番号とを有するACKパケットを受信する。なお,選択確認応答を示す情報については後記する。
パケット情報管理部313は,受信部312が受信したパケットが有するヘッダ情報を抽出し,セッション情報管理部314に出力する。セッション情報管理部314は,全体管理部311が出力したヘッダ情報に基づき,セッションの管理を行う。
セッション情報管理部314は,新規のセッションに関する各種情報を図2のセッション管理テーブルT1に記憶する。さらに,セッション情報管理部314は,受信部312がパケットを受信する度に,この受信パケットに関するセッションに対応する最大シーケンス番号,ACK期待番号(最大シーケンス番号+パケット長),最大ACK番号,重複ACK番号,SACKブロック,ウインドウサイズ,最大長を図2のセッション管理テーブルT1に記憶する。さらに,セッション情報管理部314は,全体管理部311から入力されたヘッダ情報をロス解析部315に出力する。
ロス解析部315は,最大シーケンス番号,ACK期待番号,最大ACK番号,重複ACK番号,SACKブロック,ウインドウサイズ,最大長を取得し,セッション情報管理部314から入力されたヘッダ情報に基づき,パケットロスを検出する。また,ロス解析部315は,検出したパケットロスに関連する各種情報に基づき,図3の解析情報テーブルT2を適宜更新する。
受信ロス解析部3151は,受信ノードロス可能性範囲の番号,受信ノードロス範囲の番号を管理し,受信ノード2で発生したパケットロスを検出する。このパケットロスの検出により,受信ノード2で発生したパケットロスとネットワークNで発生したパケットロスとを区別する。また,受信ロス解析部3151は,検出したパケットロスに関連する各種情報に基づき,図3の解析情報テーブルT2を適宜更新する。なお,ロス解析部315,受信ロス解析部3151の詳細については後記する。
解析情報出力部316は,図3の解析情報テーブルT2を参照し,セッション毎のある時間のパケットロス率などを計算する。このパケットロス率とは,所定時間においてカウントしたパケットロスの数を,この所定時間において受信した全パケット数で除算した値を意味する。また,解析情報出力部316は,セッション毎の時系列データを作成する等の解析結果出力のための処理を行う。
全体管理部311と,受信部312と,パケット情報管理部313と,セッション情報管理部314と,ロス解析部315と,受信ロス解析部3151と,解析情報出力部316とは,いわゆるプログラムである。このプログラムは,例えば,記憶装置33に記憶されている。図1のCPU31は,起動時に,これらのプログラムを記憶装置33から読み出して,メモリ32に展開することにより,これらのプログラムをソフトウェアモジュールとして機能させる。
なお,このプログラムを,図1で説明した記録媒体読み取り装置35により読み取られる記録媒体35aに記録してもよい。この場合,図1のCPU31は,起動時に,これらのプログラムを記録媒体読み取り装置35に装着された記録媒体35aから読み出して,メモリ32に展開することにより,これらのプログラムをソフトウェアモジュールとして機能させる。
(パケット通信の概略)
本実施の形態の監視装置の動作説明をする前に,パケット通信の概略について説明する。図1で説明したように,送信ノード1は,データパケットを受信ノード2に送信し,受信ノード2はACK番号を有するACKパケットを送信ノード1に送信する。送信ノード1は,このACK番号に対応するシーケンス番号を有するデータパケット(次データパケット)を送信ノード1に送信する。送信ノード1,受信ノード2は,この一連のデータパケット送受信,ACKパケットの送受信により,パケット通信を実行する。しかし,前記したパケット通信では,送信ノード1は,ACKパケットの受信を待ち,次のデータパケットを送信するので,冗長である。
そこで,送信ノード1は,ACKパケットの受信を待たずに,一度に連続して複数のデータパケットを送信することがある。このとき,送信ノード1は,この連続する複数のデータパケットの総バイト数を,受信ノード2のウインドウサイズ以内にする(例えばRFC(Request for Comments):793を参照)。しかし,後述するように,受信ノード2において,例えば受信用バッファの容量不足により,受信したパケットを破棄しなければならないことがある。
もし,例えばネットワークでパケットロスが発生し,あるデータパケットが受信ノード2に届かなかった場合,このデータパケットに後続するデータパケットが到着する。この場合,受信ノード2は,後続のデータパケットが到着する度に,ロスしたデータパケットが有するシーケンス番号をACK番号として有するACKパケットを送信ノード1に送信する。
送信ノード1は,同一のACK番号(重複ACK番号とも呼ぶ)を有するACKパケットを例えば3つ受信すると,データパケットがロスしたと判断して,重複ACK番号に対応するシーケンス番号を有するデータパケットから,データパケット再送信処理を実行する。なお,送信ノード1は,重複ACK番号受信がなくても,データパケット送信時間から再送信タイムアウト時間が経過したのにもかかわらず,受信ノード2からのACKパケットを受信しない場合,データパケット再送信処理を行うことがある。送信ノード1は,この再送信処理により,パケットロスのリカバリを行う。
さて,送信ノード1が,受信ノード2のウインドウサイズ分のデータパケットを連続して送信する際に,連続して送信したデータパケットの初めの方のデータパケットのロスが発生した場合を想定する。この場合,送信ノード1は,ACK番号のみを有するACKパケットに基づく,受信ノード2の応答確認(受信確認とも呼ぶ)では,ロスしたデータパケットの後のデータパケットを全て再送信しなければならない。この再送信ではパケット通信効率が非常に悪いので,送信ノード1と受信ノード2の間でネゴシエートできれば,ACKのオプションとしてSACKを使用することもできる。
送信ノード1が連続するデータパケットを送信した場合,この連続データパケットの中のあるデータパケットがロスしたが,受信ノード2は,後続のデータパケットを受信できることがある。このとき,受信ノード2は,この受信したデータパケットにおけるシーケンス番号の範囲をSACKブロックに記述し,ACKのオプションとしてACKパケットに内包して返信する。このシーケンス番号の範囲が,SACKに相当する。換言すれば,受信ノード2は,SACK(SACKブロックとも呼ぶ)として,正しく受信できた連続な範囲のシーケンス番号の開始番号と終了番号とを指定する。ここで,「正しく受信できた」とは,受信ノード2が,受信したデータパケットを何らかの理由で破棄していない場合も含む。この理由については,図10で説明する。すなわち,SACKの指定においては,受信ノード2が,受信したデータパケットを何らかの理由で破棄した場合には,「正しく受信できた」とはみなさない。
SACKブロックは,例えば「正しく受信できた連続するデータパケットが有する先頭シーケンス番号〜最後のシーケンス番号+1」で示され,複数ブロック単位で設定することが可能である。最後のシーケンス番号+1は,1バイトがシーケンス番号の1に相当する場合,前記した先頭シーケンス番号に,前記連続するデータパケットの総バイト数を加算した番号に相当する。先頭シーケンス番号をシーケンス番号の"Left",最後のシーケンス番号+1をシーケンス番号の"Right"とも呼ぶ。このSACKブロックの番号(SACK番号とも呼ぶ)が,選択確認応答を示す情報の一例である。
送信ノード1がSACKブロックを有するACKパケットを受信した場合,以下の処理を実行する。すなわち,送信ノード1は,ACKパケットが有するACK番号とSACKブロックとに基づき,受信ノード2が受信していないデータパケットを送信する。例えば,送信ノード1は,まずACK番号から最初のSACKブロックの手前のシーケンス番号に対応するデータパケットまで再送信する。次に,送信ノード1は,SACKブロックの最後のシーケンス番号から次のSACKブロックの手前のシーケンス番号に対応するデータパケットまで再送信する処理を順次行う。この再送信処理により,余計な再送信を防ぐことができる。
図4を参照し,図5,図6に基づき,パケット通信の概略を具体的に説明する。
図5は,送信ノード1と受信ノード2との間でパケットが送受信される状態を模式的に示すシーケンス図である。
図5において,送信ノード1から受信ノード2方向を示す実線矢印は,送信ノード1が受信ノード2にデータパケットを送信していることを示す。受信ノード2から送信ノード1方向を示す点線矢印は,受信ノード2が送信ノード1にACKパケットを送信していることを示す。送信ノード1から受信ノード2方向を示す一点鎖線矢印は,送信ノード1が受信ノード2に再送信データパケットを送信していることを示す。
図6は,シーケンス番号,ACK,SACKを説明する図である。図6のテーブルT3は,シーケンス番号欄と,ACK欄と,SACK 1st block欄と,SACK 2st block欄とを有する。SACK 1st block欄と,SACK 2st block欄は,それぞれLeft欄と,Right欄とを有する。
シーケンス番号欄には,図5に示すように,送信ノード1が送信するデータパケットが有するシーケンス番号が記載される。ACK番号欄には,図5に示すように,受信ノード2が送信するACKパケットが有するACK番号が記載される。ACK番号は,シーケンス番号が記載されている行の次の行に記載される。SACK 1st block欄のLeft欄,Right欄は,ACK番号欄に記載されているACK番号を有するACKパケットが,さらに,第1のSACKブロックを有する場合,第1のSACKブロックのLeft,Rightが記載される。SACK 2st block欄のLeft欄,Right欄は,ACK番号欄に記載されているACK番号を有するACKパケットが,さらに,第2のSACKブロックを有する場合,第2のSACKブロックのLeft,Rightが記載される。
図5,図6の説明において,送信ノード1の送受信部14は,ACKパケットの受信を待たずに,一度に連続して複数のデータパケットを送信する。また,1つのデータパケットのサイズは,所定のサイズ,例えば100バイト(図5中,SIZE=100)であるとする。ここで,図5に示すように,送信ノード1の送受信部14が,シーケンス番号1001を有するデータパケット(符号SEQ=1001 SIZE=100参照)を受信ノード2に送信する。受信ノード2の送受信部21は,前記したデータパケットを受信すると,次のデータパケットが有するシーケンス番号を示すACK番号1101を有するACKパケット(符号ACK1101参照)を送信ノード1に送信する。
また,送信ノード1の送受信部14が,シーケンス番号1101を有するデータパケット(符号SEQ=1101 SIZE=100参照)を受信ノード2に送信する。受信ノード2の送受信部21は,前記したデータパケットを受信すると,ACK番号1201を有するACKパケット(符号ACK1201参照)を送信ノード1に送信する。
さて,送信ノード1の送受信部14が,シーケンス番号1201を有するデータパケット(符号SEQ=1201 SIZE=100参照)を受信ノード2に送信する。受信ノード2は,このデータパケットを,何らかの理由で受信できない(符号L参照)。なお,この受信できない理由としては,例えば,このデータパケットがネットワークでロスすることである。このロスを,図6のシーケンス番号欄に1201(ロス)と記載している。
次いで,送信ノード1の送受信部14が,シーケンス番号1301を有するデータパケット(符号SEQ=1301 SIZE=100参照)を受信ノード2に送信する。受信ノード2の送受信部21は,前記したデータパケットを受信すると,送信要求するデータパケットを特定するACK番号1201と,SACKブロックとを有するACKパケットを送信ノード1に送信する。シーケンス番号1201を有するデータパケットがロスした場合,受信ノード2の送受信部21は,ACK番号1201とSACKブロック1301-1401(1301はLeft,1401はRight)とを有するACKパケットを送信ノード1に送信する(符号ACK1201 (SACK:1301-1401)参照)。
送信ノード1の送受信部14が,シーケンス番号1401を有するデータパケット(符号SEQ=1401 SIZE=100参照)を受信ノード2に送信する。受信ノード2の送受信部21は,前記したデータパケットを受信すると,ACK番号1201とSACKブロック1301-1501とを有するACKパケットを送信ノード1に送信する(符号ACK1201 (SACK:1301-1501)参照)。
さて,送信ノード1の送受信部14が,シーケンス番号1501を有するデータパケット(符号SEQ=1501 SIZE=100参照)を受信ノード2に送信する。受信ノード2は,このデータパケットを,何らかの理由で受信できない(符号L参照)。このロスを,図6のシーケンス番号欄に1501(ロス)と記載している。
次いで,送信ノード1の送受信部14が,シーケンス番号1601を有するデータパケット(符号SEQ=1601 SIZE=100参照)を受信ノード2に送信する。受信ノード2の送受信部21は,前記したデータパケットを受信すると,送信要求するデータパケットを特定するACK番号1201と,SACKブロックとを有するACKパケット(符号ACK1201 (SACK:1601-1701, SACK1301-1501 参照))を送信ノード1に送信する。このSACKブロックは,第1のSACKブロックのLeft1601,第1のSACKブロックのRight1701,第2のSACKブロックのLeft1301,第2のSACKブロックのRight1501を有する。
送信ノード1の送受信部14は,例えば,重複ACK番号を3回受信すると,重複ACK番号に対応するシーケンス番号を有する,所定サイズ分のデータパケットを送信する。前記例の場合,重複ACK番号1201であり,所定サイズは100バイトである。従って,送信ノード1の送受信部14は,シーケンス番号1201を有する,100バイトのデータパケット(符号SEQ=1201 SIZE=100参照)を受信ノード2に再送信する。この再送信を,図6のシーケンス番号欄に1201(再送信)と記載している。
受信ノード2の送受信部21は,シーケンス番号1201を有する,100バイトのデータパケットを受信すると,送信要求するデータパケットを特定するACK番号1501と,SACKブロックとを有するACKパケット(符号ACK1501 (SACK:1601-1701)参照)を送信ノード1に送信する。このSACKブロックは,SACKブロックのLeft1601,SACKブロックのRight1701を有する。
送信ノード1の送受信部14は,前記したACKパケット(符号ACK1501 (SACK:1601-1701)参照)を受信する。すると,送信ノード1の送受信部14は,このACKパケットが有するACK番号とSACKブロックとに基づき,受信ノード2が受信していないデータパケットを送信する。この場合,前記したSACKブロックから,受信ノード2が受信していないデータパケットは,シーケンス番号1501を有する,100バイトのデータパケットである。従って,送信ノード1の送受信部14は,シーケンス番号1501を有する,100バイトのデータパケット(符号SEQ=1501 SIZE=100参照)を受信ノード2に再送信する。この再送信を,図6のシーケンス番号欄に1501(再送信)と記載している。
さらに,送信ノード1の送受信部14は,シーケンス番号1701を有する,100バイトのデータパケット(符号SEQ=1701 SIZE=100参照)を受信ノード2に送信する。
受信ノード2の送受信部21は,シーケンス番号1501を有する,100バイトのデータパケットを受信すると,ACK番号1701を有するACKパケット(符号 ACK1701参照)を送信ノード1に送信する。さらに,受信ノード2の送受信部21は,シーケンス番号1701を有する,100バイトのデータパケットを受信すると,ACK番号1801を有するACKパケット(符号 ACK1801参照)を送信ノード1に送信する。
図5に説明した,送信ノード1,受信ノード2間における一連のデータパケット送受信,ACKパケット送受信により,送信ノード1は,受信ノード2に送信対象のデータ,すなわちアプリケーションデータを送信する。
(判定処理)
さて,前記したように,送信ノード1は,ACKパケットの受信を待たずに,一度に連続して複数のデータパケットを送信することがある。このとき,送信ノード1は,この連続する複数のデータパケットの総データ量を,受信ノード2のウインドウサイズ以内にする。
しかし,送信ノード1は,この連続する複数のデータパケットの総データ量を,受信ノード2のウインドウサイズよりも大きくすることがある。この大きくする理由は,TCP/IP通信用プログラムにおける設計上のミスのため,または,一度により多くのデータパケットを送信するためである。このような場合,受信ノード2は,受信用バッファ22の容量不足のため,受信したデータパケットを破棄する(受信ノード2でのパケットロス)。そして,受信ノード2は,破棄したデータパケットを特定するACK番号,SACKブロックを有するACKパケットを送信ノード1に送信し,破棄したデータパケットの再送信依頼を送信ノード1に行う。送信ノード1は,この依頼に応答して,受信ノード2に,このデータパケットを再送信する。このとき,本実施の形態の監視装置3は,再送信されたデータパケットを受信し,ネットワークでロスしたのか,または,受信ノード2でロスしたのかを判定する処理を実行する。
図2,図3を参照し,図7〜図9に基づき,パケットロス原因判定処理を説明する。
図7〜図9は,パケットロス原因判定処理を説明する第1〜第3のフロー図の一例である。図8のフロー図は,図7のステップS5でNOと判定された場合における以後の処理を説明するフロー図である。図9のフロー図は,図7のステップS7でNOと判定された場合における以後の処理を説明するフロー図である。まず,図7のフロー図から説明する。
ステップS1:図4の受信部312は,通信インターフェイス36を介してパケットを受信し,パケット情報管理部313に出力する。パケット情報管理部313は,受信部312から入力されたパケットが有するヘッダ情報を抽出し,セッション情報管理部314に出力する。
ステップS2:セッション情報管理部314は,ヘッダ情報からセッション情報を取得する。このセッション情報は,受信パケットが,セッション確立用のパケットか否かを判定するための情報を有する。セッション確立用のパケットとしては,受信ノード2から送信ノード1に送信されたTCP同期要求パケット,送信ノード1から受信ノード2に返信されたこのTCP同期要求パケットおよび応答パケット,受信ノード2から送信ノード1に返信された応答パケットがある。これら3種類のパケットをハンドシェイク用のパケットと適宜記す。このハンドシェイク用のパケットにより,送信ノード1と受信ノード2とは,セッションを確立する。このハンドシェイク用のパケットの送受信はスリーウェイハンドシェイクとも呼ばれる。このスリーウェイハンドシェイクにおいて,送信ノード1,受信ノード2は,最初のシーケンス番号をハンドシェイク用のパケットから取得し,自装置のメモリ(図示しない)に設定する。なお,セッション情報管理部314は,ヘッダ情報をロス解析部315に出力する。
ステップS3:セッション情報管理部314は,取得したセッション情報に基づき,新たなセッションが開始されたか判定する。具体的には,セッション情報管理部314は,ステップS2で説明したハンドシェイク用のパケットを受信した場合,新たなセッションが開始されたと判定する。新たなセッションが開始された場合(ステップS3/YES),ステップS4に移る。
ステップS4:セッション情報管理部314は,新たなセッションを図2のセッション管理テーブルT1aに新規登録する。具体的には,セッション情報管理部314は,セッションIDを新たに生成し,生成したセッションIDを図2のセッション管理テーブルT1aにおけるセッションID欄に記憶する。このとき,セッション情報管理部314は,このセッションIDを2つに区分する枝番をセッションIDに付す。例えば,セッション情報管理部314は,セッションIDとして"1"を生成した場合,セッションID"1"を区分する第1の枝番"-1",第2の枝番"-2"をセッションID"1"に付す。すなわち,セッション情報管理部314は,1つのセッションを識別する2つのセッションIDである第1のセッションID"1-1",第2のセッションID"1-2"を生成する。第1のセッションIDは,識別対象のセッションにおいて,送信ノード1から受信ノード2に送信されるデータパケットに関する情報を管理するために使用され,第2のセッションIDは,識別対象のセッションにおいて,受信ノード2から送信ノード1に送信されるACKパケットに関する情報を管理するために使用される。
さらに,セッション情報管理部314は,受信パケットが有するIPヘッダ情報から,送信元IPアドレス,送信元ポート番号,送信先IPアドレス,送信先ポート番号を取得し,図2のTa1の送信元IPアドレス欄,送信元ポート番号欄,送信先IPアドレス欄,送信先ポート番号欄に記憶する。
具体的には,送信ノード1から受信ノード2に送信される第1のパケットのヘッダには,送信元IPアドレス"a1.b1.c1.d1",送信元のポート番号"p1",送信先IPアドレス"a2.b2.c2.d2",送信先のポート番号"p2"が格納されているとする。また,受信ノード2から送信ノード1に送信される第2のパケットのヘッダには,送信元IPアドレス"a2.b2.c2.d2",送信元のポート番号"p2",送信先IPアドレス"a1.b1.c1.d1",送信先のポート番号"p1"が格納されているとする。
この場合,セッション情報管理部314は,第1のセッションID"1-1"に対応する,図2のセッション管理テーブルT1aにおける送信元IPアドレス欄,送信元ポート番号欄,送信先IPアドレス欄,送信先ポート番号欄に,"a1.b1.c1.d1","p1","a2.b2.c2.d2","p2"を記憶する。そして,セッション情報管理部314は,第2のセッションID"1-2"に対応する,図2のセッション管理テーブルT1aにおける送信元IPアドレス欄,送信元ポート番号欄,送信先IPアドレス欄,送信先ポート番号欄に,"a2.b2.c2.d2","p2","a1.b1.c1.d1","p1"を記憶する。
さらに,セッション情報管理部314は,取得したセッション情報から,ウインドウサイズを取得し,取得したウインドウサイズを,図2のセッション情報管理テーブルT1bにおけるセッションID1-1に対応するウインドウサイズ欄に記憶する。すなわち,受信部312は,受信ノード2から送信ノード1に送信された,受信ノード2のウインドウサイズを有するパケットを受信する。そして,セッション情報管理部314は,ウインドウサイズを記憶する。
ステップS4の終了後,ステップS5に移る。また,ステップS3において,新たなセッションが開始されていないと判定された場合(ステップS3/NO),ステップS5に移る。
ステップS5:セッション情報管理部314は,パケット情報管理部313から入力されたヘッダ情報に基づき,受信パケットがデータパケットか,ACKパケットかを判定する。ACKパケットと判定した場合(ステップS5/NO),図8のステップS21に移る。データパケットと判定した場合(ステップS5/YES),ステップS6に移る。なお,ACKパケットが,ウインドウサイズ更新情報を有する場合,更新されたウインドウサイズを,図2のセッション情報管理テーブルT1bにおけるセッションID1-1に対応するウインドウサイズ欄に記憶する。
ステップS6:セッション情報管理部314は,パケット情報管理部313から入力されたヘッダ情報からシーケンス番号とデータ長(パケットサイズとも呼ぶ)を抽出する。データ長は,例えばバイト単位で示され,この1バイトがシーケンス番号の"1"に対応する。このデータ長は,データパケットの最大データ長でもある。セッション情報管理部314は,データ長を,図2のセッション情報管理テーブルT1bにおけるセッションID1-1に対応する最大長欄に記憶する。ここで,最大長を100バイトとする。なお,セッション情報管理部314は,受信データパケット数をカウントする受信データパケット数カウンタを1つカウントアップする。セッション情報管理部314は,この受信データパケット数カウンタを,セッションIDに対応させて図1のメモリ32に記憶している。
ステップS7:セッション情報管理部314は,ステップS6で抽出したシーケンス番号が,最大シーケンス番号よりも大きいか判定する。この最大シーケンス番号とは,管理対象となるセッションにおいて,全体管理部311が受信したデータパケットが有するシーケンス番号の中で最大のシーケンス番号を意味する。パケットロスがない場合,原則的に,データパケットが有するシーケンス番号は,データパケットの受信数に比例して大きくなる。しかし,パケットロスがあると,送信ノード1は,この最大シーケンス番号以下のシーケンス番号を有するデータパケットを送信する。そのため,最大シーケンス番号と,受信データパケットが有するシーケンス番号を比較することにより,受信データパケットが再送信されたパケットか判定できる。
ステップS6で抽出されたシーケンス番号が,最大シーケンス番号以下の場合(ステップS7/NO(再送信)),図9のステップS31に移る。なお,図9のステップS31については,後述する。ステップS6で抽出されたシーケンス番号が,最大シーケンス番号よりも大きい場合(ステップS7/YES(再送信でない)),ステップS8に移る。
ステップS8:セッション情報管理部314は,ステップS6で抽出されたシーケンス番号を最大シーケンス番号として,図2のセッション管理テーブルT1aにおける最大シーケンス番号欄に記憶する。さらに,セッション情報管理部314は,ACK期待番号を,図2のセッション管理テーブルT1aにおけるACK期待番号欄に記憶する。ACK期待番号は,受信したデータパケットが有するシーケンス番号とデータ長とを加算した番号である。換言すれば,ACK期待番号とは,データパケットを受信した受信ノード2が,ACKパケットを送信ノード1に返信する場合に,このACKパケットに格納するACK番号を意味する。ここで,データ長はバイト単位で表されるので,1バイトがシーケンス番号の1に相当する。
ステップS9:セッション情報管理部314は,ACK期待番号から直前に受信したACKパケットが有するACK番号を減算した減算番号(以下,ACK減算番号と適宜記す)が,ウインドウサイズより大きいか判定する。ステップS9において,セッション情報管理部314は,受信したデータパケットのシーケンス番号とACKパケットのACK番号とに基づき,連続して受信したデータパケットの全データ量(全バイト数)が,受信ノード2のウインドウサイズ(受信可能量)を超えたか判定している。前記した全データ量が,ウインドウサイズを超える場合,受信ノード2でパケットロスが発生する可能性が大きくなる。減算番号が,ウインドウサイズ以下の場合(ステップS9/NO),ステップS1に戻る。減算番号が,ウインドウサイズより大きい場合(ステップS9/YES),ステップS10に移る。
ステップS10:ロス解析部315は,セッション情報管理部314から入力されたヘッダ情報に基づき,図2のセッション情報管理テーブルT1bにおける受信ノードロス可能性範囲欄を更新する。
ロス解析部315は,初めてステップS10を実行する場合,受信したデータパケットが有するシーケンス番号と,このシーケンス番号にデータ長を加算した後の加算番号とを,図2のセッション情報管理テーブルT1bにおける受信ノードロス可能性範囲欄に記憶する。前記したシーケンス番号を,受信ノードロス可能性範囲の始点番号と適宜記す。また,前記加算番号を,受信ノードロス可能性範囲の終点番号と適宜記す。一方,ロス解析部315は,2回目以降にステップS10を実行する場合,受信ノードロス可能性範囲欄が記憶する受信ノードロス可能性範囲の終点番号に,データ長を加算する。以後,この加算後の番号が,前記した終点番号になる。ステップS10の実行後,ステップS1に戻る。
図7のステップS5において,セッション情報管理部314が,パケット情報管理部313から入力されたヘッダ情報に基づき,受信パケットがACKパケットと判定した場合(ステップS5/NO),図8のステップS11に移る。
ステップS11:セッション情報管理部314は,受信したACKパケットが重複ACK番号を有するパケットか判定する。具体的には,セッション情報管理部314は,受信したACKパケットが有するACK番号が,直前に受信したACKパケットが有するACK番号と一致するか判定する。セッション情報管理部314は,両ACK番号が一致する場合,受信したACKパケットは重複ACK番号を有するパケットであると判定する。
受信したACKパケットが重複ACK番号を有するパケットではない場合(ステップS11/NO),ステップS18に移る。受信したACKパケットが重複ACK番号を有するパケットの場合(ステップS11/YES),ステップS12に移る。
ステップS12:セッション情報管理部314は,重複ACK番号を図2のセッション管理テーブルT1aにおける重複ACK番号欄に記憶する。
ステップS13:セッション情報管理部314は,SACKも同一か判定する。具体的には,セッション情報管理部314は,受信したACKパケットが有するSACKブロックの番号と,直前に受信したACKパケットが有するSACKブロックの番号とが同番号が判定する。セッション情報管理部314は,同番号の場合,SACKも同一と判定する。SACKが同一でない場合(ステップS13/NO),ステップS21に移る。SACKも同一の場合(ステップS13/YES),ステップS14に移る。
ここで,ロス解析部315は,第1のACKパケットの第1のACK番号および第1のSACK番号と,第1のACKパケットに後続して受信した第2のACKパケットの第2のACK番号および第2のSACK番号とを比較して,以下の処理を実行してもよい。例えば,受信ロス解析部3151は,第1のACK番号および第1のSACK番号と,第2のACK番号および第2のSACK番号とが同じ場合に(ステップS11/YES,ステップS13/YES),受信ノード2でデータパケットのロスが発生したと判定する。また,ロス解析部315は,第1のACK番号と第2のACK番号とが同じであり,第1のSACK番号と,第2のSACK番号とが異なる場合に,ネットワークNでデータパケットのロスが発生したと判定する。そして,解析情報出力部316は,受信ノード2でデータパケットのロスが発生したと判定した回数,ネットワークNでデータパケットのロスが発生したと判定した回数を出力装置4に出力する。前記したこれらの判定により,処理の効率化を実現できる。
ステップS14:ロス解析部315は,受信したACKパケットが有するSACKブロックの番号が,受信ノードロス可能性範囲以下か判定する。具体的には,ロス解析部315は,前記したSACKブロックの番号が,図2のセッション情報管理テーブルT1bにおける受信ノードロス可能性範囲欄に記憶されている受信ノードロス可能性範囲の始点番号以下か判定する。ロス解析部315は,前記したSACKブロックの番号が,前記始点番号以下の場合,前記したSACKブロックの番号が,受信ノードロス可能性範囲以下と判定する。前記したSACKブロックの番号が,受信ノードロス可能性範囲以下でない場合(ステップS14/NO),図7のステップS1に戻る。前記したSACKブロックの番号が,受信ノードロス可能性範囲以下の場合(ステップS14/YES),ステップS15に移る。
ステップS15:ロス解析部315は,受信ノードロス範囲が有るか判定する。具体的には,ロス解析部315は,ステップS16を既に1回でも実行したか判定する。ロス解析部315は,ステップS16を実行している場合,受信ノードロス範囲が有ると判定する。受信ノードロス範囲が有る場合(ステップS15/YES),ステップS17に移る。ステップS16が未実行の場合,すなわち,受信ノードロス範囲が無い場合(ステップS15/NO),ステップS16に移る。
ステップS16:ロス解析部315は,受信ノードロス範囲を記憶する。具体的には,ロス解析部315は,受信したACKパケットが有するACK番号にウインドウサイズを加算した値と,このACK番号にウインドウサイズとデータ長とを加算した値とを,図2のセッション情報管理テーブルT1bにおける受信ノードロス範囲欄に記憶する。換言すれば,ロス解析部315は,図2のセッション情報管理テーブルT1bにおける受信ノードロス可能性範囲欄が記憶するデータを受信ノードロス範囲欄に記憶する。以下,受信したACKパケットが有するACK番号にウインドウサイズを加算した値を,受信ノードロス範囲の始点番号と適宜記す。また,このACK番号にウインドウサイズとデータ長とを加算した値を受信ノードロス範囲の終点番号と適宜記す。
ロス解析部315は,ステップS9で説明した前記全データ量が,受信ノード2のウインドウサイズを超えた場合に(ステップS9/YES),ステップS16を実行する。ステップS15,ステップS16において,ロス解析部315は,第1のACKパケットの第1のACK番号および第1のSACK番号と,第1のACKパケットに後続して受信した第2のACKパケットの第2のACK番号および第2のSACK番号とが同じ場合に,以下の処理を実行している。すなわち,ロス解析部315は,ウインドウサイズを超えて受信した第1のデータパケットの第1のシーケンス番号と,第1のデータパケットに後続して受信した第2のデータパケットの第2のシーケンス番号とを記憶している。
ステップS17:ロス解析部315は,受信ノードロス範囲を最大長(データ長)分拡大する。具体的には,ロス解析部315は,図2のセッション情報管理テーブルT1bにおける受信ノードロス範囲欄が記憶する受信ノードロス範囲の終点番号にデータ長を加算する。
ステップS16,または,ステップS17の処理が終了すると,図7のステップS1に戻る。
図8のステップS11において,重複ACK番号でない場合(ステップS11),ステップS18に移る。
ステップS18:セッション情報管理部314は,最大ACK番号を更新する。具体的には,セッション情報管理部314は,図2のセッション管理テーブルT1aにおける最大ACK番号欄に,受信したACKパケットが有するACK番号を記憶する。
ステップS19:ロス解析部315は,図2のセッション情報管理テーブルT1bにおける受信ノードロス可能性範囲欄が記憶する受信ノードロス可能性範囲の始点番号が,受信したACKパケットが有するACK番号より小さければ,この始点番号をACK番号に変更する。
ステップS20:ロス解析部315は,図2のセッション情報管理テーブルT1bにおける受信ノードロス範囲欄が記憶する受信ノードロス範囲の始点番号が,受信したACKパケットが有するACK番号より小さければ,この始点番号をACK番号に変更する。
ステップS21:セッション情報管理部314は,SACKブロックを更新する。具体的には,セッション情報管理部314は,図2のセッション情報管理テーブルT1bにおけるSACKブロック欄に,受信したACKパケットが有するSACKブロックの番号を記憶する。ステップS21の処理が終了すると,図7のステップS1に戻る。
さて,図7のステップS7において,セッション情報管理部314が,ステップS6で抽出したシーケンス番号(受信データパケットのシーケンス番号)が,最大シーケンス番号以下と判定した場合(ステップS7/NO),図9のステップS31に移る。ここでは,図7のステップS1において,全体管理部311はデータパケットを受信している。
ステップS31:受信ロス解析部3151は,受信したデータパケットが有するシーケンス番号が,図2のセッション情報管理テーブルT1bにおける受信ノードロス範囲欄が記憶する受信ノードロス範囲内にあるか判定する。換言すれば,受信した第3のデータパケットのシーケンス番号が,受信済みのデータパケットの最大シーケンス番号以下と判定された場合(ステップS7/NO),受信ロス解析部3151は,以下の処理を実行する。すなわち,受信ロス解析部3151は,第3のデータパケットのシーケンス番号が,第1のシーケンス番号以上かつ第2のシーケンス番号以下か判定する。なお,前記第1のシーケンス番号,第2のシーケンス番号については,ステップS15,ステップS16を参照のこと。
前記したシーケンス番号が,前記した受信ノードロス範囲内にある場合(ステップS31/YES(受信ノード2ロス)),ステップS32に移る。
ステップS32:受信ロス解析部3151は,受信ノードロス数をカウントする受信ノードロスカウンタを1つカウントアップする。受信ロス解析部3151は,この受信ノードロスカウンタを,セッションIDに対応させて図1のメモリ32に記憶している。
ステップS31において,受信ロス解析部3151は,第3のデータパケットのシーケンス番号が,受信済みのデータパケットの最大シーケンス番号以下であり,さらに,第1のシーケンス番号以上かつ第2のシーケンス番号以下の場合に,受信ノード2でパケットロスが発生したと判定している。そして,受信ロス解析部3151は,受信ノード2でパケットロスが発生したと判定した場合,受信ノード2で発生したパケットロスの回数をカウントアップする。なお,解析情報出力部316は,この回数を出力装置4に出力する。
ステップS31において,前記したシーケンス番号が,前記した受信ノードロス範囲内にない場合(ステップS31/NO),ステップS33に移る。
ステップS33:ロス解析部315は,受信したデータパケットが有するシーケンス番号が,ネットワークロス範囲内か判定する。具体的には,ロス解析部315は,受信したデータパケットが有するシーケンス番号が,図2のセッション情報管理テーブルT1bにおける最大ACK番号欄が記憶するACK番号,セッション情報管理テーブルT1bにおけるSACKブロック欄SACKブロック欄が記憶するSACKブロックとの間にあるか判定する。例えば,このSACKブロックが,Nc(Ncは整数)-Nd(NdはNcより大きい整数)の場合を想定する。このとき,ロス解析部315は,受信したデータパケットが有するシーケンス番号が,前記した最大ACK番号欄が記憶するACK番号以上かつNc未満の場合,受信したデータパケットが有するシーケンス番号が,ネットワークロス範囲内と判定する。
また,SACKブロック欄が,第1のSACKブロックと,第2のSACKブロックとを記憶している場合,ロス解析部315は,受信したデータパケットが有するシーケンス番号が,この第1,第2のSACKブロック間にあるか判定する。例えば,第1のSACKブロックがNc-Nd,第2のSACKブロックがNe(NeはNdより小さい整数)-Nf(NfはNeより大きい整数)の場合を想定する。なお,Ncは第1のSACKブロックのLeft,Ndは第1のSACKブロックのRight,Neは第2のSACKブロックのLeft,Nfは第2のSACKブロックのRightである。このとき,ロス解析部315は,受信したデータパケットが有するシーケンス番号が,Ndより大きくかつNeより小さい場合,受信したデータパケットが有するシーケンス番号が,ネットワークロス範囲内と判定する。
前記したシーケンス番号が,ネットワークロス範囲内の場合(ステップS33/YES(ネットワークロス)),ステップS34に移る。
ステップS34:ロス解析部315は,ネットワークロス数をカウントするネットワークロスカウンタを1つカウントアップする。ロス解析部315は,このネットワークロスカウンタを,セッションIDに対応させて図1のメモリ32に記憶している。
ロス解析部315は,第3のデータパケットのシーケンス番号が,第2のACK番号と同じ場合,または,第3のデータパケットのシーケンス番号が,第2のACK番号より大きく,直近に記憶したSACK番号よりも小さい場合に,以下の処理を行う。すなわち,ロス解析部315は,ネットワークNでデータパケットのロスが発生したと判定する。なお,第3のデータパケットについてはステップS31を参照。第2のACK番号についてはステップS13参照。
そして,ロス解析部315は,ネットワークNでパケットロスが発生したと判定した場合,ネットワークNで発生したパケットロスの回数をカウントアップする。なお,解析情報出力部316は,この回数を出力装置4に出力する。
ステップS33において,前記したシーケンス番号が,ネットワークロス範囲外の場合(ステップS33/NO(例外再送信)),ステップS35に移る。
ステップS35:ロス解析部315は,例外再送信をカウントする例外再送信カウンタを1つカウントアップする。ロス解析部315は,この例外再送信カウンタを,セッションIDに対応させて図1のメモリ32に記憶している。
このステップS35は,下記の場合に実行される。送信ノード1が受信ノード2にデータパケットを送信し,このデータパケットを受信した受信ノード2が送信ノード1にACKパケットを送信する。ここで,送信ノード1と受信ノード2との距離が長い場合や,ネットワークNで多量のデータ通信が実行されている場合を想定する。このとき,受信ノード2が送信したACKパケットが送信ノード1に到達するまでの到達時間が大幅に遅延することがある。すると,送信ノード1は,前記したデータパケットを受信ノード2が受信していないと判断して,前記したデータパケットと同じデータパケットを受信ノード2に送信する。この場合,ステップS35の処理が実行される。
なお,ステップS32において,受信ロス解析部3151は,所定時間間隔(例えば1秒)毎に,カウントした受信ノードロスカウンタの番号を,図3の解析情報テーブルT2における受信ノードロス数欄に記憶する。また,ステップS34において,受信ロス解析部3151は,所定時間間隔毎に,カウントしたネットワークロスカウンタの番号を,図3の解析情報テーブルT2におけるネットワークロス数欄に記憶する。また,ステップS35において,受信ロス解析部3151は,所定時間間隔毎に,カウントした例外再送信カウンタの番号を,図3の解析情報テーブルT2における再送信数欄に記憶する。また,セッション情報管理部314は,図7のステップS6において,所定時間間隔毎に,カウントした受信データパケット数カウンタの番号を,図3の解析情報テーブルT2におけるパケット数欄に記憶する。
(第1の具体例におけるパケット)
図10に基づき,図4を参照し,第1の具体例において,送信ノード1と受信ノード2との間で送受信されるパケットについて説明する。
図10は,第1の具体例において送信ノード1と受信ノード2との間で送受信されるパケットについて説明する図である。
以下の説明において,データパケットのパケット長は100バイト,受信ノード2のウインドウサイズは1000バイト(図10の(B)における(WS=1000参照))とする。また,最初のシーケンス番号を1001とする。
図10において,送信ノード1から受信ノード2方向を示す実線矢印((A),(D),(F))は,送信ノード1が受信ノード2にデータパケットを送信していることを示す。受信ノード2から送信ノード1方向を示す点線矢印((C),(E),(G))は,受信ノード2が送信ノード1にACKパケットを送信していることを示す。また,符号DP10,DP19,DP20,DP23,DP24,DP26に示すブロックは,データパケットを模式的に示し,このブロック内の"SEQ:Na(Naは整数)"は,シーケンス番号がNaであることを示す。また,符号AP11,AP19,AP20,AP23,AP24,AP26に示すブロックは,ACKパケットを模式的に示し,このブロック内の"AQK:Nb(Nbは整数) SACK:Nc(Ncは整数)-Nd(Ndは整数)"は,ACK番号がNb,SACKブロックのSACK番号がNc-Ndであることを示す。
矢印(A)に示すデータパケット送信において,送信ノード1の送受信部14は,シーケンス番号1001,1101,1201,1301,1401,1501,1601,1701,1801,1901を有するデータパケットを受信ノード2に連続して送信する(符号DP10〜符号DP19参照)。ここで,シーケンス番号1001を有するデータパケットは,例えば受信ノード2と監視装置3との間のネットワークNでロスしたとする。さらに,送信ノード1の送受信部14は,シーケンス番号2001,2101,2201,2301を有するデータパケットを受信ノード2に連続して送信する(符号DP20〜符号DP23参照)。
さて,受信ノード2の送受信部21は,シーケンス番号1101〜1901を有するデータパケットを受信し,受信用バッファ22に出力する(図4参照)。受信用バッファ22は,入力されたデータパケットを記憶する。このデータパケットが受信用バッファ22に記憶されている状態を,図10の(B)の符号22aの斜め線ハッチングで示す。現時点では,シーケンス番号1001を有するデータパケットはネットワークでロスしているので,受信用バッファ22は,シーケンス番号1001を有するデータパケットを記憶していない。なお,このとき,受信用バッファ22は,送信ノード1から送信されるシーケンス番号1001を有するデータパケットの記憶処理に備えて,このデータパケットのサイズ分(100バイト)のメモリ領域を確保している。このメモリ領域を確保している状態を,図10の(B)の符号22bで模式的に示す。
前記したように,受信用バッファ22は,欠番のシーケンス番号1001を有するデータパケットを記憶していない。そのため,データ再組み立て部23は,データの再組み立て処理を実行することができない。その結果,受信用バッファ22の空き容量不足のため,受信用バッファ22は,これ以上のデータパケットを記憶することができない。
受信ノード2の送受信部21が,シーケンス番号1101を有するデータパケットを受信すると,矢印(C)に示すACKパケット送信において,以下のACKパケットを送信する。このACKパケットは,送信要求するデータを特定する番号を示すACK番号1001と,SACKブロック1101-1201を有するACKパケットである。さらに,受信ノード2の送受信部21が,1201,1301,1401,1501,1601,1701,1801,1901を有するデータパケットを連続して受信し,1つのデータパケットを受信する度に,ACKパケットを送信ノード1に送信する。これらACKパケットは,共通してACK番号1001を有する。そして,これらACKパケットは,ACKパケット毎にSACKブロックとして,1101-1301,1101-1401,1101-1501,1101-1601,1101-1701,1101-1801,1101-1901,1101-2001を有する。以上説明した,ACKパケットの送信については,符号AP11〜符号AP19参照。
前記したように,送信ノード1の送受信部14が,シーケンス番号2001を有するデータパケットを受信ノード2に送信する。受信ノード2の送受信部21は,シーケンス番号2001を有するデータパケットを受信するが,前記したように,受信用バッファ22の空き容量不足のため,受信したデータパケットを破棄する。換言すれば,受信ノード2ロスでパケットロスが発生する。そこで,受信ノード2の送受信部21は,ACK番号1001と,SACKブロック1101-2001とを有するACKパケットを送信ノード1に送信する(図10の(C)の矢印参照)。
前記したように,送信ノード1の送受信部14が,シーケンス番号2001の次のシーケンス番号2101を有するデータパケット,シーケンス番号2201を有するデータパケット,シーケンス番号2301を有するデータパケットを受信ノード2に送信する。受信ノード2の送受信部21は,前記したように,受信用バッファ22の空き容量不足のため,受信したデータパケットを破棄する。そこで,受信ノード2の送受信部21は,データパケットを受信する度に,ACK番号1001と,SACKブロック1101-2001とを有するACKパケットを送信ノード1に送信する(図10の(C)における符号AP20〜AP23参照)。
送信ノード1の送受信部14は,重複ACK番号1001を有するACKパケットを3つ以上受信すると,例えば,シーケンス番号2301を有するデータパケットの送信の後,シーケンス番号1001を有するデータパケットを受信ノード2に再送信する(図10の(D)における符号DP10参照)。次いで,送信ノード1の送受信部14は,シーケンス番号2401を有するデータパケット,シーケンス番号2501を有するデータパケット,シーケンス番号2601を有するデータパケットを受信ノード2に順次送信する(図10の(D)における符号DP24〜DP26参照)。
受信ノード2の送受信部21が,シーケンス番号1001を有するデータパケット(再送信)を受信すると,矢印(E)に示すACKパケット送信において,破棄済みデータパケットが有するシーケンス番号を示すACK番号2001を有するACKパケットを送信する(符号AP10参照)。さらに,受信ノード2の送受信部21は,シーケンス番号2401を有するデータパケットを受信すると,ACK番号2001とSACKブロック2401-2501とを有するACKパケットを送信ノード1に送信する(符号AP24参照)。受信ノード2の送受信部21は,シーケンス番号2501を有するデータパケットを受信すると,ACK番号2001とSACKブロック2401-2601とを有するACKパケットを送信ノード1に送信する。そして,受信ノード2の送受信部21は,シーケンス番号2601を有するデータパケットを受信すると,ACK番号2001とSACKブロック2401-2701とを有するACKパケットを送信ノード1に送信する(符号AP26参照)。
送信ノード1の送受信部14は,重複ACK番号2001を有するACKパケット(符号AP24〜AP26参照)を3つ以上受信すると,例えば,シーケンス番号2601を有するデータパケットの送信の後,矢印(F)に示すデータパケット送信において,以下のデータパケットを再送信する。このデータパケットは,シーケンス番号2001を有するデータパケット((F)の符号DP20参照),シーケンス番号2101を有するデータパケット,シーケンス番号2201を有するデータパケット,シーケンス番号2301を有するデータパケット((F)の符号DP23参照)である。
受信ノード2の送受信部21は,シーケンス番号2001を有するデータパケットを受信すると,矢印(G)に示すACKパケット送信において,ACK番号2101とSACKブロック2401-2701とを有するACKパケット(符号AP20参照)を送信ノード1に送信する。受信ノード2の送受信部21は,シーケンス番号2101を有するデータパケットを受信すると,ACK番号2201とSACKブロック2401-2701とを有するACKパケットを送信ノード1に送信する。受信ノード2の送受信部21は,シーケンス番号2201を有するデータパケットを受信すると,ACK番号2301とSACKブロック2401-2701とを有するACKパケットを送信ノード1に送信する。さらに,受信ノード2の送受信部21は,シーケンス番号2301を有するデータパケットを受信すると,ACK番号2701を有するACKパケット(符号AP23)を送信ノード1に送信する。以後のパケット送受信については,本実施の形態を説明する上で不要なので,その説明を省略する。
(第1の具体例における監視装置3が実行する処理)
図2,図3,図7〜図10を参照し,図11,図12に基づき,第1の具体例において監視装置3が実行する処理について説明する。
図11,図12は,第1の具体例において監視装置3が実行する処理について説明する第1,第2の図である。図11のテーブルT4aは,データパケットのシーケンス番号欄と,ACK欄と,SACK 1st block欄と,受信ノードロス可能性範囲欄と,受信ノードロス範囲欄と,ロス判定欄とを有する。シーケンス番号欄と,ACK欄と,SACK 1st block欄は,図6のシーケンス番号欄と,ACK欄と,SACK 1st block欄とに相当する。さらに,SACK 1st block欄と,受信ノードロス可能性範囲欄と,受信ノードロス範囲欄は,図2のセッション情報管理テーブルT1bにおける,SACKブロック欄と,受信ノードロス可能性範囲欄と,受信ノードロス範囲欄とに相当する。図12のテーブルT4bは,図11のテーブルT4aに後続するテーブルである。
図7で説明したように,送信ノード1と受信ノード2との間で,ハンドシェイク用のパケットが送受信され,送信ノード1と受信ノード2とは,TCP/IP通信用のセッションを確立する。その結果,セッション情報管理部314は,新たなセッションを図2のセッション管理テーブルT1aに新規登録する(ステップS1〜S4)。このとき,セッション情報管理部314は,例えばハンドシェイク用のパケットからウインドウサイズを取得する。ここでは,ウインドウサイズが1000(バイト)であるとする。以下の説明において,データパケットの最大長(パケット長)は100バイトである。さらに,送信ノード1,受信ノード2は,最初のシーケンス番号をハンドシェイク用のパケットから取得し,自装置のメモリ(図示しない)に設定する。ここで,最初のシーケンス番号を1001とする。
送信ノード1の送受信部14は,シーケンス番号1001,1101,1201,1301,1401,1501,1601,1701,1801,1901を有するデータパケットを受信ノード2に連続して送信する(図10の(A)における符号DP10〜符号DP19参照)。ここで,シーケンス番号1001を有するデータパケットが,例えば受信ノード2と監視装置3との間のネットワークNでロスしたとする。そのため,受信ノード2の送受信部21は,シーケンス番号1001を有するデータパケットを受信することはできない。
受信ノード2の送受信部21は,シーケンス番号1101,1201,1301,1401,1501,1601,1701,1801,1901を有するデータパケットを連続して受信し,1つのデータパケットを受信する度に,ACKパケットを送信ノード1に送信する。これらACKパケットは,共通してACK番号1001を有する。そして,これらACKパケットは,ACKパケット毎にSACKブロックとして,1101-1201,1101-1301,1101-1401,1101-1501,1101-1601,1101-1701,1101-1801,1101-1901,1101-2001を有する(図10の(C)における符号AP11〜符号AP19参照)。
監視装置3のセッション情報管理部314は,受信部312がデータパケットを受信(ステップS1)する度に,ステップS2,ステップS3(NO),ステップS5の処理を実行し,さらにステップS6において受信データパケットが有するシーケンス番号,パケット長を抽出し,ステップS7に移る。
例えば,受信部312がシーケンス番号1101を有するデータパケットを受信すると,セッション情報管理部314は,このデータパケットからシーケンス番号1101,パケット長(100バイト)を抽出する。そして,セッション情報管理部314は,ステップS6で抽出したシーケンス番号が,最大シーケンス番号よりも大きいか判定する(ステップS7)。ここで,この最大シーケンス番号は,図2のセッション管理テーブルT1aにおける最大シーケンス番号欄が記憶する番号である。なお,初期化時には,最大シーケンス番号は例えば,0である。
セッション情報管理部314は,ステップS7において,シーケンス番号1101が,最大シーケンス番号0よりも大きいと判定し(ステップS7/YES),ステップS6で抽出した最大シーケンス番号を図2のセッション管理テーブルT1aにおける最大シーケンス番号欄に記憶する。
セッション情報管理部314は,ステップS9において,ACK期待番号から直前に受信したACKパケットが有するACK番号を減算した減算番号が,ウインドウサイズより大きいか判定する。まだ,ACKパケットを受信していない場合,前記したACK番号はACK期待番号に等しい値である。前記例の場合,ACK期待番号は,1201(1101+100)であり,ACKパケットは未だ受信していないのでACK番号は1201であり,ウインドウサイズは1000であるので,セッション情報管理部314はステップS9でNOと判定し,ステップS1に戻る。
受信ノード2の送受信部21が,シーケンス番号1101を有するデータパケットを受信すると,送信要求するデータを特定する番号を示すACK番号1001と,SACKブロック1101-1201を有するACKパケットを送信する。
監視装置3の受信部312が,このACKパケットを受信すると(ステップS1),セッション情報管理部314は,ステップS2,ステップS3(NO),ステップS5(NO)を実行し,図8のステップS11に移る。
セッション情報管理部314は,ステップS11で,受信したACKパケットが重複ACK番号を有するパケットか判定する。前記の例では,セッション情報管理部314は,受信したACKパケットが有するACK番号1001が,直前に受信したACKパケットが有するACK番号と一致するか判定する。直前に受信したACKパケットがない場合,ステップS18に移る。セッション情報管理部314は,ステップS18において,図2のセッション管理テーブルT1aにおける最大ACK番号欄に,受信したACKパケットが有するACK番号1001を記憶する。
そして,ステップS19,ステップS20に移るが,図7のステップS10が未実行なので,ステップS21に移る。
セッション情報管理部314は,ステップS21において,図2のセッション情報管理テーブルT1bにおけるSACKブロック欄に,受信したACKパケットが有するSACKブロックの番号を記憶する。前記の例では,図11のSACK 1st block欄のLeft欄に1101を記憶し,Right欄に1201を記憶している状態を参照。
セッション情報管理部314は,受信部312がシーケンス番号1201を有するデータパケットを受信すると,ステップS2,ステップS3(NO),ステップS5(YES),ステップS6,ステップS7(YES),ステップS8,ステップS9(NO)の処理を実行し,ステップS1に戻る。
また,セッション情報管理部314は,受信ノード2の送受信部21がシーケンス番号1201を有するデータパケットの受信に応答して送信した,ACK番号1001とSACKブロック1101-1301とを有するACKパケットを受信すると,ステップS2,ステップS3(NO),ステップS5(NO),図8のステップS11の処理を実行する。セッション情報管理部314は,ステップS11において,受信したACKパケットが有するACK番号(前記の例では1001)と,直前に受信したACKパケットが有するACK番号(前記の例では1001)とが一致すると判定し(ステップS11/YES),ステップS12に移る。
セッション情報管理部314は,ステップS12において,受信したACKバケットが有するACK番号を重複ACK番号1001として,図2のセッション管理テーブルT1aにおける重複ACK番号欄に記憶する。
さらに,セッション情報管理部314は,ステップS13において,セッション情報管理部314は,受信したACKパケットが有するSACKブロックの番号と,直前に受信したACKパケットが有するSACKブロックの番号とが同番号が判定する。前記例の場合,受信したACKパケットが有するSACKブロックの番号は1101-1301であり,直前に受信したACKパケットが有するSACKブロックの番号は1101-1201である。従って,セッション情報管理部314は,ステップS13でNOと判定し,ステップS21に移る。
セッション情報管理部314は,ステップS21において,図2のセッション情報管理テーブルT1bにおけるSACKブロック欄に,受信したACKパケットが有するSACKブロックの番号を記憶する。前記の例では,セッション情報管理部314は,図11のSACK 1st block欄のLeft欄に1101を記憶し,Right欄に1301を記憶する。そして,図7のステップS1に戻る。
以後,セッション情報管理部314は,受信部312がシーケンス番号1301,1401,1501,1601,1701,1801,1901を有するデータパケットを受信する度に,ステップS2,ステップS3(NO),ステップS5(YES),ステップS6,ステップS7(YES),ステップS8,ステップS9(NO)の処理を実行し,ステップS1に戻る。
また,セッション情報管理部314は,受信部312が以下のACKパケットを受信する度に,ステップS2,ステップS3(NO),ステップS5(NO),図8のステップS11(YES),ステップS12,ステップS13(NO),ステップS21の処理を実行する。このACKパケットとは,ACK番号1001とSACKブロック1101-1401とを有するACKパケット,ACK番号1001とSACKブロック1101-1501とを有するACKパケットである。また,このACKパケットとは,ACK番号1001とSACKブロック1101-1601とを有するACKパケット,ACK番号1001とSACKブロック1101-1701とを有するACKパケットである。また,このACKパケットとは,ACK番号1001とSACKブロック1101-1801とを有するACKパケット,ACK番号1001とSACKブロック1101-1901とを有するACKパケット,ACK番号1001とSACKブロック1101-2001とを有するACKパケットである。
なお,受信ノード2の送受信部21は,シーケンス番号1101〜1901を有するデータパケットを受信した後は,図10の(B)で説明したように,受信用バッファ22は,空き容量不足のため,データパケットの記憶処理ができない状態である。
さて,前記したように,送信ノード1の送受信部14が,シーケンス番号1901の次のシーケンス番号2001を有するデータパケットを受信ノード2に送信する。監視装置3の受信部312がこのデータパケットを受信し(ステップS1),セッション情報管理部314が,ステップS2,ステップS3(NO),ステップS5(YES),ステップS6,ステップS7(YES),ステップS8,ステップS9の処理を実行する。ここで,セッション情報管理部314は,ステップS8において,最大シーケンス番号として2001を記憶している。そして,ACK期待番号は2101(2001+100)であり,直前に受信したACKパケットが有するACK番号は1001であり,ウインドウサイズは1000である。従って,セッション情報管理部314は,ステップS9において,YES(2101-1001>1000)と判定し,ロス解析部315は,ステップS10において,図2のセッション情報管理テーブルT1bにおける受信ノードロス可能性範囲を更新する。ロス解析部315は,初めて,ステップS10の処理を実行する場合,受信ノードロス可能性範囲の始点番号を,受信したデータパケットが有するシーケンス番号とし,終点番号をこのシーケンス番号にデータ長を加算した値とする。前記の例の場合,ロス解析部315は,図2のセッション情報管理テーブルT1bにおける受信ノードロス可能性範囲に始点番号2001,終点番号を2101(2001+100)とする。
前記したように,送信ノード1の送受信部14が,シーケンス番号2001を有するデータパケットを受信ノード2に送信する。この場合,図10で説明したように,受信ノード2の送受信部21は,受信用バッファ22の空き容量不足のため,受信したデータパケットを破棄し,ACK番号1001と,SACKブロック1101-2001とを有するACKパケットを送信ノード1に送信する。
監視装置3の受信部312は,このACKパケットを受信し(ステップS1),セッション情報管理部314が,ステップS2,ステップS3(NO),ステップS5(NO),図8のステップS11(YES),ステップS12,ステップS13を実行する。セッション情報管理部314は,ステップS13において,受信したACKパケットが有するSACKブロックの番号と,直前に受信したACKパケットが有するSACKブロックの番号とが同番号が判定する。前記例の場合,受信したACKパケットが有するSACKブロックの番号は1101-2001であり,直前に受信したACKパケットが有するSACKブロックの番号は1101-2001である。従って,セッション情報管理部314は,ステップS13でYESと判定する。
ロス解析部315は,ステップS13の次ステップS14において,前記したSACKブロックの番号が,図2のセッション情報管理テーブルT1bにおける受信ノードロス可能性範囲欄に記憶されている受信ノードロス可能性範囲の始点番号以下か判定する。前記したSACKブロックの番号は1101-2001であり,前記受信ノードロス可能性範囲の始点番号は2001なので,ロス解析部315は,ステップS14でYESと判定し,ステップS15に移る。
ロス解析部315は,受信ノードロス範囲が有るか,すなわち,ステップS16を実行したか判定する。ここでは,ステップS16は未実行なので,ステップS15でNOと判定する。そして,ロス解析部315は,ステップS16において,図2のセッション情報管理テーブルT1bにおける受信ノードロス範囲欄に,受信ノードロス範囲の始点番号として2001を記憶し,受信ノードロス範囲の終点番号として2101を記憶する。
次に,送信ノード1の送受信部14が,シーケンス番号2001の次のシーケンス番号2101を有するデータパケット,シーケンス番号2201を有するデータパケット,シーケンス番号2301を有するデータパケットを受信ノード2に送信する。すると,監視装置3の受信部312が,各データパケットを受信する度に,セッション情報管理部314は,ステップS2,ステップS3(NO),ステップS5(YES),ステップS6,ステップS7(YES),ステップS8,ステップS9の処理を実行する。ここで,セッション情報管理部314は,ステップS8を実行する度に,最大シーケンス番号を2101,2201,2301と更新する。ACK期待番号は,ステップS9を実行する度に,2201(2101+100),2301(2201+100),2401(2301+100)と更新され,直前に受信したACKパケットが有するACK番号は1001であり,ウインドウサイズは1000である。従って,セッション情報管理部314は,ステップS9を実行する度にYESと判定する。そして,ロス解析部315は,ステップS10を実行する度に,図2のセッション情報管理テーブルT1bにおける受信ノードロス可能性範囲欄を,2001-2201,2001-2301,2001-2401と更新する。
前記したように,送信ノード1の送受信部14が,シーケンス番号2001の次のシーケンス番号2101を有するデータパケット,シーケンス番号2201を有するデータパケット,シーケンス番号2301を有するデータパケットを受信ノード2に送信する。
受信ノード2の送受信部21は,データパケットを受信する度に,ACK番号1001と,SACKブロック1101-2001とを有する3つのACKパケットを送信ノード1に送信する(図10の(C)における符号AP20〜AP23参照)。
監視装置3の受信部312は,このACKパケットを受信し(ステップS1),セッション情報管理部314が,ステップS2,ステップS3(NO),ステップS5(NO),図8のステップS11(YES),ステップS12,ステップS13(YES),ステップS14(YES),ステップS15(YES)を実行する。そして,ロス解析部315は,ステップS16において,図2のセッション情報管理テーブルT1bにおける受信ノードロス範囲欄を,2001-2201,2001-2301,2001-2401と更新する。
送信ノード1の送受信部14は,重複ACK番号1001を有するACKパケットを3つ以上受信すると,図10における(C)の符号DP10に示したように,シーケンス番号1001を有するデータパケットを受信ノード2に再送信する。
監視装置3の受信部312は,シーケンス番号1001を有するデータパケットを受信し(ステップS1),セッション情報管理部314は,ステップS2,ステップS3(NO),ステップS5(YES),ステップS6,ステップS7を実行する。ここで,受信データパケットが有するシーケンス番号は1001であり,最大シーケンス番号は2301である。従って,セッション情報管理部314は,ステップS7においてNOと判定し,図9のステップS31に移る。受信ロス解析部3151は,受信したデータパケットが有するシーケンス番号が,図2のセッション情報管理テーブルT1bにおける受信ノードロス範囲欄が記憶する受信ノードロス範囲内にあるか判定する。この受信ノードロス範囲は,2001-2401なので,受信ロス解析部3151は,受信したデータパケットが有するシーケンス番号が前記した受信ノードロス範囲内にないと判定し(ステップS31/NO),ステップS33に移る。
ロス解析部315は,受信したデータパケットが有するシーケンス番号が,受信したデータパケットが有するシーケンス番号が,ネットワークロス範囲内か判定する(ステップS33)。受信したデータパケットが有するシーケンス番号は1001であり,最大ACK番号は1001である。従って,ロス解析部315は,受信したデータパケットが有するシーケンス番号が,受信したデータパケットが有するシーケンス番号が,ネットワークロス範囲内と判定し(ステップS33/YES),ステップS34の実行により,ネットワークロス数を加算する。この判定により,ネットワークロスが発生したと判定する(図11のロス判定欄のNWロス参照)。
受信ノード2の送受信部21は,シーケンス番号1001を有するデータパケットを受信すると,このデータパケットが受信していないデータパケットであるので,受信用バッファ22に記憶する。データ再組み立て部23は,この記憶により,シーケンス番号1001から1901の一連のデータパケットが揃ったので,データ再組み立て処理を実行し,組み立てたデータをアプリケーション24に出力する。そして,データ再組み立て部23は,受信用バッファ22をクリアする(NULLセットとも呼ぶ)。このクリアにより,送受信部21は,以後,受信したデータパケットを破棄せずに,受信用バッファ22に記憶することが可能になる。
さらに,受信ノード2の送受信部21は,シーケンス番号1001を有するデータパケットを受信すると,受信ロスしたデータパケットが有するシーケンス番号を示すACK番号2001を有するACKパケットを送信ノード1に送信する。
監視装置3の受信部312が,ACK番号2001を有するACKパケットを受信すると(ステップS1),セッション情報管理部314は,ステップS2,ステップS3,ステップS5(NO),図8のステップS11を実行する。ここで,直前に受信したACKパケットが有するACK番号は1001,受信したACKパケットが有するACK番号は2001である。従って,セッション情報管理部314は,ステップS11でNOと判定し,ステップS18において,図2のセッション管理テーブルT1aにおける最大ACK番号欄に,受信したACKパケットが有するACK番号2001を記憶する。なお,図2のセッション情報管理テーブルT1bにおける受信ノードロス可能性範囲欄が記憶する受信ノードロス可能性範囲の始点番号(前記の例で2001)が,受信したACKパケットが有するACK番号(前記の例で2001)より小さくないので,ステップS19における始点番号変更処理を実行しない。また,図2のセッション情報管理テーブルT1bにおける受信ノードロス範囲欄が記憶する受信ノードロス範囲の始点番号(前記の例で2001)が,受信したACKパケットが有するACK番号(前記の例で2001)より小さくないので,ステップS20における始点番号変更処理を実行しない。
セッション情報管理部314は,SACKブロックを更新する。前記例では,受信したACKパケットは,SACKブロックとして番号を有していないので,図2のセッション情報管理テーブルT1bにおけるSACKブロック欄にを0を記憶する(図11の例では空白)。
送信ノード1のアプリケーション11は,シーケンス番号1001を有するデータパケットの再送信処理が終了すると,シーケンス番号2401を有するデータパケット,シーケンス番号2501を有するデータパケット,シーケンス番号2601を有するデータパケットを受信ノード2に順次送信する(図10の(D)における符号DP24〜DP26参照)。
ここで,監視装置3の受信部312が,例えば,シーケンス番号2401を有するデータパケットを受信すると(ステップS1),セッション情報管理部314は,ステップS2,ステップS3(NO),ステップS5(YES),ステップS6,ステップS7の処理を実行する。なお,受信したデータパケットが有するシーケンス番号は2401,最大シーケンス番号は2301なので,セッション情報管理部314は,ステップS7でYESと判定し,ステップS8,ステップS9の処理を実行する。なお,ACK期待番号は2501(2401+100)で,直前に受信したACKパケットが有するACK番号は2001なので,セッション情報管理部314は,ステップS9でNOと判定し,ステップS1に戻る。
監視装置3のセッション情報管理部314は,受信部312がシーケンス番号2501を有するデータパケット,シーケンス番号2601を有するデータパケットを受信する度に,ステップS2,ステップS3(NO),ステップS5(YES),ステップS6,ステップS7(YES),ステップS8,ステップS9(NO)を実行する。なお,セッション情報管理部314は,ステップS8を実行する度に,図2のセッション管理テーブルT1aにおける最大シーケンス番号欄を2501,2601と更新する。
受信ノード2の送受信部21は,シーケンス番号2401を有するデータパケットを受信すると,ACK番号2001とSACKブロック2401-2501とを有するACKパケットを送信ノード1に送信し(図10の符号AP24参照),シーケンス番号2501を有するデータパケットを受信すると,ACK番号2001とSACKブロック2401-2601とを有するACKパケットを送信ノード1に送信する。そして,受信ノード2の送受信部21は,シーケンス番号2601を有するデータパケットを受信すると,ACK番号2001とSACKブロック2401-2701とを有するACKパケットを送信ノード1に送信する(図10の符号AP26参照)。
セッション情報管理部314は,受信部312が前記した3つのACKパケットを受信する度に,ステップS2,ステップS3(NO),ステップS5(NO),図8のステップS11(YES),ステップS12,ステップS13(NO),ステップS21の処理を実行する。なお,3つのACKパケットが有するACK番号は同じなので,ステップS11はYESと判定され,3つのACKパケットが有するSACKブロックは異なるので、ステップS13はNOと判定される。その結果,セッション情報管理部314は,ステップS21の実行する度に,図2のセッション情報管理テーブルT1bにおけるSACKブロック欄を,2401-2501,2401-2601,2401-2701と更新する。
送信ノード1の送受信部14は,重複ACK番号2001を有する前記した3つのACKパケットを受信すると,例えば,シーケンス番号2601を有するデータパケットの送信の後,以下のデータパケットを再送信する。このデータパケットは,シーケンス番号2001,シーケンス番号2101,シーケンス番号2201,シーケンス番号2301を有するデータパケット(図10の(F)における符号DP20〜DP23参照)である。
監視装置3の受信部312が4つのデータパケットを受信(ステップS1)する度に,セッション情報管理部314は,ステップS2,ステップS3(NO),ステップS5(YES),ステップS6,ステップS7を実行する。ここで,4つの受信データパケットが有するシーケンス番号は,それぞれ2001,2101,2201,2301であり,最大シーケンス番号は2601である。従って,セッション情報管理部314は,ステップS7においてNOと判定し,図9のステップS31に移る。受信ロス解析部3151は,受信したデータパケットが有するシーケンス番号が,図2のセッション情報管理テーブルT1bにおける受信ノードロス範囲欄が記憶する受信ノードロス範囲内にあるか判定する。シーケンス番号2001を有するデータパケットの受信においては,この受信ノードロス範囲は,2001-2401である。なお,受信ノードロス範囲の終点番号は,図11に示したように,ACKパケットの受信に応じて,2101から,2201,2301,2401と更新されている。従って,受信ロス解析部3151は,受信したデータパケットが有するシーケンス番号2001が前記した受信ノードロス範囲(2001-2401)内にあると判定し(ステップS31/YES),ステップS32に移る。この判定により,受信ノードロスが発生したと判定する(図12のロス判定欄の受信ロス参照)。受信ロス解析部3151は,ステップS32の実行により,受信ノードロス数を加算する。すなわち,受信ロス解析部3151は,受信部312が4つのデータパケットを受信する度に,ステップS32を実行し,受信ノードロス数を加算する。
受信ノード2の送受信部21は,シーケンス番号2001を有するデータパケットを受信すると,ACK番号2101とSACKブロック2401-2701とを有するACKパケットを送信ノード1に送信し,シーケンス番号2101を有するデータパケットを受信すると,ACK番号2201とSACKブロック2401-2701とを有するACKパケットを送信ノード1に送信する。そして,受信ノード2の送受信部21は,シーケンス番号2201を有するデータパケットを受信すると,ACK番号2301とSACKブロック2401-2701とを有するACKパケットを送信ノード1に送信する。さらに,受信ノード2の送受信部21は,シーケンス番号2301を有するデータパケットを受信すると,ACK番号2701を有するACKパケットを送信ノード1に送信する。
セッション情報管理部314は,受信部312が前記した最初の3つのACKパケットを受信する度に,ステップS2,ステップS3(NO),ステップS5(NO),図8のステップS11(YES),ステップS12,ステップS13(NO),ステップS21の処理を実行する。なお,ACK番号2101とSACKブロック2401-2701とを有するACKパケットを受信する直前に受信したACKパケットが有するACK番号が2001であり,3つのACKパケットが有するACK番号はACK番号2001ではなく,相互に異なる。そのため,ステップS11はNOと判定される。従って,セッション情報管理部314は,受信部312が前記した最初の3つのACKパケットを受信する度に,ステップS18〜S21の処理を実行する。また,ACK番号2101とSACKブロック2401-2701とを有するACKパケットの受信前において,図2のセッション情報管理テーブルT1bにおける受信ノードロス可能性範囲欄,受信ノードロス範囲欄は2001-2401を記憶している。
従って,セッション情報管理部314は,ACK番号2101とSACKブロック2401-2701とを有するACKパケットの受信後,以下の処理を実行する。すなわち,セッション情報管理部314は,ステップS18,ステップS19の実行により,図2のセッション情報管理テーブルT1bにおける受信ノードロス可能性範囲欄,受信ノードロス範囲欄に,2101-2401を記憶する。さらに,セッション情報管理部314は,ACK番号2201とSACKブロック2401-2701とを有するACKパケットの受信後,セッション情報管理テーブルT1bにおける受信ノードロス可能性範囲欄,受信ノードロス範囲欄に,2201-2401を記憶する(ステップS18,S19参照)。さらに,セッション情報管理部314は,ACK番号2301とSACKブロック2401-2701とを有するACKパケットの受信後,セッション情報管理テーブルT1bにおける受信ノードロス可能性範囲欄,受信ノードロス範囲欄に,2301-2401を記憶する(ステップS18,S19参照)。監視装置3は,図11で説明した処理をセッションが終了するまで実行する。
(第2の具体例)
図13に基づき,図4を参照し,第2の具体例において,送信ノード1と受信ノード2との間で送受信されるパケットについて説明する。図13は,第2の具体例において送信ノード1と受信ノード2との間で送受信されるパケットについて説明する図である。
以下の説明において,データパケットのパケット長は100バイト,受信ノード2のウインドウサイズは1500バイト(図13の(B)における(WS=1500参照))とする。また,最初のシーケンス番号を1001とする。
図13において,実線矢印,点線矢印が示す内容は,図10と同じである。また,図10と同じく,符号DP10,DP19,DP20,DP23,DP24,DP26に示すブロックは,データパケットを模式的に示す。符号AP10,AP11,AP19,AP21,AP23,AP24,AP26に示すブロックは,ACKパケットを模式的に示す。
図13においては,図10と同じく,矢印(A)に示すデータパケット送信において,送信ノード1の送受信部14は,符号DP10〜符号DP19に示すデータパケット,さらに,符号DP20〜符号DP23に示すデータパケットを受信ノード2に連続して送信する。ここで,符号DP10に示すデータパケット,符号DP20に示すデータパケットが,例えば受信ノード2と監視装置3との間のネットワークNでロスしたとする。
さて,図10で説明したように,受信用バッファ22は,シーケンス番号1001を有するデータパケット(符号DP10参照)の記憶領域(図13の(B)の符号22d参照)を確保しつつ,シーケンス番号1101を有するデータパケット〜シーケンス番号1901を有するデータパケット(符号DP19参照)を記憶する。さらに,受信用バッファ22は,受信用バッファ22の記憶可能容量(ウインドウサイズ)は,1500バイトであるので,シーケンス番号2101を有するデータパケット〜シーケンス番号2301を有するデータパケット(符号DP23参照)を記憶できる。このデータパケットが受信用バッファ22に記憶されている状態を,図13の(B)の符号22cの斜め線ハッチングで示す。
前記した受信用バッファ22の記憶状態でも,受信用バッファ22の記憶可能容量(ウインドウサイズ)は,1500バイトであるので,後続のデータパケットを記憶できる空き容量がある(図13の(B)の符号22e参照)。
図10で説明したように,受信ノード2の送受信部21が,シーケンス番号1101を有するデータパケット〜シーケンス番号1901を有するデータパケットを受信する度に,矢印(C)に示すACKパケット送信において,符号AP11〜符号AP19に示すACKパケットを送信ノード1に送信する。さらに,受信ノード2の送受信部21が,シーケンス番号2101を有するデータパケット〜シーケンス番号2301を有するデータパケットを受信する度に,符号AP21〜符号AP23に示すACKパケットを送信ノード1に送信する。符号AP21から符号AP23に示すACKパケットは,送信要求するデータを特定する番号を示すACK番号1001を共通して有する。さらに,これらACKパケットは,ACKパケット毎にSACKブロックとして,SACK:2101-2201,1101-2001,SACK:2101-2301,1101-2001,SACK:2101-2401,1101-2001を有する。
送信ノード1の送受信部14は,重複ACK番号1001を有するACKパケットを3つ以上受信すると,例えば,シーケンス番号2301を有するデータパケットの送信の後,シーケンス番号1001を有するデータパケットを受信ノード2に再送信する(図13の(D)における符号DP10参照)。次いで,送信ノード1の送受信部14は,符号DP24〜符号DP26に示すデータパケットを受信ノード2に送信する。
受信ノード2の送受信部21が,シーケンス番号1001を有するデータパケット(再送信)を受信すると,矢印(E)に示すACKパケット送信において,以下のACKパケットを送信する。このACKパケットとは,送信要求するデータを特定する番号を示すACK番号2001,SACKブロック2101-2401を有するACKパケット(符号AP10参照)である。さらに,受信ノード2の送受信部21は,符号DP24〜符号DP26に示すデータパケットを受信する度に,符号AP24〜符号AP26に示すACKパケットを送信ノード1に送信する。符号AP24〜符号AP26に示すACKパケットは,ACK番号2001を共通して有する。
送信ノード1の送受信部14は,重複ACK番号2001を有するACKパケット(符号AP24〜AP26参照)を3つ以上受信すると,例えば,符号DP26に示すデータパケットの送信の後,矢印(F)に示すデータパケット送信において,符号DP20に示すデータパケットを再送信する。
受信ノード2の送受信部21は,符号DP20に示すデータパケットを受信すると,矢印(G)に示すACKパケット送信において,符号AP20に示すACKパケットを送信ノード1に送信する。符号AP20に示すACKパケットは,ACK番号2701を有する。以後のパケット送受信については,本実施の形態を説明する上で不要なので,その説明を省略する。
(第2の具体例における監視装置3が実行する処理)
図2,図3,図7〜図9,図13を参照し,図14に基づき,第2の具体例において監視装置3が実行する処理について説明する。
図14は,第2の具体例において監視装置3が実行する処理について説明する図である。図14のテーブルT5は,図11,図12で説明したテーブルにSACK 2nd block欄を追加したものである。
セッション情報管理部314が,新たなセッションを図2のセッション管理テーブルT1aに新規登録する処理(ステップS1〜S4)については,図11で説明したので省略する。この新規登録処理において,セッション情報管理部314は,例えばハンドシェイク用のパケットからウインドウサイズとして1500(バイト)を取得する。また,最初のシーケンス番号を1001とし,データパケットの最大長(パケット長)は100バイトとする。
送信ノード1の送受信部14は,シーケンス番号1001,1101,1201,1301,1401,1501,1601,1701,1801,1901を有するデータパケットを受信ノード2に連続して送信する。このとき,図11,図13で説明したように,シーケンス番号1001を有するデータパケットが,監視装置3以降のネットワークNでロスする。受信ノード2は,図11で説明したように,送信ノード1から送信されたデータパケットを受信すると,図11,図13で説明したように,ACKパケットを送信ノード1に送信する。
監視装置3が,前記したデータパケットの受信後に実行する処理,前記したACKパケットの実行する処理については,図11で説明したので省略する。監視装置3のセッション情報管理部314は,シーケンス番号1901を有するデータパケットの受信により,最大シーケンス番号として1901を,図2のセッション管理テーブルT1aにおける最大シーケンス番号欄に記憶する。また,監視装置3のセッション情報管理部314は,ACK番号1101,SACK番号1101-2001を有するACKパケットの受信後は,図2のセッション管理テーブルT1aにおける最大ACK番号欄に,最大ACK番号として1101を記憶する。さらに,監視装置3のセッション情報管理部314は,前記受信後は,図2のセッション管理テーブルT1bにおけるSACKブロック欄に,SACK番号1101-2001を記憶する。
さて,前記したように,送信ノード1の送受信部14が,シーケンス番号1901の次のシーケンス番号2001を有するデータパケットを受信ノード2に送信する。監視装置3の受信部312は,このデータパケットを受信し(ステップS1),セッション情報管理部314が,ステップS2,ステップS3(NO),ステップS5(YES),ステップS6,ステップS7(YES),ステップS8,ステップS9の処理を実行する。ここで,セッション情報管理部314は,ステップS8において,最大シーケンス番号として2001を記憶している。そして,ACK期待番号は2101(2001+100)であり,直前に受信したACKパケットが有するACK番号は1001であり,ウインドウサイズは1500である。従って,セッション情報管理部314は,ステップS9において,NO(2101-1001<1500)と判定し,ステップS1に戻る。
図13で説明したように,送信ノード1の送受信部14が,シーケンス番号2101を有するデータパケット,シーケンス番号2201を有するデータパケット,シーケンス番号2301を有するデータパケットを送信する。監視装置3は,これら3つのデータパケットを受信すると,シーケンス番号2001を有するデータパケットを受信した場合と同じ処理を実行する。なお,シーケンス番号2301を有するデータパケットの受信において,セッション情報管理部314は,最大シーケンス番号として2301を記憶している。
シーケンス番号2001を有するデータパケットは,図13で説明したように,監視装置3以降のネットワークNでロスする。
受信ノード2の送受信部21は,シーケンス番号2101を有するデータパケット,シーケンス番号2201を有するデータパケット,シーケンス番号2301を有するデータパケットを受信する度に以下のACKパケットを送信ノード1に送信する。このACKパケットとは,ACK番号1001と,第1のSACKブロック2101-2201と,第2のSACKブロック1101-2001とを有するACKパケットパケット(図13の符号AP21参照),ACK番号1001と,第1のSACKブロック2101-2301と,第2のSACKブロック1101-2001とを有するACKパケットパケットである。さらに,ACK番号1001と,第1のSACKブロック2101-2401と,第2のSACKブロック1101-2001とを有するACKパケットパケット(図13の符号AP23参照)である。
監視装置3の受信部312が,これらのACKパケットを受信すると(ステップS1),セッション情報管理部314は,ステップS2,ステップS3(NO),ステップS5(NO)を実行し,図8のステップS11に移る。セッション情報管理部314は,受信済みのACKパケットが有するACK番号は,同じ番号1001であるので,ステップS11(YES),ステップS12を実行し,ステップS13に移る。セッション情報管理部314は,受信済みのACKパケットが有するSACKブロックは,全て異なるので,ステップS13(NO),ステップS21を実行する。セッション情報管理部314は,ステップS21において,受信したACKパケットが有するSACKブロックを,図3のセッション管理テーブルT1bにおけるSACKブロック欄に記憶する。セッション情報管理部314は,第1のSACKブロック2101-2401と,第2のSACKブロック1101-2001とを有するACKパケットの場合,この第1のSACKブロック,第2のSACKブロックを,それぞれ,図2のセッション管理テーブルT1bにおけるSACKブロック欄のSACK 1st block欄とSACK 2st block欄とに記憶する。
さて,送信ノード1の送受信部14は,重複ACK番号1001を有するACKパケットを3つ以上受信すると,シーケンス番号1001を有するデータパケットを受信ノード2に再送信する。
監視装置3の受信部312は,シーケンス番号1001を有するデータパケットを受信し(ステップS1),セッション情報管理部314は,ステップS2,ステップS3(NO),ステップS5(YES),ステップS6,ステップS7を実行する。ここで,受信データパケットが有するシーケンス番号は1001であり,最大シーケンス番号は2301である。従って,セッション情報管理部314は,ステップS7においてNOと判定し,図9のステップS31に移る。受信ロス解析部3151は,受信したデータパケットが有するシーケンス番号が,図2のセッション情報管理テーブルT1bにおける受信ノードロス範囲欄が記憶する受信ノードロス範囲内にあるか判定する。この受信ノードロス範囲は,現時点では0なので,受信ロス解析部3151は,受信したデータパケットが有するシーケンス番号が前記した受信ノードロス範囲内にないと判定し(ステップS31/NO),ステップS33に移る。
ロス解析部315は,受信したデータパケットが有するシーケンス番号が,ネットワークロス範囲内か判定する(ステップS33)。受信したデータパケットが有するシーケンス番号は1001であり,最大ACK番号は1001である。従って,ロス解析部315は,受信したデータパケットが有するシーケンス番号が,ネットワークロス範囲内と判定し(ステップS33/YES),ステップS34の実行により,ネットワークロス数を加算する。この判定により,ネットワークロスが発生したと判定する(図14のロス判定欄のNWロス参照)。
受信ノード2の送受信部21は,シーケンス番号1001を有するデータパケットを受信すると,このデータパケットが受信していないデータパケットであるので,受信用バッファ22に記憶する。以後,データ再組み立て部23が実行する処理については,図11で説明したので,その説明を省略する。
さらに,受信ノード2の送受信部21は,シーケンス番号1001を有するデータパケットを受信すると,ACK番号2001と,SACKブロック2101-2401とを有するACKパケットを送信ノード1に送信する。
監視装置3の受信部312が,このACK番号2001を有するACKパケットを受信すると(ステップS1),セッション情報管理部314は,ステップS2,ステップS3,ステップS5(NO),図8のステップS11を実行する。ここで,直前に受信したACKパケットが有するACK番号は1001,受信したACKパケットが有するACK番号は2001である。従って,セッション情報管理部314は,ステップS11でNOと判定し,ステップS18において,図2のセッション管理テーブルT1aにおける最大ACK番号欄に,受信したACKパケットが有するACK番号2001を記憶する。
また,直前に受信したACKパケットが有するSACKブロックは,第1のSACKブロック2101-2401と,第2のSACKブロック1101-2001であり,受信したACKパケットが有するSACKブロックは,第1のSACブロック2101-2401である。従って,両ACKパケットのSACKブロックが異なるので,セッション情報管理部314は,ステップS13でNOと判定し,受信したACKパケットが有するSACKブロックを,図3のセッション管理テーブルT1bにおけるSACKブロック欄に記憶する。
次いで,送信ノード1の送受信部14は,シーケンス番号1001を有するデータパケットの再送信後,以下のデータパケットを受信ノード2に順次送信する。このデータパケットとは,シーケンス番号2401を有するデータパケットと,シーケンス番号2501を有するデータパケットと,シーケンス番号2601を有するデータパケットとである(図13の(D)における符号DP24〜DP26参照)。
監視装置3の受信部312がこれら3つのデータパケットを受信すると(ステップS1),セッション情報管理部314は,ステップS2,ステップS3(NO),ステップS5(YES),ステップS6,ステップS7(YES),ステップS8,ステップS9(NO)の処理を実行する。ここで,セッション情報管理部314は,最後のステップS8の実行において,最大シーケンス番号として2601を記憶している。
受信ノード2の送受信部21は,送信ノード1から順次送信される3つのデータパケットを受信する度に,以下のACKパケットを送信ノード1に送信する。このACKパケットとは,ACK番号2001,第1のSACKブロック2401-2501と,ACK番号2001,第1のSACKブロック2401-2601と,ACK番号2001,第1のSACKブロック2401-2701とである。
監視装置3の受信部312がこれら3つのACKパケットを受信すると(ステップS1),セッション情報管理部314は,ステップS2,ステップS3(NO),ステップS5(NO)を実行し,図8のステップS11に移る。セッション情報管理部314は,受信済みのACKパケットが有するACK番号は,同じ番号2001であるので,ステップS11(YES),ステップS12を実行し,ステップS13に移る。セッション情報管理部314は,受信済みのACKパケットが有するSACKブロックは,全て異なるので,ステップS13(NO),ステップS21を実行する。
さて,送信ノード1の送受信部14は,重複ACK番号2001を有するACKパケットを3つ以上受信すると,シーケンス番号2001を有するデータパケットを受信ノード2に再送信する。
監視装置3の受信部312は,シーケンス番号2001を有するデータパケットを受信し(ステップS1),セッション情報管理部314は,ステップS2,ステップS3(NO),ステップS5(YES),ステップS6,ステップS7を実行する。ここで,受信データパケットが有するシーケンス番号は2001であり,最大シーケンス番号は2601である。従って,セッション情報管理部314は,ステップS7においてNOと判定し,図9のステップS31に移る。前記したように,受信ノードロス範囲は,現時点では0なので,ロス解析部315は,ステップS31(NO)と判定し,ステップS33に移る。
受信したデータパケットが有するシーケンス番号は2001であり,最大ACK番号は2001である。従って,ロス解析部315は,受信したデータパケットが有するシーケンス番号が,ネットワークロス範囲内と判定し(ステップS33/YES),ステップS34の実行により,ネットワークロス数を加算する。監視装置3は,図14で説明した処理をセッションが終了するまで実行する。
(表示出力)
以上説明した監視装置が実行するデータパケットの監視結果を表示する処理について,図3,図4を参照して説明する。
解析情報出力部316は,例えばセッションIDで識別されるセッションが終了すると,図3の解析情報テーブルT2をそのまま出力装置4に表示出力する。図3に示したように,セッションIDに対応してネットワークロス数,受信ノードロス数,再送信数を記憶している。そのため,管理者は,セッション単位で,パケットロス率を把握することができる。管理者は,この把握により,各セッション単位における通信異常の原因分析ができる。
監視装置は,図2に示したように,セッションIDに対応して送信元IPアドレス,送信先IPアドレスも記憶している。この送信元IPアドレス,送信先IPアドレスにより,管理者は,セッションIDに対応する送信ノード,受信ノードを特定することが可能である。そのため,管理者は,前記したIPアドレスにより識別される送信ノード,受信ノード間のネットワークで発生するパケットロス率(ネットワークロス率)を把握することができる。また,管理者は,この受信ノードで発生するパケットロス率(受信ノードロス率)を把握することができる。その結果,パケットロスの原因分析が容易になる。
例えば,ネットワークでパケットロスが高頻度で発生する場合,管理者は,ネットワークにパケットロスの原因があると分析し,以下の対策を取る。管理者は,例えば,スイッチ装置などのネットワーク機器の送受信用バッファ容量を大きくしたり,処理能力を向上させる。また,ネットワーク機器の不具合を解消し,ネットワーク機器の品質向上を図る。この対策により,管理者は,ネットワークにおけるパケットロスの発生頻度を抑制することができる。
一方,受信ノードにおいてパケットロスが高頻度で発生する場合,管理者は,受信ノードにパケットロスの原因があると分析し,以下の対策を取る。管理者は,例えば,受信ノードの受信用バッファの容量を大きくしたり,通信用プログラムの不具合対策を行う。この対策により,管理者は,受信ノードのパケットロスの発生頻度を抑制することができる。
特に,データセンターのように大規模なネットワークシステムにおいて,ネットワークを構築し管理する事業者と,受信ノードを設置し管理する事業者が異なる場合には,本実施の形態の監視装置は有用である。この監視装置によれば,受信ノードでのパケットロスか,ネットワークロスでのパケットロストかを判定できるので,パケットロスの原因が何れの事業者にあるか適切に切り分けすることができる。その結果,データセンターの管理者は,パケットロス対策を行うべき事業者の判別が容易になり,かかる事業者に対するパケットロス対策の指示が可能となる。
また,図4の解析情報出力部316は,例えばセッションIDで識別されるセッションが終了すると,図3から,このセッションIDに対応する図3の日時欄が記憶する日時毎のパケット数,ネットワークロス数,受信ノードロス数,再送信数を取得する。そして,解析情報出力部316は,日時毎に,例えば,受信ノードロス率,ネットワークロス率を算出する。ここで,受信ノードロス率とは,前記した日時の受信ノードロス数を,前記した日時のパケット数で除算した値である。また,ネットワークロス率とは,前記した日時のネットワークロス数を,前記した日時のパケット数で除算した値である。そして,解析情報出力部316は,かかる時系列で算出した受信ノードロス率,ネットワークロス率を例えばグラフ形式のデータに変更し,出力インターフェイス34を介して,出力装置4に表示出力する。
図15は,前記した時系列で算出した受信ノードロス率,ネットワークロス率を面グラフ形式で示したグラフ図の一例である。
図16は,前記した時系列で算出した受信ノードロス率,ネットワークロス率を棒グラフ形式で示したグラフ図の一例である。
図15,図16において,縦軸は,受信ノードロス率,ネットワークロス率であるロス率をパーセントで示し,横軸は,前記した日時を示す。図15,図16において,ネットワークロスをNWロスと記している。横軸においては,図示を簡略化するため時刻のみを示している。図15,図16において,受信ノードロス率を斜め線ハッチングで示し,ネットワークロス率を点ハッチング(ドットハッチング)で示している。
このように,前記した時系列で算出した受信ノードロス率,ネットワークロス率をグラフ表示することで,ネットワークの管理者は,どの時間帯で,パケットロスが発生しやすいかを可視化することができる。管理者は,この可視化により,この時間帯のネットワーク利用状況と照らし合わせたで,パケットロスの原因分析や,パケットロスに対する各種対処を行うことができる。
さらに,監視装置は,図2に示したように,セッションIDに対応してポート番号も記憶している。そのため,セッション単位でパケットロス率を把握することは,セッションIDにより識別されるセッションを実行する送信ノード,受信ノードが使用しているポート番号単位でパケットロス率を把握することと同義である。ここで,例えば,特定ポート番号において,パケットロス率が高い場合を想定する。この場合,パケットロスの原因分析において,管理者は,この特定ポート番号を利用して通信を行うアプリケーションに特有の通信パターンでパケットロスが発生しやすくなる可能性を考慮することができる。その結果,パケットロスの原因分析が容易になる。
また,ある送信ノードと,複数の受信ノードがパケット通信を実行している場合を想定する。この場合,管理者は,ある送信ノードと,この複数の受信ノードとのパケット通信におけるパケットロス率を把握することができる。その結果,例えば,ある送信ノードと,ある特定の複数の受信ノードとのパケット通信におけるパケットロス率が高い場合には,ある送信ノードと,ある特定の複数の受信ノードとの間のネットワークや,ある特定の受信ノードにパケットロスの原因がある可能性を考慮することができる。複数の送信ノードと,ある受信ノードとがパケット通信を実行している場合でも同様に,前記した可能性を考慮することができる。
また,監視装置3のミラーポートMPの先に複数のサブネットがあり,あるサブネットに接続する複数の受信ノードがある場合を想定する。この場合,管理者は,ある送信ノードと,あるサブネットにおける複数の受信ノードとのパケット通信におけるパケットロス率を把握することができる。そのため,管理者は,あるサブネットにおけるパケットロス率を加算することにより,サブネット毎の総パケットロス率を把握することができる。その結果,例えば,第1のサブネットの総パケットロス率が,他の第2のサブネットの総パケットロス率に比較して高い場合,第1のサブネットに特有の障害が発生していると推定できる。この推定により,迅速に障害の発生場所を特定することができる。
以上説明したように,セッション単位でパケットロス率を把握できるので,様々な粒度(りゅうど),組み合わせでのパケットロスの原因分析が可能になる。
以上の実施の形態をまとめると,次の付記のとおりである。
(付記1)
送信ノードからネットワークを介して送信されたデータパケットを受信した受信ノードが前記ネットワークを介して前記送信ノードに送信した,パケットを識別する識別子と選択確認応答を示す情報とを有する肯定応答パケットを受信する受信部と,
受信した第1の肯定応答パケットの第1の前記識別子および第1の前記情報を記憶し,前記記憶した前記第1の識別子および前記第1の情報と,前記第1の肯定応答パケットに後続して受信した第2の肯定応答パケットの第2の前記識別子および第2の前記情報とを比較する制御部とを有し,
前記制御部は,前記第1の識別子および前記第1の情報と,前記第2の識別子および前記第2の情報とが同じ場合に,前記受信ノードでデータパケットのロスが発生したと判定する
ことを特徴とする監視装置。
(付記2)
付記1において,
前記制御部は,前記第1の識別子と前記第2の識別子とが同じであり,前記第1の情報と,前記第2の情報とが異なる場合に,前記ネットワークでデータパケットのロスが発生したと判定する
ことを特徴とする監視装置。
(付記3)
付記1において,
前記制御部は,受信したデータパケットのシーケンス番号と前記肯定応答パケットの識別子とに基づき,連続して受信したデータパケットの全データ量が,前記受信ノードの受信可能量を超えたか判定し,
前記全データ量が,前記受信ノードの受信可能量を超え,さらに,前記第1の識別子および前記第1の情報と,前記第2の識別子および前記第2の情報とが同じ場合に,前記受信可能量を超えて受信した第1のデータパケットの第1のシーケンス番号と,前記第1のデータパケットに後続して受信した第2のデータパケットの第2のシーケンス番号とを記憶し,
さらに,受信した第3のデータパケットのシーケンス番号が,受信済みのデータパケットの最大シーケンス番号以下であり,さらに,前記第1のシーケンス番号以上かつ前記第2のシーケンス番号以下か判定し,前記第3のデータパケットのシーケンス番号が,受信済みのデータパケットの最大シーケンス番号以下であり,さらに,前記第1のシーケンス番号以上かつ前記第2のシーケンス番号以下の場合に,前記受信ノードでパケットロスが発生したと判定する
ことを特徴とする監視装置。
(付記4)
付記2において,
前記制御部は,前記第3のデータパケットのシーケンス番号が,前記第2の識別子と同じ場合,または,前記第3のデータパケットのシーケンス番号が,前記第2の識別子より大きく,直近に記憶した前記情報の選択確認応答番号よりも小さい場合に,前記ネットワークでデータパケットのロスが発生したと判定する
ことを特徴とする監視装置。
(付記5)
付記3において,
前記制御部は,前記受信ノードでパケットロスが発生したと判定した場合,前記受信ノードで発生したパケットロスの回数をカウントアップし,前記回数を出力する
ことを特徴とする監視装置。
(付記6)
付記3において,
前記制御部は,前記ネットワークでパケットロスが発生したと判定した場合,前記ネットワークで発生したパケットロスの回数をカウントアップし,前記回数を出力する
ことを特徴とする監視装置。
(付記7)
付記1において,
前記識別子は,前記受信ノードが前記送信ノードに送信要求するデータを特定する識別子を有する
ことを特徴とする監視装置。
(付記8)
付記1において,
前記受信部は,前記送信ノードから前記受信ノードに連続して送信されたデータパケットを受信する
ことを特徴とする監視装置。
(付記9)
付記3において,
前記受信部は,前記受信ノードから前記送信ノードに送信された,前記受信ノードの受信可能量を有するパケットを受信し,
前記制御部は,前記全データ量が,前記受信可能量を超えたか判定する
ことを特徴とする監視装置。
(付記10)
コンピュータに,
送信ノードからネットワークを介して送信されたデータパケットを受信した受信ノードが前記ネットワークを介して前記送信ノードに送信した,パケットを識別する識別子と選択確認応答を示す情報とを有する肯定応答パケットを受信し,
受信した第1の肯定応答パケットの第1の前記識別子および第1の前記情報を記憶部に記憶し,前記記憶した前記第1の識別子および前記第1の情報と,前記第1の肯定応答パケットに後続して受信した第2の肯定応答パケットの第2の前記識別子および第2の前記情報とを比較し,
前記第1の識別子および前記第1の情報と,前記第2の識別子および前記第2の情報とが同じ場合に,前記受信ノードで前記データパケットのロスが発生したと判定する
処理を実行させることを特徴とする監視プログラム。
(付記11)
付記10において,
前記コンピュータに,
前記比較において,
前記第1の識別子と前記第2の識別子とが同じであり,前記第1の情報と,前記第2の情報とが異なる場合に,前記ネットワークでデータパケットのロスが発生したと判定する
処理を実行させることを特徴とする監視プログラム。
(付記12)
送信ノードからネットワークを介して送信されたデータパケットを受信した受信ノードが前記ネットワークを介して前記送信ノードに送信した,パケットを識別する識別子と選択確認応答を示す情報とを有する肯定応答パケットを受信し,データパケットロスを監視する監視装置が実行する監視方法であって,
前記監視装置は,受信した第1の肯定応答パケットの第1の前記識別子および第1の前記情報を記憶部に記憶し,
前記記憶した前記第1の識別子および前記第1の情報と,前記第1の肯定応答パケットに後続して受信した第2の肯定応答パケットの第2の前記識別子および第2の前記情報とを比較し,
前記第1の識別子および前記第1の情報と,前記第2の識別子および前記第2の情報とが同じ場合に,前記受信ノードでデータパケットのロスが発生したと判定する
ことを特徴とする監視方法。
(付記13)
付記12において,
前記監視装置は,前記比較において,
前記第1の識別子と前記第2の識別子とが同じであり,前記第1の情報と,前記第2の情報とが異なる場合に,前記ネットワークでデータパケットのロスが発生したと判定する
ことを特徴とする監視方法。