(57)【要約】【課題】ネットワークシステムにおいて、通信制御を変更するためにリソースを多く消費する。【解決手段】データを送受信する通信装置であって、演算装置、記憶装置、及びネットワークインタフェースを備え、ネットワークインタフェースを介してデータを送受信する通信機能部と、通信機能部から取得した前記データを処理し、処理された前記データを出力する通信処理部と、データに対して任意の通信制御を行う代理通信機能部と、通信処理部からの通信機能部の呼び出しを代理通信機能部の呼び出しに変更するフック処理部と、を有する。【選択図】  図３
2018011207.tif 000002
【特許請求の範囲】
【請求項１】
データを送受信する通信装置であって、
演算装置、前記演算装置に接続される記憶装置、及び前記演算装置に接続されるネットワークインタフェースを備え、
前記ネットワークインタフェースを介してデータを送受信する通信機能部と、
前記通信機能部から取得した前記データを処理し、処理された前記データを出力する通信処理部と、
前記データに対して任意の通信制御を行う代理通信機能部と、
前記通信処理部からの前記通信機能部の呼び出しを前記代理通信機能部の呼び出しに変更するフック処理部と、を有することを特徴とする通信装置。
【請求項２】
請求項１に記載の通信装置であって、
前記通信処理部及び前記代理通信機能部は、それぞれ、送信データに対して任意の通信制御を行う通信制御部を少なくとも一つ含み、
前記代理通信機能部は、前記送信データに適用する少なくとも一つ通信制御を選択するアルゴリズム選択部を含むことを特徴とする通信装置。
【請求項３】
請求項２に記載の通信装置であって、
前記通信処理部は、前記送信データに対して第１の通信制御を行う第１の通信制御部を含み、
前記代理通信機能部は、前記データに対して第２の通信制御を行う第２の通信制御部を含み、
前記フック処理部は、前記通信処理部が前記送信データを送信するための前記通信機能部の呼び出しを、前記代理通信機能部の呼び出しに変更して、前記送信データを前記代理通信機能部に転送し、
前記アルゴリズム選択部は、
前記フック処理部から前記送信データを受け付けた場合、前記第１の通信制御部又は前記第２の通信制御部のいずれかを選択し、
選択された通信制御部に前記送信データを出力することを特徴とする通信装置。
【請求項４】
請求項３に記載の通信装置であって、
前記代理通信機能部は、
通信フローを管理するためのフロー情報を管理するフロー情報処理部を含み、
前記送信データに適用する通信制御部を選択する場合に使用する設定情報を管理し、
前記フック処理部は、
前記通信処理部が受信データを受信するための前記通信機能部の呼び出しを前記代理通信機能部の呼び出しに変更し、
前記代理通信機能部は、
前記通信機能部を呼び出して、前記通信機能部から前記受信データを取得し、
前記受信データを解析することによって、前記フロー情報を生成し、又は前記フロー情報を更新し、
前記アルゴリズム選択部は、前記フロー情報及び前記設定情報に基づいて、前記送信データに適用する通信制御部を選択することを特徴とする通信装置。
【請求項５】
データを送受信する通信装置の通信制御方法であって、
演算装置、前記演算装置に接続される記憶装置、及び前記演算装置に接続されるネットワークインタフェースを備え、
前記ネットワークインタフェースを介してデータを送受信する通信機能部と、
前記通信機能部から取得した前記データを処理し、処理された前記データを出力する通信処理部と、
前記データに対して任意の通信制御を行う代理通信機能部と、
フック処理部と、を有し、
前記通信制御方法は、
前記通信機能部が、前記ネットワークインタフェースを介して受信データを受信する第１のステップと、
前記フック処理部が、前記通信処理部が前記受信データを受信するための前記通信機能部の呼び出しを前記代理通信機能部の呼び出しに変更する第２のステップと、
前記代理通信機能部が、前記受信データを受信するための前記通信処理部からの呼び出しを受信した場合、前記通信機能部を呼び出して前記受信データを取得する第３のステップと、
前記代理通信機能部が、前記受信データを前記通信処理部に出力する第４のステップと、
前記フック処理部が、前記通信処理部が送信データを送信するための前記通信機能部の呼び出しを前記代理通信機能部の呼び出しに変更し、前記送信データを前記代理通信機能部に転送する第５のステップと、
前記代理通信機能部が、前記送信データを受け付けた場合、前記送信データに適用する通信制御を選択する第６のステップと、
前記通信機能部が、前記ネットワークインタフェースを介して前記選択された通信制御が行われた送信データを送信する第７のステップと、を含むことを特徴とする通信制御方法。
【請求項６】
請求項５に記載の通信制御方法であって、
前記通信処理部及び前記代理通信機能部は、それぞれ、前記送信データに対して任意の通信制御を行う通信制御部を少なくとも一つ含み、
前記第６のステップは、前記代理通信機能部が、複数の通信制御部の中から少なくとも一つの通信制御部を選択するステップを含むことを特徴とする通信制御方法。
【請求項７】
請求項６に記載の通信制御方法であって、
前記通信処理部は、前記送信データに対して第１の通信制御を行う第１の通信制御部を含み、
前記代理通信機能部は、前記データに対して第２の通信制御を行う第２の通信制御部を含み、
前記第６のステップは、
前記代理通信機能部が、前記フック処理部から前記送信データを受け付けた場合、前記第１の通信制御部又は前記第２の通信制御部のいずれかを選択するステップと、
前記代理通信機能部が、選択された通信制御部に前記送信データを出力するステップと、を含むことを特徴とする通信制御方法。
【請求項８】
請求項７に記載の通信制御方法であって、
前記代理通信機能部は、
通信フローを管理するためのフロー情報を管理するフロー情報処理部を含み、
前記送信データに適用する通信制御部を選択する場合に使用する設定情報を管理し、
前記第３のステップは、前記代理通信機能部が、前記受信データを解析することによって、前記フロー情報を生成し、又は前記フロー情報を更新するステップを含み、
前記第６のステップは、前記代理通信機能部が、前記フロー情報及び前記設定情報に基づいて、前記送信データに適用する通信制御部を選択するステップを含むことを特徴とする通信制御方法。
【請求項９】
データを送受信する複数の通信装置を備えるネットワークシステムであって、
前記複数の通信装置の各々は、
演算装置、前記演算装置に接続される記憶装置、及び前記演算装置に接続されるネットワークインタフェースを備え、
前記ネットワークインタフェースを介してデータを送受信する通信機能部と、
前記通信機能部から取得した前記データを処理し、処理された前記データを出力する通信処理部と、
前記データに対して任意の通信制御を行う代理通信機能部と、
前記通信処理部からの前記通信機能部の呼び出しを前記代理通信機能部の呼び出しに変更するフック処理部と、を有することを特徴とするネットワークシステム。
【請求項１０】
請求項９に記載のネットワークシステムであって、
前記通信処理部及び前記代理通信機能部は、それぞれ、送信データに対して任意の通信制御を行う通信制御部を少なくとも一つ含み、
前記代理通信機能部は、前記送信データに適用する少なくとも一つの通信制御を選択するアルゴリズム選択部を含むことを特徴とするネットワークシステム。
【請求項１１】
請求項１０に記載のネットワークシステムであって、
前記通信処理部は、前記送信データに対して第１の通信制御を行う第１の通信制御部を含み、
前記代理通信機能部は、前記データに対して第２の通信制御を行う第２の通信制御部を含み、
前記フック処理部は、前記通信処理部が前記送信データを送信するための前記通信機能部の呼び出しを、前記代理通信機能部の呼び出しに変更して、前記送信データを前記代理通信機能部に転送し、
前記アルゴリズム選択部は、
前記フック処理部から前記送信データを受け付けた場合、前記第１の通信制御部又は前記第２の通信制御部のいずれかを選択し、
選択された通信制御部に前記送信データを出力することを特徴とするネットワークシステム。
【請求項１２】
請求項１１に記載のネットワークシステムであって、
前記代理通信機能部は、
通信フローを管理するためのフロー情報を管理するフロー情報処理部を含み、
前記送信データに適用する通信制御部を選択する場合に使用する設定情報を管理し、
前記フック処理部は、
前記通信処理部が受信データを受信するための前記通信機能部の呼び出しを前記代理通信機能部の呼び出しに変更し、
前記代理通信機能部は、
前記通信機能部を呼び出して、前記通信機能部から前記受信データを取得し、
前記受信データを解析することによって、前記フロー情報を生成し、又は前記フロー情報を更新し、
前記アルゴリズム選択部は、前記フロー情報及び前記設定情報に基づいて、前記送信データに適用する通信制御部を選択することを特徴とするネットワークシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、通信制御に関する。
【背景技術】
【０００２】
インターネット等のネットワーク回線の高速化等に伴い、クラウドコンピューティングが普及している。クラウドコンピューティングでは、インターネット等のネットワークを介して、ハードウェア及びソフトウェアがサービスとして提供される。クラウドコンピューティングの普及によるネットワーク回線の利用の増加に伴い、ネットワーク回線の品質の悪さ及び情報漏洩の問題がある。
【０００３】
これらの問題を解決するために、回線の利用効率を向上させる装置、及びセキュリティの観点から通信データを暗号化する等の通信制御を変更する装置が導入されている。
【０００４】
本技術分野の背景技術として、例えば、回線の利用効率を向上させる装置として、特開２０１５−１３３６６９号公報（特許文献１）では、「ネットワークに接続される送信装置の制御方法であって、前記ネットワークを介して受信装置にデータを送信し、前記受信装置から前記ネットワークを介して受信確認及び受信ウィンドウサイズの情報を含む確認応答データを受信し、前記送信装置から送信されるデータに関する帯域を制御し、前記送信されるデータのうち前記受信装置から確認応答を受信していないデータのデータサイズが、前記受信ウィンドウサイズから決まる上限値以下になるように、前記制御されている帯域を抑制し、前記データサイズと前記受信ウィンドウサイズとに基づいて、前記帯域の抑制の有／無を切り替える、送信装置の制御方法。」が開示されている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２０１５−１３３６６９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
特許文献１の方式は、サーバとクライアントとの間に設置された通信装置が、サーバが送信したパケットを受信し、パケットをバッファする。その後、通信装置は、帯域制御処理を行い、バッファしたパケットを送信する。これによって、回線帯域が効率的に利用されるように、サーバとクライアントとの間の通信制御が変更される。
【０００７】
前述の方式では、通信装置が帯域制御処理を行う前にパケットの送受信を行うために、サーバ、クライアント及び通信装置のシステム全体としてパケット送受信処理の回数が増加し、また、パケットをバッファするために大量のメモリを使用する。そのため、リソースの消費量が大きい。
【課題を解決するための手段】
【０００８】
本願において開示される発明の代表的な一例を示せば以下の通りである。すなわち、データを送受信する通信装置であって、演算装置、前記演算装置に接続される記憶装置、及び前記演算装置に接続されるネットワークインタフェースを備え、前記ネットワークインタフェースを介してデータを送受信する通信機能部と、前記通信機能部から取得した前記データを処理し、処理された前記データを出力する通信処理部と、前記データに対して任意の通信制御を行う代理通信機能部と、前記通信処理部からの前記通信機能部の呼び出しを前記代理通信機能部の呼び出しに変更するフック処理部と、を有することを特徴とする。
【発明の効果】
【０００９】
本発明の一態様によれば、リソースの消費量を抑えて、動的に通信制御を変更できる。上記した以外の課題、構成及び効果は、以下の実施例の説明により明らかにされる。
【図面の簡単な説明】
【００１０】
【図１】実施例１のネットワークシステムの構成例を示す図である。
【図２】実施例１の計算機のハードウェア構成及びソフトウェア構成の一例を示すブロック図である。
【図３】実施例１の計算機のソフトウェア構成の詳細を示すブロック図である。
【図４】実施例１の計算機が送受信するＴＣＰパケットデータのフォーマットの一例を示す図である。
【図５】実施例１の設定情報記憶部に格納される設定情報のデータ構造の一例を示す図である。
【図６】実施例１のフロー情報記憶部に格納されるフロー情報のデータ構造の一例を示す図である。
【図７】実施例１のフロー情報処理部が実行する処理の一例を説明するフローチャートである。
【図８】実施例１の送信制御アルゴリズム選択部が実行する処理を説明するフローチャートである。
【図９】実施例２の計算機が送受信するＵＤＰパケットデータのフォーマットの一例を示す図である。
【図１０】実施例２の計算機のソフトウェア構成の詳細を示すブロック図である。
【図１１】実施例２の設定情報記憶部に格納される設定情報のデータ構造の一例を示す図である。
【図１２】実施例２のフロー情報記憶部に格納されるフロー情報のデータ構造の一例を示す図である。
【図１３Ａ】実施例２のフロー情報処理部が実行する処理を説明するフローチャートである。
【図１３Ｂ】実施例２のフロー情報処理部が実行する処理を説明するフローチャートである。
【図１４Ａ】実施例２の送信制御アルゴリズム選択部が実行する処理を説明するフローチャートである。
【図１４Ｂ】実施例２の送信制御アルゴリズム選択部が実行する処理を説明するフローチャートである。
【図１４Ｃ】実施例２の送信制御アルゴリズム選択部が実行する処理を説明するフローチャートである。
【発明を実施するための形態】
【００１１】
以下、添付図面を参照して本発明の実施例を説明する。本実施例は本発明を実現するための一例に過ぎず、本発明の技術的範囲を限定するものではないことに注意すべきである。各図において共通の構成については同一の参照符号が付されている。
【実施例１】
【００１２】
実施例１では、本発明の基本的な一例を説明する。具体的には、実施例１では、ＯＳＩ参照モデルのトランスポート層の伝送制御プロトコルであるＴＣＰ（Ｔｒａｎｓｍｉｓｓｉｏｎ  Ｃｏｎｔｒｏｌ  Ｐｒｏｔｏｃｏｌ）に基づくリソースの消費量を抑えたデータの送信制御を実現するシステムを示す。
【００１３】
図１は、実施例１のネットワークシステムの構成例を示す図である。
【００１４】
ネットワークシステムは、一つ以上の中継装置１０２を含む一つ以上のネットワーク１０１、及び複数の計算機１００から構成される。計算機１００は、ネットワーク１０１を介して他の計算機１００と通信する。なお、計算機１００、ネットワーク１０１及び中継装置１０２の数は、図１に示す数に限定されず任意である。
【００１５】
図１に示す例では、計算機１００−１及び計算機１００−２は、ネットワーク１０１−１を介して互いに通信する。また、計算機１００−１及び計算機１００−２は、ネットワーク１０１−１及びネットワーク１０１−２を介して計算機１００−３と通信する。
【００１６】
計算機１００は、物理サーバ、プロキシ装置、情報処理装置、端末等が考えられる。なお、計算機１００は、物理サーバ上の仮想サーバでもよい。
【００１７】
ネットワーク１０１は、ＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、ＷＡＮ（Ｗｉｄｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、インターネット等が考えられる。また、ネットワーク１０１は、帯域保障されるネットワークでもよいし、帯域保障されないネットワークでもよい。
【００１８】
各ネットワーク１０１−１、１０１−２には、中継装置１０２−１、１０２−２が含まれる。中継装置１０２は、例えば、スイッチ及びゲートウェイ装置等が考えられる。
【００１９】
図２は、実施例１の計算機１００のハードウェア構成及びソフトウェア構成の一例を示すブロック図である。図３は、実施例１の計算機１００のソフトウェア構成の詳細を示すブロック図である。
【００２０】
計算機１００は、演算装置２００、主記憶装置２０１、二次記憶装置２０２、及びＮＩＦ（ネットワークインタフェース）２０３を有する。計算機１００が有する各ハードウェアは、システムバス２０４を介して互いに接続され、また、システムバス２０４を介して互いにデータを転送する。
【００２１】
図２では、演算装置２００、主記憶装置２０１、二次記憶装置２０２、及びＮＩＦ２０３が一つのシステムバス２０４を介して接続されている例を示す。なお、各ハードウェアは、複数のシステムバスを介して接続されてもよいし、システムバスを介さずに直接接続されてもよい。
【００２２】
また、計算機１００は、演算装置２００、主記憶装置２０１、二次記憶装置２０２、及びＮＩＦ２０３を複数有してもよい。
【００２３】
演算装置２００は、主記憶装置２０１に格納されるプログラムを実行し、また、主記憶装置２０１に対するデータの読み出し及び書込を行う。演算装置２００は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）及びＧＰＵ（Ｇｒａｐｈｉｃｓ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）等が考えられる。演算装置２００がプログラムを実行することによって、計算機１００の各種機能が実現される。以下の説明では、機能部を主語に処理を説明する場合、演算装置２００が当該機能部を実現するプログラムを実行していることを表す。
【００２４】
主記憶装置２０１は、演算装置２００が実行するプログラム及び当該プログラムに必要なデータを格納する。主記憶装置２０１は、例えば、メモリ等が考えられる。主記憶装置２０１に格納されるプログラムについては後述する。二次記憶装置２０２は、プログラム及びデータを永続的に格納する。二次記憶装置２０２は、例えば、ＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）及びＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）等が考えられる。
【００２５】
本実施例では、二次記憶装置２０２にプログラム及びデータが格納される。演算装置２００は、必要に応じて、二次記憶装置２０２からプログラム及びデータを読み出し、主記憶装置２０１にプログラム及びデータをロードする。
【００２６】
ＮＩＦ２０３は、ネットワーク１０１と接続するためのインタフェースである。ＮＩＦ２０３は、物理的なＮＩＦ上の論理的なＮＩＦでもよい。
【００２７】
主記憶装置２０１は、通信処理部２１０、フック処理部２２０、代理通信機能部２３０、通信機能部２４０、及び設定情報入力処理部２５０を実現するプログラムを格納する。なお、主記憶装置２０１は、図示しない機能部を実現するプログラムを格納してもよい。また、主記憶装置２０１は、設定情報記憶部２６０及びフロー情報記憶部２７０を含む。
【００２８】
設定情報記憶部２６０は、代理通信機能部２３０が使用する設定情報を格納する。設定情報は、設定情報入力処理部２５０によって書き込まれる。設定情報の詳細は、図５を用いて説明する。
【００２９】
フロー情報記憶部２７０は、通信フローの管理情報であるフロー情報を格納する。フロー情報は、通信フローごとに通信状態を示す情報を含み、代理通信機能部２３０及び設定情報入力処理部２５０によって書き込まれる。フロー情報の詳細は、図６を用いて説明する。
【００３０】
通信処理部２１０は、通信機能部２４０と連携して、ＮＩＦ２０３を介してネットワーク１０１と通信を行う第三者のアプリケーションである。なお、通信処理部２１０は、必要に応じて、受信パケットデータに対して任意の処理を実行してもよい。
【００３１】
通信処理部２１０は、計算機１００が受信したパケットデータを受信するために通信機能部２４０を呼び出す。このとき、フック処理部２２０によって、当該呼び出しが代理通信機能部２３０への呼び出しに置き換えられる。この場合、通信処理部２１０は、フック処理部２２０を介して、代理通信機能部２３０からパケットデータを取得する。また、通信処理部２１０は、計算機１００からパケットデータを送信するために通信機能部２４０を呼び出す。このとき、フック処理部２２０によって、当該呼び出しが代理通信機能部２３０への呼び出しに置き換えられる。この場合、通信処理部２１０は、フック処理部２２０を介して、代理通信機能部２３０にパケットデータを出力する。
【００３２】
通信機能部２４０は、ＯＳ（オペレーティングシステム）が提供する通信機能である。通信機能部２４０は、ＮＩＦ２０３を管理し、アプリケーションに対して、通信を行うためのＡＰＩ（Ａｐｐｌｉｃａｔｉｏｎ  Ｐｒｏｇｒａｍｍｉｎｇ  Ｉｎｔｅｒｆａｃｅ）を提供する。動作の詳細については後述する。
【００３３】
フック処理部２２０は、通信処理部２１０の起動時に通信機能部２４０が提供するＡＰＩの処理を代理通信機能部２３０の処理に置き換える。これによって、フック処理部２２０は、通信処理部２１０と通信機能部２４０との間の処理に代理通信機能部２３０を割り込ませることができる。処理の置き換えは、通信処理部２１０が停止するまで有効である。フック処理部２２０を有することによって、計算機１００は、帯域制御処理を行うために通信処理部２１０が送受信するパケットデータをバッファする必要がない。したがって、第三者のアプリケーションである通信処理部２１０を改変することなく、リソースの消費量を抑えた通信制御の動的な変更を実現できる。
【００３４】
通信処理部２１０及び代理通信機能部２３０は、フック処理部２２０を介して、直接、パケットデータを入出力するように振る舞う。すなわち、通信処理部２１０とフック処理部２２０との間のパケットデータの入出力、及び、フック処理部２２０と代理通信機能部２３０との間のパケットデータの入出力は、通信処理部２１０と代理通信機能部２３０との間のパケットデータの入出力と同義である。
【００３５】
例えば、ＬＩＮＵＸ（登録商標）系のＯＳの場合、通信処理部２１０の起動時に、共有ライブラリとして実装されたフック処理部２２０及び代理通信機能部２３０を環境変数ＬＤ＿ＰＲＥＬＯＡＤに指定する。フック処理部２２０は、通信機能部２４０に存在する関数名と同名の代理通信機能部２３０のＡＰＩを呼び出す関数を定義しておくことによって、通信処理部２１０による通信機能部２４０のＡＰＩの呼び出しを、代理通信機能部２３０の呼び出しに置き換える。これによって、パケットデータの受信するための通信機能部２４０の呼び出し、及びパケットデータを送信するための通信機能部２４０の呼び出しが、代理通信機能部２３０の呼び出しに変更される。
【００３６】
代理通信機能部２３０は、設定情報記憶部２６０から読み出した設定情報及びフロー情報記憶部２７０から読み出したフロー情報を用いて、パケットデータに対する通信制御を行い、通信機能部２４０と連携してＮＩＦ２０３を介してネットワーク１０１と通信する。また、代理通信機能部２３０は、通信制御を行う過程で、フロー情報の生成及び更新を行う。動作の詳細については後述する。
【００３７】
設定情報入力処理部２５０は、通信処理部２１０の管理者からの設定情報の入力を受け付け、設定情報記憶部２６０に設定情報を書き込む処理、及びフロー情報記憶部２７０に格納されたフロー情報を削除する処理を実行する。通信処理部２１０の管理者は、ＣＵＩ（Ｃｈａｒａｃｔｅｒ  Ｕｓｅｒ  Ｉｎｔｅｒｆａｃｅ）及びＧＵＩ（Ｇｒａｐｈｉｃａｌ  Ｕｓｅｒ  Ｉｎｔｅｒｆａｃｅ）を用いて各種値を入力する。なお、通信処理部２１０の管理者は、計算機１００が入力装置を有する場合には入力装置を用いて値を入力し、計算機１００が入力装置を有しない場合にはネットワークを介して外部から値を入力する。
【００３８】
ここで、各機能部の詳細を説明する。
【００３９】
代理通信機能部２３０は、送信制御アルゴリズム選択部２３１、フロー情報処理部２３２及び独自ＴＣＰ送信制御部２３３を含む。
【００４０】
通信機能部２４０は、受信部２４１、送信部２４２、ロスベースＴＣＰ送信制御部２４３及び遅延ベースＴＣＰ送信制御部２４４を含む。
【００４１】
受信部２４１は、ＮＩＦ２０３から受信パケットデータを取得する。これによって、計算機１００がネットワーク１０１からパケットデータを受信できる。受信部２４１は、受信パケットデータをフロー情報処理部２３２に転送する。
【００４２】
送信部２４２は、独自ＴＣＰ送信制御部２３３、ロスベースＴＣＰ送信制御部２４３及び遅延ベースＴＣＰ送信制御部２４４のいずれかから送信パケットデータを取得する。送信部２４２は、送信パケットデータをＮＩＦ２０３に転送する。これによって、計算機１００がネットワーク１０１にパケットデータを送信できる。
【００４３】
独自ＴＣＰ送信制御部２３３は、特許文献１に記載されたアルゴリズムに基づいてＴＣＰ送信制御を行い、送信制御アルゴリズム選択部２３１から受け取った送信パケットデータを送信部２４２に転送する。当該ＴＣＰ送信制御は、ＲＴＴ（Ｒｏｕｎｄ  Ｔｒｉｐ  Ｔｉｍｅ）及びパケット廃棄率が大きい場合に、効率的な送信制御方法である。
【００４４】
ロスベースＴＣＰ送信制御部２４３は、ＴＣＰ  Ｒｅｎｏとして知られるアルゴリズムに基づいてＴＣＰ送信制御を行い、送信制御アルゴリズム選択部２３１から受け取った送信パケットデータを送信部２４２に転送する。パケット廃棄に基づいてＴＣＰ送信制御処理が行われる。ＴＣＰ  Ｒｅｎｏは、標準的に使用されるＴＣＰ送信制御方法である。
【００４５】
遅延ベースＴＣＰ送信制御部２４４は、ＴＣＰ  Ｖｅｇａｓとして知られるアルゴリズムに基づいてＴＣＰ送信制御を行い、送信制御アルゴリズム選択部２３１から受け取った送信パケットデータを送信部２４２に転送する。ＴＣＰ  Ｖｅｇａｓは、ＲＴＴに基づいてパケット廃棄が起こらないようにＴＣＰ送信制御が行われる。これによって、閉じたネットワーク内で遅延ベースＴＣＰ送信制御部２４４同士がパケットデータの送受信を行う場合に、効率的な送信制御方法である。
【００４６】
送信制御アルゴリズム選択部２３１は、設定情報記憶部２６０から読み出した設定情報及びフロー情報記憶部２７０から読み出したフロー情報を用いて効率的なＴＣＰ送信制御を選択する。送信制御アルゴリズム選択部２３４は、選択された送信制御を行う機能部にフック処理部２２０から受け取ったパケットデータを転送する。すなわち、送信制御アルゴリズム選択部２３１は、独自ＴＣＰ送信制御部２３３、ロスベースＴＣＰ送信制御部２４３及び遅延ベースＴＣＰ送信制御部２４４のいずれかに、フック処理部２２０から受け取った送信パケットデータを転送する。また、送信制御アルゴリズム選択部２３１は、処理の過程で、フロー情報の生成及び更新を行う。処理の詳細は、図８を用いて説明する。
【００４７】
なお、計算機１００は、独自ＴＣＰ送信制御部２３３、ロスベースＴＣＰ送信制御部２４３及び遅延ベースＴＣＰ送信制御部２４４が行うＴＣＰ送信制御以外のアルゴリズムを用いてもよい。また、各ＴＣＰ送信制御部は、代理通信機能部２３０及び通信機能部２４０のどちらに含まれていてもよい。ＴＣＰ送信制御部の数は、図３に示す数に限定されず任意である。
【００４８】
フロー情報処理部２３２は、受信部２４１から受け取った受信パケットデータのヘッダ情報を用いて、フロー情報の生成及び更新を行い、フロー情報記憶部２７０にフロー情報を書き込む。また、フロー情報処理部２３２は、受信パケットデータをフック処理部２２０に転送する。処理の詳細は、図７を用いて説明する。
【００４９】
なお、通信処理部２１０、フック処理部２２０、代理通信機能部２３０、通信機能部２４０、設定情報入力処理部２５０、設定情報記憶部２６０、及びフロー情報記憶部２７０は、ソフトウェアとして実現されているが、こられの機能の一部又は全てを演算装置２００及びＮＩＦ２０３等のハードウェアを用いて実現されてもよい。
【００５０】
図４は、実施例１の計算機１００が送受信するＴＣＰパケットデータのフォーマットの一例を示す図である。
【００５１】
パケットデータは、ＭＡＣヘッダ３１０、ＩＰヘッダ３２０、ＴＣＰヘッダ３３０、ＴＣＰオプションヘッダ３４０、及びＴＣＰペイロード３５０を含む。
【００５２】
ＭＡＣヘッダ３１０は、ＤＭＡＣ３１１、ＳＭＡＣ３１２、ＴＰＩＤ３１３、ＴＣＩ３１４、及びＴｙｐe３１５を含む。
【００５３】
ＤＭＡＣ３１１は、宛先ＭＡＣアドレスを表す。ＳＭＡＣ３１２は、送信元ＭＡＣアドレスを表す。ＴＰＩＤ３１３は、タグ付きフレームであること及びタグの種類を表す。ＴＣＩ３１４は、タグの情報を表す。Ｔｙｐe３１５は、ＭＡＣフレームタイプを表す。
【００５４】
ＴＣＩ３１４は、さらに、ＰＣＰ３１６、ＣＦＩ３１７、及びＶＩＤ３１８を含む。ＰＣＰ３１６は優先度を表す。ＣＦＩ３１７は、ＭＡＣアドレスが正規フォーマットであるかを表す。ＶＩＤ３１８は、ＶＬＡＮのＩＤを表す。なお、ＶＬＡＮが使用されていないネットワークの場合、ＴＰＩＤ３１３及びＴＣＩ３１４は存在しない。この場合、計算機１００は、ＶＩＤ３１８が「０」であるものとして処理を行う。
【００５５】
ＩＰヘッダ３２０は、ＩＰ  ｌｅｎｇｔｈ３２１、ｐｒｏｔｏｃｏｌ３２２、ＳＩＰ３２３、及びＤＩＰ３２４を含む。
【００５６】
ＩＰ  ｌｅｎｇｔｈ３２１は、ＭＡＣヘッダ３１０を除くパケット長を表す。ｐｒｏｔｏｃｏｌ３２２は、プロトコル番号を表す。ＳＩＰ３２３は、送信元ＩＰアドレスを表す。ＤＩＰ３２４は、宛先ＩＰアドレスを表す。
【００５７】
ＴＣＰヘッダは、ｓｒｃ．ｐｏｒｔ３３１、ｄｓｔ．ｐｏｒｔ３３２、ＳＥＱ３３３、ＡＣＫ３３４、ｆｌａｇ３３５、ｔｃｐ  ｈｌｅｎ３３６、及びｗｉｎ＿ｓｉｚｅ３３７を含む。
【００５８】
ｓｒｃ．ｐｏｒｔ３３１は、送信元ポート番号を表す。ｄｓｔ．ｐｏｒｔ３３２は、宛先ポート番号を表す。ＳＥＱ３３３は、送信シーケンス番号を表す。ＡＣＫ３３４は、受信シーケンス番号を表す。ｆｌａｇ３３５は、ＴＣＰフラグ番号を表す。ｔｃｐ  ｈｌｅｎ３３６は、ＴＣＰのヘッダ長を表す。ｗｉｎ＿ｓｉｚｅ３３７は、対向装置へ通知する広告ウィンドウサイズを表す。
【００５９】
ＴＣＰオプションヘッダ３４０は、０又は複数のオプションを含む。例えば、ｏｐｔｉｏｎ  ｋｉｎｄ３４１、ｏｐｔｉｏｎ  ｌｅｎｇｔｈ３４２、及びオプション情報３４３等のオプションが含まれる。ｏｐｔｉｏｎ  ｋｉｎｄ３４１は、オプションの種別を表す。ｏｐｔｉｏｎ  ｌｅｎｇｔｈ３４２は、オプション長を表す。オプション情報３４３は、オプションの種類に応じた情報を表す。
【００６０】
例えば、ＭＳＳ（Ｍａｘｉｍｕｍ  Ｓｅｇｍｅｎｔ  Ｓｉｚｅ）オプションは、ＴＣＰ通信を開始するときに自装置の受信可能なＭＳＳサイズを対向装置に通知するために用いられる。ＳＡＣＫ（Ｓｅｌｅｃｔｉｖｅ  ＡＣＫｎｏｗｌｅｄｇｅｍｅｎｔ）オプションは、ＴＣＰ通信を開始するときに、自装置がＳＡＣＫオプションに対応可能であることを対向装置に通知するために用いられる。ＳＡＣＫオプションは、さらに、通信中にパケットデータの廃棄が検出されたときに部分的に受信できたデータの箇所を対向装置に通知するために用いられる。タイムスタンプオプションは、通信中の自装置の受信時刻を対向装置に通知するために用いられる。ウィンドウスケールオプションは、ｗｉｎ＿ｓｉｚｅ３３７によって通知される値をシフトするビット数を対向装置に通知することによって、対向装置に通知可能な広告ウィンドウサイズの最大値を大きくするために用いられる。このように、ＴＣＰオプションは、通信開始時及び通信中に自装置の対応可能な機能及び情報を対向装置に伝えるために用いられる。
【００６１】
図５は、実施例１の設定情報記憶部２６０に格納される設定情報のデータ構造の一例を示す図である。
【００６２】
設定情報は、ｎｅｔｗｏｒｋ＿ｌｏｃａｔｉｏｎ４０１、ｒｔｔ＿ｃｏｅ４０２、ｌｏｓｓ＿ｃｏｅ４０３、及びｔｈｒｅｓｈｏｌｄ４０４を含む。
【００６３】
ｎｅｔｗｏｒｋ＿ｌｏｃａｔｉｏｎ４０１は、自装置が位置するネットワーク構成情報を表す。例えば、インターネット、ロスベースＴＣＰ送信制御が行われた閉じたネットワーク、遅延ベースＴＣＰ送信制御が行われた閉じたネットワーク等の情報を表す。
【００６４】
ｒｔｔ＿ｃｏｅ４０２は、送信制御アルゴリズム選択部２３１が送信制御を選択するときに使用するＲＴＴの重みづけを表す任意の数値である。
【００６５】
ｌｏｓｓ＿ｃｏｅ４０３は、送信制御アルゴリズム選択部２３１が送信制御を選択するときに使用するパケット廃棄率の重みづけを表す任意の数値である。
【００６６】
ｔｈｒｅｓｈｏｌｄ４０４は、送信制御アルゴリズム選択部２３１が送信制御を選択するときに使用する閾値を表す任意の数値である。
【００６７】
図６は、実施例１のフロー情報記憶部２７０に格納されるフロー情報のデータ構造の一例を示す図である。
【００６８】
フロー情報記憶部２７０は、通信フローごとにフロー情報５００を格納する。フロー情報５００は、フロー管理情報５１０及びフロー通信状態情報５２０を含む。
【００６９】
フロー管理情報５１０は、通信フローを一意に識別するための識別情報であり、ｓｒｃ＿ｉｐ５１１、ｄｅｓｔ＿ｉｐ５１２、ｓｒｃ＿ｐｏｒｔ５１３、ｄｅｓｔ＿ｐｏｒｔ５１４、及びｖｌａｎ５１５を含む。
【００７０】
ｓｒｃ＿ｉｐ５１１は、自装置のＩＰアドレスを表す。ｄｅｓｔ＿ｉｐ５１２は、対向装置のＩＰアドレスを表す。ｓｒｃ＿ｐｏｒｔ５１３は、自装置のＴＣＰポート番号を表す。ｄｅｓｔ＿ｐｏｒｔ５１４は、対向装置のＴＣＰポート番号を表す。ｖｌａｎ５１５は、ＶＬＡＮのＩＤを表す。
【００７１】
フロー通信状態情報５２０は、通信フローの状態を表す情報であり、ｒｔｔ５２１、ｌｏｓｓ５２２、ｓｅｑ５２３、ａｃｋ＿ｂｙｔｅｓ５２４、及びｔｘ＿ｂｙｔｅｓ５２５を含む。
【００７２】
ｒｔｔ５２１は、ＲＴＴを表す。ｌｏｓｓ５２２は、パケット廃棄率を表す。ｓｅｑ５２３は、応答済みシーケンス番号を表す。ａｃｋ＿ｂｙｔｅｓ５２４は、応答済みバイト数を表す。ｔｘ＿ｂｙｔｅｓ５２５は、送信済みバイト数を表す。
【００７３】
図７は、実施例１のフロー情報処理部２３２が実行する処理の一例を説明するフローチャートである。
【００７４】
フロー情報処理部２３２は、受信部２４１からの受信パケットデータの受信を契機に、処理を開始する（ステップＳ１００）。
【００７５】
フロー情報処理部２３２は、受信パケットデータを受信した後（ステップＳ１０１）、フロー情報５００を取得するために、受信パケットデータのヘッダ情報を主記憶装置２０１にコピーする（ステップＳ１０２）。その後、フロー情報処理部２３２は、受信パケットデータをフック処理部２２０へ転送する（ステップＳ１０３）。
【００７６】
次に、フロー情報処理部２３２は、受信パケットデータが属する通信フローのフロー情報５００がフロー情報記憶部２７０に格納されているか否かを判定する（ステップＳ１０４）。具体的には、以下の処理が実行される。
【００７７】
フロー情報処理部２３２は、ｓｒｃ＿ｉｐ５１１がＤＩＰ３２４に一致し、ｄｅｓｔ＿ｉｐ５１２がＳＩＰ３２３に一致し、ｓｒｃ＿ｐｏｒｔ５１３がｄｓｔ．ｐｏｒｔ３３２に一致し、ｄｅｓｔ＿ｐｏｒｔ５１４がｓｒｃ．ｐｏｒｔ３３１に一致し、かつ、ｖｌａｎ５１５がＶＩＤ３１８に一致するフロー情報５００が存在するか否かを判定する。
【００７８】
前述した条件を満たすフロー情報５００が存在する場合、フロー情報処理部２３２は、受信パケットデータが属する通信フローのフロー情報５００がフロー情報記憶部２７０に格納されていると判定する。以上がステップＳ１０４の処理の説明である。
【００７９】
ステップＳ１０４において、受信パケットデータが属する通信フローのフロー情報５００がフロー情報記憶部２７０に格納されていると判定された場合（ステップＳ１０４：Ｙｅｓ）、フロー情報処理部２３２は、フロー情報記憶部２７０から検索されたフロー情報５００を読み出す（ステップＳ１０５）。その後、フロー情報処理部２３２は、現在時刻を取得して、ＲＴＴを算出する（ステップＳ１０６）。ＲＴＴは、例えば、ＴＣＰオプションヘッダ３４０のタイムスタンプオプションに含まれる時刻情報と現在時刻との差として算出される。なお、ＲＴＴの算出方法は、他の算出方法でもよい。
【００８０】
次に、フロー情報処理部２３２は、フロー情報５００を更新する（ステップＳ１０７）。
【００８１】
具体的には、フロー情報処理部２３２は、算出されたＲＴＴをｒｔｔ５２１に設定し、ｓｅｑ５２３とＡＣＫ３３４との差をａｃｋ＿ｂｙｔｅｓ５２４に加算し、ＡＣＫ３３４をｓｅｑ５２３に設定する。
【００８２】
次に、フロー情報処理部２３２は、更新されたフロー情報５００をフロー情報記憶部２７０に格納し（ステップＳ１０８）、処理を終了する（ステップＳ１１１）。
【００８３】
ステップＳ１０４において、受信パケットデータが属する通信フローのフロー情報５００がフロー情報記憶部２７０に格納されていないと判定された場合（ステップＳ１０４：Ｎｏ）、フロー情報処理部２３２は、フロー情報５００を新たに生成し（ステップＳ１０９）、ヘッダ情報に基づいて新たに生成されたフロー情報５００に値を設定する（ステップＳ１１０）。
【００８４】
具体的には、フロー情報処理部２３２は、ＤＩＰ３２４をｓｒｃ＿ｉｐ５１１に設定し、ＳＩＰ３２３をｄｅｓｔ＿ｉｐ５１２に設定し、ｄｓｔ．ｐｏｒｔ３３２をｓｒｃ＿ｐｏｒｔ５１３に設定し、ｓｒｃ．ｐｏｒｔ３３１をｄｅｓｔ＿ｐｏｒｔ５１４に設定し、ＶＩＤ３１８をｖｌａｎ５１５に設定し、また、ＡＣＫ３３４をｓｅｑ５２３に設定する。また、フロー情報処理部２３２は、ｒｔｔ５２１、ｌｏｓｓ５２２、ａｃｋ＿ｂｙｔｅｓ５２４及びｔｘ＿ｂｙｔｅｓ５２５のそれぞれに、「０」を設定する。
【００８５】
次に、フロー情報処理部２３２は、生成されたフロー情報５００をフロー情報記憶部２７０に格納し（ステップＳ１０８）、処理を終了する（ステップＳ１１１）。
【００８６】
図８は、実施例１の送信制御アルゴリズム選択部２３１が実行する処理を説明するフローチャートである。
【００８７】
送信制御アルゴリズム選択部２３１は、フック処理部２２０からの送信パケットデータの受信を契機に、処理を開始する（ステップＳ２００）。
【００８８】
送信制御アルゴリズム選択部２３１は、送信パケットデータを受信した後（ステップＳ２０１）、設定情報記憶部２６０から設定情報を読み出す（ステップＳ２０２）。
【００８９】
次に、送信制御アルゴリズム選択部２３１は、読み出された設定情報のｎｅｔｗｏｒｋ＿ｌｏｃａｔｉｏｎ４０１が遅延ベースＴＣＰ送信制御が行われた閉じたネットワークであるか否か判定する（ステップＳ２０３）。
【００９０】
ステップＳ２０３において、ｎｅｔｗｏｒｋ＿ｌｏｃａｔｉｏｎ４０１が遅延ベースＴＣＰ送信制御が行われた閉じたネットワークであると判定された場合（ステップＳ２０３：Ｙｅｓ）、送信制御アルゴリズム選択部２３１は、送信パケットデータを遅延ベースＴＣＰ送信制御部２４４に転送し（ステップＳ２０４）、処理を終了する（ステップＳ２１５）。
【００９１】
ステップＳ２０３において、ｎｅｔｗｏｒｋ＿ｌｏｃａｔｉｏｎ４０１が遅延ベースＴＣＰ送信制御が行われた閉じたネットワークではないと判定された場合（ステップＳ２０３：Ｎｏ）、送信制御アルゴリズム選択部２３１は、送信パケットデータが属する通信フローのフロー情報５００がフロー情報記憶部２７０に格納されているか否かを判定する（ステップＳ２０５）。具体的には、以下の処理が実行される。
【００９２】
送信制御アルゴリズム選択部２３１は、ｓｒｃ＿ｉｐ５１１がＳＩＰ３２３に一致し、ｄｅｓｔ＿ｉｐ５１２がＤＩＰ３２４に一致し、ｓｒｃ＿ｐｏｒｔ５１３がｓｒｃ．ｐｏｒｔ３３１に一致し、ｄｅｓｔ＿ｐｏｒｔ５１４がｄｓｔ．ｐｏｒｔ３３２に一致し、かつ、ｖｌａｎ５１５がＶＩＤ３１８に一致するフロー情報５００が存在するか否かを判定する。
【００９３】
前述した条件を満たすフロー情報５００が存在する場合、送信制御アルゴリズム選択部２３１は、送信パケットデータが属する通信フローのフロー情報５００がフロー情報記憶部２７０に格納されていると判定する。以上がステップＳ２０５の処理の説明である。
【００９４】
ステップＳ２０５において、送信パケットデータが属する通信フローのフロー情報５００がフロー情報記憶部２７０に格納されていないと判定された場合（ステップＳ２０５：Ｎｏ）、送信制御アルゴリズム選択部２３１は、フロー情報５００を新たに生成し（ステップＳ２０６）、ヘッダ情報に基づいて新たに生成されたフロー情報５００に値を設定する（ステップＳ２０７）。
【００９５】
具体的には、送信制御アルゴリズム選択部２３１は、ＳＩＰ３２３をｓｒｃ＿ｉｐ５１１に設定し、ＤＩＰ３２４をｄｅｓｔ＿ｉｐ５１２に設定し、ｓｒｃ．ｐｏｒｔ３３１をｓｒｃ＿ｐｏｒｔ５１３に設定し、ｄｓｔ．ｐｏｒｔ３３２をｄｅｓｔ＿ｐｏｒｔ５１４に設定し、ＶＩＤ３１８をｖｌａｎ５１５に設定し、ＳＥＱ３３３をｓｅｑ５２３に設定する。送信制御アルゴリズム選択部２３１は、ＩＰ  ｌｅｎｇｔｈ３２１から、ＩＰヘッダ長（２０バイト）とｔｃｐ  ｈｌｅｎ３３６との和を減算した値をｔｘ＿ｂｙｔｅｓ５２５に設定する。また、送信制御アルゴリズム選択部２３１は、ｒｔｔ５２１、ｌｏｓｓ５２２、ａｃｋ＿ｂｙｔｅｓ５２４、及びｔｘ＿ｂｙｔｅｓ５２５のそれぞれに、「０」を設定する。
【００９６】
次に、送信制御アルゴリズム選択部２３１は、送信パケットデータをロスベースＴＣＰ送信制御部２４３に転送する（ステップＳ２０８）。
【００９７】
次に、送信制御アルゴリズム選択部２３１は、生成されたフロー情報５００をフロー情報記憶部２７０に格納し（ステップＳ２０９）、処理を終了する（ステップＳ２１５）。
【００９８】
ステップＳ２０５において、送信パケットデータが属する通信フローのフロー情報５００がフロー情報記憶部２７０に格納されていると判定された場合（ステップＳ２０５：Ｙｅｓ）、送信制御アルゴリズム選択部２３１は、フロー情報記憶部２７０から検索されたフロー情報５００を読み出す（ステップＳ２１０）。次に、送信制御アルゴリズム選択部２３１は、パケット廃棄率を算出する（ステップＳ２１１）。パケット廃棄率は、例えば、ｔｘ＿ｂｙｔｅｓ５２５とａｃｋ＿ｂｙｔｅｓ５２４との差をｔｘ＿ｂｙｔｅｓ５２５で除することによって算出される。パケット廃棄率の計算方法は、他の計算方法でもよい。
【００９９】
次に、送信制御アルゴリズム選択部２３１は、フロー情報５００を更新する（ステップＳ２１２）。
【０１００】
具体的には、送信制御アルゴリズム選択部２３１は、算出されたパケット廃棄率をｌｏｓｓ５２２に設定し、ＩＰ  ｌｅｎｇｔｈ３２１から、ＩＰヘッダ長（２０バイト）とｔｃｐ  ｈｌｅｎ３３６との和を減算した値をｔｘ＿ｂｙｔｅｓ５２５に加算し、ＳＥＱ３３３をｓｅｑ５２３に設定する。
【０１０１】
次に、送信制御アルゴリズム選択部２３１は、式（１）を満たすか否かを判定する（ステップＳ２１３）。
【０１０２】
【数１】
2018011207.tif 000003
【０１０３】
ステップＳ２１３において、式（１）を満たすと判定された場合（ステップＳ２１３：Ｙｅｓ）、送信制御アルゴリズム選択部２３１は、送信パケットデータを独自ＴＣＰ送信制御部２３３に転送する（ステップＳ２１４）。
【０１０４】
次に、送信制御アルゴリズム選択部２３１は、更新されたフロー情報５００をフロー情報記憶部２７０に格納し（ステップＳ２０９）、処理を終了する（ステップＳ２１５）。
【０１０５】
ステップＳ２１３において、式（１）を満たさないと判定された場合（ステップＳ２１３：Ｎｏ）、送信制御アルゴリズム選択部２３１は、送信パケットデータをロスベースＴＣＰ送信制御部２４３に転送する（ステップＳ２０８）。
【０１０６】
次に、送信制御アルゴリズム選択部２３１は、更新されたフロー情報５００をフロー情報記憶部２７０に格納し（ステップＳ２０９）、処理を終了する（ステップＳ２１５）。
【０１０７】
実施例１によれば、フック処理部２２０が、通信処理部２１０と通信機能部２４０との間の処理に代理通信機能部２３０を割り込ませることによって、パケットデータをバッファすることなく、帯域制御処理を適用することができる。これによって、リソースの消費量を抑えた動的な通信制御の変更を実現できる。また、実施例１では、通信処理部２１０を変更する必要がないため、開発コストの低減及び通信処理部２１０の管理者の負担等を低減することができる。
【実施例２】
【０１０８】
実施例２では、ＵＤＰ（Ｕｓｅｒ  Ｄａｔａｇｒａｍ  Ｐｒｏｔｏｃｏｌ）通信に暗号化等の通信データの加工処理をリソースの消費量を抑えて付加するシステムを示す。なお、ＵＤＰ通信を例に説明するが、ＵＤＰ通信に特有の情報を使用しないので、ＴＣＰ通信及びＳＣＴＰ（Ｓｔｒｅａｍ  Ｃｏｎｔｒｏｌ  Ｔｒａｎｓｍｉｓｓｉｏｎ  Ｐｒｏｔｏｃｏｌ）通信等でも同様のシステムを実現できる。
【０１０９】
以下、実施例１との差異を中心に実施例２について説明する。なお、実施例１と同一の構成、同一の処理については同一の符号を付し、説明を省略する。
【０１１０】
ネットワークシステムの構成（図１）及び計算機１００のハードウェア構成（図２）は、実施例１と同様であるため説明を省略する。計算機１００のソフトウェア構成は、実施例１と異なるため後述する。
【０１１１】
図９は、実施例２の計算機１００が送受信するＵＤＰパケットデータのフォーマットの一例を示す図である。
【０１１２】
ＵＤＰパケットデータは、ＭＡＣヘッダ３１０、ＩＰヘッダ３２０、ＵＤＰヘッダ３６０、及びＵＤＰペイロード３７０を含む。
【０１１３】
ＭＡＣヘッダ３１０及びＩＰヘッダ３２０は、実施例１のＴＣＰパケットデータに含まれるヘッダと同様であるため説明を省略する。
【０１１４】
ＵＤＰヘッダ３６０は、ｓｒｃ．ｐｏｒｔ３６１、ｄｓｔ．ｐｏｒｔ３６２、及びＵＤＰ  ｌｅｎｇｔｈ３６３を含む。
【０１１５】
ｓｒｃ．ｐｏｒｔ３６１は、送信元ポート番号を表す。ｄｓｔ．ｐｏｒｔ３６２は、宛先ポート番号を表す。ＵＤＰ  ｌｅｎｇｔｈ３６３は、ＵＤＰヘッダ３６０及びＵＤＰペイロード３７０を合わせたデータ長を表す。
【０１１６】
ＵＤＰペイロード３７０は、ｐａｃｋｅｔ＿ｔｙｐｅ３７１及びａｖａｉｌａｂｌｅ＿ｆｕｎｃ３７２を含む。
【０１１７】
ｐａｃｋｅｔ＿ｔｙｐｅ３７１は、パケット種別を表す。ａｖａｉｌａｂｌｅ＿ｆｕｎｃ３７２は、利用可能なデータ加工処理の種別を表す。ｐａｃｋｅｔ＿ｔｙｐｅ３７１及びａｖａｉｌａｂｌｅ＿ｆｕｎｃ３７２は、実施例２の代理通信機能部２３０によって使用される。なお、ｐａｃｋｅｔ＿ｔｙｐｅ３７１及びａｖａｉｌａｂｌｅ＿ｆｕｎｃ３７２は、存在しない場合もある。
【０１１８】
実施例２では、後述する制御情報パケットデータのうちの一つは、ｐａｃｋｅｔ＿ｔｙｐｅ３７１に制御情報パケットデータを表す「０」、ａｖａｉｌａｂｌｅ＿ｆｕｎｃ３７２に二進数で「１１０」が設定される。この例では、ａｖａｉｌａｂｌｅ＿ｆｕｎｃ３７２の下位から１ビット目が差分転送機能、２ビット目がデータ圧縮機能、３ビット目が暗号化機能を意味し、「１」が利用可能、「０」が利用不可を表す。ａｖａｉｌａｂｌｅ＿ｆｕｎｃ３７２が「１１０」の場合、利用可能なデータ加工処理がデータ圧縮機能及び暗号化機能であることを意味する。
【０１１９】
パケットデータがデータ圧縮パケットデータである場合、ｐａｃｋｅｔ＿ｔｙｐｅ３７１にはデータ圧縮パケットデータを表す「２」が設定される。当該パケットデータには、ａｖａｉｌａｂｌｅ＿ｆｕｎｃ３７２が存在せず、ｐａｃｋｅｔ＿ｔｙｐｅ３７１以外の部分は、圧縮されたデータが設定される。
【０１２０】
図１０は、実施例２の計算機１００のソフトウェア構成の詳細を示すブロック図である。
【０１２１】
計算機１００の主記憶装置２０１は、通信処理部２１０、フック処理部２２０、代理通信機能部２３０、通信機能部２４０、及び設定情報入力処理部２５０を実現するプログラムを含む。また、計算機１００の主記憶装置２０１は、設定情報記憶部２６０及びフロー情報記憶部２７０を含む。
【０１２２】
実施例２では、計算機１００は、自装置及び対向装置の利用可能なデータ加工処理の種別を表す制御情報を含む制御情報パケットデータを送受信することによって互いに制御情報を通知する。
【０１２３】
代理通信機能部２３０は、送信制御アルゴリズム選択部２３４、フロー情報処理部２３５、差分転送処理部２３６、及びデータ圧縮処理部２３７を含む。通信機能部２４０は、受信部２４５、送信部２４６及び暗号化処理部２４７を含む。
【０１２４】
通信処理部２１０、フック処理部２２０、設定情報入力処理部２５０、設定情報記憶部２６０、フロー情報記憶部２７０は、実施例１と同様であるため説明を省略する。
【０１２５】
なお、設定情報記憶部２６０及びフロー情報記憶部２７０が格納される情報は実施例１と異なる。設定情報記憶部２６０及びフロー情報記憶部２７０が格納される情報は、図１２及び図１３を用いて説明する。
【０１２６】
受信部２４５は、ＮＩＦ２０３から受信パケットデータを取得する。これによって、計算機１００は、ネットワーク１０１から計算機１００がパケットデータを受信できる。受信部２４５は、受信パケットデータを暗号化処理部２４７に転送する。
【０１２７】
送信部２４６は、送信制御アルゴリズム選択部２３４、差分転送処理部２３６、データ圧縮処理部２３７、及び暗号化処理部２４７のいずれかから送信パケットデータを取得する。送信部２４６は、送信パケットデータをＮＩＦ２０３に転送する。これによって、計算機１００がネットワーク１０１にパケットデータを送信できる。
【０１２８】
差分転送処理部２３６は、送信制御アルゴリズム選択部２３４から受け取った送信パケットデータに対して差分符号化を行い、符号化された送信パケットデータを送信部２４６に転送する。差分符号処理では、差分転送処理部２３６は、ＩＥＴＦ  ＲＦＣ３２８４に記載のアルゴリズムに基づいて、ＵＤＰペイロード３７０に対して差分符号化を行い、差分転送パケットデータを表す情報を設定したｐａｃｋｅｔ＿ｔｙｐｅ３７１のデータを付加する。
【０１２９】
データ圧縮処理部２３７は、送信制御アルゴリズム選択部２３４から受け取った送信パケットデータを圧縮し、圧縮された送信パケットデータを送信部２４６に転送する。データ圧縮処理では、データ圧縮処理部２３７は、ＩＥＴＦ  ＲＦＣ１９５１に記載のアルゴリズムに基づいて、ＵＤＰペイロード３７０を圧縮し、データ圧縮パケットデータを表す情報を設定したｐａｃｋｅｔ＿ｔｙｐｅ３７１のデータを付加する。
【０１３０】
フロー情報処理部２３５は、暗号化処理部２４７から受け取った受信パケットデータの内容に応じて、差分転送パケットデータの差分復号処理、データ圧縮パケットデータの解凍処理、フロー情報記憶部２７０へのフロー情報７００の書込処理等を実行する。フロー情報処理部２３５は、受信パケットデータをフック処理部２２０に転送する。
【０１３１】
受信パケットデータが制御情報パケットデータの場合、フロー情報処理部２３５は、受信パケットデータに含まれる制御情報をフロー情報７００に設定することによって、対向装置が利用可能なデータ加工処理の種別をフロー情報記憶部２７０に記憶する点が実施例１と異なる。処理の詳細は、図１３を用いて説明する。
【０１３２】
暗号化処理部２４７は、ＩＥＴＦ  ＲＦＣ４３０１に記載された暗号化及び復号化処理を実行する。暗号化処理部２４７は、送信制御アルゴリズム選択部２３４から受け取った送信パケットデータを暗号化し、送信部２４６に転送する。受信部２４５から受け取った受信パケットデータが暗号化パケットデータの場合、暗号化処理部２４７は、暗号化パケットデータを復号化した後、復号化された受信パケットデータをフロー情報処理部２３５に転送する。受信部２４５から受け取る受信パケットデータが暗号化パケットデータでない場合、暗号化処理部２４７は、受信パケットデータを変更せずにフロー情報処理部２３５に転送する。
【０１３３】
なお、受信パケットデータのｐｒｏｔｏｃｏｌ３２２がＥＳＰ（Ｅｎｃａｐｓｕｌａｔｉｎｇ  Ｓｅｃｕｒｉｔｙ  Ｐａｙｌｏａｄ）を表す「５０」又はＡＨ（Ａｕｔｈｅｎｔｉｃａｔｉｏｎ  Ｈｅａｄｅｒ）を表す「５１」であるか否かを判定することによって、受信パケットデータが暗号化パケットデータであるか否かを判定できる。
【０１３４】
送信制御アルゴリズム選択部２３４は、設定情報記憶部２６０から読み出した設定情報及びフロー情報記憶部２７０から読み出したフロー情報７００を用いて、データ加工処理を選択し、差分転送処理部２３６、データ圧縮処理部２３７、暗号化処理部２４７又は送信部２４６のいずれかに、フック処理部２２０から受け取った送信パケットデータを転送する。送信制御アルゴリズム選択部２３４は、処理の過程で、フロー情報７００の生成及び更新を行い、フロー情報記憶部２７０にフロー情報７００を書き込む。送信制御アルゴリズム選択部２３４は、制御情報を含む制御情報パケットデータを生成し、送信部２４６に転送することによって対向装置に自装置が利用可能なデータ加工処理の種別を通知する点が実施例１と異なる。処理の詳細は、図１４を用いて説明する。
【０１３５】
なお、差分転送処理部２３６、データ圧縮処理部２３７、及び暗号化処理部２４７が行うデータ加工処理以外のデータ加工処理を用いてもよい。また、送信制御アルゴリズム選択部２３４は、一つのパケットデータに対して二つ以上のデータ加工処理を適用してもよい。また、各データ加工処理部は、代理通信機能部２３０及び通信機能部２４０のどちらに含まれていてもよい。データ加工処理部の数は、図１０に示す数に限定されず任意である。
【０１３６】
図１１は、実施例２の設定情報記憶部２６０に格納される設定情報のデータ構造の一例を示す図である。
【０１３７】
設定情報は、自装置設定情報６００及び複数の対向装置設定情報６１０を含む。
【０１３８】
自装置設定情報６００は、自装置が利用可能なデータ加工処理の種別を表し、ｅｎａｂｌｅ＿ｄｅｌｔａ＿ｅｎｃｏｄｉｎｇ６０１、ｅｎａｂｌｅ＿ｃｏｍｐｒｅｓｓｉｏｎ６０２、及びｅｎａｂｌｅ＿ｃｒｙｐｔｏ６０３を含む。
【０１３９】
ｅｎａｂｌｅ＿ｄｅｌｔａ＿ｅｎｃｏｄｉｎｇ６０１は、自装置が差分転送機能を利用できるか否かを表す。ｅｎａｂｌｅ＿ｃｏｍｐｒｅｓｓｉｏｎ６０２は、自装置がデータ圧縮機能を利用できるか否かを表す。ｅｎａｂｌｅ＿ｃｒｙｐｔｏ６０３は、自装置が暗号化機能を利用できるか否かを表す。
【０１４０】
実施例２では、ｅｎａｂｌｅ＿ｄｅｌｔａ＿ｅｎｃｏｄｉｎｇ６０１、ｅｎａｂｌｅ＿ｃｏｍｐｒｅｓｓｉｏｎ６０２、及びｅｎａｂｌｅ＿ｃｒｙｐｔｏ６０３には、それぞれ、利用可能であることを表す「１」、又は、利用不可であることを表す「０」のいずれかが設定される。
【０１４１】
対向装置設定情報６１０は、ｉｐ＿ａｄｄｒｅｓｓ６１１、ｐｒｅｆｉｘ＿ｌｅｎｇｔｈ６１２、ｐｏｒｔ６１３、ｖｌａｎ６１４、ｕｓｅ＿ｄｅｌｔａ＿ｅｎｃｏｄｉｎｇ６１５、ｕｓｅ＿ｃｏｍｐｒｅｓｓｉｏｎ６１６、及びｕｓｅ＿ｃｒｙｐｔｏ６１７を含む。
【０１４２】
ｉｐ＿ａｄｄｒｅｓｓ６１１、ｐｒｅｆｉｘ＿ｌｅｎｇｔｈ６１２、ｐｏｒｔ６１３及びｖｌａｎ６１４の四つの情報は、通信フローが属する対向装置のネットワーク情報を表す。
【０１４３】
例えば、ネットワークが「１９２．１６８．２５５．０／２４」、ポート番号が「６９」かつＶＬＡＮのＩＤが「１００」の場合、ｉｐ＿ａｄｄｒｅｓｓ６１１には「１９２．１６８．２５５．０」、ｐｒｅｆｉｘ＿ｌｅｎｇｔｈ６１２には「２４」、ｐｏｒｔ６１３には「６９」、ｖｌａｎ６１４には「１００」が設定される。全てのネットワーク、全てのポート、及びＶＬＡＮなしを表す場合、ｉｐ＿ａｄｄｒｅｓｓ６１１には「０．０．０．０」、ｐｒｅｆｉｘ＿ｌｅｎｇｔｈ６１２には「０」、ｐｏｒｔ６１３には「ａｎｙ」、ｖｌａｎ６１４には「０」が設定される。
【０１４４】
ｕｓｅ＿ｄｅｌｔａ＿ｅｎｃｏｄｉｎｇ６１５は、対向装置に対して差分転送機能を使用するか否かを表す。ｕｓｅ＿ｃｏｍｐｒｅｓｓｉｏｎ６１６は、対向装置に対してデータ圧縮機能を使用するか否かを表す。ｕｓｅ＿ｃｒｙｐｔｏ６１７は、対向装置に対して暗号化機能を使用するか否かを表す。
【０１４５】
実施例２では、ｕｓｅ＿ｄｅｌｔａ＿ｅｎｃｏｄｉｎｇ６１５、ｕｓｅ＿ｃｏｍｐｒｅｓｓｉｏｎ６１６、及びｕｓｅ＿ｃｒｙｐｔｏ６１７には、それぞれ、使用することを表す「１」、又は、使用しないことを表す「０」のいずれかが設定される。
【０１４６】
図１２は、実施例２のフロー情報記憶部２７０に格納されるフロー情報のデータ構造の一例を示す図である。
【０１４７】
フロー情報記憶部２７０は、通信フローごとにフロー情報７００を格納する。フロー情報７００は、フロー管理情報７１０及びフロー通信状態情報７２０を含む。
【０１４８】
フロー管理情報７１０は、通信フローを一意に識別するための識別情報であり、ｓｒｃ＿ｉｐ７１１、ｄｅｓｔ＿ｉｐ７１２、ｓｒｃ＿ｐｏｒｔ７１３、ｄｅｓｔ＿ｐｏｒｔ７１４、及びｖｌａｎ７１５を含む。
【０１４９】
ｓｒｃ＿ｉｐ７１１、ｄｅｓｔ＿ｉｐ７１２、及びｖｌａｎ７１５は、ｓｒｃ＿ｉｐ５１１、ｄｅｓｔ＿ｉｐ５１２、及びｖｌａｎ５１５と同様のものである。ｓｒｃ＿ｐｏｒｔ７１３は、自装置のＵＤＰポート番号を表す。ｄｅｓｔ＿ｐｏｒｔ７１４は、対向装置のＵＤＰポート番号を表す。
【０１５０】
フロー通信状態情報７２０は、通信フローの状態を表す情報であり、ａｌｒｅａｄｙ＿ｓｅｎｔ７２１、ａｖａｉｌａｂｌｅ＿ｄｅｌｔａ＿ｅｎｃｏｄｉｎｇ７２２、ａｖａｉｌａｂｌｅ＿ｃｏｍｐｒｅｓｓｉｏｎ７２３、ａｖａｉｌａｂｌｅ＿ｃｒｙｐｔｏ７２４、及びｄａｔａ＿ｃａｃｈｅ７２５を含む。
【０１５１】
ａｌｒｅａｄｙ＿ｓｅｎｔ７２１は、通信フローにおいて制御情報パケットデータが送信済みであるか否かを表す。ａｖａｉｌａｂｌｅ＿ｄｅｌｔａ＿ｅｎｃｏｄｉｎｇ７２２は、差分転送機能が利用可能か否かを表す。ａｖａｉｌａｂｌｅ＿ｃｏｍｐｒｅｓｓｉｏｎ７２３は、データ圧縮機能が利用可能か否かを表す。ａｖａｉｌａｂｌｅ＿ｃｒｙｐｔｏ７２４は、暗号化機能が利用可能か否かを表す。ｄａｔａ＿ｃａｃｈｅ７２５は、差分転送機能で使用される通信フローのデータキャッシュを表す。
【０１５２】
実施例２では、ａｌｒｅａｄｙ＿ｓｅｎｔ７２１には、制御情報パケットデータが送信済みであることを表す「１」、又は、制御情報パケットデータが送信済みでないことを表す「０」のいずれかが設定される。また、ａｖａｉｌａｂｌｅ＿ｄｅｌｔａ＿ｅｎｃｏｄｉｎｇ７２２、ａｖａｉｌａｂｌｅ＿ｃｏｍｐｒｅｓｓｉｏｎ７２３、ａｖａｉｌａｂｌｅ＿ｃｒｙｐｔｏ７２４のそれぞれには、利用可能であることを表す「１」、又は、利用不可であることを表す「０」のいずれかが設定される。また、ｄａｔａ＿ｃａｃｈｅ７２５が「０」の場合、データキャッシュが空であることを表す。
【０１５３】
図１３Ａ及び図１３Ｂは、実施例２のフロー情報処理部２３５が実行する処理を説明するフローチャートである。
【０１５４】
フロー情報処理部２３５は、暗号化処理部２４７からの受信パケットデータの受信を契機に、処理を開始する（ステップＳ３００）。フロー情報処理部２３５は、受信パケットデータを受信した後（ステップＳ３０１）、受信パケットデータのｐａｃｋｅｔ＿ｔｙｐｅ３７１を参照して、パケット種別を特定する（ステップＳ３０２）。
【０１５５】
ステップＳ３０２において、パケット種別が差分転送パケットデータであると判定された場合（ステップＳ３０２：差分転送パケット）、フロー情報処理部２３５は、フロー情報記憶部２７０から受信パケットデータが属する通信フローのフロー情報７００を読み出す（ステップＳ３０３）。
【０１５６】
具体的には、フロー情報処理部２３５は、ｓｒｃ＿ｉｐ７１１がＤＩＰ３２４に一致し、ｄｅｓｔ＿ｉｐ７１２がＳＩＰ３２３に一致し、ｓｒｃ＿ｐｏｒｔ７１３がｄｓｔ．ｐｏｒｔ３３２に一致し、ｄｅｓｔ＿ｐｏｒｔ７１４がｓｒｃ．ｐｏｒｔ３３１に一致し、かつ、ｖｌａｎ７１５がＶＩＤ３１８に一致するフロー情報７００を読み出す。
【０１５７】
次に、フロー情報処理部２３５は、読み出したフロー情報７００のｄａｔａ＿ｃａｃｈｅ７２５を用いて、受信パケットデータのＵＤＰペイロード３７０に対して差分復号処理を実行する（ステップＳ３０４）。また、フロー情報処理部２３５は、復号化された受信パケットデータをｄａｔａ＿ｃａｃｈｅ７２５に追加することによってフロー情報７００を更新する（ステップＳ３０５）。
【０１５８】
次に、フロー情報処理部２３５は、更新されたフロー情報７００をフロー情報記憶部２７０に格納し（ステップＳ３０６）、その後、受信パケットデータをフック処理部２２０に転送し（ステップＳ３０７）、処理を終了する（ステップＳ３１５）。
【０１５９】
ステップＳ３０２において、パケット種別がデータ圧縮パケットデータであると判定された場合（ステップＳ３０２：データ圧縮パケット）、フロー情報処理部２３５は、受信パケットデータのＵＤＰペイロード３７０を解凍することによって圧縮前のデータを復元する（ステップＳ３０８）。
【０１６０】
次に、フロー情報処理部２３５は、受信パケットデータをフック処理部２２０に転送し（ステップＳ３０７）、処理を終了する（ステップＳ３１５）。
【０１６１】
ステップＳ３０２において、パケット種別が制御情報パケットデータであると判定された場合（ステップＳ３０２：制御情報パケット）、フロー情報処理部２３５は、受信パケットデータが属する通信フローのフロー情報７００がフロー情報記憶部２７０に格納されているか否かを判定する（ステップＳ３０９）。具体的には、以下のような処理が実行される。
【０１６２】
フロー情報処理部２３５は、ｓｒｃ＿ｉｐ７１１がＤＩＰ３２４に一致し、ｄｅｓｔ＿ｉｐ７１２がＳＩＰ３２３に一致し、ｓｒｃ＿ｐｏｒｔ７１３がｄｓｔ．ｐｏｒｔ３３２に一致し、ｄｅｓｔ＿ｐｏｒｔ７１４がｓｒｃ．ｐｏｒｔ３３１に一致し、かつ、ｖｌａｎ７１５がＶＩＤ３１８に一致するフロー情報７００が存在するか否かを判定する。
【０１６３】
前述した条件を満たすフロー情報７００が存在する場合、フロー情報処理部２３５は、受信パケットデータが属する通信フローのフロー情報７００がフロー情報記憶部２７０に格納されていると判定する。以上がステップＳ３０９の処理の説明である。
【０１６４】
ステップＳ３０９において、受信パケットデータが属する通信フローのフロー情報７００がフロー情報記憶部２７０に格納されていないと判定された場合（ステップＳ３０９：Ｎｏ）、フロー情報処理部２３５は、フロー情報７００を新たに生成し（ステップＳ３１０）、ヘッダ情報に基づいて新たに生成されたフロー情報７００に値を設定する（ステップＳ３１１）。
【０１６５】
具体的には、フロー情報処理部２３５は、ＤＩＰ３２４をｓｒｃ＿ｉｐ７１１に設定し、ＳＩＰ３２３をｄｅｓｔ＿ｉｐ７１２に設定し、ｄｓｔ．ｐｏｒｔ３３２をｓｒｃ＿ｐｏｒｔ７１３に設定し、ｓｒｃ．ｐｏｒｔ３３１をｄｅｓｔ＿ｐｏｒｔ７１４に設定し、ＶＩＤ３１８をｖｌａｎ７１５に設定する。
【０１６６】
次に、フロー情報処理部２３５は、生成したフロー情報７００に制御情報を設定する（ステップＳ３１３）。
【０１６７】
具体的には、フロー情報処理部２３５は、ａｖａｉｌａｂｌｅ＿ｆｕｎｃ３７２の下位から１ビット目をａｖａｉｌａｂｌｅ＿ｄｅｌｔａ＿ｅｎｃｏｄｉｎｇ７２２に設定し、２ビット目をａｖａｉｌａｂｌｅ＿ｃｏｍｐｒｅｓｓｉｏｎ７２３に設定し、３ビット目をａｖａｉｌａｂｌｅ＿ｃｒｙｐｔｏ７２４に設定する。なお、ａｖａｉｌａｂｌｅ＿ｆｕｎｃ３７２の下位から１ビット目が差分転送機能、２ビット目がデータ圧縮機能、３ビット目が暗号化機能を意味する。
【０１６８】
次に、フロー情報処理部２３５は、生成されたフロー情報７００をフロー情報記憶部２７０に格納し（ステップＳ３１４）、処理を終了する（ステップＳ３１５）。
【０１６９】
ステップＳ３０９において、受信パケットデータが属する通信フローのフロー情報７００がフロー情報記憶部２７０に格納されていると判定された場合（ステップＳ３０９：Ｙｅｓ）、フロー情報処理部２３５は、フロー情報記憶部２７０から検索されたフロー情報７００を読み出す（ステップＳ３１２）。その後、フロー情報処理部２３５は、読み出したフロー情報７００に制御情報を設定する（ステップＳ３１３）。
【０１７０】
次に、フロー情報処理部２３５は、更新されたフロー情報７００をフロー情報記憶部２７０に格納し（ステップＳ３１４）、処理を終了する（ステップＳ３１５）。
【０１７１】
ステップＳ３０２において、パケット種別が差分転送パケットデータ、データ圧縮パケットデータ、制御情報パケットデータのいずれにも該当しないと判定された場合（ステップＳ３０２：他のパケット）、フロー情報処理部２３５は、受信パケットデータを変更せずにフック処理部２２０に転送し（ステップＳ３０７）、処理を終了する（ステップＳ３１５）。
【０１７２】
図１４Ａ、図１４Ｂ、及び図１４Ｃは、実施例２の送信制御アルゴリズム選択部２３４が実行する処理を説明するフローチャートである。
【０１７３】
送信制御アルゴリズム選択部２３４は、フック処理部２２０からの送信パケットデータの受信を契機に処理を開始する（ステップＳ４００）。
【０１７４】
送信制御アルゴリズム選択部２３４は、送信パケットデータを受信した後（ステップＳ４０１）、設定情報記憶部２６０から設定情報を読み出す（ステップＳ４０２）。
【０１７５】
次に、送信制御アルゴリズム選択部２３４は、送信パケットデータが属する通信フローのフロー情報７００がフロー情報記憶部２７０に格納されているか否かを判定する（ステップＳ４０３）。具体的には、以下の処理が実行される。
【０１７６】
送信制御アルゴリズム選択部２３４は、ｓｒｃ＿ｉｐ７１１がＳＩＰ３２３に一致し、ｄｅｓｔ＿ｉｐ７１２がＤＩＰ３２４に一致し、ｓｒｃ＿ｐｏｒｔ７１３がｓｒｃ．ｐｏｒｔ３３１に一致し、ｄｅｓｔ＿ｐｏｒｔ７１４がｄｓｔ．ｐｏｒｔ３３２に一致し、かつ、ｖｌａｎ７１５がＶＩＤ３１８に一致するフロー情報７００が存在するか否かを判定する。
【０１７７】
前述した条件を満たすフロー情報７００が存在する場合は、送信制御アルゴリズム選択部２３４は、送信パケットデータが属する通信フローのフロー情報７００がフロー情報記憶部２７０に格納されていると判定する。以上がステップＳ４０３の処理の説明である。
【０１７８】
ステップＳ４０３において、送信パケットデータが属する通信フローのフロー情報７００がフロー情報記憶部２７０に格納されていないと判定された場合（ステップＳ４０３：Ｎｏ）、送信制御アルゴリズム選択部２３４は、フロー情報７００を新たに生成し（ステップＳ４０４）、ヘッダ情報に基づいて新たに生成されたフロー情報７００に値を設定する（ステップＳ４０５）。
【０１７９】
具体的には、送信制御アルゴリズム選択部２３４は、ＳＩＰ３２３をｓｒｃ＿ｉｐ７１１に設定し、ＤＩＰ３２４をｄｅｓｔ＿ｉｐ７１２に設定し、ｓｒｃ．ｐｏｒｔ３３１をｓｒｃ＿ｐｏｒｔ７１３に設定し、ｄｓｔ．ｐｏｒｔ３３２をｄｅｓｔ＿ｐｏｒｔ７１４に設定し、かつ、ＶＩＤ３１８をｖｌａｎ７１５に設定する。また、ａｖａｉｌａｂｌｅ＿ｄｅｌｔａ＿ｅｎｃｏｄｉｎｇ７２２、ａｖａｉｌａｂｌｅ＿ｃｏｍｐｒｅｓｓｉｏｎ７２３、ａｖａｉｌａｂｌｅ＿ｃｒｙｐｔｏ７２４、及びｄａｔａ＿ｃａｃｈｅ７２５のそれぞれに「０」を設定する。
【０１８０】
次に、送信制御アルゴリズム選択部２３４は、生成されたフロー情報７００に制御情報パケットデータが送信されたことを示す情報を設定する（ステップＳ４０６）。具体的には、ステップＳ４０６において、送信制御アルゴリズム選択部２３４は、生成されたフロー情報７００のａｌｒｅａｄｙ＿ｓｅｎｔ７２１を「１」に設定する。その後、送信制御アルゴリズム選択部２３４は、生成されたフロー情報７００をフロー情報記憶部２７０に格納する（ステップＳ４０７）。
【０１８１】
次に、送信制御アルゴリズム選択部２３４は、制御情報パケットデータを生成する（ステップＳ４０８）。
【０１８２】
具体的には、送信制御アルゴリズム選択部２３４は、ｐａｃｋｅｔ＿ｔｙｐｅ３７１に制御情報パケットデータを表す「０」を設定し、ａｖａｉｌａｂｌｅ＿ｆｕｎｃ３７２の下位から１ビット目にｅｎａｂｌｅ＿ｄｅｌｔａ＿ｅｎｃｏｄｉｎｇ６０１を設定し、２ビット目にｅｎａｂｌｅ＿ｃｏｍｐｒｅｓｓｉｏｎ６０２を設定し、３ビット目にｅｎａｂｌｅ＿ｃｒｙｐｔｏ６０３を設定することによって、制御情報パケットデータを生成する。
【０１８３】
次に、送信制御アルゴリズム選択部２３４は、送信パケットデータ及び生成された制御情報パケットデータを送信部２４６に転送し（ステップＳ４０９）、処理を終了する（ステップＳ４２１）。
【０１８４】
ステップＳ４０３において、送信パケットデータが属する通信フローのフロー情報７００がフロー情報記憶部２７０に格納されていると判定された場合（ステップＳ４０３：Ｙｅｓ）、送信制御アルゴリズム選択部２３４は、フロー情報記憶部２７０から検索されたフロー情報７００を読み出す（ステップＳ４１０）。
【０１８５】
次に、送信制御アルゴリズム選択部２３４は、送信パケットデータが属する通信フローにおいて、制御情報パケットデータが送信済みであるか否かを判定する（ステップＳ４１１）。
【０１８６】
具体的には、送信制御アルゴリズム選択部２３４は、読み出したフロー情報７００のａｌｒｅａｄｙ＿ｓｅｎｔ７２１が「１」であるか否かを判定する。ａｌｒｅａｄｙ＿ｓｅｎｔ７２１が「１」である場合は、送信制御アルゴリズム選択部２３４は、制御情報パケットデータが送信済みであると判定する。
【０１８７】
ステップＳ４１１において、送信パケットデータが属する通信フローにおいて、制御情報パケットデータが送信済みでないと判定された場合（ステップＳ４１１：Ｎｏ）、送信制御アルゴリズム選択部２３４は、読み出したフロー情報７００のａｌｒｅａｄｙ＿ｓｅｎｔ７２１を「１」に設定することによって、フロー情報７００を更新する（ステップＳ４０６）。
【０１８８】
次に、送信制御アルゴリズム選択部２３４は、更新したフロー情報７００をフロー情報記憶部２７０に格納する（ステップＳ４０７）。
【０１８９】
次に、送信制御アルゴリズム選択部２３４は、制御情報パケットデータを生成する（ステップＳ４０８）。
【０１９０】
次に、送信制御アルゴリズム選択部２３４は、送信パケットデータ及び生成された制御情報パケットデータを送信部２４６に転送し（ステップＳ４０９）、処理を終了する（ステップＳ４２１）。
【０１９１】
ステップＳ４１１において、送信パケットデータが属する通信フローにおいて、制御情報パケットデータが送信済みであると判定された場合（ステップＳ４１１：Ｙｅｓ）、送信制御アルゴリズム選択部２３４は、フロー情報７００及び設定情報のそれぞれについて差分転送が有効化されているか否か判定する（ステップＳ４１２）。すなわち、自装置及び対向装置が、それぞれ、差分転送の機能を使用できるか否かが判定される。具体的には、以下の処理が実行される。
【０１９２】
送信制御アルゴリズム選択部２３４は、読み出したフロー情報７００のａｖａｉｌａｂｌｅ＿ｄｅｌｔａ＿ｅｎｃｏｄｉｎｇ７２２が「１」であり、また、設定情報の上位ビットからｐｒｅｆｉｘ＿ｌｅｎｇｔｈ６１２が表す値分がＤＩＰ３２４とｉｐ＿ａｄｄｒｅｓｓ６１１とで一致し、ｄｓｔ．ｐｏｒｔ３３２がｐｏｒｔ６１３に一致し、かつ、ＶＩＤ３１８がｖｌａｎ６１４に一致する対向装置設定情報６１０のｕｓｅ＿ｄｅｌｔａ＿ｅｎｃｏｄｉｎｇ６１５が「１」であるとき、フロー情報７００及び設定情報のそれぞれについて差分転送が有効化されていると判定する。
【０１９３】
ただし、前述の条件を満たす対向装置設定情報６１０が存在しないときは、ｕｓｅ＿ｄｅｌｔａ＿ｅｎｃｏｄｉｎｇ６１５は「０」として扱われる。以上がステップＳ４１２の処理の説明である。
【０１９４】
ステップＳ４１２において、フロー情報７００及び設定情報のそれぞれについて差分転送が有効化されていると判定された場合（ステップＳ４１２：Ｙｅｓ）、送信制御アルゴリズム選択部２３４は、送信パケットデータ及び読み出したフロー情報７００のｄａｔａ＿ｃａｃｈｅ７２５を差分転送処理部２３６に転送する（ステップＳ４１３）。
【０１９５】
次に、送信制御アルゴリズム選択部２３４は、送信パケットデータのＵＤＰペイロード３７０をｄａｔａ＿ｃａｃｈｅ７２５に追加することによって、フロー情報７００を更新する（ステップＳ４１４）。
【０１９６】
次に、送信制御アルゴリズム選択部２３４は、更新されたフロー情報７００をフロー情報記憶部２７０に格納し（ステップＳ４１５）、処理を終了する（ステップＳ４２１）。
【０１９７】
ステップＳ４１２において、フロー情報７００及び設定情報のいずれかが差分転送が有効化されていないと判定された場合（ステップＳ４１２：Ｎｏ）、送信制御アルゴリズム選択部２３４は、フロー情報７００及び設定情報のそれぞれについてデータ圧縮が有効化されているか否か判定する（ステップＳ４１６）。すなわち、自装置及び対向装置が、それぞれ、データ圧縮の機能を使用できるか否かが判定される。具体的には、以下の処理が実行される。
【０１９８】
送信制御アルゴリズム選択部２３４は、読み出したフロー情報７００のａｖａｉｌａｂｌｅ＿ｃｏｍｐｒｅｓｓｉｏｎ７２３が「１」であり、また、設定情報の上位ビットからｐｒｅｆｉｘ＿ｌｅｎｇｔｈ６１２が表す値分がＤＩＰ３２４とｉｐ＿ａｄｄｒｅｓｓ６１１とで一致し、ｄｓｔ．ｐｏｒｔ３３２がｐｏｒｔ６１３に一致し、かつ、ＶＩＤ３１８がｖｌａｎ６１４に一致する対向装置設定情報６１０のｕｓｅ＿ｃｏｍｐｒｅｓｓｉｏｎ６１６が「１」であるとき、フロー情報７００及び設定情報のそれぞれについてデータ圧縮が有効化されていると判定する。
【０１９９】
ただし、前述の条件を満たす対向装置設定情報６１０が存在しないときは、ｕｓｅ＿ｃｏｍｐｒｅｓｓｉｏｎ６１６は「０」として扱われる。以上がステップＳ４１６の処理の説明である。
【０２００】
ステップＳ４１６において、フロー情報７００及び設定情報のそれぞれについてデータ圧縮が有効化されていると判定された場合（ステップＳ４１６：Ｙｅｓ）、送信制御アルゴリズム選択部２３４は、送信パケットデータをデータ圧縮処理部２３７に転送し（ステップＳ４１７）、処理を終了する（ステップＳ４２１）。
【０２０１】
ステップＳ４１６において、フロー情報７００及び設定情報のそれぞれについてデータ圧縮が有効化されていないと判定された場合（ステップＳ４１６：Ｎｏ）、送信制御アルゴリズム選択部２３４は、フロー情報７００及び設定情報のそれぞれについて暗号化が有効化されているか否か判定する（ステップＳ４１８）。すなわち、自装置及び対向装置が、それぞれ、暗号化の機能を使用できるか否かが判定される。具体的には、以下の処理が実行される。
【０２０２】
送信制御アルゴリズム選択部２３４は、読み出したフロー情報７００のａｖａｉｌａｂｌｅ＿ｃｒｙｐｔｏ７２４が「１」であり、また、設定情報の上位ビットからｐｒｅｆｉｘ＿ｌｅｎｇｔｈ６１２が表す値分がＤＩＰ３２４とｉｐ＿ａｄｄｒｅｓｓ６１１とで一致し、ｄｓｔ．ｐｏｒｔ３３２がｐｏｒｔ６１３に一致し、かつ、ＶＩＤ３１８がｖｌａｎ６１４に一致する対向装置設定情報６１０のｕｓｅ＿ｃｒｙｐｔｏ６１７が「１」であるとき、フロー情報７００及び設定情報のそれぞれについて暗号化が有効化されていると判定する。
【０２０３】
ただし、前述の条件を満たす対向装置設定情報６１０が存在しないときは、ｕｓｅ＿ｃｒｙｐｔｏ６１７は「０」として扱われる。以上がステップＳ４１８の処理の説明である。
【０２０４】
ステップＳ４１８において、フロー情報７００及び設定情報のそれぞれについて暗号化が有効化されていると判定された場合（ステップＳ４１８：Ｙｅｓ）、送信制御アルゴリズム選択部２３４は、送信パケットデータを暗号化処理部２４７に転送し（ステップＳ４１９）、処理を終了する（ステップＳ４２１）。
【０２０５】
ステップＳ４１８において、フロー情報７００及び設定情報のそれぞれについて暗号化が有効化されていないと判定された場合（ステップＳ４１８：Ｎｏ）、送信制御アルゴリズム選択部２３４は、送信パケットデータを送信部２４６に転送し（ステップＳ４２０）、処理を終了する（ステップＳ４２１）。
【０２０６】
実施例２によれば、フック処理部２２０が、通信処理部２１０と通信機能部２４０との間の処理に代理通信機能部２３０を割り込ませることによって、パケットデータをバッファすることなく、通信データの加工処理を適用することができる。これによって、リソースの消費量を抑えた動的な通信制御の変更を実現できる。また、実施例２では、通信処理部２１０を変更する必要がないため、開発コストの低減及び通信処理部２１０の管理者の負担等を低減することができる。
【０２０７】
なお、本発明は上記した実施例に限定されるものではなく、様々な変形例が含まれる。また、例えば、上記した実施例は本発明を分かりやすく説明するために構成を詳細に説明したものであり、必ずしも説明した全ての構成を備えるものに限定されるものではない。また、各実施例の構成の一部について、他の構成に追加、削除、置換することが可能である。
【０２０８】
また、上記の各構成、機能、処理部、処理手段等は、それらの一部又は全部を、例えば集積回路で設計する等によりハードウェアで実現してもよい。また、本発明は、実施例の機能を実現するソフトウェアのプログラムコードによっても実現できる。この場合、プログラムコードを記録した記憶媒体をコンピュータに提供し、そのコンピュータが備えるプロセッサが記憶媒体に格納されたプログラムコードを読み出す。この場合、記憶媒体から読み出されたプログラムコード自体が前述した実施例の機能を実現することになり、そのプログラムコード自体、及びそれを記憶した記憶媒体は本発明を構成することになる。このようなプログラムコードを供給するための記憶媒体としては、例えば、フレキシブルディスク、ＣＤ−ＲＯＭ、ＤＶＤ−ＲＯＭ、ハードディスク、ＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）、光ディスク、光磁気ディスク、ＣＤ−Ｒ、磁気テープ、不揮発性のメモリカード、ＲＯＭなどが用いられる。
【０２０９】
また、本実施例に記載の機能を実現するプログラムコードは、例えば、アセンブラ、Ｃ／Ｃ＋＋、ｐｅｒｌ、Ｓｈｅｌｌ、ＰＨＰ、Ｊａｖａ（登録商標）等の広範囲のプログラム又はスクリプト言語で実装できる。
【０２１０】
さらに、実施例の機能を実現するソフトウェアのプログラムコードを、ネットワークを介して配信することによって、それをコンピュータのハードディスクやメモリ等の記憶手段又はＣＤ−ＲＷ、ＣＤ−Ｒ等の記憶媒体に格納し、コンピュータが備えるプロセッサが当該記憶手段や当該記憶媒体に格納されたプログラムコードを読み出して実行するようにしてもよい。
【０２１１】
上述の実施例において、制御線や情報線は、説明上必要と考えられるものを示しており、製品上必ずしも全ての制御線や情報線を示しているとは限らない。全ての構成が相互に接続されていてもよい。
【符号の説明】
【０２１２】
１００  計算機
１０１  ネットワーク
１０２  中継装置
２００  演算装置
２０１  主記憶装置
２０２  二次記憶装置
２０３  ＮＩＦ
２０４  システムバス
２１０  通信処理部
２２０  フック処理部
２３０  代理通信機能部
２３１  送信制御アルゴリズム選択部
２３２  フロー情報処理部
２３３  独自ＴＣＰ送信制御部
２３４  送信制御アルゴリズム選択部
２３５  フロー情報処理部
２３６  差分転送処理部
２３７  データ圧縮処理部
２４０  通信機能部
２４１、２４５  受信部
２４２、２４６  送信部
２４３  ロスベースＴＣＰ送信制御部
２４４  遅延ベースＴＣＰ送信制御部
２４７  暗号化処理部
２５０  設定情報入力処理部
２６０  設定情報記憶部
２７０  フロー情報記憶部
５００、７００  フロー情報
５１０、７１０  フロー管理情報
５２０、７２０  フロー通信状態情報
６００  自装置設定情報
６１０  対向装置設定情報
【図１】
2018011207.tif 000004
【図２】
2018011207.tif 000005
【図３】
2018011207.tif 000006
【図４】
2018011207.tif 000007
【図５】
2018011207.tif 000008
【図６】
2018011207.tif 000009
【図７】
2018011207.tif 000010
【図８】
2018011207.tif 000011
【図９】
2018011207.tif 000012
【図１０】
2018011207.tif 000013
【図１１】
2018011207.tif 000014
【図１２】
2018011207.tif 000015
【図１３Ａ】
2018011207.tif 000016
【図１３Ｂ】
2018011207.tif 000017
【図１４Ａ】
2018011207.tif 000018
【図１４Ｂ】
2018011207.tif 000019
【図１４Ｃ】
2018011207.tif 000020