(57)【要約】【課題】受信側の輻輳制御を特定することが可能となるプログラム等を提供する。【解決手段】コンピュータ３に、コンピュータ１及びサーバコンピュータ２間で送受信されるパケットの時系列情報を取得し、取得した時系列情報に基づき、ウィンドウサイズを推定する処理を実行させる。また、コンピュータ３に、推定したウィンドウサイズの時間的変化に基づき、複数の輻輳制御候補から前記コンピュータ１で実行される輻輳制御を判断する処理を実行させる。【選択図】図１
2017184044.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータに、
第１装置及び第２装置間で送受信されるパケットの時系列情報を取得し、
取得した時系列情報に基づき、ウィンドウサイズを推定し、
推定したウィンドウサイズの時間的変化に基づき、複数の輻輳制御候補から前記第１装置で実行される輻輳制御を判断する
処理を実行させるプログラム。
【請求項２】
推定したウィンドウサイズの時間的変化量を算出し、
算出した変化量の最大値を抽出し、
最大値が閾値より小さい場合、第１輻輳制御と判断する
処理を実行させる請求項１に記載のプログラム。
【請求項３】
取得した時系列情報に基づきラウンドトリップタイムを推定し、
パケットロスが発生した場合に、推定したラウンドトリップタイムの最大値が、ロス発生前に推定したラウンドトリップタイムより大きいか否か判断し、
大きいと判断した場合に、ロス発生前後に推定されたウィンドウサイズの第１差分及び大きいと判断した第１回数を記憶し、
第１差分の合計値を第１回数で除した値が、閾値より大きいか否か判断し、
大きいと判断した場合に、第２輻輳制御と判断する
処理を実行させる請求項２に記載のプログラム。
【請求項４】
パケットロスが発生した場合に、ロス発生前後に推定されたウィンドウサイズの第２差分及びロスが発生した第２回数を記憶し、
第２差分の合計値を第２回数で除した値が、閾値より大きいか否か判断し、
大きいと判断した場合に、第３輻輳制御と判断する
処理を実行させる請求項２または３に記載のプログラム。
【請求項５】
第１装置及び第２装置間で送受信されるパケットの時系列情報を取得する取得部と、
取得した時系列情報に基づき、ウィンドウサイズを推定する推定部と、
推定したウィンドウサイズの時間的変化に基づき、複数の輻輳制御候補から前記第１装置で実行される輻輳制御を判断する判断部と
を備える情報処理装置。
【請求項６】
第１装置及び第２装置間で送受信されるパケットの時系列情報を取得し、
取得した時系列情報に基づき、ウィンドウサイズを推定し、
推定したウィンドウサイズの時間的変化に基づき、複数の輻輳制御候補から前記第１装置で実行される輻輳制御を判断する
処理をコンピュータに実行させる情報処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラム、情報処理装置及び情報処理方法に関する。
【背景技術】
【０００２】
従来、大きなスループットを得られる独自ＴＣＰ(Transimission Control Protocol)による通信が、通常のＴＣＰによる通信と競合しても、回線帯域が占有されることを防止する技術が開示されている（例えば特許文献１参照）。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００７−１１７０２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかしながら、従来の技術では受信側でどのような輻輳制御をしているのかが把握できないという問題がある。
【０００５】
一つの側面では、受信側の輻輳制御を特定することが可能となるプログラム等を提供することを目的とする。
【課題を解決するための手段】
【０００６】
一つの案では、コンピュータに、第１装置及び第２装置間で送受信されるパケットの時系列情報を取得し、取得した時系列情報に基づき、ウィンドウサイズを推定し、推定したウィンドウサイズの時間的変化に基づき、複数の輻輳制御候補から前記第１装置で実行される輻輳制御を判断する処理を実行させる。
【発明の効果】
【０００７】
一つの側面では、受信側での輻輳制御を特定することが可能となる。
【図面の簡単な説明】
【０００８】
【図１】情報処理システムの概要を示す説明図である。
【図２】コンピュータのハードウェア群を示すブロック図である。
【図３】サーバコンピュータのハードウェア群を示すブロック図である。
【図４】監視コンピュータのハードウェア群を示す説明図である。
【図５】受信時刻テーブルのレコードレイアウトを示す説明図である。
【図６】３ウェイハンドシェイク処理の流れを示す説明図である。
【図７】データ情報テーブルのレコードレイアウトを示す説明図である。
【図８】ＡＣＫ情報テーブルのレコードレイアウトを示す説明図である。
【図９】パケットの送受信状況を示す説明図である。
【図１０】解析情報テーブルのレコードレイアウトを示す説明図である。
【図１１】３ウェイハンドシェイクの処理手順を示すフローチャートである。
【図１２】計測処理の手順を示すフローチャートである。
【図１３】計測処理の手順を示すフローチャートである。
【図１４】ＡＣＫ受信時の処理手順を示すフローチャートである。
【図１５】ＡＣＫ受信時の処理手順を示すフローチャートである。
【図１６】パケットロスが発生した際の処理手順を示すフローチャートである。
【図１７】輻輳制御の判断処理手順を示すフローチャートである。
【図１８】輻輳制御の判断処理手順を示すフローチャートである。
【図１９】原因の出力処理手順を示すフローチャートである。
【図２０】原因の出力処理手順を示すフローチャートである。
【図２１】データの送受信状況を示す説明図である。
【図２２】データの送受信状況を示す説明図である。
【図２３】データの送受信状況を示す説明図である。
【図２４】データの送受信状況を示す説明図である。
【図２５】データの送受信状況を示す説明図である。
【図２６】上述した形態の監視コンピュータの動作を示す機能ブロック図である。
【図２７】実施の形態４に係る監視コンピュータのハードウェア群を示すブロック図である。
【発明を実施するための形態】
【０００９】
実施の形態１
以下実施の形態を、図面を参照して説明する。図１は情報処理システムの概要を示す説明図である。情報処理システムは第１情報処理装置（第１装置）１、第２情報処理装置（第２装置）２及び第３情報処理装置３等を含む。第１情報処理装置１〜第３情報処理装置３は、パーソナルコンピュータ、サーバコンピュータ、スマートフォン、携帯電話、またはＰＤＡ（Personal Digital Assistant）等である。以下、第１情報処理装置１をコンピュータ１、第２情報処理装置をサーバコンピュータ２、第３情報処理装置を監視コンピュータ３と読み替えて説明する。コンピュータ１、サーバコンピュータ２及び監視コンピュータ３は、インターネット、ＬＡＮ(Local Area Network)または公衆回線網等の通信網Ｎを介して相互に接続されている。
【００１０】
監視コンピュータ３は、コンピュータ１及びサーバコンピュータ２間で送受信されるパケットを取得する。監視コンピュータ３は取得したパケットを後述した処理により分析する。監視コンピュータ３は、分析後、表示部にコンピュータ１で実行されている輻輳制御を判断し、また遅延発生の原因を表示する。以下詳細を説明する。
【００１１】
図２はコンピュータ１のハードウェア群を示すブロック図である。コンピュータ１は制御部としてのＣＰＵ（Central Processing Unit）１１、ＲＡＭ（Random Access Memory）１２、入力部１３、表示部１４、記憶部１５、時計部１８及び通信部１６等を含む。ＣＰＵ１１は、バス１７を介してハードウェア各部と接続されている。ＣＰＵ１１は記憶部１５に記憶された制御プログラム１５Ｐに従いハードウェア各部を制御する。ＲＡＭ１２は例えばＳＲＡＭ（Static RAM）、ＤＲＡＭ(Dynamic RAM)、フラッシュメモリ等である。ＲＡＭ１２は、記憶部としても機能し、ＣＰＵ１１による各種プログラムの実行時に発生する種々のデータを一時的に記憶する。
【００１２】
入力部１３はタッチパネル、ボタン等の入力デバイスであり、受け付けた操作情報をＣＰＵ１１へ出力する。表示部１４は液晶ディスプレイまたは有機ＥＬ（electroluminescence）ディスプレイ等であり、ＣＰＵ１１の指示に従い各種情報を表示する。通信部１６は通信モジュールであり、サーバコンピュータ２等と間で情報の送受信を行う。時計部１８は日時情報をＣＰＵ１１へ出力する。記憶部１５は大容量メモリであり、制御プログラム１５Ｐ等を記憶している。
【００１３】
図３はサーバコンピュータ２のハードウェア群を示すブロック図である。サーバコンピュータ２は制御部としてのＣＰＵ２１、ＲＡＭ２２、入力部２３、表示部２４、記憶部２５、時計部２８及び通信部２６等を含む。ＣＰＵ２１は、バス２７を介してハードウェア各部と接続されている。ＣＰＵ２１は記憶部２５に記憶された制御プログラム２５Ｐに従いハードウェア各部を制御する。ＲＡＭ２２は例えばＳＲＡＭ、ＤＲＡＭ、フラッシュメモリ等である。ＲＡＭ２２は、記憶部としても機能し、ＣＰＵ２１による各種プログラムの実行時に発生する種々のデータを一時的に記憶する。
【００１４】
入力部２３はキーボード、マウス等の入力デバイスであり、受け付けた操作情報をＣＰＵ２１へ出力する。表示部２４は液晶ディスプレイまたは有機ＥＬディスプレイ等であり、ＣＰＵ２１の指示に従い各種情報を表示する。通信部２６は通信モジュールであり、コンピュータ１等と間で情報の送受信を行う。時計部２８は日時情報をＣＰＵ２１へ出力する。記憶部２５はハードディスクまたは大容量メモリであり、制御プログラム２５Ｐ等を記憶している。
【００１５】
図４は監視コンピュータ３のハードウェア群を示す説明図である。監視コンピュータ３は制御部としてのＣＰＵ３１、ＲＡＭ３２、入力部３３、表示部３４、記憶部３５、時計部３８及び通信部３６等を含む。ＣＰＵ３１は、バス３７を介してハードウェア各部と接続されている。ＣＰＵ３１は記憶部３５に記憶された制御プログラム３５Ｐに従いハードウェア各部を制御する。ＲＡＭ３２は例えばＳＲＡＭ、ＤＲＡＭ、フラッシュメモリ等である。ＲＡＭ３２は、記憶部としても機能し、ＣＰＵ３１による各種プログラムの実行時に発生する種々のデータを一時的に記憶する。
【００１６】
入力部３３はキーボード、マウス等の入力デバイスであり、受け付けた操作情報をＣＰＵ３１へ出力する。表示部３４は液晶ディスプレイまたは有機ＥＬディスプレイ等であり、ＣＰＵ３１の指示に従い各種情報を表示する。通信部３６は通信モジュールであり、コンピュータ２及びサーバコンピュータ１等と間で情報の送受信を行う。時計部３８は日時情報をＣＰＵ３１へ出力する。
【００１７】
記憶部３５はハードディスクまたは大容量メモリであり、制御プログラム３５Ｐ、受信時刻テーブル３５１、データ情報テーブル３５２、ＡＣＫ情報テーブル３５３及び解析情報テーブル３５４等を含む。なお、本実施形態においては、受信時刻テーブル３５１等を記憶部３５に記憶する例を挙げて説明するがこれに限るものではない。例えば、他の図示しないＤＢサーバ内に記憶しても良い。
【００１８】
図５は受信時刻テーブル３５１のレコードレイアウトを示す説明図である。受信時刻テーブル３５１はコネクションＩＤフィールド、データ種別フィールド及び時刻フィールド等を含む。コネクションＩＤフィールドにはサーバコンピュータ２とコンピュータ１との間の通信のコネクションを特定するための識別情報（以下、コネクションＩＤという）が記憶されている。データ種別フィールドには、コネクションＩＤに対応付けて３ウェイハンドシェイク時に送受信されるパケットのデータ種別が記憶されている。具体的にはＳＹＮ（Synchronize）、ＡＣＫ（Acknowledge）及びＳＹＮ/ＡＣＫの３つが記憶されている。時刻フィールドには、コネクションＩＤ及びデータ種別に対応付けて、監視コンピュータ３がパケットを受信した時刻が記憶されている。
【００１９】
図６は３ウェイハンドシェイク処理の流れを示す説明図である。監視コンピュータ３のＣＰＵ３１は、最初にコンピュータ１からＳＹＮを受信する。ＣＰＵ３１は、データ種別としてＳＹＮを受信時刻テーブル３５１に記憶する。またＣＰＵ３１は、ＳＹＮの受信時刻として２００を受信時刻テーブル３５１に記憶する。ＳＹＮを受信した場合、ＣＰＵ３１は、最大伝送単位（Maximum Transmission Unit。以下、ＭＴＵという）を記憶部３５に記憶する。本実施形態では１５００であるものとして説明する。次いで、ＣＰＵ３１は、サーバコンピュータ２から送信されたＳＹＮ/ＡＣＫを受信する。ＣＰＵ３１は、データ種別としてＳＹＮ/ＡＣＫを受信時刻テーブル３５１に記憶し、ＳＹＮ/ＡＣＫの受信時刻として１４００を受信時刻テーブル３５１に記憶する。
【００２０】
最後に、ＣＰＵ３１は、サーバコンピュータ２から送信されたＡＣＫを受信する。ＣＰＵ３１は、データ種別としてＡＣＫを受信時刻テーブル３５１に記憶し、ＡＣＫの受信時刻として１８００を受信時刻テーブル３５１に記憶する。ＣＰＵ３１は、推定されるサーバコンピュータ２側のラウンドトリップタイム（以下、ＲＴＴｓｒｖという）を算出する。具体的には、ＣＰＵ３１は、ＳＹＮ/ＡＣＫの時刻１４００からＳＹＮの時刻２００を減算し、ＲＴＴｓｒｖとして１２００を算出する。さらにＣＰＵ３１は、推定されるコンピュータ１側のラウンドトリップタイム（以下、ＲＴＴｃｌｉという）を算出する。具体的には、ＣＰＵ３１は、ＡＣＫの受信時刻１８００からＳＹＮ/ＡＣＫの受信時刻１４００を減じ、ＲＴＴｃｌｉとして４００を算出する。
【００２１】
図７はデータ情報テーブル３５２のレコードレイアウトを示す説明図である。データ情報テーブル３５２はコネクションＩＤフィールド、データＩＤフィールド、時刻フィールド、シーケンス番号フィールド及びサイズフィールド等を含む。データＩＤフィールドには、サーバコンピュータ２から送信されるパケットデータを特定するための識別情報（以下、データＩＤという）が、コネクションＩＤに対応付けて記憶されている。時刻フィールドには、データＩＤに対応付けてパケットを受信した時刻が記憶されている。シーケンス番号フィールドには、受信したパケットのシーケンス番号（以下、場合によりＳｅｑという）の先頭値がデータＩＤに対応付けて記憶されている。サイズフィールドには、受信したパケットのサイズが、データＩＤに対応付けて記憶されている。
【００２２】
図８はＡＣＫ情報テーブル３５３のレコードレイアウトを示す説明図である。ＡＣＫ情報テーブル３５３には、コネクションＩＤフィールド、ＡＣＫＩＤフィールド、時刻フィールド、ＡＣＫサイズフィールド及びデータＩＤフィールド等が用意されている。ＡＣＫＩＤフィールドには、コンピュータ１から送信されたＡＣＫ情報を特定するための識別情報（以下、ＡＣＫＩＤという）が、コネクションＩＤに対応付けて記憶されている。時刻フィールドには、ＡＣＫＩＤに対応付けて、ＡＣＫ情報を受信した時刻が記憶されている。データＩＤフィールドには、ＡＣＫＩＤに対応付けてＡＣＫ情報を受信する前のデータに係るデータＩＤが記憶されている。
【００２３】
図９はパケットの送受信状況を示す説明図である。ＣＰＵ３１は、サーバコンピュータ２からデータ１〜５を受信する。例えばＣＰＵ３１は、データ３を受信した場合、コネクションＩＤ１に対応付けてデータＩＤ３をデータ情報テーブル３５２に記憶する。またＣＰＵ３１は、データ３を受信した時刻として１４００を記憶する。ＣＰＵ３１は、データＩＤに対応付けてシーケンス番号として３０００を、またデータのサイズとして１５００をデータ情報テーブル３５２に記憶する。
【００２４】
ＣＰＵ３１は、ＡＣＫを受信した場合、コネクションＩＤに対応付けてＡＣＫＩＤをＡＣＫ情報テーブル３５３に記憶する。例えば、ＡＣＫＩＤ１を受信した場合、コネクションＩＤ１に対応付けてＡＣＫＩＤとして１を記憶する。またＣＰＵ３１は、ＡＣＫを受信した時刻をＡＣＫ情報テーブル３５３に記憶する。ＣＰＵ３１は、シーケンス番号１５００にデータサイズ１５００を加算してＡＣＫサイズとして３０００をＡＣＫ情報テーブル３５３に記憶する。ＣＰＵ３１は、ＡＣＫサイズが３０００であることから、データ情報テーブル３５２を参照し、ＡＣＫ送信に対応するデータＩＤは２と判断する。データＩＤ２をＡＣＫＩＤ１に対応付けて、ＡＣＫ情報テーブル３５３に記憶する。なお、２度目のＡＣＫはＡＣＫＩＤが２であり、受信時刻は２２００、ＡＣＫサイズは６０００（シーケンス番号４５００＋サイズ１５００）、データＩＤは４となる。
【００２５】
図１０は解析情報テーブル３５４のレコードレイアウトを示す説明図である。解析情報テーブル３５４は、コネクションＩＤフィールド、計測ステータスフィールド、ロスステータスフィールド、終了時刻フィールド、開始シーケンス番号フィールド、終了シーケンス番号フィールド、ＭＴＵフィールド及びＲＴＴｓｒｖフィールドを含む。また解析情報テーブル３５４は、ＲＴＴｃｌｉフィールド、前回ウィンドウサイズフィールド、前回ＲＴＴフィールド、最大ウィンドウサイズフィールド、最大増加量フィールド、第１回数フィールド及び第２回数フィールド等を含む。計測ステータスフィールドには、サーバコンピュータ２とコンピュータ１との間で送受信されるパケットを計測する際のステータスがコネクションＩＤに対応付けて記憶されている。本実施形態では、データの待機ステータスにあることを示すWAIT_DATAと、ＡＣＫの待機ステータスにあることを示すWAIT_ACKの２つが記憶されている。なお、本実施形態では説明を容易にするために解析情報テーブル３５４の記憶内容を１レコードのみ示しているが、これらのデータは時系列で変化し、データの履歴は解析情報テーブル３５４に逐次記憶されているものとする。
【００２６】
ロスステータスフィールドにはコネクションＩＤに対応付けてパケットロスのステータスが記憶されている。本実施形態ではパケットロスが発生していないことを示すNO_LOSS、パケットロスが発生したことを示すNOW_LOSS、及び前回ロスが発生したと判断したことを示すPRE_LOSSの３つが記憶される。終了時刻フィールドには、計測グループ測終了時刻が記憶されている。図１０の例では２６００と記憶されている。計測グループはグループ内で最初に受信したパケットから、後述する終了時刻までに受信したパケットまでのグループである。開始シーケンス番号フィールドには、計測グループの開始シーケンス番号が記憶されている。また終了シーケンス番号フィールドには、計測グループの終了シーケンス番号が記憶されている。図１０の例では、計測グループの開始シーケンス番号は０であり、終了シーケンス番号は５９９９である。
【００２７】
ＭＴＵフィールドには、上述したＭＴＵが記憶されている。ＲＴＴｓｒｖフィールドには、サーバコンピュータ２側のＲＴＴとして、上述したＲＴＴｓｒｖ１２００が記憶されている。ＲＴＴｃｌｉフィールドには、コンピュータ１側のＲＴＴとして、ＲＴＴｃｌｉが記憶されている。前回ウィンドウサイズフィールドには、推定したウィンドウサイズが記憶されている。なお、ウィンドウサイズの算出処理については後述する。前回ＲＴＴフィールドには、ＲＴＴｓｒｖとＲＴＴｃｌｉを加算したＲＴＴが記憶されている。図１０の例では１６００（ＲＴＴｓｒｖ１２００＋ＲＴＴｃｌｉ４００）が記憶されている。最大ウィンドウサイズフィールドには、同一コネクションＩＤ内にて、最大の値を有する最大ウィンドウサイズが記憶されている。
【００２８】
最大増加量フィールドには前回ウィンドウサイズに対する今回のウィンドウサイズの増加量の内、最大の値を有する最大増加量が記憶されている。例えば前回のウィンドウサイズが３５００であり、今回のウィンドウサイズが６０００であった場合、増加量は２５００となる。ＣＰＵ３１は、算出した増加量の内、最大の値を有する増加量を解析情報テーブル３５４に記憶する。第１回数フィールドには、同一コネクションＩＤ内でパケットロスが発生した場合のＲＴＴが、ロス発生前のＲＴＴ（前回ＲＴＴ）よりも大きいと判断された回数が記憶されている。また第２回数フィールドには、同一コネクションＩＤ内で、パケットロスが発生した回数が記憶されている。
【００２９】
図９を参照しながら各種情報がデータ情報テーブル３５２、ＡＣＫ情報テーブル３５３、及び、解析情報テーブル３５４に記憶される手順を説明する。図９において監視コンピュータ３がサーバコンピュータ２からデータ１を受信した場合、ＣＰＵ３１は、データ情報テーブル３５２に、コネクションＩＤ１、データＩＤ１、時刻６００、シーケンス番号０、サイズ１５００を記憶する。続いてＣＰＵ３１は、データ２を受信した場合、データＩＤ２、時刻１０００、シーケンス番号１５００、サイズ１５００を記憶する。なお、計測ステータスの初期値はWAIT_ACKとしている。その他、ＣＰＵ３１は、３ウェイハンドシェイクにより取得したＭＴＵ１５００及びＲＴＴｓｒｖ１２００を解析情報テーブル３５４に記憶する。
【００３０】
次に、監視コンピュータ３は、コンピュータ１からサーバコンピュータ２宛のＡＣＫ１を受信する。ＣＰＵ３１は、はＡＣＫ１を受信した場合、ＡＣＫ情報テーブル３５３に、ＡＣＫＩＤ１、時刻１４００を記憶する。またＣＰＵ３１は、シーケンス番号１５００にサイズ１５００を加算してＡＣＫサイズ３０００をＡＣＫ情報テーブル３５３に記憶する。またＣＰＵ３１は、データ情報テーブル３５２を参照しＡＣＫサイズ３０００よりも小さいシーケンス番号を有するデータＩＤ２を抽出する。ＣＰＵ３１は、抽出したデータＩＤ２をＡＣＫ情報テーブル３５３に記憶する。
【００３１】
ＣＰＵ３１は、ＡＣＫ１を受信後、ＲＴＴｃｌｉを算出する。ＣＰＵ３１は、ＡＣＫＩＤ１の時刻１４００からコンピュータ１宛のデータＩＤ２の時刻１０００を減じてＲＴＴｃｌｉ４００を算出する。ＣＰＵ３１は、算出したＲＴＴｃｌｉを解析情報テーブル３５４に記憶する。ＣＰＵ３１は、計測グループの初期設定を行う。具体的には、ＣＰＵ３１は、ＡＣＫＩＤ１の時刻１４００にＲＴＴｓｒｖ１２００を加算して終了時刻２６００を算出する。ＣＰＵ３１は、算出した終了時刻２６００を解析情報テーブル３５４に記憶する。
【００３２】
ＣＰＵ３１は、前回の計測グループの終了シーケンス番号以降の最初のデータの開始シーケンス番号（本実施形態では０）を解析情報テーブル３５４に記憶する。その後、ＣＰＵ３１は、計測ステータスをWAIT_DATAに変更する。ＣＰＵ３１は、ＲＴＴｓｒｖ１２００にＲＴＴｃｌｉ４００を加算して前回ＲＴＴ１６００を算出する。ＣＰＵ３１は、算出した前回ＲＴＴを解析情報テーブル３５４に記憶する。
【００３３】
続いて、ＣＰＵ３１は、データ３を受信した場合、データＩＤ３、時刻１４００、シーケンス番号３０００、サイズ１５００を記憶する。ＣＰＵ３１は、データ４を受信した場合、データＩＤ４、時刻１８００、シーケンス番号４５００、サイズ１５００を記憶する。ＣＰＵ３１は、計測ステータスがWAIT_DATAであるため、データ３またはデータ４が同一計測グループか否かを判断する。ＣＰＵ３１は、終了時刻が２６００であり、データ３の時刻は１４００、データ４の終了時刻は１８００であるので、同一計測グループであると判断する。
【００３４】
ＣＰＵ３１は、次にＡＣＫ２を受信する。ＣＰＵ３１は、ＡＣＫ情報テーブル３５３に、ＡＣＫＩＤ２、時刻２２００を記憶する。またＣＰＵ３１は、シーケンス番号４５００にサイズ１５００を加算してＡＣＫサイズ６０００をＡＣＫ情報テーブル３５３に記憶する。またＣＰＵ３１は、データ情報テーブル３５２を参照しＡＣＫサイズ６０００よりも小さいシーケンス番号を有するデータＩＤ４を抽出する。ＣＰＵ３１は、抽出したデータＩＤ４をＡＣＫ情報テーブル３５３に記憶する。
【００３５】
ＣＰＵ３１は、ＡＣＫ２を受信後、ＲＴＴｃｌｉを算出する。ＣＰＵ３１は、ＡＣＫＩＤ２の時刻２２００からデータＩＤ４の時刻１８００を減じてＲＴＴｃｌｉ４００を算出する。ＣＰＵ３１は、算出したＲＴＴｃｌｉを解析情報テーブル３５４に記憶する。ＣＰＵ３１は、ＲＴＴｓｒｖ１２００にＲＴＴｃｌｉ４００を加算して前回ＲＴＴ１６００を算出する。ＣＰＵ３１は、更新すべく、算出された前回ＲＴＴを解析情報テーブル３５４に記憶する。ＣＰＵ３１は、算出したＲＴＴが計測グループ内で最大であれば、最大ＲＴＴとしてＲＡＭ３２にその値を記憶する。
【００３６】
図９においてＣＰＵ３１は、最後にデータ５を受信する。ＣＰＵ３１は、データ５を受信した場合、データＩＤ５、時刻２７００、シーケンス番号６０００、サイズ１５００を、データ情報テーブル３５２に記憶する。ＣＰＵ３１は、計測ステータスがWAIT_DATAであるため、データ５が同一計測グループ内か否かを判断する。ＣＰＵ３１は、データ５の時刻２７００は、既に終了時刻２６００を超えているため、異なる計測グループであると判断する。ＣＰＵ３１は、ウィンドウサイズの計測を行う。ＣＰＵ３１は、データ情報テーブル３５２を参照し、同一計測グループのシーケンス番号０〜５９９９に基づき、ウィンドウサイズを６０００と算出する。ＣＰＵ３１は、終了シーケンス番号５９９９を解析情報テーブル３５４に記憶する。
【００３７】
ＣＰＵ３１は、前回ウィンドウサイズ６０００を、解析情報テーブル３５４に記憶する。またＣＰＵ３１は、ウィンドウサイズが同一コネクションＩＤ内で最大である場合、最大ウィンドウサイズとして、解析情報テーブル３５４に記憶する。ＣＰＵ３１は、今回算出したウィンドウサイズから前回算出したウィンドウサイズを減じた増加量をＲＡＭ３２に記憶する。ＣＰＵ３１は、ＲＡＭ３２に記憶した増加量の内、最大の増加量を最大増加量として解析情報テーブル３５４に記憶する。図１０の例では２５００が記憶されている。その後ＣＰＵ３１は、計測ステータスをWAIT_ACKに変更する。
【００３８】
パケットロスが発生する前は、ＣＰＵ３１は、ロスステータスとして、NO_LOSSを解析情報テーブル３５４に記憶する。パケットロスが発生した場合、ＣＰＵ３１は、ロス直前のＲＴＴ（RTTLoss）をＲＡＭ３２に記憶する。またＣＰＵ３１は、ロス直前のウィンドウサイズ（前回ウィンドウサイズ）をＲＡＭ３２に記憶する。ＣＰＵ３１は、ロスステータスをNOW_LOSSに変更する。ＣＰＵ３１は、その後、ロスステータスがPRE_LOSSに移行した後に、パケットロスが発生した回数を第２回数として計数し、計数した第２回数を解析情報テーブル３５４に記憶する。
【００３９】
ＣＰＵ３１は、ロスステータスがPRE_LOSSに移行した後に、ＲＡＭ３２に記憶したロス直前のウィンドウサイズから、ロス直後のウィンドウサイズを減じ、第２減少量を算出する。ＣＰＵ３１は、ＲＡＭ３２に第２減少量を記憶する。ＣＰＵ３１は、パケットロスが発生するたびに、第２減少量を算出する。ＣＰＵ３１は、ＴＣＰで接続を終了する際に送信されるＦＩＮデータを受信した場合、第２減少量の合計値を第２回数で除すことで、平均第２減少量を算出し、ＲＡＭ３２に記憶する。またＣＰＵ３１は、ロスが発生した場合、ロス発生直前のウィンドウサイズの合計値（以下、直前合計値という）をＲＡＭ３２に記憶する。
【００４０】
ＣＰＵ３１は、遅延による輻輳が発生しているか否かを判断する。具体的にはＣＰＵ３１は、ＲＡＭ３２に記憶した最大ＲＴＴが、ロス直前のＲＴＴよりも大きい場合に遅延による輻輳が発生していると判断する。ＣＰＵ３１は、大きいと判断した回数、すなわち輻輳が発生した回数を第１回数として解析情報テーブル３５４に記憶する。続いてＣＰＵ３１は、ＲＡＭ３２に記憶したロス直前のウィンドウサイズから、ロス直後のウィンドウサイズを減じ、第１減少量を算出する。ＣＰＵ３１は、ＲＡＭ３２に第１減少量を記憶する。ＣＰＵ３１は、遅延による輻輳が発生したと判断するたびに、第１減少量を算出する。ＣＰＵ３１は、ＴＣＰで接続を終了する際に送信されるＦＩＮデータを受信した場合、第１減少量の合計値を第１回数で除すことで、平均第１減少量を算出し、ＲＡＭ３２に記憶する。
【００４１】
ＣＰＵ３１は、コネクション終了に伴いＦＩＮを受信した場合、コンピュータ１において実行されている可能性のある輻輳制御を判断する。候補となる輻輳制御としては、例えば、Tahoe、Reno等のパケットロスから輻輳状態を検知する低速なロスベース制御、及び、Vegas等のＲＴＴから輻輳状態を検知する低速な遅延ベース制御を含む低速な輻輳制御（以下、第1輻輳制御という）がある。また、輻輳制御候補として、BIC、CUBIC等のパケットロスから輻輳状態を検知し、広帯域のネットワークでも帯域を使い切ることが可能な高速なロスベースの輻輳制御（以下、第２輻輳制御という）がある。
【００４２】
さらに輻輳制御候補として、Compand TCP(CTCP)、Westwood等のＲＴＴから輻輳状態を検知し、広帯域のネットワークでも帯域を使い切ることが可能な高速遅延ベースの輻輳制御（以下、第３輻輳制御という）がある。なお、以下では第１輻輳制御から第３輻輳制御のいずれにも該当しない他の輻輳制御を第４輻輳制御という。
【００４３】
コンピュータ１で実行されている輻輳制御が、第１輻輳制御〜第４輻輳制御のいずれに該当するかについては以下の手順により判断する。ＣＰＵ３１は、記憶部３５から閾値を読み出す。本実施形態では記憶部３５に記憶したＭＴＵに係数を乗じた値を閾値とする。ＣＰＵ３１は、解析情報テーブル３５４に記憶した最大増加量が読み出した閾値より大きいか否かを判断する。ＣＰＵ３１は、閾値より大きくないと判断した場合、推定したウィンドウサイズは線形的に増加しており、コンピュータ１は第１輻輳制御を採用していると判断する。
【００４４】
ＣＰＵ３１は、閾値より大きいと判断した場合、推定したウィンドウサイズは非線形増加しており、コンピュータ１は高速な輻輳制御である第２輻輳制御、第３輻輳制御または第４輻輳制御であると判断する。ＣＰＵ３１は、ＲＡＭ３２に記憶した平均第１減少量を読み出す。ＣＰＵ３１は、読み出した平均第１減少量が閾値よりも大きいか否かを判断する。ＣＰＵ３１は、平均第１減少量が閾値よりも大きくないと判断した場合、コンピュータ１は第２輻輳制御を採用していると判断する。
【００４５】
ＣＰＵ３１は、平均第１減少量が閾値よりも大きいと判断した場合、遅延増大時でもウィンドウサイズの増加量が大きく、遅延より影響が少ないと推定し、コンピュータ１は第３輻輳制御または第４輻輳制御を採用していると判断する。ＣＰＵ３１は、平均第２減少量が第２閾値よりも大きいか否かを判断する。なお、第２閾値はＭＴＵに第１係数を乗じた値（閾値）、または、直前合計値を第２係数及び第２回数で除した値のいずれか大きい方とすればよい。ＣＰＵ３１は、第２閾値をＲＡＭ３２に記憶しておく。
【００４６】
ＣＰＵ３１は、平均第２減少量が第２閾値よりも大きいと判断した場合、パケットロス発生時にウィンドウサイズが大幅に減少していることから、ロスの影響が大きいと判断し、コンピュータ１は第３輻輳制御を採用していると判断する。ＣＰＵ３１は、平均第２減少量が第２閾値よりも大きくないと判断した場合、コンピュータ１は第４輻輳制御を採用していると判断する。
【００４７】
以上のハードウェア群において各種ソフトウェア処理を、フローチャートを用いて説明する。図１１は３ウェイハンドシェイクの処理手順を示すフローチャートである。ＣＰＵ３１は、受信パケットがＳＹＮか否かを判断する(ステップＳ１１１)。ＣＰＵ３１は、ＳＹＮであると判断した場合(ステップＳ１１１でＹＥＳ)、処理をステップＳ１１２へ移行させる。ＣＰＵ３１は、ＳＹＮのＭＴＵを記憶部３５に記憶する(ステップＳ１１２)。ＣＰＵ３１は、パケットの受信時刻及びＳＹＮを受信時刻テーブル３５１に記憶する(ステップＳ１１６)。
【００４８】
ＣＰＵ３１は、受信パケットはＳＹＮでないと判断した場合(ステップＳ１１１でＮＯ)、処理をステップＳ１１３へ移行させる。ＣＰＵ３１は、受信パケットはＡＣＫか否かを判断する(ステップＳ１１３)。ＣＰＵ３１は、ＡＣＫでないと判断した場合(ステップＳ１１３でＮＯ)、処理をステップＳ１１４へ移行させる。ＣＰＵ３１は、現在時刻からＳＹＮの受信時刻を減じてＲＴＴｓｒｖを算出する(ステップＳ１１４)。ＣＰＵ３１は、算出したＲＴＴｓｒｖを記憶部３５に記憶する。ＣＰＵ３１は、コネクションのＭＴＵまたはＳＹＮのＭＴＵの内、値が小さいＭＴＵを解析情報テーブル３５４に記憶する(ステップＳ１１５)。
【００４９】
ＣＰＵ３１は、パケットの受信時刻及びＳＹＮ／ＡＣＫを受信時刻テーブル３５１に記憶する(ステップＳ１１６)。ＣＰＵ３１は、処理をステップＳ１１１へ戻す。ＣＰＵ３１は、受信パケットがＡＣＫであると判断した場合(ステップＳ１１３でＹＥＳ)、処理をステップＳ１１７へ移行させる。ＣＰＵ３１は、現在時刻から前回のパケット受信時刻を減じてＲＴＴｃｌｉを算出する(ステップＳ１１７)。ＣＰＵ３１は、算出したＲＴＴｃｌｉを記憶部３５に記憶する。ＣＰＵ３１は、パケットの受信時刻及びＡＣＫを受信時刻テーブル３５１に記憶する(ステップＳ１１８)。
【００５０】
図１２及び図１３は計測処理の手順を示すフローチャートである。ＣＰＵ３１は、データを受信した場合、コネクションＩＤ、データＩＤ、受信時刻、シーケンス番号、及びサイズをデータ情報テーブル３５２に記憶する(ステップＳ１２１)。ＣＰＵ３１は、解析情報テーブル３５４から、計測ステータスを読み出す(ステップＳ１２２)。なお、計測ステータスの初期値はWAIT_ACKである。ＣＰＵ３１は、計測ステータスがWAIT_ACKか否かを判断する(ステップＳ１２３)。ＣＰＵ３１は、計測ステータスがWAIT_ACKであると判断した場合(ステップＳ１２３でＹＥＳ)、処理を終了する。
【００５１】
ＣＰＵ３１は、計測ステータスがWAIT_ACKでないと判断した場合(ステップＳ１２３でＮＯ)、すなわちWAIT_DATAと判断した場合、処理をステップＳ１２４へ移行させる。ＣＰＵ３１は、ＡＣＫを受信した場合、以下に述べるサブルーチンへ移行する。
【００５２】
図１４及び図１５はＡＣＫ受信時の処理手順を示すフローチャートである。ＣＰＵ３１は、ＡＣＫを受信した場合、コネクションＩＤ、ＡＣＫＩＤ、受信時刻、ＡＣＫサイズ、データＩＤをＡＣＫ情報テーブル３５３に記憶する(ステップＳ１４１)。具体的にはＣＰＵ３１は、シーケンス番号にデータ情報テーブル３５２に記憶されたデータサイズを加算してＡＣＫサイズを算出する。またＣＰＵ３１は、データ情報テーブル３５２を参照し、ＡＣＫサイズよりも次に小さいシーケンス番号を有するデータＩＤを抽出する。ＣＰＵ３１は、ＡＣＫの受信時刻から抽出したデータＩＤに対応する受信時刻を減じてＲＴＴｃｌｉ（第２ラウンドトリップタイム）を算出する(ステップＳ１４２)。
【００５３】
ＣＰＵ３１は、算出したＲＴＴｃｌｉを解析情報テーブル３５４に記憶する(ステップＳ１４３)。ＣＰＵ３１は、解析情報テーブル３５４から、ステップＳ１１４で算出したＲＴＴｓｒｖ（第１ラウンドトリップタイム）を読み出す(ステップＳ１４４)。ＣＰＵ３１は、ＲＴＴｃｌｉにＲＴＴｓｒｖを加算して推定されるＲＴＴを算出する(ステップＳ１４５)。ＣＰＵ３１は、算出したＲＴＴを解析情報テーブル３５４に前回ＲＴＴとして記憶する(ステップＳ１４６)。
【００５４】
ＣＰＵ３１は、解析情報テーブル３５４を参照し、計測ステータスがWAIT_ACKであるか否かを判断する(ステップＳ１４７)。ＣＰＵ３１は、計測ステータスがWAIT_ACKでないと判断した場合(ステップＳ１４７でＮＯ)、処理をステップＳ１５４へ移行させる。ＣＰＵ３１は、計測ステータスがWAIT_ACKであると判断した場合(ステップＳ１４７でＹＥＳ)、処理をステップＳ１４８へ移行させる。ＣＰＵ３１は、受信したＡＣＫが前回計測グループのデータに対応したＡＣＫか否かを判断する(ステップＳ１４８)。
【００５５】
ＣＰＵ３１は、前回計測したグループのデータに対応したＡＣＫであると判断した場合(ステップＳ１４８でＹＥＳ)、処理をステップＳ１５４へ移行させる。ＣＰＵ３１は、前回計測したグループのデータに対応したＡＣＫでないと判断した場合(ステップＳ１４８でＮＯ)、処理をステップＳ１４９へ移行させる。ＣＰＵ３１は、ＡＣＫの受信時刻及びステップＳ１４４で読み出したＲＴＴｓｒｖに基づき終了時刻を算出する(ステップＳ１４９)。具体的には、ＣＰＵ３１は、ＡＣＫの受信時刻にＲＴＴｓｒｖを加算して終了時刻を算出する。ＣＰＵ３１は、算出した終了時刻を解析情報テーブル３５４に記憶する(ステップＳ１５１)。
【００５６】
ＣＰＵ３１は、前回の計測したグループのシーケンス番号以降の最初のデータの開始シーケンス番号を解析情報テーブル３５４に記憶する(ステップＳ１５２)。ＣＰＵ３１は、計測ステータスをWAIT_DATAに変更する(ステップＳ１５３)。ＣＰＵ３１は、ステップＳ１４５で算出したＲＴＴがＲＡＭ３２に記憶した最大ＲＴＴよりも大きいか否かを判断する(ステップＳ１５４)。ＣＰＵ３１は、ＲＴＴが最大ＲＴＴよりも大きいと判断した場合(ステップＳ１５４でＹＥＳ)、現在の計測グループの最大ＲＴＴを更新する(ステップＳ１５５)。ＣＰＵ３１は、最大ＲＴＴよりも大きくないと判断した場合(ステップＳ１５４でＮＯ)、ステップＳ１５５の処理をスキップする。
【００５７】
図１６はパケットロスが発生した際の処理手順を示すフローチャートである。ＣＰＵ３１は、パケットロスが発生したか否かを判断する(ステップＳ１６１)。具体的には、ＣＰＵ３１は、一定時間継続してパケットを受信してない場合、または、同一のパケットを受信した場合にパケットロスが発生したと判断すればよい。ＣＰＵ３１は、パケットロスが発生していないと判断した場合(ステップＳ１６１でＮＯ)、パケットロスが発生するまで待機する。ＣＰＵ３１は、パケットロスが発生したと判断した場合(ステップＳ１６１でＹＥＳ)、処理をステップＳ１６２へ移行させる。
【００５８】
ＣＰＵ３１は、ロス直前のＲＴＴをＲＡＭ３２に記憶する(ステップＳ１６２)。ＣＰＵ３１は、ロス直前のウィンドウサイズをＲＡＭ３２に記憶する(ステップＳ１６３)。ＣＰＵ３１は、ロスステータスをNOW_LOSSに変更する(ステップＳ１６４)。
【００５９】
再び図１２に戻りステップＳ１２４以降の処理について説明する。ＣＰＵ３１は、受信したパケットは同一計測グループ内のものであるか否かを判断する(ステップＳ１２４)。具体的にはＣＰＵ３１は、受信時刻がステップＳ１４９で算出した終了時刻よりも前か否かにより判断する。ＣＰＵ３１は、同一計測グループ内であると判断した場合(ステップＳ１２４でＹＥＳ)、処理を終了する。一方、ＣＰＵ３１は、同一計測グループ内でないと判断した場合(ステップＳ１２４でＮＯ)、処理をステップＳ１２５へ移行させる。
【００６０】
ＣＰＵ３１は、終了シーケンス番号を解析情報テーブル３５４に記憶する(ステップＳ１２５)。ＣＰＵ３１は、解析情報テーブル３５４に記憶した開始シーケンス番号及び終了シーケンス番号に基づきウィンドウサイズを算出する(ステップＳ１２６)。具体的には終了シーケンス番号から開始シーケンス番号を減じて１を加算した値を推定されるウィンドウサイズとして算出する。ＣＰＵ３１は、算出したウィンドウサイズを解析情報テーブル３５４に記憶する。ＣＰＵ３１は、前回の計測グループのウィンドウサイズに対するウィンドウサイズの増加量を算出し、算出した増加量をＲＡＭ３２に記憶する(ステップＳ１２７)。
【００６１】
ＣＰＵ３１は、解析情報テーブル３５４を参照し、ロスステータスがNO_LOSSか否かを判断する(ステップＳ１２８)。ＣＰＵ３１は、ロスステータスがNO_LOSSであると判断した場合(ステップＳ１２８でＹＥＳ)、処理をステップＳ１３６へ移行させる。ロスステータスがNO_LOSSでないと判断した場合(ステップＳ１２８でＮＯ)、処理をステップＳ１２９へ移行させる。ＣＰＵ３１は、ロスステータスがNOW_LOSSか否かを判断する(ステップＳ１２９)。ＣＰＵ３１は、ロスステータスがNOW_LOSSであると判断した場合(ステップＳ１２９でＹＥＳ)、処理をステップＳ１３１へ移行させる。ＣＰＵ３１は、ロスステータスをPRE_LOSSに変更する(ステップＳ１３１)。ＣＰＵ３１は、その後処理をステップＳ１３６に移行させる。
【００６２】
ＣＰＵ３１は、ロスステータスがNOW_LOSSでないと判断した場合(ステップＳ１２９でＮＯ)、ロスステータスはPRE_LOSSであると判断し、処理をステップＳ１３２へ移行させる。ＣＰＵ３１は、ＣＰＵ３１は、ロス直前のウィンドウサイズ及びロス直後のウィンドウサイズに基づき第２減少量を算出し、ＲＡＭ３２に記憶する(ステップＳ１３２)。具体的にはＣＰＵ３１は、ロス直前のウィンドウサイズとロス直後のウィンドウサイズとの差分により第２減少量を算出する。
【００６３】
ＣＰＵ３１は、ＲＡＭ３２に記憶した第２減少量の合計値をＲＡＭ３２に記憶する(ステップＳ１３３)。ＣＰＵ３１は、ロスが発生した第２回数を解析情報テーブル３５４に記憶する(ステップＳ１３４)。ＣＰＵ３１は、ロスステータスをNO_LOSSに変更する(ステップＳ１３５)。ＣＰＵ３１は、その後処理をステップＳ１３８へ移行させる。
【００６４】
ＣＰＵ３１は、ステップＳ１２７で算出した増加量は最大増加量より大きいか否かを判断する(ステップＳ１３６)。ＣＰＵ３１は、大きいと判断した場合(ステップＳ１３６でＹＥＳ)、処理をステップＳ１３７へ移行させる。ＣＰＵ３１は、最大増加量を、ステップＳ１２７で算出した増加量に更新する(ステップＳ１３７)。ＣＰＵ３１は、増加量は最大増加量よりも大きくないと判断した場合(ステップＳ１３６でＮＯ)、ステップＳ１３７の処理をスキップし、処理をステップＳ１３８へ移行させる。
【００６５】
ＣＰＵ３１は、遅延による輻輳が発生しているか否かを判断する。具体的には、ＣＰＵ３１は、最大ＲＴＴがロス直前のＲＴＴより大きいか否かを判断する(ステップＳ１３８)。ＣＰＵ３１は、最大ＲＴＴがロス直前のＲＴＴより大きいと判断した場合(ステップＳ１３８でＹＥＳ)、処理をステップＳ１３９へ移行させる。ＣＰＵ３１は、ロス直前のウィンドウサイズ及びロス直後のウィンドウサイズに基づき第１減少量を算出し、ＲＡＭ３２に記憶する(ステップＳ１３９)。具体的にはＣＰＵ３１は、ロス直後のウィンドウサイズとロス直後のウィンドウサイズとの差分を第１減少量として算出する。
【００６６】
ＣＰＵ３１は、第１減少量の合計値をＲＡＭ３２に記憶する(ステップＳ１３１０)。ＣＰＵ３１は、ステップＳ１３８でＹＥＳと判断した第１回数をインクリメントし、解析情報テーブル３５４に記憶する(ステップＳ１３１１)。ＣＰＵ３１は、その後処理をステップＳ１３１２へ移行させる。ＣＰＵ３１は、最大ＲＴＴはロス直前のＲＴＴより大きいと判断しない場合(ステップＳ１３８でＮＯ)、処理をステップＳ１３１２へ移行させる。
【００６７】
ＣＰＵ３１は、ステップＳ１２６にて算出したウィンドウサイズを参照し、前回の計測グループのウィンドウサイズを更新する(ステップＳ１３１２)。ＣＰＵ３１は、解析情報テーブル３５４の計測ステータスをWAIT_ACKに変更する(ステップＳ１３１３)。
【００６８】
図１７及び図１８は輻輳制御の判断処理手順を示すフローチャートである。ＣＰＵ３１は、ＲＡＭ３２に記憶した閾値を読み出す(ステップＳ１７１)。ＣＰＵ３１は、解析情報テーブル３５４から最大増加量を読み出す(ステップＳ１７２)。ＣＰＵ３１は、最大増加量が閾値より大きいか否かを判断する(ステップＳ１７３)。ＣＰＵ３１は、最大増加量が閾値より大きくないと判断した場合(ステップＳ１７３でＮＯ)、処理をステップＳ１７４へ移行させる。ＣＰＵ３１は、表示部３４に、コンピュータ１の輻輳制御が複数の輻輳制御候補の内、第１輻輳制御に該当することを示す情報（以下、輻輳制御情報という）を出力する(ステップＳ１７４)。なお、本実施形態では輻輳制御情報の出力を表示部３４に行うこととしたがこれに限るものではない。
【００６９】
例えば、図示しない他のコンピュータへ輻輳制御情報を送信するようにしても良い。ＣＰＵ３１は、最大増加量が閾値より大きいと判断した場合(ステップＳ１７３でＹＥＳ)、処理をステップＳ１７５へ移行させる。ＣＰＵ３１は、ＲＡＭ３２に記憶した第１減少量の合計値を算出する(ステップＳ１７５)。ＣＰＵ３１は、解析情報テーブル３５４に記憶した第１回数を読み出す(ステップＳ１７６)。ＣＰＵ３１は、第１減少量の合計値を第１回数で除すことで平均第１減少量を算出する(ステップＳ１７７)。
【００７０】
ＣＰＵ３１は、平均第１減少量が閾値より大きいか否かを判断する(ステップＳ１７８)。ＣＰＵ３１は、平均第１減少量が閾値より大きいと判断した場合(ステップＳ１７８でＹＥＳ)、処理をステップＳ１７９へ移行させる。ＣＰＵ３１は、表示部３４に第２輻輳制御であることを示す第２輻輳制御情報を出力する(ステップＳ１７９)。ＣＰＵ３１は、平均第１減少量が閾値より大きいと判断しない場合(ステップＳ１７８でＮＯ)、処理をステップＳ１８１へ移行させる。
【００７１】
ＣＰＵ３１は、第２閾値をＲＡＭ３２から読み出す(ステップＳ１８１)。ＣＰＵ３１は、第２減少量の合計値を算出する(ステップＳ１８２)。ＣＰＵ３１は、解析情報テーブル３５４から第２回数を読み出す(ステップＳ１８３)。ＣＰＵ３１は、第２減少量の合計値を第２回数で除すことで平均第２減少量を算出する(ステップＳ１８４)。ＣＰＵ３１は、平均第２減少量は第２閾値より大きいか否かを判断する(ステップＳ１８５)。
【００７２】
ＣＰＵ３１は、平均第２減少量が第２閾値より大きいと判断した場合(ステップＳ１８５でＹＥＳ)、処理をステップＳ１８６へ移行させる。ＣＰＵ３１は、コンピュータ１の輻輳制御が第３輻輳制御であることを示す第３輻輳制御情報を表示部３４に出力する(ステップＳ１８６)。ＣＰＵ３１は、平均第２減少量が第２閾値より大きくないと判断した場合(ステップＳ１８５でＮＯ)、処理をステップＳ１８７へ移行させる。ＣＰＵ３１は、コンピュータ１の輻輳制御が第４輻輳制御であることを示す第４輻輳制御情報を表示部３４に出力する(ステップＳ１８７)。これにより、コンピュータ１の輻輳制御の種類を特定することが可能となる。またウィンドウサイズを推定することで数多くの輻輳制御候補の中からコンピュータ１で実行している可能性の高い輻輳制御を精度よく判断することが可能となる。
【００７３】
実施の形態２
実施の形態２は第１輻輳制御から第４輻輳制御についての遅延の原因を出力する形態に関する。図１９及び図２０は原因の出力処理手順を示すフローチャートである。ＣＰＵ３１は、各コネクションのスループットを計測する(ステップＳ１９１)。なお、スループットの計測処理については後述する。ＣＰＵ３１は、各コネクションの計測したスループット、スループットの計測時間（計測開始時間及び計測終了時間）、及び実施の形態１で述べたコンピュータ１の輻輳制御情報を、記憶部３５に記憶する(ステップＳ１９２)。
【００７４】
ＣＰＵ３１は、記憶部３５にあらかじめ記憶した第３閾値を読み出す(ステップＳ１９３)。ＣＰＵ３１は、対象となるコンピュータ１のスループットは第３閾値以下か否かを判断する(ステップＳ１９４)。ＣＰＵ３１は、スループットが第３閾値以下である場合(ステップＳ１９４でＹＥＳ)、処理を終了する。ＣＰＵ３１は、スループットが第３閾値以下でないと判断した場合(ステップＳ１９４でＮＯ)、処理をステップＳ１９５へ移行させる。ＣＰＵ３１は、実施の形態１で述べた処理により、コンピュータ１の輻輳制御が第１輻輳制御であるか否かを判断する(ステップＳ１９５)。
【００７５】
ＣＰＵ３１は、第１輻輳制御であると判断した場合(ステップＳ１９５でＹＥＳ)、処理をステップＳ１９６へ移行させる。ＣＰＵ３１は、記憶部３５を参照し、同一サブネット内で同時間帯に高スループットのコネクションが存在するか否かを判断する(ステップＳ１９６)。具体的には、ＣＰＵ３１は、第１輻輳制御と判断したコネクションの計測時間帯（開始時刻及び終了時刻）を読み出す。ＣＰＵ３１は、ステップＳ１９２で記憶した各コネクションのスループットのうち、読み出した時間帯に、あらかじめ定めた閾値より高いスループットが存在するか否かを判断する。
【００７６】
ＣＰＵ３１は、同時間帯に高スループットのコネクションが存在すると判断した場合(ステップＳ１９６でＹＥＳ)、処理をステップＳ１９７へ移行させる。ＣＰＵ３１は、記憶部３５から第１原因を読み出す。具体的には、コンピュータ１の輻輳制御が遅延原因である可能性が高いことを示す情報（第１原因）を記憶部３５から読み出す。ＣＰＵ３１は、読み出した第１原因を表示部３４へ出力する(ステップＳ１９７)。なお、本実施形態では各原因を表示部３４へ出力する例を示すがこれに限るものではない。図示しない他のコンピュータへ第１原因を送信するようにしても良い。
【００７７】
ＣＰＵ３１は、同時間帯に高スループットのコネクションが存在しないと判断した場合(ステップＳ１９６でＮＯ)、ネットワーク帯域が原因の可能性が高いことを示す情報（第４原因）を記憶部３５から読み出す。ＣＰＵ３１は、読み出した第４原因を表示部３４へ出力する(ステップＳ１９８)。ステップＳ１９７及びステップＳ１９８の処理後、ＣＰＵ３１は、処理を終了する。
【００７８】
ＣＰＵ３１は、輻輳制御は第１輻輳制御でないと判断した場合(ステップＳ１９５でＮＯ)、処理をステップＳ１９９へ移行させる。ＣＰＵ３１は、輻輳制御が第２輻輳制御であるか否かを判断する(ステップＳ１９９)。ＣＰＵ３１は、輻輳制御が第２輻輳制御であると判断した場合(ステップＳ１９９でＹＥＳ)、処理をステップＳ２０１へ移行させる。ＣＰＵ３１は、同一サブネット内で、同時間帯に高スループットのコネクションが存在し、かつ、他のコネクションに第２輻輳制御または第３輻輳制御が存在するか否かを判断する(ステップＳ２０１)。
【００７９】
具体的には、ＣＰＵ３１は、第２輻輳制御と判断したコネクションの計測時間帯（開始時刻及び終了時刻）を読み出す。ＣＰＵ３１は、ステップＳ１９２で記憶した各コネクションのスループットのうち、読み出した時間帯内に、あらかじめ定めた閾値より高いスループットが存在するか否かを判断する。さらにＣＰＵ３１は、ステップＳ１９２で記憶した他のコネクションの輻輳制御情報を参照し、実施の形態１で述べた輻輳制御が第２輻輳制御または第３輻輳制御であるかを判断する。
【００８０】
ＣＰＵ３１は、高スループットのコネクションが存在し、かつ、他のコネクションに第２輻輳制御または第３輻輳制御が存在すると判断した場合(ステップＳ２０１でＹＥＳ)、処理をステップＳ２０２へ移行させる。ＣＰＵ３１は、輻輳が第２輻輳制御と第３輻輳制御とが混在し、ネットワーク帯域が圧迫されていることが原因であることを示す情報（第２原因）を記憶部３５から読み出す。ＣＰＵ３１は、第２原因を表示部３４へ出力する(ステップＳ２０２)。ＣＰＵ３１は、高スループットのコネクションが存在し、他のコネクションに第２輻輳制御または第３輻輳制御が存在すると判断できない場合(ステップＳ２０１でＮＯ)、処理をステップＳ２０３へ移行させる。
【００８１】
ＣＰＵ３１は、ネットワーク帯域が原因の可能性が高いことを示す情報（第４原因）を記憶部３５から読み出す。ＣＰＵ３１は、読み出した第４原因を表示部３４へ出力する(ステップＳ２０３)。ステップＳ２０２及びステップＳ２０３の処理後、ＣＰＵ３１は、処理を終了する。
【００８２】
輻輳制御が第２輻輳制御でないと判断した場合(ステップＳ１９９でＮＯ)、処理をステップＳ２０４へ移行させる。ＣＰＵ３１は、ロス率を算出する(ステップＳ２０４)。具体的には、ＣＰＵ３１は、各コネクションのロス発生回数を全データ数で除した値をロス率として算出すればよい。ＣＰＵ３１は、コンピュータ１の輻輳制御が第３輻輳制御であるか否かを判断する(ステップＳ２０５)。ＣＰＵ３１は、第３輻輳制御であると判断した場合(ステップＳ２０５でＹＥＳ)、処理をステップＳ２０６へ移行させる。ＣＰＵ３１は、記憶部３５から閾値を読み出す(ステップＳ２０６)。
【００８３】
ＣＰＵ３１は、ロス率が記憶部３５から読み出した閾値以上か否かを判断する(ステップＳ２０７)。ＣＰＵ３１は、ロス率が閾値以上であると判断した場合(ステップＳ２０７でＹＥＳ)、処理をステップＳ２０８へ移行させる。ＣＰＵ３１は、記憶部３５から輻輳制御とロス率が遅延原因であることを示す情報（第３原因）を読み出す。ＣＰＵ３１は、読み出した第３原因を表示部３４へ出力する(ステップＳ２０８)。
【００８４】
ＣＰＵ３１は、輻輳制御は第３輻輳制御でないと判断した場合(ステップＳ２０５でＮＯ)、及び、ロス率は閾値以上でないと判断した場合(ステップＳ２０７でＮＯ)、処理をステップＳ２０９へ移行させる。ＣＰＵ３１は、ネットワーク帯域が原因の可能性が高いことを示す情報（第４原因）を記憶部３５から読み出す。ＣＰＵ３１は、読み出した第４原因を表示部３４へ出力する(ステップＳ２０９)。ステップＳ２０８及びＳ２０９の処理後、ＣＰＵ３１は、処理を終了する。これにより、コンピュータ１の輻輳制御に加えて、遅延原因を把握することが可能となる。また他のコネクションの輻輳制御、ロス率等に応じてより的確に遅延原因を特定することが可能となる。
【００８５】
本実施の形態２は以上の如きであり、その他は実施の形態１と同様であるので、対応する部分には同一の参照番号を付してその詳細な説明を省略する。
【００８６】
実施の形態３
実施の形態３はスループットを計測する形態に関する。ＣＰＵ３１は、上述したスループットの計測に際し、下記式（１）に示すとおり、輻輳ウィンドウ（ｃｗｎｄ）をＲＴＴで除すことで、スループットを推定すればよい。ここで、ＲＴＴとは、データのパケットを送信してからＡＣＫのパケットが戻ってくるまでの時間のことをいい、すなわち、往復遅延時間を示す。輻輳ウィンドウとは、ＲＴＴ内に流れるデータのパケットのデータ量のことをいう。
【００８７】
スループット［ｂｐｓ］＝ｃｗｎｄ［ｂｉｔ］／ＲＴＴ［ｓｅｃ］・・・式（１）
【００８８】
なお、受信側に低速区間がある場合、ＲＴＴが短い場合、またはｃｗｎｄが大きい場合等は、以下に示す方法によりスループットを推定しても良い。図２１はデータの送受信状況を示す説明図である。図２１に示すように、計測地点で、ＣＰＵ３１は、送信端末であるサーバコンピュータ２から受信端末であるコンピュータ１に１以上のＤＡＴＡ(データ)をまとめた計測グループ（以下、グループと略す。）を送信する。ＣＰＵ３１は、グループに対応する最初のＤＡＴＡに対応するＲＴＴとグループのＤＡＴＡのデータ量とにより、ＴＣＰスループットの推定値を計測する。ここでは、ＲＴＴがｔｐ０である。グループのＤＡＴＡのデータ量がｃｗｉｎｄであり、１５００×３［ｂｙｔｅ］である。
【００８９】
ＣＰＵ３１は、最初のＡＣＫの取得から計測グループに対応する最後のＡＣＫの取得にかかった時間とグループから最初のＤＡＴＡを除いたＤＡＴＡのデータ量とによりネットワーク帯域の近似値を算出する。ここでは、最初のＡＣＫの取得から最後のＡＣＫの取得にかかった時間、すなわちＡＣＫ間隔がｔｐ１である。
【００９０】
ＣＰＵ３１は、ＴＣＰスループットの推定値とネットワーク帯域の近似値とを比較して、ＴＣＰスループットの推定値が実効スループットとして良いかどうかの妥当性を判定する。すなわち、ＣＰＵ３１は、グループ内のＡＣＫ間隔から計測されるスループットを利用してＴＣＰスループットの推定値の妥当性を判定する。ＣＰＵ３１は、ＴＣＰスループットの推定値がネットワーク帯域の近似値より大きくなければ、ＴＣＰスループットの推定値が妥当であると判断し、ＴＣＰスループットの推定値を実効スループットとして特定する。
【００９１】
ＣＰＵ３１は、ＴＣＰスループットの推定値がネットワーク帯域の近似値より大きければ、ＴＣＰスループットの推定値が妥当でないと判断し、さらに、ネットワーク帯域の近似値を実効スループットとして良いかどうかの妥当性を判定する。例えば、ＣＰＵ３１は、計測グループ外の次の計測グループのＡＣＫを含めた第２のＡＣＫ間隔と該当するデータ量とから計測されるスループット値を推定する。ここでは、第２のＡＣＫ間隔がｔｐ２である。ＣＰＵ３１は、この推定値とＴＣＰスループットの推定値とを比較して、ネットワーク帯域の近似値の妥当性を判定する。
【００９２】
ＣＰＵ３１は、ＴＣＰスループットの推定値が第２のＡＣＫ間隔から計測されるスループット値より大きければ、ネットワーク帯域の近似値が妥当であると判断し、ネットワーク帯域の近似値を実効スループットとして特定する。ＣＰＵ３１は、ＴＣＰスループットの推定値が第２のＡＣＫ間隔から計測されるスループット値より大きくなければ、ネットワーク帯域の近似値が妥当ないと判断し、ＴＣＰスループットの推定値を実効スループットとして特定する。
【００９３】
図２２から図２５はデータの送受信状況を示す説明図である。図２２に示すように、ＤＡＴＡをまとめたグループｇ１には、３個のＤＡＴＡが含まれるとする。ＤＡＴＡの１個のデータ量は、１５００ｂｙｔｅであるとする。ＲＴＴが２ｍｓｅｃであり、ＡＣＫ間隔が０．６ｍｓｅｃである場合であるとする。
【００９４】
ＣＰＵ３１は、ＲＴＴ及びｃｗｉｎｄを式（１）に代入し、ＴＣＰスループットの推定値ＴＰｔｃｐを算出する。ここでは、ｃｗｉｎｄは、ｄ１〜ｄ３のＤＡＴＡのデータ量であり、８×（３×１５００［ｂｙｔｅ］）ビットである。ＲＴＴが２ｍｓｅｃである。ＴＣＰスループットの推定値ＴＰｔｃｐは、以下のように算出される。
【００９５】
ＴＰｔｃｐ＝８×（３×１５００［ｂｙｔｅ］）／２［ｍｓｅｃ］＝１８［Ｍｂｐｓ］・・・式（２）
【００９６】
ＣＰＵ３１は、ＡＣＫ間隔とグループから最初のＤＡＴＡを除いたＤＡＴＡのデータ量とによりネットワーク帯域の近似値ＴＰｒｃｖ１を算出する。ここでは、ＡＣＫ間隔は、最初のＡＣＫａ１の取得からグループに対応する最後のＡＣＫａ２の取得にかかった時間である。ＤＡＴＡのデータ量は、グループｇ１から最初のＤＡＴＡｄ１を除いたＤＡＴＡｄ２、ｄ３のデータ量（第２パケット量）であり、８×（２×１５００［ｂｙｔｅ］）ビットである。ＡＣＫ間隔は０．６ｍｓｅｃである。ネットワーク帯域の近似値ＴＰｒｃｖ１は、以下のように算出される。
【００９７】
ＴＰｒｃｖ１＝８×（２×１５００［ｂｙｔｅ］）／０．６［ｍｓｅｃ］＝４０［Ｍｂｐｓ］・・・式（３）
【００９８】
ＣＰＵ３１は、ＴＣＰスループットの推定値ＴＰｔｃｐとネットワーク帯域の近似値ＴＰｒｃｖ１とを比較して、ＴＣＰスループットの推定値の妥当性を判定する。ＣＰＵ３１は、ＴＣＰスループットの推定値ＴＰｔｃｐがネットワーク帯域の近似値ＴＰｒｃｖ１より大きくないので、ＴＣＰスループットの推定値ＴＰｔｃｐを実効スループットとして特定する。すなわち、ＴＣＰスループットの推定値ＴＰｔｃｐが妥当である場合である。
【００９９】
かかる場合に、ＴＣＰスループットの推定値ＴＰｔｃｐを実効スループットとする理由は、以下のとおりである。すなわち、受信側の低速区間が４０Ｍｂｐｓである際に、ＤＡＴＡｄ１〜ｄ３を転送した場合の実際の転送時間は、以下のように算出される。
【０１００】
実際の転送時間＝８×（３×１５００［ｂｙｔｅ］）／４０［Ｍｂｐｓ］＝０．９［ｍｓｅｃ］・・・式（４）
【０１０１】
これによると、実際の転送時間（０．９ｍｓｅｃ）は、ＲＴＴ（２ｍｓｅｃ）よりも短く、ネットワークに無駄な時間が存在している。したがって、ＴＣＰスループットの推定値ＴＰｔｃｐは、実効スループットとして特定される。
【０１０２】
図２３に示すように、ＤＡＴＡをまとめたグループｇ１のＤＡＴＡの個数、ＤＡＴＡの１個のデータ量、ＲＴＴは、図２２と同様である。図２３が図２２と異なるのは、ＡＣＫ間隔０．６ｍｓｅｃから２．４ｍｓｅｃに変更した点である。
【０１０３】
ＣＰＵ３１は、ＲＴＴ及びｃｗｉｎｄを式（１）に代入し、ＴＣＰスループットの推定値ＴＰｔｃｐを算出する。ここでは、ＴＣＰスループットの推定値ＴＰｔｃｐは、１８［Ｍｂｐｓ］である。
【０１０４】
ＣＰＵ３１は、ＡＣＫ間隔とグループｇ１から最初のＤＡＴＡを除いたＤＡＴＡのデータ量（第２パケット量）とによりネットワーク帯域の近似値ＴＰｒｃｖ１を算出する。ここでは、ＡＣＫ間隔が２．４ｍｓｅｃである。ネットワーク帯域の近似値ＴＰｒｃｖ１は、以下のように算出される。
【０１０５】
ＴＰｒｃｖ１＝８×（２×１５００［ｂｙｔｅ］）／２．４［ｍｓｅｃ］＝１０［Ｍｂｐｓ］・・・式（５）
【０１０６】
ＣＰＵ３１は、ＴＣＰスループットの推定値ＴＰｔｃｐとネットワーク帯域の近似値ＴＰｒｃｖ１とを比較して、ＴＣＰスループットの推定値の妥当性を判定する。ＣＰＵ３１は、ＴＣＰスループットの推定値ＴＰｔｃｐがネットワーク帯域の近似値ＴＰｒｃｖ１より大きいので、ＴＣＰスループットの推定値ＴＰｔｃｐが妥当でないと判断し、さらに、ネットワーク帯域の近似値ＴＰｒｃｖ１の妥当性を判定する。
【０１０７】
かかる場合に、ＴＣＰスループットの推定値ＴＰｔｃｐを実効スループットとしない理由は、以下のとおりである。すなわち、受信側の低速区間が１０Ｍｂｐｓである際に、ＤＡＴＡｄ１〜ｄ３を転送した場合の実際の転送時間は、以下のように算出される。
【０１０８】
実際の転送時間＝８×（３×１５００［ｂｙｔｅ］）／１０［Ｍｂｐｓ］＝３．６［ｍｓｅｃ］・・・式（６）
【０１０９】
これによると、実際の転送時間（３．６ｍｓｅｃ）は、ＲＴＴ（２ｍｓｅｃ）よりも長く、ネットワークに無駄な時間が存在しない。したがって、ＴＣＰスループットの推定値ＴＰｔｃｐは、実効スループットとして特定されない。そして、ＣＰＵ３１は、引き続き、ネットワーク帯域の近似値ＴＰｒｃｖ１の妥当性を判定する。
【０１１０】
図２４に示すように、ＤＡＴＡをまとめたグループｇ１のＤＡＴＡの個数、ＤＡＴＡの１個のデータ量、ＲＴＴ、ＡＣＫ間隔は、図２３と同様である。図２４が図２３と異なるのは、次のグループｇ２には、２個のＤＡＴＡが含まれる点である。図２４が図２３と異なるのは、第２のＡＣＫ間隔が２．６ｍｓｅｃである点である。
【０１１１】
ＣＰＵ３１は、ＲＴＴ及びｃｗｉｎｄを式（１）に代入し、ＴＣＰスループットの推定値ＴＰｔｃｐを算出する。ここでは、ＴＣＰスループットの推定値ＴＰｔｃｐは、１８［Ｍｂｐｓ］である。
【０１１２】
ＣＰＵ３１は、ＡＣＫ間隔とグループから最初のＤＡＴＡを除いたＤＡＴＡのデータ量とによりネットワーク帯域の近似値ＴＰｒｃｖ１を算出する。ここでは、ネットワーク帯域の近似値ＴＰｒｃｖ１は、図２３の場合と同様に、１０［Ｍｂｐｓ］である。
【０１１３】
ＣＰＵ３１は、ＴＣＰスループットの推定値ＴＰｔｃｐがネットワーク帯域の近似値ＴＰｒｃｖ１より大きいので、ＴＣＰスループットの推定値ＴＰｔｃｐが妥当でないと判断し、以下のように、ネットワーク帯域の近似値ＴＰｒｃｖ１の妥当性を判定する。ＣＰＵ３１は、第２のＡＣＫ間隔と第２パケット量及び次のグループｇ２のＤＡＴＡｄ４、ｄ５のデータ量とから計測されるスループット値ＴＰｒｃｖ２を算出する。ここでは、第２のＡＣＫ間隔が２．６ｍｓｅｃである。第２パケット量は、８×（２×１５００［ｂｙｔｅ］）ビットである。次のグループｇ２のＤＡＴＡｄ４、ｄ５のデータ量も、８×（２×１５００［ｂｙｔｅ］）ビットである。スループット値ＴＰｒｃｖ２は、以下のように算出される。
【０１１４】
ＴＰｒｃｖ２＝８×（４×１５００［ｂｙｔｅ］）／２．６［ｍｓｅｃ］＝１９．２［Ｍｂｐｓ］・・・式（７）
【０１１５】
ＣＰＵ３１は、ＴＣＰスループットの推定値ＴＰｔｃｐが第２のＡＣＫ間隔から計測されるスループット値ＴＰｒｃｖ２より大きくないので、ＴＣＰスループットの推定値ＴＰｔｃｐを実効スループットとして特定する。すなわち、ネットワーク帯域の近似値ＴＰｒｃｖ１がＴＣＰスループットの推定値ＴＰｔｃｐより小さいが、ネットワーク帯域の近似値ＴＰｒｃｖ１が妥当でない場合である。
【０１１６】
かかる場合に、ネットワーク帯域の近似値ＴＰｒｃｖ１を実効スループットとしないでＴＣＰスループットの推定値ＴＰｔｃｐを実効スループットとする理由は、以下のとおりである。すなわち、ＡＣＫ間隔は、Ｃｒｏｓｓ  ｔｒａｆｆｉｃ（外乱）によって広がったにすぎず、低速区間でも、式（４）で算出された実際の転送時間（０．９ｍｓｅｃ）はＲＴＴ（２ｍｓｅｃ）もよりも短く、ネットワークに無駄な時間が存在している。したがって、ネットワーク帯域の近似値ＴＰｒｃｖ１は低速区間の実効スループットとして適切ではなく、ＴＣＰスループットの推定値ＴＰｔｃｐが実効スループットとして特定される。
【０１１７】
図２５に示すように、ＤＡＴＡをまとめたグループｇ１のＤＡＴＡの個数、ＤＡＴＡの１個のデータ量、ＲＴＴ、ＡＣＫ間隔、次のグループｇ２のＤＡＴＡの個数は、図２４と同様である。図２５が図２４と異なるのは、第２のＡＣＫ間隔が４．８ｍｓｅｃである点である。
【０１１８】
ＣＰＵ３１は、ＲＴＴ及びｃｗｉｎｄを式（１）に代入し、ＴＣＰスループットの推定値ＴＰｔｃｐを算出する。ここでは、ＴＣＰスループットの推定値ＴＰｔｃｐは、１８［Ｍｂｐｓ］である。
【０１１９】
ＣＰＵ３１は、ＡＣＫ間隔とグループから最初のＤＡＴＡを除いたＤＡＴＡのデータ量とによりネットワーク帯域の近似値ＴＰｒｃｖ１を算出する。ここでは、ネットワーク帯域の近似値ＴＰｒｃｖ１は、図２４の場合と同様に、１０［Ｍｂｐｓ］である。
【０１２０】
ＣＰＵ３１は、ＴＣＰスループットの推定値ＴＰｔｃｐがネットワーク帯域の近似値ＴＰｒｃｖ１より大きいので、ＴＣＰスループットの推定値ＴＰｔｃｐが妥当でないと判断し、以下のように、ネットワーク帯域の近似値ＴＰｒｃｖ１の妥当性を判定する。ＣＰＵ３１は、第２のＡＣＫ間隔と第２パケット量及び次のグループｇ２のＤＡＴＡｄ４、ｄ５のデータ量とから計測されるスループット値ＴＰｒｃｖ２を算出する。ここでは、第２のＡＣＫ間隔が４．８ｍｓｅｃである。第２パケット量は、８×（２×１５００［ｂｙｔｅ］）ビットである。次のグループｇ２のＤＡＴＡｄ４，ｄ５のデータ量も、８×（２×１５００［ｂｙｔｅ］）ビットである。スループット値ＴＰｒｃｖ２は、以下のように算出される。
【０１２１】
ＴＰｒｃｖ２＝８×（４×１５００［ｂｙｔｅ］）／４．８［ｍｓｅｃ］＝１０［Ｍｂｐｓ］・・・式（８）
【０１２２】
ＣＰＵ３１は、ＴＣＰスループットの推定値ＴＰｔｃｐが第２のＡＣＫ間隔から計測されるスループット値ＴＰｒｃｖ２より大きいので、ネットワーク帯域の近似値ＴＰｒｃｖ１を実効スループットとして特定する。すなわち、ネットワーク帯域の近似値ＴＰｒｃｖ１が妥当である場合である。
【０１２３】
かかる場合に、ネットワーク帯域の近似値ＴＰｒｃｖ１を実効スループットとする理由は、以下のとおりである。すなわち、後続のパケットのＡＣＫ間隔である第２のＡＣＫ間隔も広がっており、低速区間でのスループットが低いと推測される。これに加えて、ＤＡＴＡｄ１〜ｄ３を転送した場合の実際の転送時間は、以下の式（９）で表わされるように３．６ｍｓｅｃであり、ＲＴＴ（２ｍｓｅｃ）よりも長く、ネットワークに無駄な時間が存在しない。
【０１２４】
実際の転送時間＝８×（３×１５００［ｂｙｔｅ］）／１０［Ｍｂｐｓ］＝３．６［ｍｓｅｃ］・・・式（９）
【０１２５】
したがって、ネットワーク帯域の近似値ＴＰｒｃｖ１が、低速区間のスループットとして適切である可能性が高く、実効スループットとして特定される。
【０１２６】
本実施の形態３は以上の如きであり、その他は実施の形態１及び２と同様であるので、対応する部分には同一の参照番号を付してその詳細な説明を省略する。
【０１２７】
実施の形態４
図２６は上述した形態の監視コンピュータ３の動作を示す機能ブロック図である。ＣＰＵ３１が制御プログラム３５Ｐを実行することにより、監視コンピュータ３は以下のように動作する。取得部２６１は、第１装置及び第２装置間で送受信されるパケットの時系列情報を取得する。推定部２６２は、取得した時系列情報に基づき、ウィンドウサイズを推定する。判断部２６３は推定したウィンドウサイズの時間的変化に基づき、複数の輻輳制御候補から前記第１装置で実行される輻輳制御を判断する。
【０１２８】
図２７は実施の形態４に係る監視コンピュータ３のハードウェア群を示すブロック図である。監視コンピュータ３を動作させるためのプログラムは、ディスクドライブ、メモリーカードスロット等の読み取り部３０ＡにCD-ROM、DVD（Digital Versatile Disc）ディスク、メモリーカード、またはUSB(Universal Serial Bus)メモリ等の可搬型記録媒体３Ａを読み取らせて記憶部３５に記憶しても良い。また当該プログラムを記憶したフラッシュメモリ等の半導体メモリ３Ｂを監視コンピュータ３内に実装しても良い。さらに、当該プログラムは、インターネット等の通信網Ｎを介して接続される他のサーバコンピュータ（図示せず）からダウンロードすることも可能である。以下に、その内容を説明する。
【０１２９】
図２７に示す監視コンピュータ３は、上述した各種ソフトウェア処理を実行するプログラムを、可搬型記録媒体３Ａまたは半導体メモリ３Ｂから読み取り、或いは、通信網Ｎを介して他のサーバコンピュータ（図示せず）からダウンロードする。当該プログラムは、制御プログラム３５Ｐとしてインストールされ、ＲＡＭ３２にロードして実行される。
【０１３０】
本実施の形態４は以上の如きであり、その他は実施の形態１から３と同様であるので、対応する部分には同一の参照番号を付してその詳細な説明を省略する。
【０１３１】
以上の実施の形態１から４を含む実施形態に関し、さらに以下の付記を開示する。
【０１３２】
（付記１）
コンピュータに、
第１装置及び第２装置間で送受信されるパケットの時系列情報を取得し、
取得した時系列情報に基づき、ウィンドウサイズを推定し、
推定したウィンドウサイズの時間的変化に基づき、複数の輻輳制御候補から前記第１装置で実行される輻輳制御を判断する
処理を実行させるプログラム。
（付記２）
推定したウィンドウサイズの時間的変化量を算出し、
算出した変化量の最大値を抽出し、
最大値が閾値より小さい場合、第１輻輳制御と判断する
処理を実行させる付記１に記載のプログラム。
（付記３）
取得した時系列情報に基づきラウンドトリップタイムを推定し、
パケットロスが発生した場合に、推定したラウンドトリップタイムの最大値が、ロス発生前に推定したラウンドトリップタイムより大きいか否か判断し、
大きいと判断した場合に、ロス発生前後に推定されたウィンドウサイズの第１差分及び大きいと判断した第１回数を記憶し、
第１差分の合計値を第１回数で除した値が、閾値より大きいか否か判断し、
大きいと判断した場合に、第２輻輳制御と判断する
処理を実行させる付記２に記載のプログラム。
（付記４）
パケットロスが発生した場合に、ロス発生前後に推定されたウィンドウサイズの第２差分及びロスが発生した第２回数を記憶し、
第２差分の合計値を第２回数で除した値が、閾値より大きいか否か判断し、
大きいと判断した場合に、第３輻輳制御と判断する
処理を実行させる付記２または３に記載のプログラム。
（付記５）
第２差分の合計値を第２回数で除した値が、閾値より大きいか否か判断し、
大きくないと判断した場合に、第４輻輳制御と判断する
付記４に記載のプログラム。
（付記６）
第１輻輳制御から第４輻輳制御それぞれに対応した遅延原因を出力する
処理を実行させる付記５に記載のプログラム。
（付記７）
複数のコネクションについてスループットを計測し、
前記第１輻輳制御と判断した場合に、同時間帯に所定閾値より高いスループットのコネクションが存在するか否かを判断し、
存在すると判断した場合に、記憶部に記憶した第１原因を出力する
処理を実行させる付記２から６のいずれか一つに記載のプログラム。
（付記８）
複数のコネクションについてスループットを計測し、
一のコネクションにて前記第２輻輳制御と判断した場合に、同時間帯に計測したスループット内に所定閾値より高いスループットが存在し、かつ、他のコネクションにて第２輻輳制御または第３輻輳制御と判断したか否かを判断し、
高いスループットが存在しかつ第２輻輳制御または第３輻輳制御と判断した場合に、記憶部に記憶した第２原因を出力する
処理を実行させる付記４から７のいずれか一つに記載のプログラム。
（付記９）
パケットのロス率を算出し、
前記第３輻輳制御と判断し、かつ、ロス率が所定閾値以上の場合に、記憶部に記憶した第３原因を出力する
処理を実行させる付記４から８のいずれか一つに記載のプログラム。
（付記１０）
第１装置宛のパケットの時間情報から前記第２装置宛のパケットの時間情報を減じた第１ラウンドトリップタイムを算出し、
第２装置宛のパケットの時間情報から前記第１装置宛のパケットの時間情報を減じた第２ラウンドトリップタイムを算出し、
第１ラウンドトリップタイム及び第２ラウンドトリップタイムの合計値により推定されるラウンドトリップタイムを算出する
付記３から９のいずれか一つに記載のプログラム。
（付記１１）
第１装置から受信したパケットの時間情報及び前記第１ラウンドトリップタイムに基づき、終了時刻を算出し、
取得した時間情報、算出した終了時刻及び取得したパケットのシーケンス番号に基づきウィンドウサイズを推定する
処理を実行させる付記１０に記載のプログラム。
（付記１２）
第１装置及び第２装置間で送受信されるパケットの時系列情報を取得する取得部と、
取得した時系列情報に基づき、ウィンドウサイズを推定する推定部と、
推定したウィンドウサイズの時間的変化に基づき、複数の輻輳制御候補から前記第１装置で実行される輻輳制御を判断する判断部と
を備える情報処理装置。
（付記１３）
第１装置及び第２装置間で送受信されるパケットの時系列情報を取得し、
取得した時系列情報に基づき、ウィンドウサイズを推定し、
推定したウィンドウサイズの時間的変化に基づき、複数の輻輳制御候補から前記第１装置で実行される輻輳制御を判断する
処理をコンピュータに実行させる情報処理方法。
【符号の説明】
【０１３３】
１      コンピュータ
２      サーバコンピュータ
３      監視コンピュータ
３Ａ    可搬型記録媒体
３Ｂ    半導体メモリ
３０Ａ  読み取り部
１１    ＣＰＵ
１２    ＲＡＭ
１３    入力部
１４    表示部
１５    記憶部
１５Ｐ  制御プログラム
１６    通信部
１８    時計部
２１    ＣＰＵ
２２    ＲＡＭ
２３    入力部
２４    表示部
２５    記憶部
２５Ｐ  制御プログラム
２６    通信部
２８    時計部
３１    ＣＰＵ
３２    ＲＡＭ
３３    入力部
３４    表示部
３５    記憶部
３５Ｐ  制御プログラム
３６    通信部
３８    時計部
３５１  受信時刻テーブル
３５２  データ情報テーブル
３５３  ＡＣＫ情報テーブル
３５４  解析情報テーブル
２６１  取得部
２６２  推定部
２６３  判断部
Ｎ      通信網
【図１】
2017184044.tif 000003
【図２】
2017184044.tif 000004
【図３】
2017184044.tif 000005
【図４】
2017184044.tif 000006
【図５】
2017184044.tif 000007
【図６】
2017184044.tif 000008
【図７】
2017184044.tif 000009
【図８】
2017184044.tif 000010
【図９】
2017184044.tif 000011
【図１０】
2017184044.tif 000012
【図１１】
2017184044.tif 000013
【図１２】
2017184044.tif 000014
【図１３】
2017184044.tif 000015
【図１４】
2017184044.tif 000016
【図１５】
2017184044.tif 000017
【図１６】
2017184044.tif 000018
【図１７】
2017184044.tif 000019
【図１８】
2017184044.tif 000020
【図１９】
2017184044.tif 000021
【図２０】
2017184044.tif 000022
【図２１】
2017184044.tif 000023
【図２２】
2017184044.tif 000024
【図２３】
2017184044.tif 000025
【図２４】
2017184044.tif 000026
【図２５】
2017184044.tif 000027
【図２６】
2017184044.tif 000028
【図２７】
2017184044.tif 000029