(57)【要約】      （修正有）【課題】通信装置が通信を開始した後において、中継機能を高速化処理からパススルー処理に切り替える場合に、切り替え前後における通信の整合性を保つようにする。【解決手段】パケットを送受信する通信装置９１０が、状態テーブル１００１においてコネクションをエントリ毎に管理し、送信バッファ及び受信バッファの空きを判定する空きバッファ判定機能１０１７が、状態テーブルからエントリを選択し、送信バッファ及び受信バッファを参照し、送信バッファ及び受信バッファの全てが空であるとき、状態テーブルから選択したエントリを削除し、送信バッファ及び受信バッファの全てが空でないとき、状態テーブルから選択したエントリを削除しない。【選択図】図２
2016129274.tif 000002
【特許請求の範囲】
【請求項１】
第一のネットワーク及び第二のネットワークに接続され、パケットを送受信する通信装置であって、
前記第一のネットワークに接続する第一のインターフェースと、
前記第二のネットワークに接続する第二のインターフェースと、
送信するパケットを保持する送信バッファ、受信したパケットを保持する受信バッファ、及びコネクションをエントリ毎に管理する状態テーブルを有する記憶部と、
前記第一のインタフェースに接続する第一のフィルタと、前記第二のインターフェースに接続する第二のフィルタと、前記第一のフィルタとパケットを送受信する第一のモジュールと、前記第二のフィルタとパケットを送受信する第二のモジュールと、前記送信バッファ及び前記受信バッファの空きを判定する空きバッファ判定部とを有する演算部とを備え、
前記空きバッファ判定部は、
前記状態テーブルからエントリを選択し、
前記送信バッファ及び前記受信バッファを参照し、
前記送信バッファ及び前記受信バッファの全てが空であるとき、前記状態テーブルから前記選択したエントリを削除し、
前記送信バッファ及び前記受信バッファの全てが空でないとき、前記状態テーブルから前記選択したエントリを削除しない
ことを特徴とする通信装置。
【請求項２】
前記送信バッファ及び前記受信バッファの全てが空であるとき、前記第一のフィルタと前記第二のフィルタとを接続するパススルー経路を経由して、前記第一のフィルタと前記第二のフィルタとの間で前記パケットを送受信し、
前記送信バッファ及び前記受信バッファの全てが空でないとき、前記第一のモジュール及び前記第二のモジュールを経由して、前記第一のフィルタと前記第二のフィルタとの間で前記パケットを送受信する
ことを特徴とする請求項１記載の通信装置。
【請求項３】
前記演算部は、前記第一のモジュール及び前記第二のモジュールを経由して、前記第一のフィルタと前記第二のフィルタとの間を通過するパケットに対し、中継機能を適用することを特徴とする請求項２記載の通信装置。
【請求項４】
前記中継機能は、前記送受信するパケットの高速化であることを特徴とする請求項３記載の通信装置。
【請求項５】
前記送信バッファ及び受信バッファは、少なくとも１つ以上であることを特徴とする請求項１記載の通信装置。
【請求項６】
前記空きバッファ判定部は、
前記状態テーブルのエントリ数をカウントし、
前記エントリ数が一定数を超える場合、前記状態テーブルから任意のエントリを削除することを特徴とする請求項１記載の通信装置。
【請求項７】
前記空きバッファ判定部は、
前記送信バッファ及び前記受信バッファの空きを判定し、
前記状態テーブルのエントリ数をカウントし、
前記エントリ数が一定数を超え、かつ前記送信バッファ及び前記受信バッファの全てが空であるとき、前記状態テーブルから任意のエントリを削除することを特徴とする請求項１記載の通信装置。
【請求項８】
パケットを送受信する通信装置の制御方法であって、
送信するパケットを保持する送信バッファ、受信したパケットを保持する受信バッファ、及びコネクションをエントリ毎に管理する状態テーブルを有し、
前記送信バッファ及び前記受信バッファの空きを判定する空きバッファ判定部は、
前記状態テーブルからエントリを選択し、
前記送信バッファ及び前記受信バッファを参照し、
前記送信バッファ及び前記受信バッファの全てが空であるとき、前記状態テーブルから前記選択したエントリを削除し、
前記送信バッファ及び前記受信バッファの全てが空でないとき、前記状態テーブルから前記選択したエントリを削除しない
ことを特徴とする通信装置の制御方法。
【請求項９】
前記通信装置は、
第一のネットワークに接続する第一のインターフェースと、
第二のネットワークに接続する第二のインターフェースと、
前記送信バッファ、前記受信バッファ、及び前記状態テーブルを有する記憶部と、
前記第一のインタフェースに接続する第一のフィルタと、前記第二のインターフェースに接続する第二のフィルタと、前記第一のフィルタとパケットを送受信する第一のモジュールと、前記第二のフィルタとパケットを送受信する第二のモジュールと、前記空きバッファ判定部とを有する演算部とを備える
ことを特徴とする請求項８記載の通信装置の制御方法。
【請求項１０】
前記送信バッファ及び前記受信バッファの全てが空であるとき、前記第一のフィルタと前記第二のフィルタとを接続するパススルー経路を経由して、前記第一のフィルタと前記第二のフィルタとの間で前記パケットを送受信し、
前記送信バッファ及び前記受信バッファの全てが空でないとき、前記第一のモジュール及び前記第二のモジュールを経由して、前記第一のフィルタと前記第二のフィルタとの間で前記パケットを送受信する
ことを特徴とする請求項９記載の通信装置の制御方法。
【請求項１１】
パケットを送受信する通信装置に、
状態テーブルにおいてコネクションをエントリ毎に管理させ、
前記通信装置の送信バッファ及び前記通信装置の受信バッファの空きを判定する空きバッファ判定機能として、
前記状態テーブルからエントリを選択し、
前記送信バッファ及び前記受信バッファを参照し、
前記送信バッファ及び前記受信バッファの全てが空であるとき、前記状態テーブルから前記選択したエントリを削除し、
前記送信バッファ及び前記受信バッファの全てが空でないとき、前記状態テーブルから前記選択したエントリを削除しない
を実現させるための通信装置の制御プログラム。
【請求項１２】
前記送信バッファ及び前記受信バッファの全てが空であるとき、前記通信装置の第一のフィルタと前記通信装置の第二のフィルタとを接続するパススルー経路を経由して、前記第一のフィルタと前記第二のフィルタとの間で前記パケットを送受信し、
前記送信バッファ及び前記受信バッファの全てが空でないとき、前記第一のフィルタとパケットを送受信する第一のモジュール及び前記第二のフィルタとパケットを送受信するの第二のモジュールを経由して、前記第一のフィルタと前記第二のフィルタとの間で前記パケットを送受信する
ことを特徴とする請求項１１記載の通信装置の制御プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ネットワーク通信においてパケットを送受信する通信装置、並びにその通信装置の制御方法及び制御プログラムに関するものである。
【背景技術】
【０００２】
インターネットの普及により、通信装置を流れるパケット数は急激に増大している。 クラウドコンピューティング、通称クラウドでは、利用者は、利用者が存在する拠点ではなく外部のデータセンタの計算機資源を使用する。データもデータセンタに置かれるため、利用者の拠点とデータセンタ間でデータのやり取りが頻発することとなる。
【０００３】
端末間のパケットの送受信は、多くの場合、通信装置によって中継される。パケットの送受信をどのプロトコルにより実行するかは送信元の端末において実行されるプログラム（Ｗｅｂブラウザ、ＩＰ電話、動画再生、ファイル送信など）によって規定されるため、通信装置においてはＴＣＰ及びＵＤＰによるパケット通信を並行して実行することになる場合がある。このような場合、通信装置によって、ＴＣＰ及びＵＤＰの優先度を調整することが必要となる。
【０００４】
このような調整を行うものとして、優先制御機能を搭載した通信装置がある。優先制御機能とは、受信パケットに対して優先度を決定し、優先度の高いパケットから優先的に転送する機能をいう。
【０００５】
また、上記調整を行うものとして優先制御機能を搭載した通信装置の他、帯域制御機能を搭載した通信装置がある。帯域制御機能とは、パケットの種類毎に使用できる帯域を確保したり制限したりする機能をいう。
【０００６】
通信事業者はユーザやコネクションごとに優先制御機能や帯域制御機能を使い分け、サービス品質を数段階に分けて提供している。
【０００７】
このような技術分野の背景技術として、特開２０１３−１０２３９２（特許文献１）がある。この公報には、「複数の端末間で信頼性の重視される通信とリアルタイム性の重視される通信とが混在して行われる場合に、通信状況に適した通信方法に自動的に切り替える装置を提供する。」と記載されている。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特開２０１３−１０２３９２
【発明の概要】
【発明が解決しようとする課題】
【０００９】
さて、通信装置が例えばデータ通信の高速化をする中継機能を持つ場合、より先に開始されたコネクションに対しては、高速化処理の権利を与え、コネクション数が一定数を超えた状態で後から開始されるコネクション対しては、高速化処理は行わずにパススルー処理を行うことがある。しかしながら、通信装置が通信を開始した後において高速化処理からパススルー処理に切り替える場合、切替前後における通信の整合性は考慮されていない。
【００１０】
そこで本発明は、中継機能の切替前後において通信の整合性が考慮された通信装置を提供することを目的とする。
【課題を解決するための手段】
【００１１】
上記課題を解決するために、本発明は、第一のネットワーク及び第二のネットワークに接続され、パケットを送受信する通信装置であって、前記第一のネットワークに接続する第一のインターフェースと、前記第二のネットワークに接続する第二のインターフェースと、送信するパケットを保持する送信バッファ、受信したパケットを保持する受信バッファ、及びコネクションをエントリ毎に管理する状態テーブルを有する記憶部と、演算部とを備える。前記演算部は、前記第一のインタフェースに接続する第一のフィルタと、前記第二のインターフェースに接続する第二のフィルタと、前記第一のフィルタとパケットを送受信する第一のモジュールと、前記第二のフィルタとパケットを送受信する第二のモジュールと、前記送信バッファ及び前記受信バッファの空きを判定する空きバッファ判定部を有する。そして、前記空きバッファ判定部は、前記状態テーブルからエントリを選択し、前記送信バッファ及び前記受信バッファを参照し、前記送信バッファ及び前記受信バッファの全てが空であるとき、前記状態テーブルから前記選択したエントリを削除し、前記送信バッファ及び前記受信バッファの全てが空でないとき、前記状態テーブルから前記選択したエントリを削除しないことを特徴とする。
【発明の効果】
【００１２】
本発明によれば、受信バッファおよび送信バッファにパケットが無いことを確認してから、パケットの中継機能の適用を切り替えるので、切替前後で通信の整合性が保たれる通信装置を提供することができる。
【００１３】
上記した以外の課題、構成及び効果は、以下の実施形態の説明により明らかにされる
【図面の簡単な説明】
【００１４】
【図１】通信装置９１０／９２０をＷＡＮとＬＡＮの境界に設置したシステム図。
【図２】通信装置のハードウェア構成図。
【図３】通信装置内部の標準ＴＣＰ部１００７のブロック図。
【図４−１】送信バッファ、受信バッファの管理ポインタの説明図。
【図４−２】送信バッファ、受信バッファの管理ポインタの説明図。
【図５】通信装置９１０のＴＣＰモジュール１００７/１００８を経由する通信の登録処理のフローチャート。
【図６】実施例１における、空きバッファ判定部のフローチャート。
【図７】実施例２における、空きバッファ判定部のフローチャート。
【図８】実施例３における、空きバッファ判定部のフローチャート。
【発明を実施するための形態】
【００１５】
以下、図面を参照しつつ、本発明を実施するための形態を説明する。説明の明確化のため、以下の記載及び図面は、適宜、省略及び簡略化がなされている。
【実施例１】
【００１６】
以下、実施例１を図１〜図６を用いて説明する。
【００１７】
図１には、通信装置９１０／９２０をＷＡＮとＬＡＮの境界に設置したシステムが示されている。
【００１８】
通信装置＃１（９１０）及び通信装置＃２（９２０）は、ネットワーク０（９００）とネットワーク１及び２（９０１、９０２）との境界に設置されている。ネットワーク１（９０１）に接続している端末（９０３・９０４）と、ネットワーク２（９０２）に接続している端末（９０５・９０６）との間では、３つのＴＣＰ通信を経由して通信が行われる。
【００１９】
通信装置＃１（９１０）は、ネットワークインターフェースＮＩＦ０／１（１０１１／１０１２）と、フィルタ０／１（１００９／１０１０）と、演算部９１１とを備える。演算部９１１は、ＴＣＰ通信を行うＴＣＰモジュール１００７／１００８と、データの乗せ換えを行うＰｒｏｘｙモジュール１０２０とを、実行する。
【００２０】
なお、通信装置＃１（９１０）及び通信装置＃２（９２０）は、ネットワーク０（９００）を介して、ネットワーク０の両側に配置することで対向させてもよいし、いずれか一方をネットワーク０（９００）の片側のみに設置してもよい。また、通信を行うためのモジュールが用いるプロトコルは、必ずしもＴＣＰである必要はない。通信装置（９１０、９２０）は、例えば、プロキシ装置でもよい。
【００２１】
通信装置＃１（９１０）を経由する通信には、ＴＣＰモジュール１００７/１００８を経由する通信と、ＴＣＰモジュール１００７/１００８を経由しない通信との２種類がある。
【００２２】
ここで、ＴＣＰモジュール１００７/１００８を経由する通信とは、ＴＣＰ通信を行うＴＣＰモジュール１００７／１００８を通り、状態テーブル１００１によりエントリの管理が行われるものである。つまり、ＴＣＰモジュール１００７/１００８を経由する通信とは、通信装置９１０の中継機能が適用される通信であり、例えば経由により通信の高速化処理が行われる。
【００２３】
一方、ＴＣＰモジュール１００７/１００８を経由しない通信とは、ＴＣＰモジュール１００７／１００８を通らず、フィルタ０／１（１００９／１０１０）間でパケットが素通りし、状態テーブル１００１によりエントリの管理が行われないものである。つまり、ＴＣＰモジュール１００７/１００８を経由しない通信とは、通信装置９１０の中継機能が適用されない通信であり、例えば経由しないことによりフィルタ０／１（１００９／１０１０）間でパススルー経路（１０２１）にてパケットが素通りする。通信装置がパススルー経路（１０２１）にてパケットが素通りさせる処理をパススルー処理と呼ぶ。
【００２４】
なお、ここでパケットとは、データ通信を行う際の１つあたりのデータサイズ（単位）のことである。
【００２５】
状態テーブル１００１は、ＩＰアドレス、ＴＣＰのポート番号等を含むコネクション特定のための情報１００２と、ＮＩＦ０側のＴＣＰのＯＰＥＮ／ＣＬＯＳＥ等の状態情報１００３と、ＮＩＦ１側のＴＣＰのＯＰＥＮ／ＣＬＯＳＥ等の状態情報１００４と、受信バッファ（ｒｂｕｆ０）・送信バッファ（ｓｂｕｆ１）管理ポインタ１００５と、受信バッファ（ｒｂｕｆ１）・送信バッファ（ｓｂｕｆ０）管理ポインタ１００６とを、コネクション毎に管理する。ここで、コネクションとは、通信装置間でデータ通信を行うための論理的な回線を意味する。状態テーブルはＮ個（Ｎは１以上の整数）のエントリを持つ。エントリとはコネクション毎の１００２〜１００６の情報のことである。  なお、通信装置＃１に関する上述の説明は、通信装置＃２（９２０）に関しても同様である。
【００２６】
図２には、通信装置＃１（９１０）のハードウェア構成図を表す。なお、この構成は、通信装置＃２（９２０）で同様でもよい。
【００２７】
通信装置＃１（９１０）は、パケットの送受信を行うネットワークインターフェースＮＩＦ０／１（１０１１／１０１２）と、ＴＣＰ通信を行う演算部９１１と、各コネクションの状態を記憶する記憶部９３０とを有する。
【００２８】
そして、演算部９１１は、パススルー処理するか否かを判定するためのフィルタ（１００９／１０１０）と、ＴＣＰ通信制御を行うＮＩＦ０／１向けＴＣＰモジュール１００７／１００８と、送受信バッファ間でデータの乗せ換えを行うプロキシモジュール１０２０と、送受信バッファ（１０１３〜１０１６）の空きを判定する空きバッファ判定部１０１７））とを有する。
【００２９】
また、記憶部９３０は、Ｎ個のエントリを備えた状態テーブル１００１と、ＮＩＦ０向けＴＣＰモジュール１００７の管理するＮ個（Ｎは１以上の整数）の受信バッファ（ｒｂｕｆ０）１０１３およびＮ個の送信バッファ（ｓｂｕｆ０）１０１５と、ＮＩＦ１向けＴＣＰモジュール１００８の管理するＮ個の受信バッファ（ｒｂｕｆ１）１０１４およびＮ個の送信バッファ（ｓｂｕｆ１）１０１６とを有する。ここで、送信バッファ１０１５，１０１６は、送信したパケットに対しＡＣＫが返るまで送信したパケットを一時的に蓄積しておくバッファである。また、受信バッファ１０１３，１０１４は、受信したパケットを整列し一時的に蓄積しておくバッファである。
【００３０】
例えばソフトウェアで実装する際は、状態テーブル１００１と送受信バッファ（１０１３〜１０１６）とを記憶部９３０に持ち、フィルタ（１００９／１０１０）とＴＣＰモジュール１００７／１００８とプロキシモジュール１０２０と空きバッファ判定部１０１７の部分をモジュールとして演算部９１１に持たせても良い。
【００３１】
図２では、実線がパケットの流れを示し、点線が状態テーブル１００１と空きバッファ判定部１０１７のデータ参照、書込、削除の様子を示す。
【００３２】
フィルタ０（１００９）は、ＮＩＦ０（１０１１）からあるコネクションのパケットが入ってきた際に、パケットのＩＰアドレス、ＴＣＰのポート番号などの情報から状態テーブルのエントリを参照し、ＮＩＦ０向けＴＣＰモジュール１００７にパケットを渡すかフィルタ１にパケットを渡すかどうかのフィルタリングを行う。
【００３３】
状態テーブルに該当するコネクションのエントリがある場合、フィルタ０（１００９）はＮＩＦ０向けＴＣＰモジュール１００７にパケットを渡す。パケットを渡されたＮＩＦ０向けＴＣＰモジュール１００７は、状態テーブルの該当するエントリに対し、ＮＩＦ０側のＴＣＰのＯＰＥＮ／ＣＬＯＳＥ等の状態情報１００３に書き込みを行う。
【００３４】
プロキシモジュール（１０２０）は、受信バッファ（ｒｂｕｆ０）・送信バッファ（ｓｂｕｆ１）管理ポインタ１００５に対し、ｌｅｆｔ_ｒｂｕｆ_ｓｅｇ１０３１、ｌｅｆｔ_ｒｅｃｖ_ｓｅｇ１０３２、ｒｉｇｈｔ_ｒｅｃｖ_ｓｅｇ１０３３、ｌｅｆｔ_ｓｅｎｄ_ｓｅｇ１０３４、ｒｉｇｈｔ_ｓｅｎｄ_ｓｅｇ１０３５、ｒｉｇｈｔ_ｓｂｕｆ_ｓｅｇ１０３６の書き込みを行う。
【００３５】
一方、状態テーブルに該当するコネクションのエントリがない場合、フィルタ０（１００９）はＮＩＦ０向けＴＣＰモジュール１００７にパケットを渡さず、フィルタ１（１０１０）ヘパケットを渡す。その際、状態テーブルへの書込、削除などは行われない。
【００３６】
フィルタ１（１０１０）は、ＮＩＦ１（１０１２）からパケットが入ってきた際に、上述で説明したフィルタ０と、同様の動作を行う。
【００３７】
図３には、ＴＣＰモジュール１００７／１００８のブロック図を表す。
【００３８】
標準ＴＣＰを実現するＴＣＰモジュール１００７は、受信処理を行うＲＸ部（受信処理部）３１０２と、送信処理を行うＴＸ部（送信処理部）３１０１を有する。
【００３９】
ＲＸ部３１０２は、受信パケットをＴＣＰ制御パケットとデータ付パケットとＡＣＫ／部分的確認応答用ＳＡＣＫパケットに分離するパケット解析部３１０８と、受信したＴＣＰ制御パケットに基づいて状態テーブル１００１内のＴＣＰ状態１００３を変更するＴＣＰ制御部３１０７と、受信したデータパケットの送信シーケンス番号ＳＥＱ２９１２と受信シーケンス番号ＡＣＫ２９１３とに基づいて、状態テーブル１００１内のバッファ管理ポインタ１００５を変更してＡＣＫパケットや部分的確認応答ＳＡＣＫ付ＡＣＫパケットを返信する受信履歴更新部３１０６とを有する。
【００４０】
ＴＸ部３１０１は、状態テーブル１００１内のＴＣＰ状態１００４を用いてＴＣＰ制御パケットを送信するＴＣＰ制御部３１０３と、受信したＡＣＫパケットに基づいて状態テーブル１００１内のバッファ管理ポインタ１００５を変更し、受信した部分的確認応答ＳＡＣＫ付ＡＣＫパケットを用いて送信バッファ１０１５からデータを読み出してパケットを再送するＴＸパケット再送部３１０４と、送信バッファ１０１５からデータを読み出してパケットを送信して、状態テーブル１００１内のバッファ管理ポインタ１００５を変更する送信履歴更新部３１０５と、ＡＣＫ／ＳＡＣＫパケット、ＴＣＰ制御パケット、再送パケット、データパケットをＦＩＦＯで集約して出力するマルチプレクサ（集約部）３１０９およびバッファ３１１０〜３１１３を有する。
【００４１】
なお、実施例１において、ＴＣＰモジュール１００７／１００８は同様の構成としてもよい。
【００４２】
図４−１，４−２は、送信バッファ、受信バッファの管理するポインタについて示す。
【００４３】
状態テーブル１００１は受信バッファ（ｒｂｕｆ０）・送信バッファ（ｓｂｕｆ１）管理ポインタ１００５と、受信バッファ（ｒｂｕｆ１）・送信バッファ（ｓｂｕｆ０）管理ポインタ１００６を持つ。
【００４４】
受信バッファ（ｒｂｕｆ０）・送信バッファ（ｓｂｕｆ１）管理ポインタ１００５は、ｌｅｆｔ_ｒｂｕｆ_ｓｅｇ１０３１、ｌｅｆｔ_ｒｅｃｖ_ｓｅｇ１０３２、ｒｉｇｈｔ_ｒｅｃｖ_ｓｅｇ１０３３、ｌｅｆｔ_ｓｅｎｄ_ｓｅｇ１０３４、ｒｉｇｈｔ_ｓｅｎｄ_ｓｅｇ１０３５、ｒｉｇｈｔ_ｓｂｕｆ_ｓｅｇ１０３６を持つ。
【００４５】
以下のポインタを用いて、プロキシは受信バッファのデータを読み込むと送信バッファにデータを書き込み、受信バッファ（ｒｂｕｆ０）の１０３１から送信バッファ（ｓｂｕｆ１）の１０３５へのデータの載せ替えを行う。
【００４６】
ｒｉｇｈｔ_ｒｅｃｖ_ｓｅｇ１０３３は受信データ先頭のポインタ、ｌｅｆｔ_ｒｅｃｖ_ｓｅｇ１０３２は整列済みのデータのポインタ、ｌｅｆｔ_ｒｂｕｆ_ｓｅｇ１０３１はプロキシにより読込済みのポインタを示す。つまり、ｌｅｆｔ_ｒｂｕｆ_ｓｅｇ１０３１〜ｌｅｆｔ_ｒｅｃｖ_ｓｅｇ１０３２は既に整列済みのデータを、ｌｅｆｔ_ｒｅｃｖ_ｓｅｇ１０３２〜ｒｉｇｈｔ_ｒｅｃｖ_ｓｅｇ１０３３は整列待ちのデータを示す。 ｒｉｇｈｔ_ｒｅｃｖ_ｓｅｇ１０３３は新規データを受信すると受信したデータサイズ分だけ増えて右に移動し、ｌｅｆｔ_ｒｅｃｖ_ｓｅｇ１０３２は再送パケットを受信すると整列が完了したデータサイズ分だけ増えて右に移動し、ｌｅｆｔ_ｒｂｕｆ_ｓｅｇ１０３１はプロキシがデータを読み出すと読み出したデータサイズ分だけ増えて右に移動する。これは、プロキシはデータを読み出すと読み出したデータを逐次削除することを意味する。
【００４７】
送信バッファ管理ポインタのｌｅｆｔ_ｓｅｎｄ_ｓｅｇ１０３４はＡＣＫ受信済みのポインタ、ｒｉｇｈｔ_ｓｅｎｄ_ｓｅｇ１０３５は送信データ先頭のポインタ、ｒｉｇｈｔ_ｓｂｕｆ_ｓｅｇ１０３６はプロキシ書込済みのポインタを示す。つまり、ｌｅｆｔ_ｓｅｎｄ_ｓｅｇ１０３４〜ｒｉｇｈｔ_ｓｅｎｄ_ｓｅｇ１０３５は送信済みかつＡＣＫ待ちのデータを、ｒｉｇｈｔ_ｓｅｎｄ_ｓｅｇ１０３５〜ｉｇｈｔ_ｓｂｕｆ_ｓｅｇ１０３６は送信待ちのデータを示す。 ｒｉｇｈｔ_ｓｂｕｆ_ｓｅｇ１０３６はプロキシが新規データを書き込むと書き込んだデータサイズ分だけ増えて右に移動し、ｒｉｇｈｔ_ｓｅｎｄ_ｓｅｇ１０３５は新規データを送信すると送信したデータサイズ分だけ増えて右に移動し、ｌｅｆｔ_ｓｅｎｄ_ｓｅｇ１０３４はＡＣＫパケットを受信するとＡＣＫ確認が完了したデータサイズ分だけ増えて右に移動する。これはプロキシはＡＣＫパケットを受信しＡＣＫ確認が完了したデータを逐次消去することを意味する。
【００４８】
受信バッファ（ｒｂｕｆ１）・送信バッファ（ｓｂｕｆ０）管理ポインタ１００６は、ｌｅｆｔ_ｒｂｕｆ_ｓｅｇ１０４１、ｌｅｆｔ_ｒｅｃｖ_ｓｅｇ１０４２、ｒｉｇｈｔ_ｒｅｃｖ_ｓｅｇ１０４３、ｌｅｆｔ_ｓｅｎｄ_ｓｅｇ１０４４、ｒｉｇｈｔ_ｓｅｎｄ_ｓｅｇ１０４５、ｒｉｇｈｔ_ｓｂｕｆ_ｓｅｇ１０４６を持ち、受信バッファ（ｒｂｕｆ０）・送信バッファ（ｓｂｕｆ１）管理ポインタ１００５と同様に、受信バッファ（ｒｂｕｆ１）の１０４１から送信バッファ（ｓｂｕｆ０）の１０４５へのデータの載せ替えを行う。
【００４９】
ＴＣＰモジュール１００７/１００８を経由する通信をＴＣＰモジュール１００７/１００８を経由しない通信に切り替えるタイミングは、受信バッファにおいて受信データ先頭までデータが整列されかつプロキシが受信データ先頭までデータを読み込みかつ、送信バッファにおいてプロキシ書き込み済みのポインタまで送信データ先頭が達しかつＡＣＫ受信が行われたタイミング、すなわち１０３１〜１０３６が同じポインタを指し、かつ同様に１０４１〜１０４６が同じポインタを指すタイミングである。
【００５０】
図５は、通信装置９１０のＴＣＰモジュール１００７/１００８を経由する通信の登録処理のフローを示す。
【００５１】
ステップ２０３１では、ＴＣＰモジュール１００７は、ＴＣＰモジュール１００７/１００８経由処理判定として、コネクションがＴＣＰモジュール１００７/１００８を経由するかどうかの判定を行う。判定のタイミングは、例えばＳＹＮパケットとＳＹＮＡＣＫパケットが通信装置９１０を流れたタイミングとする。
【００５２】
具体的な判定としては、例えば、ＴＣＰモジュール１００７が、状態テーブルのエントリ数と現在の装置上限のエントリ数を比較し、状態テーブルのエントリ数が装置上限のエントリ数のＸ％未満であるかどうかを判定する。Ｘ%以上であれば、ＴＣＰモジュール１００７/１００８を経由する通信の登録処理を終了する。Ｘ%未満であれば、ステップ２０３２へ進む。
【００５３】
また、エントリ数の比較の他にも、ＲＴＴなどＳＹＮパケットとＳＹＮＡＣＫパケットから得られる情報を組み合わせて、判定を行ってもよい。例えば、ＳＹＮパケットの送信時間とＳＹＮＡＣＫパケットの到着時刻からＲＴＴを算出し、ＲＴＴが一定の時間以上かつ状態テーブルのエントリ数が装置上限のエントリ数のＸ％未満であればステップ２０３２へ進む。
【００５４】
ステップ２０３２では、ＴＣＰモジュール１００７は、状態テーブルに該当するコネクションのエントリの登録を行い、ＴＣＰモジュール１００７/１００８経由の通信を実施し、ＴＣＰモジュール１００７/１００８を経由する通信の登録処理を終了する。
【００５５】
図６は、空きバッファ判定部１０１７によるエントリ削除によって、ＴＣＰモジュール１００７/１００８を経由する通信の切替処理を行うフローチャートである。図６では、空きバッファ判定部１０１７は、図５の通信装置９１０のＴＣＰモジュール１００７/１００８を経由する通信の登録処理のフローでＴＣＰモジュール１００７/１００８を経由すると判定されたコネクションを対象に、ＴＣＰモジュール１００７/１００８を経由するかどうかの判定を、再度行う。即ち、通信装置の中継機能の切替処理である。
【００５６】
ステップ２００１では、空きバッファ判定部１０１７は、一定時間が経過したか否かを判定する。一定時間とは、ステップ２００１の処理が開始されてからＮ分経過（Ｎは適宜設定）した時点を指す。一定時間が経過したらステップ２００２に進む。一定時間が経過していなければ、ステップ２００１の判定を繰り返す。
【００５７】
ステップ２００２では、空きバッファ判定部１０１７は、状態テーブルから任意のエントリを選択する。選択の例としては状態テーブルの１番からＮ番へ順に選択する、逆にＮ番から１番へ順に選択する、番号が重複しないようにランダムに選択するなどが挙げられる。
【００５８】
ステップ２００３では、空きバッファ判定部は、選択したエントリのｒｂｕｆ０（１０１３−Ｍ）（Ｍは選択したエントリに対応する番号）からバッファの空き情報を取得する。
【００５９】
ステップ２００４では、空きバッファ判定部は、選択したエントリのｓｂｕｆ０（１０１３−Ｍ）（Ｍは選択したエントリに対応する番号）からバッファの空き情報を取得する。
【００６０】
ステップ２００５では、空きバッファ判定部は、選択したエントリのｒｂｕｆ１（１０１３−Ｍ）（Ｍは選択したエントリに対応する番号）からバッファの空き情報を取得する。
【００６１】
ステップ２００６では、空きバッファ判定部は、選択したエントリのｓｂｕｆ１（１０１３−Ｍ）（Ｍは選択したエントリに対応する番号）からバッファの空き情報を取得する。
【００６２】
ステップ２００７では、空きバッファ判定部は、ステップ２００３〜ステップ２００６で取得した送受信バッファｒｂｕｆ０（１０１３−Ｍ）,ｓｂｕｆ０（１０１５−Ｍ）,ｒｂｕｆ１（１０１４−Ｍ）,ｒｂｕｆ２（１０１６−Ｍ）（Ｍは選択したエントリに対応する番号）のバッファの空き情報に基づき、送受信バッファ１０１３−Ｍ〜１０１６−Ｍの全てが空であるか否かを判定する。
【００６３】
ステップ２００７において、送受信バッファ１０１３−Ｍ〜１０１６−Ｍの少なくとも１つが空でない場合、ステップ２００２に戻る。
【００６４】
送受信バッファ１０１３−Ｍ〜１０１６−Ｍのどれか１つでも空でない場合は、送信端末と受信端末との間で送受信が完了していないパケットがバッファに存在することを意味し、そのタイミングで切り替えると、通信の整合性が取れなくなる恐れがある。また、これは空きバッファ判定部１０１７が状態テーブルのエントリを維持することで、ＴＣＰモジュール１００７/１００８の経由処理を維持することを意味する。
【００６５】
ここで、ＴＣＰモジュール１００７/１００８を経由する通信とは、例えば、フィルタ０（１００９)、ＮＩＦ０ ＴＣＰ（１００７）、ｒｂｕｆ０(１０１３)、プロキシ（１０２０）、ｓｂｕｆ１（１０１６）、ＮＩＦ１ ＴＣＰ（１００８）、フィルタ１（１０１０)の順にパケットが流れることである。又は、フィルタ１（１０１０)、ＮＩＦ１ ＴＣＰ（１００８）、ｒｂｕｆ１(１０１４)、プロキシ（１０２０）、Ｓｂｕｆ０（１０１５）、ＮＩＦ０ ＴＣＰ（１００７）、フィルタ０（１００９)の順にパケットが流れることである。
【００６６】
ステップ２００７において、送受信バッファ１０１３−Ｍ〜１０１６−Ｍの全てが空である場合、ステップ２００８において空きバッファ判定部が状態テーブルから該当のエントリを削除する。送受信バッファ１０１３−Ｍ〜１０１６−Ｍの全てが空である場合は、送信端末と受信端末との間で送受信しているパケットが存在しないため、このタイミングで切り替えれば通信の整合性を保つことができる。また、これは空きバッファ判定部１０１７が状態テーブルからエントリを削除することで、ＴＣＰモジュール１００７/１００８を経由しない通信への切替が行われることを意味する。
【００６７】
ここで、ＴＣＰモジュール１００７/１００８を経由しない通信とは、フィルタ０（１００９）とフィルタ１（１０１０）とを直接接続するパススルー経路１０２１を介して、フィルタ０（１００９）とフィルタ１（１０１０）との間でパケットが送受信されることである。
【００６８】
ステップ２００９において、空きバッファ判定部は、状態テーブルのもつ１番からＮ番のエントリを全て選択し終えているかを判定し、全てのエントリを選択していればステップ２００１に戻る。
【００６９】
ステップ２００９において、空きバッファ判定部が状態テーブルのもつ１番からＮ番のエントリうち、１つでも選択していないエントリがある場合、ステップ２００２に戻る。
【００７０】
なお、通信装置９１０又は９２０が備えているバッファは図２では、送信バッファ、受信バッファは１０１３−Ｍ〜１０１６−Ｍでそれぞれ２つずつを示しているが、必ずしも２つずつである必要はなく、送信バッファ、受信バッファがそれぞれ１つずつでもよいし、それぞれ３つ以上となってもよい。
【００７１】
多数のコネクションの中には、そもそも中継処理（たとえば高速化処理）に向かないコネクションが含まれていることがある。そのため、高速化処理に向かないコネクションに対しては、パススルー処理への切替が必要となる。とはいえ、受信バッファおよび送信バッファにパケットが残った状態で通信装置の中継方法を切り替えると、送信端末と受信端末との通信の整合性が保たれなくなるので、通信の整合性を保つためには処理切替のタイミングを適切に選択する必要がある。
【００７２】
これに対し、本発明を適用した通信装置によれば、受信バッファおよび送信バッファにパケットが無いことを確認してから中継方法を高速化処理からパススルー処理へ切り替えるので、中継方法の切替前後で通信の整合性が保たれるという効果を奏する。
【００７３】
また、一般の通信装置では、任意のプロトコルに基づいて、送信端末と受信端末間のデータ通信を中継する際、コネクション数が増加するにつれて、コネクションを管理する状態テーブルが増大し、装置に必要なリソースが増大することがある。
【００７４】
これに対し、本発明を適用した通信装置によれば、一定時間経過ごとに、状態テーブルのエントリ数を削減するので、通信装置の負荷を軽減することができる。なお、この処理は事前に大量のトラフィックが入ってくることが予測される場合に、実施することが好ましい。例えば通勤ラッシュの時間帯など通信トラフィックが大量に発生するタイミングにあわせて一定時間を設定するとよい。なお、一定時間は毎日一定の時刻としてもよい。
【実施例２】
【００７５】
図７は、空きバッファ判定部１０１７による強制的なエントリ削除によって、ＴＣＰモジュール１００７/１００８を経由する通信の切替処理を行うフローチャートである。
【００７６】
ステップ２０１１では、空きバッファ判定部１０１７が一定時間が経過したか否かを判定する。一定時間とは、ステップ２０１１の処理が開始されてからＮ分経過（Ｎは適宜設定）した時点を指す。一定時間が経過したらステップ２０１２に進む。一定時間が経過していなければ、ステップ２０１１の判定を繰り返す。
【００７７】
ステップ２０１２では、空きバッファ判定部１０１７が現在の状態テーブルのエントリ数をカウントし、装置上限のエントリ数との比較を行う。現在の状態テーブルのエントリ数を装置上限のエントリ数のＸパーセント（Ｘは適宜設定）を上回っているとき、ステップ２０１３に進む。上回っていなければ、ステップ２０１１に戻る。
【００７８】
ステップ２０１３では、空きバッファ判定部１０１７が状態テーブルから任意のエントリを選択する。選択の例としては状態テーブルの１番からＮ番へ順に選択する、逆にＮ番から１番へ順に選択する、番号が重複しないようにランダムに選択するなどが挙げられる。
【００７９】
ステップ２０１４では、空きバッファ判定部が、状態テーブルからステップ２０１２で選択した該当のエントリを削除する。これは、空きバッファ判定部１０１７が状態テーブルのエントリを削除することで、ＴＣＰモジュール１００７/１００８を経由しない通信への切替が行われることを意味する。
【００８０】
ステップ２０１５において、空きバッファ判定部１０１７が現在の状態テーブルのエントリ数をカウントし、装置上限のエントリ数との比較を行う。現在の状態テーブルのエントリ数が、装置上限のエントリ数のＸパーセント（Ｘは適宜設定）以下のとき、ステップ２０１１に進み、Ｘパーセント以下でなければ２０１３に戻る。
【００８１】
このように、一定時間経過ごとに、状態テーブルのエントリ数を一定数以下に削減することができるので、装置の負荷を軽減することができる。
【００８２】
なお、実施例２の切替処理のみでは、送受信バッファｒｂｕｆ０（１０１３−Ｍ）,ｓｂｕｆ０（１０１５−Ｍ）,ｒｂｕｆ１（１０１４−Ｍ）,ｒｂｕｆ２（１０１６−Ｍ）（Ｍは選択したエントリに対応する番号）からバッファ空き情報の取得及び送受信バッファ１０１３−Ｍ〜１０１６−Ｍのいずれかが空であるかの確認は行わないので、エントリを削除することで端末間の通信に不整合が生じることを避けるため、例えば実施例１の図６に示す切替処理の後に、図７に示す切替処理を行うよう一定時間を設定する。
【実施例３】
【００８３】
図８は、空きバッファ判定部１０１７の他の処理例として、空きバッファ判定部１０１７による装置上限のＸ%までのエントリ削除によって、ＴＣＰモジュール１００７/１００８を経由する通信の切替処理を行うフローチャートである。
【００８４】
ステップ２０２１では、空きバッファ判定部１０１７が一定時間が経過したか否かを判定する。一定時間とは、ステップ２０２１の処理が開始されてからＮ分経過（Ｎは適宜設定）した時点を指す。一定時間が経過したらステップ２０２２に進む。一定時間が経過していなければ、ステップ２０２１の判定を繰り返す。
【００８５】
ステップ２０２２では、空きバッファ判定部１０１７が現在の状態テーブルのエントリ数をカウントし、装置上限のエントリ数との比較を行う。現在の状態テーブルのエントリ数を装置上限のエントリ数のＸパーセント（Ｘは適宜設定）を上回っているとき、ステップ２０２３に進む。上回っていなければ、ステップ２０２１に戻る。
【００８６】
ステップ２０２３では、空きバッファ判定部１０１７が状態テーブルから任意のエントリを選択する。選択の例としては状態テーブルの１番からＮ番へ順に選択する、逆にＮ番から１番へ順に選択する、番号が重複しないようにランダムに選択するなどが挙げられる。
【００８７】
ステップ２０２４では、空きバッファ判定部が選択したエントリのｒｂｕｆ０（１０１３−Ｍ）（Ｍは選択したエントリに対応する番号）からバッファの空き情報を取得する。
【００８８】
ステップ２０２５では、空きバッファ判定部が選択したエントリのｓｂｕｆ０（１０１５−Ｍ）（Ｍは選択したエントリに対応する番号）からバッファの空き情報を取得する。
【００８９】
ステップ２０２６では、空きバッファ判定部が選択したエントリのｒｂｕｆ１（１０１４−Ｍ）（Ｍは選択したエントリに対応する番号）からバッファの空き情報を取得する。
【００９０】
ステップ２０２７では、空きバッファ判定部が選択したエントリのｓｂｕｆ１（１０１６−Ｍ）（Ｍは選択したエントリに対応する番号）からバッファの空き情報を取得する。
【００９１】
ステップ２０２８では、空きバッファ判定部が、送受信バッファｒｂｕｆ０（１０１３−Ｍ）,ｓｂｕｆ０（１０１５−Ｍ）,ｒｂｕｆ１（１０１４−Ｍ）,ｒｂｕｆ２（１０１６−Ｍ）（Ｍは選択したエントリに対応する番号）のバッファの空き情報に基づき、送受信バッファ１０１３−Ｍ〜１０１６−Ｍの全てが空であるか否かを判定する。
【００９２】
ステップ２０２８において、送受信バッファ１０１３−Ｍ〜１０１６−Ｍの少なくとも１つが空でない場合、ステップ２０２３に戻る。
【００９３】
ここで、送受信バッファ１０１３−Ｍ〜１０１６−Ｍのどれか１つでも空でない場合は、送信端末と受信端末との間で送受信が完了していないパケットがバッファに存在することを意味し、そのタイミングで切り替えると、通信の整合性が取れなくなる恐れがある。また、これは空きバッファ判定部１０１７が状態テーブルのエントリを維持することで、ＴＣＰモジュール１００７/１００８の経由処理を維持することを意味する。
【００９４】
ステップ２０２８において、送受信バッファ１０１３−Ｍ〜１０１６−Ｍの全てが空である場合、ステップ２０２９において空きバッファ判定部が状態テーブルから該当のエントリを削除する。
【００９５】
ここで、送受信バッファ１０１３−Ｍ〜１０１６−Ｍの全てが空である場合は、送信端末と受信端末との間で送受信しているパケットが存在しないため、このタイミングで切り替えれば通信の整合性を保つことができる。また、これは空きバッファ判定部１０１７が状態テーブルからエントリを削除することで、ＴＣＰモジュール１００７/１００８を経由しない通信への切替が行われることを意味する。
【００９６】
ステップ２０３０において、空きバッファ判定部１０１７が現在の状態テーブルのエントリ数をカウントし、装置上限のエントリ数との比較を行う。
【００９７】
現在の状態テーブルのエントリ数が、装置上限のエントリ数のＸパーセント（Ｘは適宜設定）以下のとき、エントリ数は十分に削減されたと考え、ステップ２０２１に進む。一方、現在の状態テーブルのエントリ数が、装置上限のエントリ数のＸパーセント以下でなければ、エントリ数はまだ十分に削減されていないと考え、ステップ２０２３に戻る。
【００９８】
これにより現在の状態テーブルのエントリ数に応じて、エントリが削減され、状態テーブルのエントリ数を装置上限のエントリ数のＸパーセント以下に保つことができる。装置上限エントリ数を現在の状態テーブルのエントリ数が下回っている場合に処理が行われることはなく、装置の負荷状態に応じた処理を行うことができる。
【００９９】
ステップ２０３１において、空きバッファ判定部が状態テーブルのもつ１番からＮ番のエントリを全て選択し終えているかを判定し、全てのエントリを選択していればステップ２００１に戻る。
【０１００】
ステップ２０３１において、空きバッファ判定部が状態テーブルのもつ１番からＮ番のエントリうち、１つでも選択していないエントリがある場合、ステップ２０２３に戻る。
【０１０１】
上記により、一定時間経過ごとに、状態テーブルのエントリ数を削減することができ、装置の負荷を軽減することができる。この例は、削減するエントリ数が、装置上限のＸパーセント以下までと明確であり、装置上限エントリ数を現在の状態テーブルのエントリ数が下回っている場合に処理が行われることはなく、かつ端末間の通信に不整合が生じることもない。
【０１０２】
ここでは一定時間はネットワークの環境（状態テーブルのエントリ数）にあわせて設定するとよい。例えば、状態テーブルのエントリ数が常に装置上限のエントリ数を超える環境であれば数分おきにエントリの削除を行う。逆に装置上限のエントリ数を超えることはほとんどない環境であれば、数日ごとにエントリの削除を行うとよい。
【符号の説明】
【０１０３】
９１０  通信装置＃１、９１１  演算部、９２０  通信装置＃２、９３０  記憶部、１００７／１００８  ＴＣＰモジュール、１００９／１０１０  フィルタ、１０１１／１０１２  ネットワークインターフェースＮＩＦ０／１、１０１７  空きバッファ判定部、１０２０  プロキシモジュール
【図１】
2016129274.tif 000003
【図２】
2016129274.tif 000004
【図３】
2016129274.tif 000005
【図４−１】
2016129274.tif 000006
【図４−２】
2016129274.tif 000007
【図５】
2016129274.tif 000008
【図６】
2016129274.tif 000009
【図７】
2016129274.tif 000010
【図８】
2016129274.tif 000011