(57)【要約】【課題】  端末間のＴＣＰ通信の帯域を向上させつつ、端末間の重複する通信データを少ない演算量で削減する。【解決手段】  通信装置が、パケットのペイロード最大値よりも大きいサイズであるデータブロックに、ネットワークを介して送信するパケットのペイロードデータを蓄積し、受信した第一のパケットのペイロードデータとデータブロックとを比較し、第一のパケットのペイロードデータと一致するデータがデータブロックにある場合、一致するデータの位置情報及び読み込み要求をヘッダに記録し、ペイロードデータを削除した第一のパケットをネットワークに送信する。【選択図】図１０
2016001810.tif 000002
【特許請求の範囲】
【請求項１】
ネットワークに接続される複数の通信装置を備える通信システムであって、
第一の通信装置は、
前記ネットワークを介して前記第二の通信装置に送信するパケットのペイロードデータを蓄積し、前記パケットのペイロード最大値よりも大きいサイズである第一のデータブロックと、
受信した第一のパケットのペイロードデータと前記第一のデータブロックとを比較し、前記第一のパケットのペイロードデータと一致するデータが前記第一のデータブロックにある場合、前記一致するデータの位置情報及び読み込み要求をヘッダに記録し、前記ペイロードデータを削除した第一のパケットを転送する第一の制御部と、
前記第一の制御部から転送され、前記ペイロードデータが削除された第一のパケットを、前記ネットワークに送信する第一の送信部とを備え、
第二の通信装置は、
前記ネットワークを介して前記第一の通信装置から送信されたパケットのペイロードデータを蓄積し、前記パケットの最大セグメントサイズよりも大きいサイズである第二のデータブロックと、
受信した前記第一のパケットのヘッダに記録される位置情報及び読み込み要求に基づき、前記第二のデータブロックからデータを読み出し、読みだしたデータをペイロードデータとして復元した第一のパケットを転送する第二の制御部と、
前記第二の制御部から転送され、前記ペイロードデータが復元された第一のパケットを、前記ネットワークに送信する第二の送信部とを備える
ことを特徴とする通信システム。
【請求項２】
前記第一の制御部は、受信した第一のパケットのペイロードデータと前記第一のデータブロックとを比較し、前記第一のパケットのペイロードデータと一致するデータが前記第一のデータブロックに無い場合、
前記第一のデータブロックに、前記第一のパケットのペイロードデータを書き込み、
前記ペイロードデータが書き込まれた前記第一のデータブロックの位置情報及び書き込み要求をヘッダに記録した第一のパケットを、前記第一の送信部へ転送し、
前記第二の制御部は、
受信した前記第一のパケットのヘッダに記録される位置情報及び書き込み要求に基づき、前記第二のデータブロックに、前記第一のパケットのペイロードデータを書き込む
ことを特徴とする請求項１記載の通信システム。
【請求項３】
前記位置情報は、ペイロードデータが蓄積されているデータブロック及びデータブロック内の位置を識別する情報であり、
前記第一の通信装置は、１つ以上の前記第一のデータブロックを有し、
前記第二の通信装置は、１つ以上の前記第二のデータブロックを有する
ことを特徴とする請求項２記載の通信システム。
【請求項４】
前記第一の制御部は、
前記第一のパケットに後続する第二のパケットを受信し、
前記第二のパケットのペイロードデータと前記第一のデータブロックとを比較し、前記第二のパケットのペイロードデータと一致するデータが前記第一のデータブロックに無い場合、
前記第一のパケットのペイロードデータが書き込まれた前記第一のデータブロックのデータ末尾から、前記第二パケットのペイロードデータを書き込むことを特徴とする請求項２記載の通信システム。
【請求項５】
前記第一の制御部は、
前記第一のパケットに後続する第二のパケットを受信し、
前回の前記第一のパケットのペイロードデータと前記第一のデータブロックとの比較で、前記第一のパケットのペイロードデータと一致するデータが前記第一のデータブロックにある場合、
前記第二のパケットのペイロードデータと、前記第一のパケットのペイロードデータが書き込まれた前記第一のデータブロックのデータ末尾からのデータとを優先して比較する
ことを特徴とする請求項４記載の通信システム。
【請求項６】
前記第一の制御部は、
前記第一のパケットに後続する第二のパケットを受信し、
前回の前記第一のパケットのペイロードデータと前記第一のデータブロックとの比較で、前記第一のパケットのペイロードデータと一致するデータが前記第一のデータブロックに無い場合、
前記第二のパケットのペイロードデータと、前記第一のデータブロックとを比較する
ことを特徴とする請求項４記載の通信システム。
【請求項７】
前記第一の制御部は、前記第一のパケット又は前記第二のパケットのペイロードデータと前記第一のデータブロックの一部とを比較する
ことを特徴とする請求項１記載の通信システム。
【請求項８】
前記第一の制御部は、前記データブロックの先頭にあるデータに対し、所定サイズのデータ毎に、インデックス、データブロックの番号及びデータブロック内の位置を管理する重複データ検索テーブルを有し、
前記パケットのペイロードデータから作成するインデックスを、前記重複データ検索テーブルのインデックから検索することで、前記第一のパケット又は前記第二のパケットのペイロードデータと前記第一のデータブロックの一部とを比較する
ことを特徴とする請求項７記載の通信システム。
【請求項９】
ネットワークに接続される通信装置であって、
前記ネットワークに送信するパケットのペイロードデータを蓄積し、前記パケットのペイロード最大値よりも大きいサイズであるデータブロックと、
受信した第一のパケットのペイロードデータと前記データブロックとを比較し、前記第一のパケットのペイロードデータと一致するデータが前記データブロックにある場合、前記一致するデータの位置情報及び読み込み要求をヘッダに記録し、前記ペイロードデータを削除した第一のパケットを転送する制御部と、
前記制御部から転送され、前記ペイロードデータが削除された第一のパケットを、前記ネットワークに送信する送信部とを備える
ことを特徴とする通信装置。
【請求項１０】
前記制御部は、受信した第一のパケットのペイロードデータと前記データブロックとを比較し、前記第一のパケットのペイロードデータと一致するデータが前記データブロックに無い場合、
前記データブロックに、前記第一のパケットのペイロードデータを書き込み、
前記ペイロードデータが書き込まれた前記データブロックの位置情報及び書き込み要求をヘッダに記録した第一のパケットを、前記送信部へ転送する
ことを特徴とする請求項９記載の通信装置。
【請求項１１】
前記制御部は、
前記第一のパケットに後続する第二のパケットを受信し、
前記第二のパケットのペイロードデータと前記データブロックとを比較し、前記第二のパケットのペイロードデータと一致するデータが前記データブロックに無い場合、
前記第一のパケットのペイロードデータが書き込まれた前記データブロックのデータ末尾から、前記第二パケットのペイロードデータを書き込む
ことを特徴とする請求項１０記載の通信装置。
【請求項１２】
前記制御部は、
前記第一のパケットに後続する第二のパケットを受信し、
前回の前記第一のパケットのペイロードデータと前記データブロックとの比較で、前記第一のパケットのペイロードデータと一致するデータが前記データブロックにある場合、
前記第二のパケットのペイロードデータと、前記パケットのペイロードデータが書き込まれた前記データブロックのデータ末尾からのデータとを優先して比較する
ことを特徴とする請求項１１記載の通信装置。
【請求項１３】
前記制御部は、
前記第一のパケットに後続する第二のパケットを受信し、
前回の前記第一のパケットのペイロードデータと前記データブロックとの比較で、前記第一のパケットのペイロードデータと一致するデータが前記データブロックに無い場合、
前記第二のパケットのペイロードデータと、前記データブロックの一部とを比較する
ことを特徴とする請求項１１記載の通信装置。
【請求項１４】
前記通信装置は、送信側の通信装置であり、
前記制御部は、前記データブロックの先頭にあるデータに対し、所定サイズのデータ毎に、インデックス、データブロックの番号及びデータブロック内の位置を管理する重複データ検索テーブルを有し、
前記パケットのペイロードデータから作成するインデックスを、前記重複データ検索テーブルのインデックから検索することで、前記第一のパケット又は前記第二のパケットのペイロードデータと前記データブロックの一部とを比較する
ことを特徴とする請求項９記載の通信装置。
【請求項１５】
ネットワークに接続される通信装置であって、
前記ネットワークを介して他の通信装置から送信されたパケットのペイロードデータを蓄積し、前記パケットの最大セグメントサイズよりも大きいサイズであるデータブロックと、
受信した第一のパケットのヘッダに記録される位置情報及び読み込み要求に基づき、前記データブロックからデータを読み出し、読みだしたデータをペイロードデータとして復元した第一のパケットを転送する制御部と、
前記制御部から転送され、前記ペイロードデータが復元された第一のパケットを、前記ネットワークに送信する送信部とを備える
ことを特徴とする通信装置。
【請求項１６】
前記通信装置は、受信側の通信装置であり
前記制御部は、
受信した前記第一のパケットのヘッダに記録される位置情報及び書き込み要求に基づき、前記データブロックに、前記第一のパケットのペイロードデータを書き込む
ことを特徴とする請求項１５記載の通信装置。
【請求項１７】
ネットワークに接続される複数の通信装置を備える通信システムにおけるパケット転送方法であって、
第一の通信装置が、
前記パケットのペイロード最大値よりも大きいサイズである第一のデータブロックに、前記ネットワークを介して前記第二の通信装置に送信するパケットのペイロードデータを蓄積し、
受信した第一のパケットのペイロードデータと前記第一のデータブロックとを比較し、
前記第一のパケットのペイロードデータと一致するデータが前記第一のデータブロックにある場合、前記一致するデータの位置情報及び読み込み要求をヘッダに記録し、
前記ペイロードデータを削除した第一のパケットを前記ネットワークに送信し、
第二の通信装置が、
前記パケットの最大セグメントサイズよりも大きいサイズである第二のデータブロックに、前記ネットワークを介して前記第一の通信装置から送信されたパケットのペイロードデータを蓄積し、
受信した前記第一のパケットのヘッダに記録される位置情報及び読み込み要求に基づき、前記第二のデータブロックからデータを読み出し、
読みだしたデータをペイロードデータとして復元した第一のパケットを、前記ネットワークに送信する
ことを特徴とするパケット転送方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、端末間の重複する通信データを削減しつつ、端末間の通信帯域を制御する通信システム、通信装置及びパケット転送方法に関する。
【背景技術】
【０００２】
クラウド等に用いられる拠点間の通信網として、ＩＰ−ＶＰＮ（Ｉｎｔｅｒｎｅｔ  Ｐｒｏｔｏｃｏｌ−  Ｖｉｒｔｕａｌ  Ｐｒｉｖａｔｅ  Ｎｅｔｗｏｒｋ）技術等を用いたＷＡＮ（Ｗｉｄｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）を用いることが、一般的になっている。
【０００３】
或る拠点に存在する端末が、別の拠点に存在する端末と通信する場合は、自拠点ＬＡＮとＷＡＮを接続する回線と、ＷＡＮと別拠点ＬＡＮを接続する回線とを経由して通信が行われる。これらの回線は、契約帯域によって、使用可能な帯域幅が制限されている。
【０００４】
端末間の通信では、ＴＣＰを用いるのが一般的である。ＴＣＰ通信では、送信端末が送信したデータに対して、受信端末は、受信済みデータの位置を送信端末にフィードバック通知する。送信端末は、フィードバック通知される受信済みデータの位置が増加しなくなると、廃棄検出と判定する。
【０００５】
さらに、ＴＣＰを用いる送信端末は、輻輳ウィンドウサイズ（受信したことを受信端末から通知されなくても送信可能なデータサイズ）と呼ばれるパラメータを管理しており、ＲＴＴ（Ｒｏｕｎｄ  Ｔｒｉｐ  Ｔｉｍｅ）や廃棄検出の有無に応じて、輻輳ウィンドウサイズを変化させる。例えば、送信端末は、廃棄検出時やＲＴＴ増加時に、ネットワークが混雑していると判定して、ウィンドウサイズを減少させる。これにより、送信帯域が間接的に減少されて、ネットワークの混雑が回避される。また、送信端末は、廃棄が無い時やＲＴＴ減少時に、ネットワークが空いていると判定して、ウィンドウサイズを増加させる。これにより、送信帯域が間接的に増加されて、ネットワークの回線帯域が有効利用される。
【０００６】
ＷＡＮのようなＲＴＴが大きく廃棄率の高い回線では、ＴＣＰのウィンドウサイズが増加しにくくなり、通信帯域が低下するという問題があった。また、ＷＡＮのような長距離回線のコストは高いため、契約帯域によって使用可能な帯域幅が制限され、満足のいく通信帯域を得られないという問題があった。
【０００７】
これらの問題に対応するため、特許文献１には、再送帯域・廃棄帯域に基づいて送信帯域を制御する技術が開示されている。また、特許文献２、３には、データ圧縮の技術が開示されている。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】国際公開番号ＷＯ２０１１／０３３８９４
【特許文献２】米国公報番号ＵＳ２００２/００３７０３５
【特許文献３】米国特許番号ＵＳ６６６７７００
【発明の概要】
【発明が解決しようとする課題】
【０００９】
ＷＡＮのようなＲＴＴが大きく廃棄率の高い回線では、ネットワークが混雑していると判断されやすいため、ＴＣＰのウィンドウサイズが増加しにくくなる。その結果、通信帯域が低下するという問題があった。また、ＷＡＮの契約帯域によって、使用可能な帯域幅が制限され、満足のいく通信帯域を得られないという問題があった。
【００１０】
これらの問題を解決するために、本発明は、端末間のＴＣＰ通信の帯域を向上させつつ、端末間の重複する通信データを少ない演算量で削減する方式および装置およびシステムを提供する。
【課題を解決するための手段】
【００１１】
上述の課題を解決するために、本願発明は、ネットワークに接続される複数の通信装置に関し、第一の通信装置が、前記パケットのペイロード最大値よりも大きいサイズである第一のデータブロックに、前記ネットワークを介して前記第二の通信装置に送信するパケットのペイロードデータを蓄積し、受信した第一のパケットのペイロードデータと前記第一のデータブロックとを比較し、前記第一のパケットのペイロードデータと一致するデータが前記第一のデータブロックにある場合、前記一致するデータの位置情報及び読み込み要求をヘッダに記録し、前記ペイロードデータを削除した第一のパケットを前記ネットワークに送信する。そして、第二の通信装置が、前記パケットの最大セグメントサイズよりも大きいサイズである第二のデータブロックに、前記ネットワークを介して前記第一の通信装置から送信されたパケットのペイロードデータを蓄積し、受信した前記第一のパケットのヘッダに記録される位置情報及び読み込み要求に基づき、前記第二のデータブロックからデータを読み出し、読みだしたデータをペイロードデータとして復元した第一のパケットを、前記ネットワークに送信する。
【発明の効果】
【００１２】
本発明によると、端末間の重複する通信データの転送を、少ない演算量で削減して、回線帯域を有効に活用することが可能となる。
【図面の簡単な説明】
【００１３】
【図１】本実施の形態における装置を有するシステム構成図。
【図２】本実施の第一の形態における装置２００のブロック図。
【図３】本実施の第二の形態における装置２００のブロック図。
【図４】パケットのフォーマット図。
【図５】セッション管理テーブル５００のフォーマット図。
【図６】セッション送受信バッファ６００のフォーマット図。
【図７】重複データ蓄積テーブル７００のフォーマット図。
【図８】重複データ検索テーブル８００のフォーマット図。
【図９】状態テーブルが保持する値の意味を説明する概念図。
【図１０】通信データ削減の概念図。
【図１１】本実施の形態における装置２００のパケットの流れを表したブロック図。
【図１２】ＴＣＰ部の機能ブロック図。
【図１３】ＴＣＰ部の機能ブロック図。
【図１４】制御帯域を更新するフローチャート図。
【図１５】一致か非一致によって遷移する状態遷移図。
【図１６】差分転送モジュール１４００のパケット送信時のフローチャート図。
【図１７】重複データ検索テーブル８００のエントリ作成方法を説明する概念図。
【図１８】重複データ検索テーブル８００を用いて重複データ蓄積テーブル７００から一致するデータを見つける方法を説明する概念図。
【図１９】重複データ蓄積テーブル７００の蓄積データブロックを有効にするタイミングを説明する概念図。
【図２０】セッション送受信バッファ６００を管理するポインタの説明図
【図２１】これまでに送信したことが無いデータを持つパケットの転送についての説明図
【発明を実施するための形態】
【００１４】
以下、本発明を適用した中継システムについて、図面を用いて詳細に説明する。
【００１５】
まず、一般的な中継システムを示す図１を用いて、本発明が解決しようとする課題について説明する。
【００１６】
通信装置（中継装置ともいう。以下、単に装置と記す）２００Ａ〜Ｃは、複数の拠点内のＬＡＮ１１０、１２０、１３０とＷＡＮ１４０とを接続する通信回線上に、設置される。装置２００Ａ〜ＣとＷＡＮ１４０とは、回線１９１、１９２、１９３で接続されている。各拠点のＬＡＮ１１０、１２０、１３０には、複数の端末１１１〜１１３、１２１〜１２３、１３１〜１３３が接続している。また、端末、装置及びネットワークの数は、図示以外にも適宜の数を備えても良い。
【００１７】
端末１１１と端末１２１とは、装置２００Ａ及び装置２００Ｂを経由して、通信を行う。端末１１１から端末１２１に向かう通信経路上における回線１９１・回線１９２の通信遅延や廃棄率が大きい場合、ネットワークが混雑していると判断されやすいため、ＴＣＰのウィンドウサイズが増加しにくくなる。その結果、通信帯域が低下するという問題があった。更に、回線１９１や回線１９２の契約帯域が小さい場合、使用可能な帯域幅が制限され、満足のいく通信帯域を得られないという問題があった。
【００１８】
図２に、本発明を適用した装置２００のブロック図を示す。
【００１９】
装置２００は、例えば、外部のＷＡＮネットワーク１４０およびＬＡＮネットワーク１１０との間でパケットの送受信を行うＷＡＮ側及びＬＡＮ側のネットワークインターフェース（２１０／２２０）と、外部の管理用端末２４０とのパケットの送受信を行う管理インターフェース２３０と、演算部２６０と、記憶部２５０とを備える。
【００２０】
演算部２６０は、記憶部２５０とインターフェース２１０／２２０／２３０との間で、データのやり取りを行う。演算部２６０は、ＷＡＮ側のＴＣＰ通信のための制御を行うＷＡＮ  ＴＣＰモジュール１２００と、ＬＡＮ側のＴＣＰ通信のための制御を行うＬＡＮ  ＴＣＰモジュール１３００と、送受信バッファ内でデータの乗せ換えを行うデータ交換モジュール２７０と、差分データの転送、重複データの削減、および重複データの復元を行う差分転送モジュール１４００とを、実行する。
【００２１】
記憶部２５０は、ＷＡＮネットワーク１４０およびＬＡＮネットワーク１１０との間で行われるＴＣＰ通信をセッション毎に管理するための情報を記録するセッション管理テーブル５００と、ＷＡＮ／ＬＡＮ側のＴＣＰ通信が管理する送受信データをＴＣＰ通信のセッション毎に記録するセッション送受信バッファ６００と、転送済みデータを蓄積するための転送データ蓄積テーブル７００と、転送データ蓄積テーブル７００からパケットのペイロードデータと一致するデータを探し出すための重複データ検索テーブル８００とを備える。
【００２２】
図３に、スイッチ３１０と組み合わせた図場合の、本発明を適用した装置２００のブロック図を示す。
【００２３】
装置２００は、例えば、外部のスイッチ３１０との間でパケットの送受信を行う共通インターフェース３００と、外部の管理用端末２４０とのパケットの送受信を行う管理インターフェース２３０と、演算部２６０と、記憶部２５０とを備える。
【００２４】
演算部２６０は、記憶部２５０とインターフェース３００／２３０の間でデータのやり取りを行う。
【００２５】
スイッチ３１０は、外部のＷＡＮネットワーク１４０およびＬＡＮネットワーク１１０との間でパケットの送受信を行うＷＡＮ側及びＬＡＮ側のネットワークインターフェースカードＮＩＣ（３２０／３３０）と、装置２００との間でパケットの送受信を行う装置側ネットワークインターフェースカードＮＩＣ３４０とを、備える。装置２００とスイッチ３１０との間の通信は、例えば、タグＶＬＡＮを用いて通信が行われる。
【００２６】
装置２００がＷＡＮ１４０に向けて送信するパケットおよびＷＡＮ１４０から受信するパケットには、ＷＡＮ１４０向けのＶＬＡＮタグ番号が付けられる。一方、装置２００がＬＡＮ１１０に向けて送信するパケットおよびＷＡＮ１４０から受信するパケットには、ＬＡＮ１１０向けのＶＬＡＮタグ番号が付けられる。なお、ＬＡＮ１１０向けのＶＬＡＮタグ番号は、ＷＡＮ１４０向けのＶＬＡＮタグ番号とは異なる。
【００２７】
図４に、装置２００が送受信するパケットのフォーマット図を表す。
【００２８】
パケットは、ＭＡＣヘッダ４００、ＩＰヘッダ４１０、ＴＣＰヘッダ４２０、ＴＣＰオプションヘッダ４３０、ペイロード４５０を含む。
【００２９】
ＭＡＣヘッダ４００は、宛先ＭＡＣアドレスを表すＤＭＡＣ４０１と、送信元ＭＡＣアドレスを表すＳＭＡＣ４０２と、ＭＡＣフレームタイプを表すＴｙｐｅ４０７とを含む。ＶＬＡＮを用いる場合は、更に、フレームタイプがＶＬＡＮであることを示すためのＴＰＩＤ４０３と、優先度を表すＰＣＰ４０４と、正規ＭＡＣフォーマットではないことを表すためのＣＦＩ４０５と、ＶＬＡＮのＩＤ番号を表すＶＩＤ４０６とを含む。
【００３０】
ＩＰヘッダ４１０は、ＭＡＣヘッダを除くパケット長を表すＩＰ  ｌｅｎｇｔｈ４１１と、プロトコル番号を表すｐｒｏｔｏｃｏｌ４１２と、送信元ＩＰアドレスを表すＳＩＰ４１３と、宛先ＩＰアドレスを現すＤＩＰ４１４とを含む。
【００３１】
ＴＣＰヘッダ４２０は、送信元ポート番号を表すｓｒｃ．ｐｏｒｔ４２１と、宛先ポート番号を表すｄｓｔ．ｐｏｒｔ４２２と、送信シーケンス番号を表すＳＥＱ４２３と、受信シーケンス番号を表すＡＣＫ４２４と、ＴＣＰフラグ番号を表すｆｌａｇ４２５と、ＴＣＰのヘッダ長を表すｔｃｐ  ｈｌｅｎ４２６とを含む。
【００３２】
ＴＣＰオプションヘッダ４３０は、オプション種別を表すｏｐｔｉｏｎ  ｋｉｎｄ  １（４３１）と、オプション長を表すｏｐｔｉｏｎ  ｌｅｎｇｔｈ  １（４３２）と、部分的に受信できたデータ箇所の位置を送信端末に通知するために用いられるｌｅｆｔ＿ｅｄｇｅ＿１〜４（４３３、４３５、４３７、４３９）、ｒｉｇｈｔ＿ｅｄｇｅ＿１〜４（４３４、４３６、４３８、４４０）を含む。ｌｅｆｔ＿ｅｄｇｅ＿１〜４（４３３、４３５、４３７、４３９）、ｒｉｇｈｔ＿ｅｄｇｅ＿１〜４（４３４、４３６、４３８、４４０）は、部分的に受信できなかったデータ箇所の位置を通知するために用いられるケースもある。
【００３３】
更に、ＴＣＰオプションヘッダ４３０は、ＴＣＰ通信を開始するときに、装置間の情報交換などに使用するケースもある。
【００３４】
例えば、ＭＳＳオプションは、ＴＣＰ通信を開始するときに、自装置の受信可能なＭＳＳのサイズを対向装置に通知するために用いられる。ＳＡＣＫオプションは、ＴＣＰ通信を開始するときに、自装置がＳＡＣＫオプションに対応可能であることを対向装置に通知するために用いられるだけでなく、通信中に廃棄が検出されたときに部分的に受信出来た箇所を対向装置に通知するためにも、用いられる。タイムスタンプオプションは、通信中の自装置の受信時刻を対向装置に通知するために用いられる。
【００３５】
このように、ＴＣＰオプションは、通信開始時および通信中に、自装置の対応可能な機能や情報を対向装置に伝えるために用いられる。
【００３６】
装置２００が、重複する通信データを削減するために、ＴＣＰオプションヘッダを用いて通信を行う場合の、ＴＣＰオプションヘッダ４３０の利用方法は、後に詳述する。ここでは、ＴＣＰオプションヘッダ４３０が含む情報の概略を、説明する。
【００３７】
装置２００が、重複する通信データを削減するために、ＴＣＰオプションヘッダを用いて通信を行う場合、ＴＣＰオプションヘッダ４３０は、オプション種別を表すｏｐｔｉｏｎ  ｋｉｎｄ  ２（４４１）と、オプション長を表すｏｐｔｉｏｎ  ｌｅｎｇｔｈ  ２（４４２）と、書き込みと読み込みのどちらの要求なのかを指定するためのｆｌｇ４４３と、転送データ蓄積テーブル７００内のデータブロック内の先頭・末尾データであることを示すためのｇａｐ４４４と、転送データ蓄積テーブル７００内のデータブロックの番号を指定するためのｔａｂｌｅ＿ｉｄ４４５と、転送データ蓄積テーブル７００内のデータブロック内のデータ位置を指定するためのｐｌａｃｅ４４６と、書き込みや読み込みを行うデータサイズを指定するためのｌｅｎｇｔｈ４４７とを、含む。
【００３８】
図５に、セッション管理テーブル５００のフォーマット図を示す。
【００３９】
装置２００のセッション管理テーブル５００は、例えばＴＣＰコネクション毎の状態を記録するためのｎ個のエントリ５０１と、通信が確立しているコネクション数や実際にデータを送信中であるコネクション数を表すｃｏｎｎｅｃｔ＿ｎｕｍ５６５と、装置全体の上限帯域を定めたｍａｘ＿ｓｐｅｅｄ５６７と、を有する。
【００４０】
ＴＣＰの３−Ｗａｙ−Ｈａｎｄｓｈａｋｅの終了した通信を、通信が確立しているコネクションであるとみなす。更に、後述のＬＡＮ受信バッファ６３０とＷＡＮ送信バッファ６２０にデータが一定量蓄積されていたり、直近の送信帯域が一定値以上のコネクションを、実際にデータを送信中であるコネクションと見なす。なお、上限帯域は、対向拠点毎に定めてもよく、ｍａｘ＿ｓｐｅｅｄ１〜ｎ（５６７−１〜ｎ）として複数の対向拠点１〜ｎ毎に異なる値を有しても良い。
【００４１】
各エントリ５０１は、以下に示す変数を管理する。
【００４２】
具体的には、エントリが使用中であるか否かを記載するＶＬＤ５０２。ＬＡＮまたはＷＡＮ側のコネクションが確立中であるか否かを記載するｃｏｎｎｅｃｔ＿ｓｔａｔｅ５０３。ＬＡＮ側の端末のＩＰアドレスを表すＬＩＰ５０４。ＷＡＮ側の端末のＩＰアドレスを表すＷＩＰ５０５。ＬＡＮ側の端末のＴＣＰポート番号を表すＬｐｏｒｔ５０６。ＷＡＮ側の端末のＴＣＰポート番号を表すＷｐｏｒｔ５０７。
【００４３】
ＬＡＮ側のＶＬＡＮ番号を表すＬＶＬＡＮ５６０。ＷＡＮ側のＶＬＡＮ番号を表すＷＬＡＮ５６１。
【００４４】
ＬＡＮ側のＴＣＰ通信の状態を表すｌａｎ＿ｓｔａｔｅ５０８。ＬＡＮ側の受信バッファ管理用のポインタを表すｌａｎ＿ｌｅｆｔ＿ｒｂｕｆ５０９、ｌａｎ＿ｌｅｆｔ＿ｒｅｃｖ５１０、ｌａｎ＿ｒｉｇｈｔ＿ｒｅｃｖ５１１。
【００４５】
ＬＡＮ側のウィンドウスケールオプションの値を表すｌａｎ＿ｗｓ５１２。ＬＡＮ側の平均ＲＴＴを表すｌａｎ＿ｒｔｔ５１３。ＬＡＮ側の受信バッファから読み出され加工中のデータサイズを表すｌａｎ＿ｗａｎ５１４。
【００４６】
ＬＡＮ側の送信バッファ管理用のポインタを表すｌａｎ＿ｌｅｆｔ＿ｓｅｎｄ５１５、ｌａｎ＿ｒｉｇｈｔ＿ｓｅｎｄ５１６、ｌａｎ＿ｒｉｇｈｔ＿ｓｂｕｆ５１７。ＬＡＮ側の輻輳ウィンドウサイズを表すＬｃｗｎｄ５１８。ＬＡＮ側の受信ウィンドウサイズを表すＬｒｗｎｄ５１９。ＬＡＮ側の最大セグメントサイズ（ＭＳＳ）のサイズを表すＬｍｓｓ５２０。
【００４７】
ＷＡＮ側のＴＣＰ通信の状態を表すｗａｎ＿ｓｔａｔｅ５２１。ＷＡＮ側の受信バッファ管理用のポインタを表すｗａｎ＿ｌｅｆｔ＿ｒｂｕｆ５２２、ｗａｎ＿ｌｅｆｔ＿ｒｅｃｖ５２３、ｗａｎ＿ｒｉｇｈｔ＿ｒｅｃｖ５２４。ＷＡＮ側のウィンドウスケールオプションの値を表すｗａｎ＿ｗｓ５２５。ＷＡＮ側の平均／初期ＲＴＴを表すｗａｎ＿ｒｔｔ５２６。
【００４８】
ＷＡＮ側の受信バッファから読み出され加工中のデータサイズを表すｗａｎ＿ｌａｎ５２７。ＷＡＮ側の送信バッファ管理用のポインタを表すｗａｎ＿ｌｅｆｔ＿ｓｅｎｄ５２８、ｗａｎ＿ｒｉｇｈｔ＿ｓｅｎｄ５２９、ｗａｎ＿ｒｉｇｈｔ＿ｓｂｕｆ５３０。ＷＡＮ側の輻輳ウィンドウサイズを表すＷｃｗｎｄ５３１。ＷＡＮ側の受信ウィンドウサイズを表すＷｒｗｎｄ５３２。ＷＡＮ側の最大セグメントサイズＭＳＳを表すＷｍｓｓ５３３。
【００４９】
前回の制御帯域の更新時刻におけるＡＣＫ受信済み箇所を表すｏｌｄ＿ｗａｎ＿ｌｅｆｔ＿ｓｅｎｄ５３４。パケットを送信する帯域を制御するための制御帯域ｔｏｋｅｎ５３８。前回の制御帯域の更新時刻の直前における制御帯域を表すｏｌｄ＿ｔｏｋｅｎ５３９（。前々回の制御帯域の更新時刻ｏｌｄ＿ｒｅｎｅｗｅｄ＿ｔｉｍｅ５５５の直前における制御帯域を表すｏｌｄ＿ｏｌｄ＿ｔｏｋｅｎ５４０。
【００５０】
現在時刻での送信帯域を表すｓｎｄ５４５。前回の制御帯域の更新時刻における送信帯域を表すｏｌｄ＿ｓｎｄ５４６。前々回の制御帯域の更新時刻における送信帯域を表すｏｌｄ＿ｏｌｄ＿ｓｎｄ５４７。現在時刻での再送帯域または廃棄帯域を表すｒｔｓ５４８。前回の更新時刻における再送帯域または廃棄帯域を表すｏｌｄ＿ｒｔｓ５４９。現在時刻での受信帯域を表すｒｃｖ５５０。前回の更新時刻における受信帯域を表すｏｌｄ＿ｒｃｖ５５１。ＴＣＰ通信コネクション毎に、制御帯域を更新した直近の更新時刻を表すｒｅｎｅｗｅｄ＿ｔｉｍｅ５５２。
【００５１】
現在時刻での再送率または廃棄率を表すｌｏｓｓ＿ｒａｔｉｏ５５３。前回の更新時刻における再送率または廃棄率を表すｏｌｄ＿ｌｏｓｓ＿ｒａｔｉｏ５５４。制御帯域を更新した前々回の更新時刻を表すｏｌｄ＿ｒｅｎｅｗｅｄ＿ｔｉｍｅ５５５。直近の更新時刻ｒｅｎｅｗｅｄ＿ｔｉｍｅ５５２から現在時刻までの送信バイト積算値を表すｓｎｄ＿ｂｙｔｅ５５６。直近の更新時刻から現在時刻までの再送バイト積算値を表すｒｔｓ＿ｂｙｔｅ５５７。直近の更新時刻から現在時刻までの受信バイト積算値を表すａｃｋ＿ｂｙｔｅ５５８。
【００５２】
送信したパケットのペイロードデータと一致するデータが転送データ蓄積テーブルにあったかどうかの前回の判定結果を示すための状態を記録するｈｉｔ＿ｓｔａｔｅ５６２。送信パケットのペイロードデータと一致するデータを持つデータブロックの番号を表すｒｅａｄ＿ｂｌｋ５６３。送信パケットのペイロードデータと一致するデータのデータブロック内の位置を表すｒｅａｄ＿ｐｎｔ５６４。送信パケットのペイロードデータを書き込んだデータブロックの番号を表すｗｒｉｔｅ＿ｂｌｋ５６５。送信パケットのペイロードデータを書き込んだデータブロック内の位置を表すｗｒｉｔｅ＿ｐｎｔ５６６。
【００５３】
直近の更新時刻ｒｅｎｅｗｅｄ＿ｔｉｍｅ５５２後の制御帯域ｔｏｋｅｎ５３８は、現在時刻における制御帯域を表す（本実施例では、ｔｏｋｅｎまたはトークンと表す）。
【００５４】
直近の更新時刻ｒｅｎｅｗｅｄ＿ｔｉｍｅ５５２後の送信帯域は、現在時刻における送信帯域を表し（本実施例では、ｓｎｄと表す）、直近の更新時刻ｒｅｎｅｗｅｄ＿ｔｉｍｅ５５２後の送信ビット積算値を、現在時刻と直近の更新時刻ｒｅｎｅｗｅｄ＿ｔｉｍｅ５５２の差分で除算することで求められる。
【００５５】
直近の更新時刻ｒｅｎｅｗｅｄ＿ｔｉｍｅ５５２後の再送帯域は、現在時刻における再送帯域を表し（本実施例では、ｒｔｓと表す）、直近の更新時刻ｒｅｎｅｗｅｄ＿ｔｉｍｅ５５２後の再送ビット積算値を、現在時刻と直近の更新時刻ｒｅｎｅｗｅｄ＿ｔｉｍｅ５５２の差分で除算することで求められる。
【００５６】
直近の更新時刻ｒｅｎｅｗｅｄ＿ｔｉｍｅ５５２後の受信帯域は、現在時刻における受信帯域を表し（本実施例では、ｒｃｖと表す）、直近の更新時刻ｒｅｎｅｗｅｄ＿ｔｉｍｅ５５２以降のＡＣＫ受信数にＷＡＮ側のＭＳＳと８を積算した値を、現在時刻ｃｕｒｒｅｎｔ＿ｔｉｍｅと直近の更新時刻ｒｅｎｅｗｅｄ＿ｔｉｍｅ５５２の差分で除算することで求められる。
【００５７】
直近の更新時刻ｒｅｎｅｗｅｄ＿ｔｉｍｅ５５２前の制御帯域・送信帯域・受信帯域・再送帯域は、前々回の更新時刻ｏｌｄ＿ｒｅｎｅｗｅｄ＿ｔｉｍｅ５５５から直近の更新時刻ｒｅｎｅｗｅｄ＿ｔｉｍｅ５５２までの制御帯域・送信帯域・受信帯域・再送帯域の平均値を表す（本実施例では、ｏｌｄ＿ｔｏｋｅｎ、ｏｌｄ＿ｓｎｄ、ｏｌｄ＿ｒｃｖ、ｏｌｄ＿ｒｔｓと表す）。
【００５８】
前々回の更新時刻ｏｌｄ＿ｒｅｎｅｗｅｄ＿ｔｉｍｅ５５５の制御帯域・送信帯域は、前々回の更新時刻ｏｌｄ＿ｒｅｎｅｗｅｄ＿ｔｉｍｅ５５５の直前までの制御帯域・送信帯域を表す（本実施例では、ｏｌｄ＿ｏｌｄ＿ｔｏｋｅｎ、ｏｌｄ＿ｏｌｄ＿ｓｎｄ、と表す）。
【００５９】
直近の更新時刻ｒｅｎｅｗｅｄ＿ｔｉｍｅ５５２前の再送率／廃棄率ｏｌｄ＿ｌｏｓｓ＿ｒａｔｉｏは、ｏｌｄ＿ｒｔｓ／ｏｌｄ＿ｏｌｄ＿ｓｎｄ、または、１−ｏｌｄ＿ｒｃｖ／ｏｌｄ＿ｏｌｄ＿ｓｎｄで求められる。
【００６０】
また、直近の更新時刻ｒｅｎｅｗｅｄ＿ｔｉｍｅ５５２後の現在時刻の再送率／廃棄率ｌｏｓｓ＿ｒａｔｉｏは、ｒｔｓ／ｏｌｄ＿ｓｎｄ、または、１−ｒｃｖ／ｏｌｄ＿ｓｎｄで求められる。インターバル時間として、固定値を用いることもあれば、セッション管理テーブル５００記載のｗａｎ＿ｒｔｔ５２６を用いる場合もある。
【００６１】
なお、装置２００が図３に記載の構成をとる場合、セッション管理テーブル５００のエントリ内に、ＬＡＮ側のＶＬＡＮ番号を表すＬＶＬＡＮ５６０と、ＷＡＮ側のＶＬＡＮ番号を表すＷＬＡＮ５６１とを記録しておく。ＷＡＮ側にパケットを送信するときは、ＭＡＣヘッダ４００内のＶＬＡＮ番号を表すＶＩＤ４０６に、ＷＡＮ側のＶＬＡＮ番号を表すＷＬＡＮ５６１を記入する。ＬＡＮ側にパケットを送信するときは、ＭＡＣヘッダ４００内のＶＬＡＮ番号を表すＶＩＤ４０６に、ＬＡＮ側のＶＬＡＮ番号を表すＬＶＬＡＮ５６０を記入する。これにより、スイッチ３４０がＷＡＮとＬＡＮのどちらに転送すればよいかを判定可能にしている。
【００６２】
パケットを受信したときは、パケットのＭＡＣヘッダ４００内のＶＬＡＮ番号を表すＶＩＤ４０６に記載された値が、ＬＡＮ側のＶＬＡＮ番号を表すＬＶＬＡＮ５６０と、ＷＡＮ側のＶＬＡＮ番号を表すＷＬＡＮ５６１のいずれであるかを判定し、ＷＡＮとＬＡＮのどちらから来たパケットなのかを判断する。これにより、共通インターフェース３００を用いて、ＬＡＮ側とＷＡＮ側の通信を実行することが可能となる。
【００６３】
図６に、セッション送受信バッファ６００のフォーマット図を示す。
【００６４】
セッション送受信バッファ６００は、ＷＡＮ受信バッファ６１０と、ＷＡＮ送信バッファ６２０と、ＬＡＮ受信バッファ６３０と、ＬＡＮ送信バッファ６４０とから、構成される。
【００６５】
ＷＡＮ受信バッファ６１０は、ＷＡＮから受信したパケットを、ＴＣＰヘッダ４２０内の送信シーケンス番号ＳＥＱ４２３の小さい順に、記録する。記録するパケット情報６１１−１〜ｍには、ＩＰヘッダ４１０とＴＣＰヘッダ４２０に対応するＴＣＰ／ＩＰヘッダ６１２と、ペイロード４５０に対応するペイロード６１３と、ＴＣＰオプションヘッダ４３０内のｆｌｇ４４３、ｇａｐ４４４，ｔａｂｌｅ＿ｉｄ４４５，ｐｌａｃｅ４４６，ｌｅｎｇｔｈ４４７に対応するｆｌｇ６１４、ｇａｐ６１５，ｔａｂｌｅ＿ｉｄ６１６，ｐｌａｃｅ６１７，ｌｅｎｇｔｈ６１８が含まれる。
【００６６】
ＷＡＮ送信バッファ６２０は、ＷＡＮへ送信したパケットを、ＴＣＰヘッダ４２０内の送信シーケンス番号ＳＥＱ４２３の小さい順に、記録する。記録するパケット情報６２１−１〜ｍには、ＩＰヘッダ４１０とＴＣＰヘッダ４２０に対応するＴＣＰ／ＩＰヘッダ６２２、ペイロード４５０に対応するペイロード６２３と、ＴＣＰオプションヘッダ４３０内のｆｌｇ４４３、ｇａｐ４４４，ｔａｂｌｅ＿ｉｄ４４５，ｐｌａｃｅ４４６，ｌｅｎｇｔｈ４４７に対応するｆｌｇ６２４、ｇａｐ６２５，ｔａｂｌｅ＿ｉｄ６２６，ｐｌａｃｅ６２７，ｌｅｎｇｔｈ６２８が含まれる。
【００６７】
ＬＡＮ受信バッファ６３０は、ＬＡＮから受信したパケットを、ＴＣＰヘッダ４２０内の送信シーケンス番号ＳＥＱ４２３の小さい順に、記録する。記録するパケット情報６３１−１〜ｍには、ＩＰヘッダ４１０とＴＣＰヘッダ４２０に対応するＴＣＰ／ＩＰヘッダ６３２と、ペイロード４５０に対応するペイロード６３３が含まれる。
【００６８】
ＬＡＮ送信バッファ６４０は、ＬＡＮへ送信したパケットを、ＴＣＰヘッダ４２０内の送信シーケンス番号ＳＥＱ４２３の小さい順に、記録する。記録するパケット情報６４１−１〜ｍには、ＩＰヘッダ４１０とＴＣＰヘッダ４２０に対応するＴＣＰ／ＩＰヘッダ６４２と、ペイロード４５０に対応するペイロード６４３が含まれる。
【００６９】
図１１に、装置２００におけるパケットの流れ図を示す。
【００７０】
装置２００がＬＡＮ１１０から受信したパケットは、最初に、ＬＡＮ  ＴＣＰ１３００のＲＸ部（受信部）１３０２に、受け取られる。
【００７１】
ＬＡＮ  ＴＣＰ１３００のＲＸ部（受信部）１３０２は、受信したパケットに対するＡＣＫをＬＡＮ１１０に向けて送信して、セッション送受信バッファ６００内のＬＡＮ受信バッファ６３０に、受信したパケットを蓄積する。
【００７２】
ＬＡＮ受信バッファ６３０に蓄積されたパケットは、データ交換部２７０により、ＷＡＮ送信バッファ６２０へ移される。移されるパケットは、セッション管理テーブル５００に記録されたポインタ情報（ＬＡＮ側の受信バッファ管理用のポインタであるｌａｎ＿ｌｅｆｔ＿ｒｂｕｆ５０９、ｌａｎ＿ｌｅｆｔ＿ｒｅｃｖ５１０、ｌａｎ＿ｒｉｇｈｔ＿ｒｅｃｖ５１１と、ＷＡＮ側の送信バッファ管理用のポインタであるｗａｎ＿ｌｅｆｔ＿ｓｅｎｄ５２８、ｗａｎ＿ｒｉｇｈｔ＿ｓｅｎｄ５２９、ｗａｎ＿ｒｉｇｈｔ＿ｓｂｕｆ５３０）に基づいて、整列済みと判断されたパケットのみに限定される。
【００７３】
ＷＡＮ送信バッファ６２０に移されたパケットは、差分転送モジュール１４００のＴＸ部（送信部）１４１１に読み出される。
【００７４】
差分転送モジュール１４００のＴＸ部（送信部）１４１１は、ＷＡＮ送信バッファ６２０に蓄積されたパケット６２１のペイロードデータ６２３と同一のデータが、転送データ蓄積テーブル７００内に有るかどうかを、重複データ検索テーブル８００を用いて検索する。
【００７５】
ペイロードデータ６２３と同一のデータが転送データ蓄積テーブル７００に無ければ、パケットのペイロードデータ６２３を転送データ蓄積テーブル７００に書き込む。次に、書き込んだデータブロックの番号と位置を、ＴＣＰオプションヘッダ４３０のｔａｂｌｅ＿ｉｄ４４５とｐｌａｃｅ４４６に記入する。そして、ｆｌｇ４４３を書き込み要求としたパケットを、ＷＡＮ  ＴＣＰ  １２００のＴＸ部（送信部）１２０１へ転送する。
【００７６】
ペイロードデータ６２３と同一のデータが転送データ蓄積テーブル７００に有れば、パケットのペイロードデータ６２３を削除する。次に、ペイロードデータ６２３と同一のデータが存在するデータブロックの番号と位置を、ＴＣＰオプションヘッダ４３０のｔａｂｌｅ＿ｉｄ４４５とｐｌａｃｅ４４６に記入する。そして、ｆｌｇ４４３を読み込み要求としたパケットを、ＷＡＮ  ＴＣＰ  １２００のＴＸ部（送信部）１２０１へ転送する。
【００７７】
ＷＡＮ  ＴＣＰ  １２００のＴＸ部（送信部）１２０１は、差分転送モジュール１４００のＴＸ部（送信部）１４１１から転送されてきたパケットを、ＷＡＮ１４０へ送信する。
【００７８】
装置２００がＷＡＮ１４０から受信したパケットは、最初に、差分転送モジュール１４００のＲＸ部（受信部）１４１２に、受け取られる。
【００７９】
差分転送モジュール１４００のＲＸ部（受信部）１４１２は、受信したパケットのＴＣＰオプションヘッダ４３０の、ｆｌｇ４４３に記入された要求が書き込みである場合、ＴＣＰオプションヘッダ４３０のｔａｂｌｅ＿ｉｄ４４５とｐｌａｃｅ４４６に記入された転送データ蓄積テーブル７００内のデータブロックの番号と位置に、ペイロードデータ４５０を書き込む。その上で、ＲＸ部（受信部）１４１２は、受信したパケットを、ＷＡＮ  ＴＣＰ  １２００のＲＸ部（受信部）１２０２へ転送する。
【００８０】
一方、受信したパケットのＴＣＰオプションヘッダ４３０のｆｌｇ４４３に記入された要求が読み込みである場合、ＲＸ部（受信部）１４１２は、ＴＣＰオプションヘッダ４３０のｔａｂｌｅ＿ｉｄ４４５とｐｌａｃｅ４４６に記入された転送データ蓄積テーブル７００内のデータブロックの番号と位置からデータを読み出す。そして、ＲＸ部（受信部）１４１２は、ペイロードデータ４５０としてパケットに付加した上で、そのパケットをＷＡＮ  ＴＣＰ  １２００のＲＸ部（受信部）１２０２へ転送する。
【００８１】
ＷＡＮ  ＴＣＰ  １２００のＲＸ部（受信部）１２０２は、差分転送モジュール１４００のＲＸ部（受信部）１４１２から転送されてきたパケットに対するＡＣＫを、ＷＡＮ１４０に送信する。そして、ＲＸ部（受信部）１２０２は、セッション送受信バッファ６００内のＷＡＮ受信バッファ６１０に、転送されてきたパケットを蓄積する。
【００８２】
ＷＡＮ受信バッファ６１０に蓄積されたパケットは、データ交換部２７０により、ＬＡＮ送信バッファ６４０へ移される。移されるパケットは、セッション管理テーブル５００に記録されたポインタ情報（ＷＡＮ側の受信バッファ管理用のポインタであるｗａｎ＿ｌｅｆｔ＿ｒｂｕｆ５２２、ｗａｎ＿ｌｅｆｔ＿ｒｅｃｖ５２３、ｗａｎ＿ｒｉｇｈｔ＿ｒｅｃｖ５２４と、ＬＡＮ側の送信バッファ管理用のポインタであるｌａｎ＿ｌｅｆｔ＿ｓｅｎｄ５１５、ｌａｎ＿ｒｉｇｈｔ＿ｓｅｎｄ５１６、ｌａｎ＿ｒｉｇｈｔ＿ｓｂｕｆ５１７）に基づいて、整列済みと判断されたパケットのみに限定される。
【００８３】
ＬＡＮ送信バッファ６４０に移されたパケットは、ＬＡＮ  ＴＣＰ１３００のＴＸ部（送信部）１３０１に読み出されて、ＬＡＮ１１０に向けて送信される。
【００８４】
図２０に、セッション送受信バッファ６００を管理するために、セッション管理テーブル５００において記録するポインタ図を表す。本図では、データを左から右に書き込んでいき、左から右に読み出していくものとする。
【００８５】
ＷＡＮ／ＬＡＮ受信バッファ６１０／６３０を管理するために、セッション管理テーブル５００において、受信したデータの先頭を示すポインタｗａｎ／ｌａｎ＿ｒｉｇｈｔ＿ｒｅｃｖ（５２４，５１１）と、整列済みデータと未整列データの境界を示すポインタｗａｎ／ｌａｎ＿ｌｅｆｔ＿ｒｅｃｖ（５２３，５１０）と、データ交換２７０がすでに読出し済のデータとまだ読出していないデータとの境界を示すｗａｎ／ｌａｎ＿ｌｅｆｔ＿ｒｂｕｆ（５２２，５０９）とを、記録する。
【００８６】
受信したデータの先頭を示すポインタｗａｎ／ｌａｎ＿ｒｉｇｈｔ＿ｒｅｃｖ（５２４，５１１）は、ロスの発生が無く、前から順番にデータを受信すると、受信したデータサイズ分増えて、右へ移動する。受信できずに部分的に抜けているデータ箇所（ロスセグメント）が存在する状態で、再送パケットを受信して、ロスセグメントが消滅すると、整列済みデータと未整列データの境界を示すポインタｗａｎ／ｌａｎ＿ｌｅｆｔ＿ｒｅｃｖ（５２３，５１０）は、最も小さなロスセグメントの左端まで移動する。
【００８７】
データ交換２７０は、読出済データと未読出データの境界を示すｗａｎ／ｌａｎ＿ｌｅｆｔ＿ｒｂｕｆ（５２２，５０９）から右へ向かって順番にデータを読み出し、読み出したデータサイズ分、ｗａｎ／ｌａｎ＿ｌｅｆｔ＿ｒｂｕｆ（５２２，５０９）を右へ移動させる。一度に読み出せるデータサイズの最大値は、ｗａｎ／ｌａｎ＿ｌｅｆｔ＿ｒｅｃｖ（５２３，５１０）とｗａｎ／ｌａｎ＿ｌｅｆｔ＿ｒｂｕｆ（５２２，５０９）の差である。
【００８８】
ＷＡＮ／ＬＡＮ送信バッファ６２０／６４０を管理するために、セッション管理テーブル５００において、データ交換２７０が書き込み済みで送信可能な状態となっているデータの先頭を表すポインタｗａｎ／ｌａｎ＿ｒｉｇｈｔ＿ｓｂｕｆ（５３０，５１７）と、すでに送信済みのデータの先頭を示すポインタｗａｎ／ｌａｎ＿ｒｉｇｈｔ＿ｓｅｎｄ（５２９，５１６）と、受信側から確認応答を受信済みのデータの先頭を示すポインタｗａｎ／ｌａｎ＿ｌｅｆｔ＿ｓｅｎｄ（５２８，５１５）とを、記録する。
【００８９】
データ交換２７０が書込済みで送信可能な状態となっているデータの、先頭を表すポインタｗａｎ／ｌａｎ＿ｒｉｇｈｔ＿ｓｂｕｆ（５３０，５１７）は、データ交換２７０がデータを書き込む毎に、書き込んだデータサイズ分増加し、右へ移動する。送信済みデータの先頭を示すポインタｗａｎ／ｌａｎ＿ｒｉｇｈｔ＿ｓｅｎｄ（５２９，５１６）を始点として、右に向かって新たなデータが送信される。ｗａｎ／ｌａｎ＿ｒｉｇｈｔ＿ｓｅｎｄ（５２９，５１６）は、送信されたデータサイズ分増加し、右へ移動する。
【００９０】
受信側から、ｗａｎ／ｌａｎ＿ｌｅｆｔ＿ｓｅｎｄ（５２８，５１５）よりも大きな受信シーケンス番号を持つ確認応答パケットを受信すると、ｗａｎ／ｌａｎ＿ｌｅｆｔ＿ｓｅｎｄ（５２８，５１５）は、確認応答パケットに記載された受信シーケンス番号へと増加し、右へ移動する。
【００９１】
図１３に、ＬＡＮ１１０とのＴＣＰ通信を実現するＬＡＮ  ＴＣＰ１３００の、機能ブロック図を示す。
【００９２】
ＬＡＮ  ＴＣＰ１３００は、受信処理を行うＲＸ部（受信部）１３０２と、送信処理を行うＴＸ部（送信部）１３０１とを備える。ＴＸ部（送信部）１３０１は、送信履歴更新部１３０５と、パケット再送部１３０４と、ＴＣＰ制御部１３０３と、集約部１３１３を備える。ＲＸ部（受信部）１３０２は、受信履歴更新部１３０６と、振分部１３０８と、ＴＣＰ制御部１３０７を備える。
【００９３】
送信処理を行うＴＸ部（送信部）１３０１では、送信履歴更新部１３０５は、ＬＡＮ側送信バッファ６４０から読み出したパケットを送信する。それと共に、送信履歴更新部１３０５は、読み出したパケットの送信シーケンス番号ＳＥＱ４２３に応じて、セッション管理テーブル５００のバッファ管理ポインタ（５１５〜５１７）の情報を更新する。
【００９４】
ＴＣＰ制御部１３０３は、セッション管理テーブル５００内のＴＣＰ状態ｌａｎ＿ｓｔａｔｅ５０８、ｗａｎ＿ｓｔａｔｅ５２１を用いて、３−Ｗａｙ−Ｈａｎｄｓｈａｋｅを用いたセッション確立時やセッションクローズ時のＴＣＰ制御パケットを送信する。
【００９５】
パケット再送部１３０４は、受信したＡＣＫパケットに基づいてセッション管理テーブル５００内のバッファ管理ポインタを変更しする。そして、パケット再送部１３０４は、受信したＡＣＫパケット記載の部分的確認応答ｌｅｆｔ＿ｅｄｇｅ＿１〜４（４３３、４３５、４３６、４３９）、ｒｉｇｈｔ＿ｅｄｇｅ＿１〜４（４３４、４３６、４３８、４４０）を用いて、ＬＡＮ送信バッファ６４０からパケットを読み出して再送する。
【００９６】
マルチプレクサ１３１３およびバッファ１３０９〜１３１２は、ＡＣＫパケット、ＴＣＰ制御パケット、再送パケット、データパケットを集約して出力する。
【００９７】
受信処理を行うＲＸ部（受信部）１３０２では、受信履歴更新部１３０６が、受信したパケットデータを、ＬＡＮ受信バッファ６３０に蓄積する。
【００９８】
更に、受信履歴更新部１３０６は、受信したパケットの送信シーケンス番号ＳＥＱ４２３に応じて、セッション管理テーブル５００のバッファ管理ポインタ（５０９〜５１１）の情報を更新する。更に、受信履歴更新部１３０６は、受信したパケットデータの末尾位置を記載したＡＣＫパケットを集約部１３１３経由で返信する。
【００９９】
パケット再送部１３０４は、受信したＡＣＫパケットのＡＣＫ番号に応じて、パケットを再送すると共に、セッション管理テーブル５００のバッファ管理ポインタ（５１５〜５１７）の情報を更新する。
【０１００】
パケット振分部１３０８は、ＬＡＮ１１０から受信したパケットを、セッション確立／切断に用いるＳＹＮ，ＦＩＮなどのフラグが付いたＴＣＰ制御パケットとデータ付パケットとＡＣＫパケットに分離する。
【０１０１】
ＴＣＰ制御部１３０７は、受信したＴＣＰ制御パケットに基づいてセッション管理テーブル５００内のＴＣＰ状態ｌａｎ＿ｓｔａｔｅ７０８、ｗａｎ＿ｓｔａｔｅ７２１を変更する。
【０１０２】
図１２には、ＷＡＮ１４０とのＴＣＰ通信を実現するＷＡＮ  ＴＣＰ１２００の機能ブロック図を示す。
【０１０３】
ＷＡＮ  ＴＣＰ１２００は、受信処理を行うＲＸ部（受信部）１２０２と、送信処理を行うＴＸ部（送信部）１２０１とを備える。
【０１０４】
ＴＸ部（送信部）１２０１は、送信履歴更新部１２０５と、パケット再送部１２０４と、ＴＣＰ制御部１２０３と、集約部１２１２と、振分部１２０８と、送信帯域制御部１２１５と、現在時刻を出力するタイマ１２１３と、制御帯域の更新間隔を指定するインターバル１２１４と、トークン更新部１２１７を備える。ＲＸ部（受信部）１２０２は、受信履歴更新部１２０６と、振分部１２１６と、ＴＣＰ制御部１２０７とを備える。
【０１０５】
受信処理を行うＲＸ部（受信部）１２０２では、受信履歴更新部１２０６が、ＷＡＮ１４０から差分転送ＲＸ部１４１２経由で受信したパケットデータを、ＷＡＮ受信バッファ６１０に蓄積する。
【０１０６】
更に、受信履歴更新部１２０６は、受信したパケットの送信シーケンス番号ＳＥＱ４２３に応じて、セッション管理テーブル５００のバッファ管理ポインタ（５２２〜５２４）の情報を更新する。更に、受信履歴更新部１２０６は、受信したパケットデータの末尾位置を記載したＡＣＫパケットを集約部１２１２経由で返信する。
【０１０７】
パケット振分部１２１６は、受信パケットを、セッション確立／切断に用いるＳＹＮ，ＦＩＮなどのフラグが付いたＴＣＰ制御パケットと、データ付パケットと、ＡＣＫパケットとに分離する。
【０１０８】
ＴＣＰ制御部１２０７は、ＴＣＰ制御パケットに記載されているフラグ番号に基づいて、セッション管理テーブル５００内のＴＣＰ状態（ｌａｎ＿ｓｔａｔｅ５０８、ｗａｎ＿ｓｔａｔｅ５２１）を変更する。
【０１０９】
送信処理を行うＴＸ部（送信部）１２０１では、送信履歴更新部１２０５が、差分転送ＴＸ部１４１１経由でＷＡＮ送信バッファ６１０から読み出したパケットを送信すると共に、送信したパケットの送信シーケンス番号ＳＥＱ４２３に応じて、セッション管理テーブル５００のバッファ管理ポインタ（５２８〜５３０）の情報を更新する。更に、送信したパケットビット長を、送信帯域制御部１２１５に通知する。
【０１１０】
ＴＣＰ制御部１２０３は、セッション管理テーブル５００内のＴＣＰ状態ｌａｎ＿ｓｔａｔｅ５０８、ｗａｎ＿ｓｔａｔｅ５２１を用いて、３−Ｗａｙ−Ｈａｎｄｓｈａｋｅを用いたセッション確立時やセッションクローズ時のＳＹＮやＦＩＮなどのフラグが付いたＴＣＰ制御パケットを、送信する。
【０１１１】
パケット再送部１２０４は、受信したＡＣＫパケットに基づいてセッション管理テーブル５００内のバッファ管理ポインタを変更し、受信したＡＣＫパケット記載の部分的確認応答ｌｅｆｔ＿ｅｄｇｅ＿１〜４（４３３、４３５、４３６、４３９）、ｒｉｇｈｔ＿ｅｄｇｅ＿１〜４（４３４、４３６、４３８、４４０）を用いて、差分転送ＴＸ部１４１１経由でＷＡＮ送信バッファ６１０からパケットを読み出して再送する。それと共に、パケット再送部１２０４は、再送したパケットのビット長とＡＣＫ受信数を送信帯域制御部１２１５に通知する。
【０１１２】
振分部１２０８は、再送パケットとデータパケットを受け取り、バッファ１〜ｎ（１２０９−１〜ｎ）に振り分ける。
【０１１３】
タイマ１２１３は、現在時刻を生成して送信帯域制御部１２１５に通知する。
【０１１４】
インターバル１２１４は、インターバル時間（予め定めた固定値、または計測した平均ＲＴＴなど）を保存して送信帯域制御部１２１５に通知する。
【０１１５】
送信帯域制御部１２１５は、各ＴＣＰコネクションのトークンサイズをトークン更新部１２１７に通知する。
【０１１６】
トークン更新部１２１７は、ＴＣＰコネクション毎にトークンバケツを管理して、送信可能なコネクションをマルチプレクサ１２１２に通知する。
【０１１７】
マルチプレクサ１２１２およびバッファ１２０９〜１２１１は、ＡＣＫパケット、ＴＣＰ制御パケット、再送パケット、データパケットを集約して、送信可能と通知されたＴＣＰコネクションのパケットを出力する。
【０１１８】
ＴＸ部１２０１の各ブロックのうち、各ＴＣＰ通信の制御帯域（最大送信帯域）に従いデータを送信するブロック（例えば、トークン更新部１２１７、マルチプレクサ１２１２、バッファ１２０９等）をまとめて送信制御部と称することもある。
【０１１９】
送信処理を行うＴＸ部（送信部）１２０１の送信帯域制御部１２１５は、制御帯域ｔｏｋｅｎ５３８を更新した直近の更新時刻を表すｒｅｎｅｗｅｄ＿ｔｉｍｅ５５２と、制御帯域を更新した前々回の更新時刻を表すｏｌｄ＿ｒｅｎｅｗｅｄ＿ｔｉｍｅ５５５をと、セッション管理テーブル５００内に管理している。直近の更新時刻ｒｅｎｅｗｅｄ＿ｔｉｍｅ５５２と、タイマ１２１３の現在時刻との差が、インターバル１２１４のインターバル時間よりも大きくなると、直近の更新時刻ｒｅｎｅｗｅｄ＿ｔｉｍｅ５５２にインターバル時間を加算して、新たな直近の更新時刻ｒｅｎｅｗｅｄ＿ｔｉｍｅ５５２とする。
【０１２０】
加算前の直近の更新時刻ｒｅｎｅｗｅｄ＿ｔｉｍｅ５５２は、前々回の更新時刻を表すｏｌｄ＿ｒｅｎｅｗｅｄ＿ｔｉｍｅ５５５となる。すなわち、直近の更新時刻ｒｅｎｅｗｅｄ＿ｔｉｍｅ５５２の一つ前に使用していた直近の更新時刻ｒｅｎｅｗｅｄ＿ｔｉｍｅ５５２は、前々回の更新時刻を表すｏｌｄ＿ｒｅｎｅｗｅｄ＿ｔｉｍｅ５５５となる。インターバル時間には、計測した平均ＲＴＴや初期ＲＴＴ（ｗａｎ＿ｒｔｔ５２６）を用いることもあれば、固定値を用いることもある。
【０１２１】
更に、送信処理を行うＴＸ部（送信部）１２０１の送信帯域制御部１２１５は、セッション管理テーブル５００が管理する送信帯域や再送帯域やＡＣＫ受信数に関する変数を用いて、各ＴＣＰ通信のＷＡＮ側に出て行くデータの送信帯域を制御する。
【０１２２】
図９には、前々回の更新時刻ｏｌｄ＿ｒｅｎｅｗｅｄ＿ｔｉｍｅ５５５・直近の更新時刻ｒｅｎｅｗｅｄ＿ｔｉｍｅ５５２・現在時刻と、その前後の制御帯域ｔｏｋｅｎ・送信帯域ｓｎｄ・受信帯域ｒｃｖ・再送帯域ｒｔｓ・再送率／廃棄率ｌｏｓｓ＿ｒａｔｉｏの関係を表す。
【０１２３】
直近の更新時刻ｒｅｎｅｗｅｄ＿ｔｉｍｅ５５２と前々回の更新時刻ｏｌｄ＿ｒｅｎｅｗｅｄ＿ｔｉｍｅ５５５との差は、インターバル時間である。
【０１２４】
前々回の更新時刻ｏｌｄ＿ｒｅｎｅｗｅｄ＿ｔｉｍｅ５５５前におけるインターバル時間の制御帯域・送信帯域の平均値は、ｏｌｄ＿ｏｌｄ＿ｔｏｋｅｎ、ｏｌｄ＿ｏｌｄ＿ｓｎｄと表す（９０１）。
【０１２５】
前々回の更新時刻ｏｌｄ＿ｒｅｎｅｗｅｄ＿ｔｉｍｅ５５５から直近の更新時刻ｒｅｎｅｗｅｄ＿ｔｉｍｅ５５２までの間の制御帯域・送信帯域・受信帯域・再送帯域・再送率／廃棄率の平均値は、ｏｌｄ＿ｔｏｋｅｎ、ｏｌｄ＿ｓｎｄ、ｏｌｄ＿ｒｃｖ、ｏｌｄ＿ｒｔｓ、ｏｌｄ＿ｌｏｓｓ＿ｒａｔｉｏと表す（９０２）。
【０１２６】
直近の更新時刻ｒｅｎｅｗｅｄ＿ｔｉｍｅ５５２から現在時刻ｃｕｒｒｅｎｔ＿ｔｉｍｅまでの制御帯域・送信帯域・受信帯域・再送帯域・再送率／廃棄率の平均値は、ｔｏｋｅｎ、ｓｎｄ、ｒｃｖ、ｒｔｓ、ｌｏｓｓ＿ｒａｔｉｏと表す（９０３）。
【０１２７】
送信帯域制御部１２１５は、セッション管理テーブル５００に記載された上述の値を用いて、廃棄率／再送率（ｌｏｓｓ＿ｒａｔｉｏ５５３とｏｌｄ＿ｌｏｓｓ＿ｒａｔｉｏ５５４）を計算する。
【０１２８】
現在時刻ｃｕｒｒｅｎｔ＿ｔｉｍｅの廃棄率／再送率ｌｏｓｓ＿ｒａｔｉｏ５５３は、ｒｔｓ／ｏｌｄ＿ｔｏｋｅｎまたはｒｔｓ／ｏｌｄ＿ｓｎｄまたは１−ｒｃｖ／ｏｌｄ＿ｔｏｋｅｎまたは１−ｒｃｖ／ｏｌｄ＿ｓｎｄで計算される。直近の更新時刻の廃棄率／再送率ｏｌｄ＿ｌｏｓｓ＿ｒａｔｉｏ５５４は、ｏｌｄ＿ｒｔｓ／ｏｌｄ＿ｏｌｄ＿ｔｏｋｅｎまたはｏｌｄ＿ｒｔｓ／ｏｌｄ＿ｏｌｄ＿ｓｎｄまたは１−ｏｌｄ＿ｒｃｖ／ｏｌｄ＿ｏｌｄ＿ｔｏｋｅｎまたは１−ｏｌｄ＿ｒｃｖ／ｏｌｄ＿ｏｌｄ＿ｓｎｄで計算される。
【０１２９】
更に、送信帯域制御部１２１５は、廃棄率／再送率の変化率（ｏｌｄ＿ｌｏｓｓ＿ｒａｔｉｏ５５４とｌｏｓｓ＿ｒａｔｉｏ５５３の比率）に基づいて、制御帯域（ｔｏｋｅｎまたはトークン）を決定し、トークン更新部１２１７へ伝える。更に、セッション管理テーブル５００を更新する。制御帯域（ｔｏｋｅｎまたはトークン）の更新方法の詳細は、図１４に後述する。
【０１３０】
トークン更新部１２１７は、送信帯域制御部１２１５から伝えられた制御帯域（ｔｏｋｅｎまたはトークン）の値に基づいて、ＴＣＰコネクション毎にトークンバケツを管理する。そして、トークン更新部１２１７は、送信可能なコネクションを、マルチプレクサ１２１２に通知する。
【０１３１】
図１４のフローチャートを用いて、送信帯域制御部１２１５が制御帯域（ｔｏｋｅｎまたはトークン）を更新する方法を説明する。
【０１３２】
送信帯域制御部１２１５が、本フローチャートに従い制御帯域ｔｏｋｅｎを決定してトークン更新部１２１７へ伝えることで、廃棄率や再送率の変化率に基づく帯域制御が実現され、ＲＴＴと廃棄率に依存せずに回線帯域を使い切るＴＣＰ通信が可能となる。図１４の各ステップは、送信帯域制御部１２１５により実行される。
【０１３３】
送信帯域制御部１２１５において、制御帯域の更新処理がスタートすると（ステップ１４０１）、まず始めに、直近の更新時刻ｒｅｎｅｗｅｄ＿ｔｉｍｅ５５２におけるＡＣＫ受信済み箇所ｏｌｄ＿ｗａｎ＿ｌｅｆｔ＿ｓｅｎｄ５３４と、現在時刻におけるＡＣＫ受信済み箇所ｗａｎ＿ｌｅｆｔ＿ｓｅｎｄ５２８とを比較する。この比較により、ＡＣＫ確認済み箇所が一定期間増加していないかどうかを、判定する（ステップ１４０２）。
【０１３４】
ＡＣＫ確認済み箇所が一定期間増加していない場合は、再送に失敗していると判定し、ＡＣＫ受信数に応じて制御帯域を一定にする（ステップ１４０６）。例えば、制御帯域ｔｏｋｅｎ５３８を受信帯域ｒｃｖ５５０とする。
【０１３５】
ＡＣＫ確認済み箇所が増加している場合は、パケット廃棄率や再送率（＝ｒｔｓ／ｏｌｄ＿ｔｏｋｅｎまたはｒｔｓ／ｏｌｄ＿ｓｎｄまたは１−ｒｃｖ／ｏｌｄ＿ｔｏｋｅｎまたは１−ｒｃｖ／ｏｌｄ＿ｓｎｄで計算される値）の変化率（または増加率または比率）が、予め定められた閾値を超過したか否かを判定する（ステップ１４０３）。
【０１３６】
パケット廃棄率や再送率の変化率（または増加率または比率）が、予め定められた閾値を超過した場合は、他のトラフィックとの競合による継続的な廃棄が発生していると判断する。そして、輻輳規模に応じて制御帯域を減少させる。具体的には、現在の再送帯域（ｒｔｓ）と、過去の（基準時刻より前の）制御帯域（ｏｌｄ＿ｔｏｋｅｎ５３９）または過去の（基準時刻より前の）送信帯域（ｏｌｄ＿ｓｎｄ５４６）を用いて、制御帯域（ｔｏｋｅｎ５３８）を更新する（ステップ１４０４）。
【０１３７】
例えば、過去の（直近の更新時刻ｒｅｎｅｗｅｄ＿ｔｉｍｅ５５２より前の）制御帯域（ｏｌｄ＿ｔｏｋｅｎ５３９）を、現在の再送帯域（ｒｔｓ５４８）に応じた量減らし、現在時刻の制御帯域とする。
【０１３８】
一方、ステップ１４０３において、パケット廃棄率や再送率の変化率（または増加率または比率）が、予め定められた閾値を超過しなかった場合は、制御帯域を増加させる（ステップ１４０５）。
【０１３９】
ステップ１４０４やステップ１４０５やステップ１４０６のあとに、各コネクションの最小帯域に基づき、制御帯域（ｔｏｋｅｎ５３８）を更新してもよい（ステップ１４０７）。更に、各コネクションの重みに基づいて、制御帯域ｔｏｋｅｎを更新してもよい（ステップ１４０８）。
【０１４０】
制御帯域（ｔｏｋｅｎ５３８）を変更することで、トークンバケツに蓄積されるトークンの量が変わり、それによりパケットの送信レートを変更することが可能となる。
【０１４１】
上記のように、廃棄率や再送率の変化率を用いて、ネットワークの輻輳を検出することで、背景トラフィックの一時的なバーストと競合することで一時的に発生する廃棄と、帯域の使い過ぎにより継続的に発生する廃棄を区別することができる。その結果、一時的な廃棄だと判定したときは、その廃棄に影響されずに、送信帯域がボトルネック帯域に到達してトップスピードになるまで、送信帯域を増加させ続けることが可能となり、回線帯域を使い切ることが出来るようになる。また、帯域の使い過ぎによる継続的な廃棄だと判定したときに、過去の送信帯域と現在の再送帯域を用いて帯域を減少させて、輻輳の規模に応じて帯域を減少させることにより、送信帯域を残存帯域へ追従させることが可能となる。
【０１４２】
図７には、転送データ蓄積テーブル７００のフォーマット図を示す。
【０１４３】
転送データ蓄積テーブル７００は、転送データを蓄積するデータブロックＤａｔａ＿Ｂｌｏｃｋ＿＃１〜ｋ（７０２―１〜ｋ）およびデータブロックグループＤａｔａ＿Ｂｌｏｃｋ＿Ｇｒｏｕｐ＿＃１〜ｋ（７０１―１〜ｋ）を複数個（ｋ個）備える。
【０１４４】
データブロックグループＤａｔａ＿Ｂｌｏｃｋ＿Ｇｒｏｕｐ＿＃１〜ｋ（７０１―１〜ｋ）は、データブロックＤａｔａ＿Ｂｌｏｃｋ＿＃１〜ｋ（７０２―１〜ｋ）を管理するための変数を備える。具体的には、データブロックＤａｔａ＿Ｂｌｏｃｋの状態が、初期状態なのか、先頭データ書込状態なのか、末尾データ書込状態なのか、ＡＣＫ確認済状態なのか、を表すためのＢｌｏｃｋ＿Ｖｌｄ７０７と、自ブロックが後続するデータブロックＤａｔａ＿Ｂｌｏｃｋの番号を表すためのＰｒｅｖ＿Ｒｅａｄ７０３と、自ブロックに後続するデータブロックＤａｔａ＿Ｂｌｏｃｋの番号を表すためのＮｅｘｔ＿Ｒｅａｄ７０４と、自ブロックよりも上書き優先度が一つ高いデータブロックＤａｔａ＿Ｂｌｏｃｋの番号を表すためのＰｒｅｖ＿Ｗｒｉｔｅ７０５と、自ブロックよりも上書き優先度が一つ低いデータブロックＤａｔａ＿Ｂｌｏｃｋの番号を表すためのＮｅｘｔ＿Ｗｒｉｔｅ７０６と、を備える。
【０１４５】
図１０と図２１を用いて、装置２００の差分転送モジュール１４００が実現する通信データ転送時における重複データ転送の削減方法について、説明する。
【０１４６】
まず、装置２００による通信データの差分転送の全体的な流れは、以下の通りである。
【０１４７】
装置２００Ａは、送信端末１００１から通信データを受信すると、ＷＡＮ１４０を経由し、受信端末１００２に接続している装置２００Ｂへその通信データを送信することで、通信データの転送をしている。ここで、通信データとは、ヘッダとペイロードとを含むパケットを、少なくとも１つ以上含むものである。
【０１４８】
そして、装置２００Ａは、一部が書き換えられた通信データを受信した場合、書き換えられた通信データの一部分（書き換えのあったペイロード）、すなわち差分を装置２００Ｂに送信し、書き換えられていない通信データの部分（書き換えのないペイロード）、すなわち重複データを装置２００に送信しない。
【０１４９】
この際、装置２００Ａの差分転送モジュール１４００Ａは、通信データの差分転送を行うに際し、差分転送の実行前に作成される重複データ検索テーブル８００を用いることで、差分および重複データを特定している。
【０１５０】
装置２００Ｂの差分転送モジュール１４００Ｂは、装置２００Ａから転送されるパケットが重複データを含む場合、装置２００Ａから受信したパケットのＴＣＰオプションヘッダ４３０に記載されるテーブル番号ｔａｂｌｅ＿ｉｄ４４５及び位置ｐｌａｃｅ４４６と装置２００Ｂが有する転送データ蓄積テーブル７００とを用いて、装置２００Ａから送信されなかった重複データを復元する。そして、復元された重複データが、受信端末１００２へ送信される。また、装置２００Ｂの差分転送モジュール１４００Ｂは、装置２００Ａから転送されるパケットが差分を含む場合、装置２００Ａから受信したパケットのＴＣＰオプションヘッダ４３０に記載されるテーブル番号ｔａｂｌｅ＿ｉｄ４４５及び位置ｐｌａｃｅ４４６に従い、装置２００Ｂが有する転送データ蓄積テーブル７００に差分を書きこむ。そして、装置２００Ａから受信した差分が、受信端末１００２へ送信される。
【０１５１】
図８に、重複データ検索テーブル８００のフォーマット図を示す。
【０１５２】
重複データ検索テーブル８００は、インデックスｉｎｄｅｘ８０２と、インデックスに対応するデータブロックの番号を表すＤａｔａ＿Ｂｌｏｃｋ＿Ｎｕｍ８０３と、データブロック内のデータの位置を表すＰｌａｃｅ８０４から構成されるエントリ８０１−１〜ｐとを備える。
【０１５３】
図１７に、重複データ検索テーブル８００の作成方法を示す。
【０１５４】
装置２００の差分転送モジュール１４００は、転送データ蓄積テーブル７００から、転送データが蓄積されている各データブロック７０２の先頭データ（例えば、１５６０バイト）取り出す。そして、先頭データを１バイトずつシフトしながら、例えば１００バイト毎にデータを抽出する（１７００）。
【０１５５】
具体的には、取り出した先頭データが１５６０バイトで、１００バイト毎にデータを抽出した場合は、データブロック７０２毎に１４６１個のデータが抽出される（１７００）。なお、本実施例の場合、パケットペイロード最大値が１４６０バイトであり、以下で説明される計算に利用する１００バイトであるので、それらの和となる１５６０バイトのデータを、各データブロック７０２の先頭から抽出している。
【０１５６】
更に、抽出したデータそれぞれに対して、ＭＤ５やＳＨＡ１などのハッシュ関数を用いてハッシュ値を計算し、下位ビットを抽出する。これにより、抽出した１４６１個のデータ毎に対応するインデックス値を計算する（１７０２）。
【０１５７】
１７０２にて計算したインデックス値と同一のｉｎｄｅｘ８０２を持つエントリ８０１の、Ｄａｔａ＿Ｂｌｏｃｋ＿Ｎｕｍ８０３およびＰｌａｃｅ８０４に、抽出したデータの抽出元データブロック番号およびデータブロック内での位置を、記録する。例えば、データブロック番号１０について、位置２０からの１００バイトデータから計算したインデックス値が５００であれば、ｉｎｄｅｘ８０２＝５００を持つエントリ８０１のＤａｔａ＿Ｂｌｏｃｋ＿Ｎｕｍ８０３およびＰｌａｃｅ８０４に、１０および２０を記録する。
【０１５８】
重複データ検索テーブル８００の作成は、送信端末１００１から受信端末１００２に向けて、これまでに送信したことが無いデータを持つパケットの転送（図２１）の後から、これまでに送信したことがあるデータを持つパケットの転送（図１０）の前までの間に、行われる。すなわち、重複データ検索テーブル８００は、データブロック７０２に転送済みデータが蓄積された状態の後に、作成される。
【０１５９】
このように、重複データ検索テーブル８００を、これまでに送信したことがあるデータを持つパケットの転送前に作成することは、受信したパケットのペイロードデータと一致するデータの位置をデータブロック７０２内から見つけ出すための検索演算の一部を、パケット送信前に予め実施して、その演算結果を重複データ検索テーブル８００に記録しておくことに相当する。これにより、リアルタイム処理が求められるパケットのペイロードと一致するデータを検索するための演算量を削減することができる。
【０１６０】
装置２００Ａおよび装置２００Ｂの差分転送モジュール１４００は、過去に転送したことがある転送済みデータを、パケットの最大セグメントサイズＭＳＳ（Ｍａｘｉｍｕｍ  Ｓｅｇｍｅｎｔ  Ｓｉｚｅ）よりも大きなサイズに分割し、転送データを蓄積するためのデータブロックＤａｔａ＿Ｂｌｏｃｋ７０２に蓄積する（１００５）。蓄積するサイズの例としては、中規模サイズ、例えば１６ＫＢである。
【０１６１】
装置２００Ａの転送データ蓄積テーブル７００Ａ及び装置２００Ｂの転送データ蓄積テーブル７００Ｂにおいて、同一の転送済みデータは、転送データ蓄積テーブル７００Ａ、７００Ｂが各々有する同一番号のデータブロックＤａｔａ＿Ｂｌｏｃｋ７０２における、同一位置に保存される。
【０１６２】
このように、装置２００Ａの差分転送モジュール１４００Ａが、転送済みデータを、パケットの最大セグメントサイズよりも大きなサイズに分割してデータブロック７０２に蓄積しているので、データブロック７０２の中に受信したパケットのペイロードが含まれるか否かを検索することが可能である。その結果、送信端末１００１から受信したパケットのペイロードと一致するデータを、データブロック７０２内から探すという処理が、可能となる。
【０１６３】
そして、受信したパケットのペイロードと一致するデータをデータブロック７０２内から探すという処理は、従来技術におけるデータブロックと一致するデータをパケットのペイロード内から探すという処理に比べて、演算量を削減できる。なぜなら、パケットのペイロードと一致するデータをデータブロック７０２内から探す場合、最大セグメントサイズＭＳＳ（例えば１４００〜１４６０バイト）ごとにハッシュ値の計算と比較演算をすればよい。これに対し、従来技術におけるデータブロックと一致するデータをパケットのペイロード内から探す場合、１バイトごとにハッシュ値の計算と比較演算をしなければならない。つまり、従来技術に比べて、本実施例では演算量が１０００分の１以下に削減されている。
【０１６４】
また、転送済みデータを分割して保存するサイズの上限としては、装置２００Ａと装置２００Ｂとの間で送受信されるファイルのサイズの平均値よりも小さいこと、例えば２００ＫＢ程度が望ましい。なお、データブロック７０２に蓄積するデータのサイズの上限は、これに限定されるものではなく、受信パケットのペイロードデータとデータブロック７０２とが一致しやすい確立との兼ね合いで、適宜選択してもよい。
【０１６５】
ただし、転送済みデータを、パケットの最大セグメントサイズ以下に分割してデータブロックに蓄積すると、データブロックがパケットのペイロードよりも小さくなるため、データブロック７０２の中に受信したパケットのペイロードが含まれるか否かを検索することができなくなる。
【０１６６】
次に、図２１を用いて、送信端末１００１から受信端末１００２に向けて、これまでに送信したことが無いデータを持つパケットを送る場合について、説明する。なお、前提として、送信端末１００１と受信端末１００２との間では、すでに通信データのパケットの送信が行われており、すでに送信されているパケットについては重複データ検索テーブル８００が作成されているものとする。
【０１６７】
装置２００Ａの差分転送モジュール１４００Ａは、一つ目のパケット２１００を送信端末１００１から受信して装置２００Ｂに向けて送信する際、転送データ蓄積テーブル７００Ａ内を参照して、パケット２１００のペイロードデータと一致するデータの有無を判定する。（１００３）
具体的には、差分転送モジュール１４００Ａは、送信端末１００１から受信したパケット２１００のペイロードデータと、転送データ蓄積テーブル７００Ａ内の各データブロック７０２−１〜７０２−Ｋの先頭に蓄積された一部データ（例えば、２９２０バイト）とを比較して、一致するデータの有無を判定する。このように、パケット２１００のペイロードデータと比較する対象を、各データブロック７０２−１〜７０２−Ｋに蓄積される全てのデータではなく、各データブロック７０２−１〜７０２−Ｋの先頭に蓄積された一部データとすることで、パケット２１００のペイロードデータと一致するデータの位置をデータブロック７０２−１〜７０２−Ｋ内から探すための検索演算量を、削減することができる。
【０１６８】
更に、装置２００Ａは、パケット２１００を受信する前に予め、各データブロックの先頭データについて、１バイトずつシフトしながら、例えば１００バイト単位でハッシュ値を計算しておく。そして、データ毎のデータブロックの番号およびデータブロック内での位置を、ハッシュ値をインデックスとして、重複データ検索テーブル８００に記録しておく。
【０１６９】
パケット２１００のペイロードデータと一致するデータを検索する際は、パケット２１００のペイロードデータの先頭データ（例えば、１００バイト）のハッシュ値を計算して、ハッシュ値と同じインデックスを持つエントリ８０１を重複データ検索テーブル８００から読み出す。そしてし、エントリ記載のデータブロックの番号Ｄａｔａ＿Ｂｌｏｃｋ＿Ｎｕｍ８０３および位置Ｐｌａｃｅ８０４を用いて、一致しそうなデータを絞り込み、比較を行う（１００３）。
【０１７０】
端末間の重複する通信データを削減するために、パケットのペイロードデータの全部と、パケットのペイロード最大値に相当する最大セグメントサイズＭＳＳよりも大きなサイズのデータブロックのデータとの間で比較を行うことで、従来のようにパケットのペイロード内からデータブロックのデータと一致するデータの位置を探してパケットのペイロードデータをシフトしていくのではなく、データブロック内からパケットのペイロードデータと一致するデータの位置を探してデータブロックのデータをシフトしていく。
【０１７１】
したがって、データブロック内からパケットのペイロードデータと一致するデータの位置を見つけ出すための検索演算の一部を、パケット送信前に予め実施しておいて、演算結果を重複データ検索テーブル８００に記録しておくことが可能となる。これにより、リアルタイム処理が求められるパケットのペイロードと一致するデータを検索するための演算量を削減することができる。
【０１７２】
なお、上述のハッシュ値を計算して、重複データ検索テーブル８００を用い、優先的にデータが一致しそうな場所を絞りこむステップは、後述する図１８にて、詳細に説明される。
【０１７３】
図２１では、これまでに送信したことが無いデータを持つパケットを送る場合を説明しているので、１００３において差分転送モジュール１４００Ａがパケット２１００のペイロードデータと一致するデータの有無を判定するとき、パケット２１００のペイロードデータと一致するデータは、転送データ蓄積テーブル７００Ａ内に蓄積されていない。ゆえに、差分転送モジュール１４００Ａは、転送データ蓄積テーブル７００Ａ内に、パケット２１００のペイロードデータと一致するデータが無いと判定する。
【０１７４】
そして、装置２００Ａの差分転送モジュール１４００Ａは、転送データ蓄積テーブル７００Ａ内に、パケット２１００のペイロードデータと一致するデータが無い場合、ペイロードデータをデータブロックに書き込む。
【０１７５】
そして、差分転送モジュール１４００Ａは、パケット２１００のペイロードデータをそのまま残したペイロードデータと、パケット２１００のペイロードデータを書き込んだデータブロック７０２Ａの番号および位置が書き込まれたＴＣＰオプションヘッダ４３０とを備えるパケット２１０２を、装置２００Ｂに向けて送信する（２１０４）。
【０１７６】
例えば、パケット２１００の１４４８バイトのペイロードデータを書き込んだデータブロックが、その番号が４で、その先頭からの位置が０〜１４４７バイト目だとする。この場合、差分転送モジュール１４００Ａは、パケット２１０２のＴＣＰオプションヘッダ４３０内の、ｆｌｇ４４３にＷｒｉｔｅ、Ｇａｐ４４４にＨｅａｄ、ＩＤ４４５に４、Ｐｌａｃｅ４４６に０、Ｌｅｎ４４７に１４４８、が書き込まれたパケット２１０２を装置２００Ｂに向けて送信する（２１０４）。
【０１７７】
装置２００Ｂの差分転送モジュール１４００Ｂは、装置２００Ａからパケット２１０２を受け取ると、パケット２１０２のＴＣＰオプションヘッダに記載されたデータブロックの番号と位置に基づいて、パケット２１０２に含まれるペイロードデータを、装置２００Ｂのデータブロック７０２Ｂに書き込む。
【０１７８】
具体的には、差分転送モジュール１４００Ｂは、パケットのＴＣＰオプションヘッダ４３０内のｆｌｇ４４３がＷｒｉｔｅ、Ｇａｐ４４４がＨｅａｄ、ＩＤ４４５が４、Ｐｌａｃｅ４４６が０、Ｌｅｎ４４７が１４４８であることに基づき、番号４のデータブロック７０２Ｂの位置０〜１４４７バイト目に、１４４８バイトのペイロードデータを書き込む。ここで、パケット２０１２に含まれるペイロードデータとは、装置２００Ａにおいて転送データ蓄積テーブル７００Ａに蓄積されたパケット２１００のペイロードデータと、同一である。
【０１７９】
そして、装置２００Ｂの差分転送モジュール１４００Ｂは、装置２００Ａから受信したパケット２１０２を、受信端末１００２に送信する。
【０１８０】
さて、装置２００Ａの差分転送モジュール１４００Ａは、これまでに送信したことが無いデータを持ち、一つ目のパケット２１００に後続する二つ目のパケット２１０１、すなわち後続パケット２１０１についても同様に、後続パケット２１０１のペイロードデータと、転送データ蓄積テーブル７００Ａ内の各データブロック７０２Ａの先頭データ（例えば、２９２０バイト）とを比較して、一致するデータが無いかどうか検索を行う。
【０１８１】
差分転送モジュール１４００Ａは、後続パケット２１０１のペイロードデータと一致するデータが、転送データ蓄積テーブル７００Ａ内に無い場合、データブロック７０２に前回書き込んだデータの末尾ａの次に蓄積されるように、末尾ａに後続する位置から、後続パケット２１０１のペイロードデータを書き込む（２１０６）。
【０１８２】
更に、差分転送モジュール１４００Ａは、後続パケット２１０１のペイロードデータをそのまま残したペイロードデータと、後続パケット２１０１のペイロードデータを書き込んだデータブロック７００Ａの番号および位置の情報を書きこんだＴＣＰオプションヘッダ４３０とを備えるパケット２１０３を、装置２００Ｂに向けて送信する（２１０７）。
【０１８３】
例えば、後続パケット２１０１の１４４８バイトのペイロードデータを書き込んだデータブロック７００Ａが、その番号が４で、その先頭からの位置が１４４８〜２８９７バイト目だとする。この場合、差分転送モジュール１４００Ａは、パケット２１０３のＴＣＰオプションヘッダ４３０内の、ｆｌｇ４４３にＷｒｉｔｅ、Ｇａｐ４４４を空欄、ＩＤ４４５に４、Ｐｌａｃｅ４４６に１４４８、Ｌｅｎ４４７に１４４８が書き込まれたパケット２１０３を、装置２００Ｂに向けて送信する（２１０４）。
【０１８４】
装置２００Ｂの差分転送モジュール１４００Ｂは、装置２００Ａからパケット２１０３を受け取ると、パケット２１０３のＴＣＰオプションヘッダに記載されたデータブロックの番号と位置に基づいて、パケット２１０３に含まれるペイロードデータを、データブロック７０２Ｂに書き込む。
【０１８５】
具体的には、差分転送モジュール１４００Ｂは、パケット２１０３のＴＣＰオプションヘッダ４３０内のｆｌｇ４４３がＷｒｉｔｅ、Ｇａｐ４４４が空欄、ＩＤ４４５が４、Ｐｌａｃｅ４４６が１４４８、Ｌｅｎ４４７が１４４８であることに基づき、番号４のデータブロック７０２Ｂの位置１４４８〜２８９７バイト目に、１４４８バイトのペイロードデータを書き込む。ここで、パケット２０１３に含まれるペイロードデータとは、装置２００Ａにおいて転送データ蓄積テーブル７００Ａに蓄積された後続パケット２１０１のペイロードデータと、同一である。
【０１８６】
そして、差分転送モジュール１４００Ｂは、パケット２１０３を受信端末１００２に送信する。
【０１８７】
次に、図１０を用いて、送信端末１００１から受信端末１００２に向けて、これまでに送信したことがあるパケットを送る場合について説明する。図１０に記載されるパケット１０１０、１０１１は、これまでに送信したことがあるデータを持ち、図２１に記載されるパケット２１００、２１０１と同一のデータを持つ。そして、装置２００Ａと装置２００Ｂの間で、通信データがどのように削減されるかを説明する。
【０１８８】
装置２００Ａの差分転送モジュールＡは、一つ目のパケット１０１０を送信端末１００１から受信して装置２００Ｂに向けて送信する際、転送データ蓄積テーブル７００Ａを参照して、パケット１０１０のペイロードデータと一致するデータの有無を判定する。（１００３）
具体的には、差分転送モジュール１４００Ａは、送信端末１００１から受信したパケット１０１０のペイロードデータと、転送データ蓄積テーブル７００Ａ内の各データブロック７０２−１〜７０２−Ｋの先頭に蓄積された一部データ（例えば、２９２０バイト）とを比較して、一致するデータの有無を判定する。
【０１８９】
差分転送モジュール１４００Ａによる判定の際は、パケット１０１０のペイロードデータの先頭データ（例えば、１００バイト）のハッシュ値を計算して、ハッシュ値と同じインデックスを持つエントリ８０１を重複データ検索テーブル８００から読み出す。そして、エントリ記載のデータブロックの番号Ｄａｔａ＿Ｂｌｏｃｋ＿Ｎｕｍ８０３および位置Ｐｌａｃｅ８０４を用いて、一致しそうなデータを絞り込んでから比較を行う（１００３）。なお、上述のハッシュ値を計算して、重複データ検索テーブル８００を用い、優先的にデータが一致しそうな場所を絞りこむステップは、後述する図１８にて、詳細に説明される。
【０１９０】
図１０では、これまでに送信したことがあるデータを持つパケットを送る場合を説明しているので、１００３において差分転送モジュール１４００Ａがパケット１０１０のペイロードデータと一致するデータの有無を判定するとき、パケット２１００のペイロードデータと一致するデータは、転送データ蓄積テーブル７００Ａ内に蓄積されている。ゆえに、差分転送モジュール１４００Ａは、転送データ蓄積テーブル７００Ａ内に、パケット１０１０のペイロードデータと一致するデータがあると判定する。
【０１９１】
そして、装置２００Ａの差分転送モジュール１４００Ａは、転送データ蓄積テーブル７００Ａ内に、パケット１０１０のペイロードデータと一致するデータが有る場合、受信したパケット１０１０のペイロードデータと一致するデータを持つデータブロック７０２の番号および位置および長さを、ＴＣＰオプションヘッダに書き込む。
【０１９２】
そして、差分転送モジュール１４００Ａは、受信したパケット１０１０のペイロードデータを削除したパケット１０１２−１を、装置２００Ｂに向けて送信する（１００４）。
【０１９３】
例えば、パケット１０１０の１４４８バイトのペイロードデータと一致するデータを持つデータブロック７０２Ａの番号が４で先頭からの位置が０〜１４４７バイト目だとする。この場合、差分転送モジュール１４００Ａは、パケット１０１２−１のＴＣＰオプションヘッダ４３０内の、ｆｌｇ４４３にＲｅａｄ、Ｇａｐ４４４にＨｅａｄ、ＩＤ４４５に４、Ｐｌａｃｅ４４６に０、Ｌｅｎ４４７に１４４８が書き込まれ、且つペイロード４５０が削除されたパケット１０１２−１を、装置２００Ｂに向けて送信する（１００４）。なお、ＴＣＰオプションヘッダ４３０のｆｌｇ４４３に関し、パケット２０１２ではＷｒｉｔｅ、パケット１０１２−１ではＲｅａｄ、とされている点が異なっている。
【０１９４】
ここで、装置２００Ａから装置２００Ｂに向かうパケット１０１２−１のＴＣＰ／ＩＰヘッダに記載される値は、削除や変更をされることなく、維持されたまま送信される。ＴＣＰ／ＩＰヘッダに記載される値とは、例えば、ＩＰアドレス番号（４１３／４１４）、ポート番号（４２１／４２２）、送信／受信シーケンス番号ＳＥＱ／ＡＣＫ（４２３／４２４）等である。そして、装置２００Ａから装置２００Ｂへ送信する通信データの削減は、装置２００Ａにおいてパケット単位でペイロードデータを削減することによりなされるので、装置２００Ａとしては、パケットのヘッダ情報を維持したまま転送することが可能となる。
【０１９５】
次に、装置２００Ｂの差分転送モジュール１４００Ｂは、装置２００Ａからパケット１０１２−１を受け取ると、パケット１０１２−１のＴＣＰオプションヘッダに記載されているデータブロックの番号、位置および長さに基づいて、パケット１０１２−１から削除されているペイロードデータを復元する。そして、差分転送モジュール１４００Ｂは、復元したペイロードデータを含むパケット１０１２−２を、受信端末１００２に送信する。
【０１９６】
具体的には、差分転送モジュール１４００Ｂは、パケット１０１２−１のＴＣＰオプションヘッダ４３０内の、ｆｌｇ４４３がＲｅａｄ、Ｇａｐ４４４がＨｅａｄ、ＩＤ４４５が４、Ｐｌａｃｅ４４６が０、Ｌｅｎ４４７が１４４８であることに基づき、転送データ蓄積テーブル７００Ｂを参照し、番号４であるデータブロック７０２の位置０から１４４８バイト分のデータを読み出す。そして、読みだしたデータをペイロードデータとしたパケット１０１２−２を、受信端末１００２に送信する。
【０１９７】
ここで、装置２００Ａから装置２００Ｂに向かうパケット１０１２−１のＴＣＰオプションヘッダの情報を、ペイロードデータのサイズよりも小さくすれば、通信データを削減することができる。例えば、ＴＣＰオプションヘッダ４３０のｆｌｇ４４３とＧａｐ４４４をそれぞれ１バイト、ＩＤ４４５を４バイト、Ｐｌａｃｅ４４６とＬｅｎ４４７をそれぞれ２バイトとすれば、装置２００Ａと装置２００Ｂの間では、１４４８バイトのペイロードデータの代わりに、１２バイトのＴＣＰオプションデータが送信されることとなる。その結果、ＴＣＰオプションデータのみ含むパケットを送信するとペイロードデータを含むパケットを送信する場合に比べて、装置２００Ａから装置２００Ｂへ送信するデータ量を９９％以上も削減することが可能となる。
【０１９８】
また、上述のように差分転送モジュール１４００Ｂは、パケット単位でペイロードデータを復元するので、装置２００Ａとしては、パケットのヘッダ情報を維持したまま転送することが可能となる。なお、仮に、パケット単位で復元しない場合、複数のパケットのペイロードデータを含むパケットを新たに作成することになるので、複数のパケットのヘッダ情報が異なる場合、ヘッダ情報を維持したまま転送することはできない。
【０１９９】
また、差分転送モジュール１４００Ａは、パケットを送信する際、差分転送モジュール１４００Ｂによる転送データ蓄積テーブル７００Ｂからのデータの読み出しに必要な情報（即ちパケットのペイロードデータの復元に必要な情報）を、ＴＣＰオプションヘッダのオプションフィールドに記載するため、万が一、対向装置である装置２００Ｂに故障等の障害が発生して装置２００Ａからのパケットがパススルーされる状態になったとしても、ペイロードデータの無いパケットが受信端末１００２に到着する。この場合、受信端末１００２が、ペイロードデータの無い空のパケットを受信したと判断するため、データ化けやデータ破壊等の深刻な事故の発生が、防止される。
【０２００】
このように、差分転送モジュール１４００は、パケット単位でペイロードデータを削減および復元するので、複数パケットのペイロードの集約および再分割が不要であり、パケットのヘッダ情報を維持したまま転送することができる。
【０２０１】
さて、装置２００Ａの差分転送モジュール１４００Ａは、１つ目のパケット１０１０に後続する２つ目のパケット１０１１、すなわち後続パケット１０１１については、データブロック７０２において、一つ目のパケット１０１０のペイロードデータと一致したデータの末尾ａの次に蓄積されている後続データと、後続パケット１０１１のペイロードデータとを優先的に比較して、一致するデータの有無を判定する（１００６）。
【０２０２】
これは、一つ目のパケット１０１０のペイロードデータと一致したデータの末尾ａに続いて蓄積されている後続データと、後続パケット１０１１のペイロードデータとが、一致する確率が高いことを活用している。
【０２０３】
一般に、データはファイル単位で連続して転送されることが多く、データブロック７０２に蓄積されているデータもファイル単位で連続して蓄積される。そのため、データをファイル単位で連続して転送する場合、１つ目のパケットのペイロードデータがデータブロックのデータと一致すれば、２つ目以降の後続パケットのペイロードデータもデータブロックの後続データと一致する確率が高い。
【０２０４】
このように、差分転送モジュール１４００Ａは、後続パケット１０１１を受信すると、後続パケットと一致する確率が高い後続データのあるデータブロック７０２内の位置を優先的に検索するので、データブロック７０２内から、後続パケット１０１１のペイロードデータと一致するデータの位置を探すための検索演算量、具体的にはハッシュ値の計算を、更に削減することができる。なぜなら、優先的にデータが一致しそうな場所として、重複データ検索テーブル８００を用いて場所を絞りこむのではなく、一致する確率が高い後続データのあるデータブロック内の位置を特定できので、重複データ検索テーブル８００を用いるためのハッシュ値の計算・インデックスの計算という作業が不要となるからである。
【０２０５】
装置２００Ａの差分転送モジュール１４００Ａは、転送データ蓄積テーブル７００Ａ内に、後続パケット１０１１のペイロードデータと一致する後続データが有る場合、受信した後続パケット１０１１のペイロードデータと一致する後続データを持つデータブロック７０２Ａの番号、位置および長さを、ＴＣＰオプションヘッダに書き込む。
【０２０６】
そして、差分転送モジュール１４００Ａは、受信した後続パケット１０１１のペイロードデータを削除したパケット１０１３−１を、装置２００Ｂに向けて送信する（１００７）。
【０２０７】
例えば、後続パケット１０１１の１４４８バイトのペイロードデータと一致する後続データを持つデータブロック７０２Ａの番号が４で、先頭からの後続データの位置が１４４８〜２８９７バイト目だとする。この場合、差分転送モジュール１４００Ａは、パケット１０１３−１のＴＣＰオプションヘッダ４３０内の、ｆｌｇ４４３にＲｅａｄ、Ｇａｐ４４４を空欄、ＩＤ４４５に４、Ｐｌａｃｅ４４６に１４４８、Ｌｅｎ４４７に１４４８が書き込まれ、且つペイロード４５０が削除されたパケット１０１３−２を、装置２００Ｂに向けて送信する（１００７）。なお、ＴＣＰオプションヘッダ４３０のｆｌｇ４４３に関し、パケット２０１３ではＷｒｉｔｅ、とパケット１０１３−１ではＲｅａｄ、とされている点が異なっている。
【０２０８】
装置２００Ｂの差分転送モジュール１４００Ｂは、装置２００Ａからパケット１０１３−１を受け取ると、パケット１０１３−１のＴＣＰオプションヘッダに記載されているデータブロックの番号、位置および長さに基づいて、削除されてるペイロードデータを復元する。そして、差分転送モジュール１４００Ｂは、復元したペイロードデータを含むパケット１０１３−２を、受信端末１００２に送信する。
【０２０９】
具体的には、差分転送モジュール１４００Ｂは、パケット１０１３−１のＴＣＰオプションヘッダ４３０内の、ｆｌｇ４４３がＲｅａｄ、Ｇａｐ４４４が空欄、ＩＤ４４５が４、Ｐｌａｃｅ４４６が１４４８、Ｌｅｎ４４７が１４４８であることに基づき、転送データ蓄積テーブル７００Ｂを参照し、番号４のデータブロック７０２Ｂの位置１４４８から１４４８バイト分のデータを読み出す。そして、読みだしたデータをペイロードデータとしたパケット１０１３−２を、受信端末１００２に送信する。
【０２１０】
以上により、演算量を削減しつつ、通信データを削減することが可能となる。特に、一つ目のパケット１０１０のペイロードデータと一致したデータの末尾ａに続いて蓄積されている後続データと、後続パケット１０１１のペイロードデータとが、一致する確率が高いことを活用することで、二つ目の後続パケットのペイロードデータと一致すデータをデータブロックから探し出すために必要な計算量を大幅に削減することが可能となる。
【０２１１】
なお、差分転送モジュール１４００Ａは、転送データ蓄積テーブル７００Ａ内に、後続パケット１０１１のペイロードデータと一致する後続データが無い場合、上述した図２１での処理と同様に、転送データ蓄積テーブル７００Ａ内の各データブロック７０２Ａの先頭データに、後続パケット１０１１のペイロードデータと一致するデータの有無を判定する。
【０２１２】
次に、図１５〜図１９を用いて、装置２００の差分転送モジュール１４００が実現する通信データ転送時における重複データ転送の削減方法の、詳細を説明する。
【０２１３】
図１５に、状態変数ｈｉｔ＿ｓｔａｔｅ５６２の状態遷移図を表す。
【０２１４】
状態変数ｈｉｔ＿ｓｔａｔｅ５６２は、データブロック７０２において、パケット１０１０のペイロードデータと一致したデータの末尾ａの次に蓄積されている後続データと、後続パケット１０１１のペイロードデータとが一致する確率が高いことを活用するために、用いられる。
【０２１５】
状態変数ｈｉｔ＿ｓｔａｔｅ５６２は、装置２００ＡからＷＡＮ１４０に向かう送信パケットのペイロードデータと一致するデータが、転送データ蓄積テーブル７００Ａに存在したか否かの、前回の判定結果を示す値である。状態変数ｈｉｔ＿ｓｔａｔｅ５６２は、セッション管理テーブル５００に記録され、差分転送モジュール１４００のＴＸ部（送信部）１４１１により変更される。
【０２１６】
差分転送モジュール１４００のＴＸ部（送信部）１４１１がＷＡＮ１４０に向けてパケットを送信する毎に、状態変数ｈｉｔ＿ｓｔａｔｅ５６２は、転送データ蓄積テーブル７００Ａ内にパケットのペイロードデータと一致するデータが有る場合は、一致状態（ｈｉｔ＿ｓｔａｔｅ＝２）（１５０２）へ遷移し、一致するデータが無い場合は、非一致状態（ｈｉｔ＿ｓｔａｔｅ＝１）（１５０１）へ遷移する。差分転送モジュール１４００のＴＸ部（送信部）１４１１は、本状態変数ｈｉｔ＿ｓｔａｔｅ５６２が示す前回の判定結果と、最新の判定結果に応じて、４つの異なる処理を行う。
【０２１７】
図１６は、装置２００ＡがＷＡＮ１４０に向けてパケットを送信する際に、差分転送モジュール１４００のＴＸ部（送信部）１４１１が行う処理のフローチャート図を示す。
【０２１８】
差分転送モジュール１４００のＴＸ部（送信部）１４１１は、ＷＡＮ送信バッファ６２０からパケットを読み出すと（１６０１）、状態変数ｈｉｔ＿ｓｔａｔｅ５６２が示す前回の判定結果が一致か否かを判定する（１６０２）。
【０２１９】
ステップ１６０２にて、前回の判定結果が非一致の場合は、パケットのペイロードデータと、転送データ蓄積テーブル７００Ａが有する全てのデータブロックの先頭データ（例えば、２９２０バイト）とを比較する（１６０３）。
【０２２０】
そして、パケットのペイロードデータと一致するデータが、転送データ蓄積テーブル７００Ａが有するデータブロック７０２の何れかに存在するか否かを判定する（１６０４）。
【０２２１】
ステップ１６０４にて、パケットのペイロードデータと一致するデータが、転送データ蓄積テーブル７００Ａ内に存在しない場合、そのパケットはこれまでに送信されたことが無いと判定し、セッション管理テーブル５００を参照して、データブロック７０２に前回書き込んだペイロードデータの末尾の位置ｗｒｉｔｅ＿ｐｎｔ５６６およびそのデータを持つデータブロックの番号ｗｒｉｔｅ＿ｂｌｋ５６５を、読み出す。そして、前回書き込んだペイロードデータの末尾の次に蓄積されるように、読みだしたデータブロック番号ｗｒｉｔｅ＿ｂｌｋ５６５内の位置ｗｒｉｔｅ＿ｐｎｔ５６６から、パケットのペイロードデータを書き込む。
【０２２２】
なお、ペイロードデータのサイズが、データブロック７０２の残りのサイズ（すなわちデータブロック７０２のデータ未蓄積部分のサイズ）を上回る場合は、データブロックグループ７０１で管理されるＮｅｘｔ＿Ｗｒｉｔｅ７０６に記載される番号を持つデータブロックに、上回った分のペイロードデータを追記する。
【０２２３】
そして、ペイロードデータの書き込みが完了したら、データブロック７０２に書き込んだペイロードデータの末尾の次に蓄積されているデータの位置およびそのデータを持つデータブロックの番号を、セッション管理テーブル５００の位置ｗｒｉｔｅ＿ｐｎｔ５６６とデータブロック番号ｗｒｉｔｅ＿ｂｌｋ５６５とに、記入する（１６０５）。
【０２２４】
そして、ペイロードデータの先頭の位置書き込んだデータブロックの番号、位置およびペイロードデータ長をＴＣＰオプションヘッダに追記して、パケットをＷＡＮ１４０に向けて送信する（１６０６）。
【０２２５】
次に、ステップ１６０２にて、前回の判定結果が一致の場合は、セッション管理テーブル５００を参照し、データブロック７０２に蓄積されている一致したデータの末尾に続くデータについて、その位置ｒｅａｄ＿ｐｎｔ５６４およびそのデータを持つデータブロックの番号ｒｅａｄ＿ｂｌｋ５６３を読み出す。そして、データブロック番号ｒｅａｄ＿ｂｌｋ５６３内の位置ｒｅａｄ＿ｐｎｔ５６４から読みだしたデータと、受信したパケットのペイロードデータとを比較する（１６０７）。
【０２２６】
そして、パケットのペイロードデータと一致するデータが、転送データ蓄積テーブル７００Ａが有するデータブロック７０２の何れかに存在するか否かを判定する（１６０８）。
【０２２７】
ステップ１６０８において、パケットのペイロードデータと一致するデータが、転送データ蓄積テーブル７００内に存在しない場合、ステップ１６０３と同様に、パケットのペイロードデータと、転送データ蓄積テーブル７００Ａが有する全てのデータブロックの先頭データ（例えば、２９２０バイト）とを比較する。（１６０９）。
【０２２８】
そして、パケットのペイロードデータと一致するデータが、転送データ蓄積テーブル７００Ａが有するデータブロック７０２の何れかに存在するか否かを判定する（１６１０）。
【０２２９】
ステップ１６１０において、パケットのペイロードデータと一致するデータが、転送データ蓄積テーブル７００内に存在しない場合、パケットはこれまでに送信されたことが無いと判定し、ステップ１６０５と同様に、セッション管理テーブル５００を参照して、データブロック７０２に前回書き込んだペイロードデータの末尾の位置ｗｒｉｔｅ＿ｐｎｔ５６６およびそのデータを持つデータブロックの番号ｗｒｉｔｅ＿ｂｌｋ５６５を読み出す。そして、前回書き込んだペイロードデータの末尾の次に蓄積されるように、読みだしたデータブロック番号ｗｒｉｔｅ＿ｂｌｋ５６５内の位置ｗｒｉｔｅ＿ｐｎｔ５６６から、パケットのペイロードデータを書き込む。
【０２３０】
ここで、ペイロードデータのサイズが、データブロック７０２の残りのサイズを上回る場合は、データブロックグループ７０１で管理されるＮｅｘｔ＿Ｗｒｉｔｅ７０６に記載される番号を持つデータブロックに、上回った分のペイロードデータ追記する（１６１１）。あるいは、現在書き込み中のデータブロックが一杯になった後に書き込み可能なデータブロックとして、Ｎｅｘｔ＿Ｗｒｉｔｅ７０６に記載される番号を持つデータブロックの位置０から、受信したパケットの全てのペイロードデータを書き込む（１６１１）。
【０２３１】
そして、ペイロードデータの書き込みが完了したら、データブロック７０２に書き込んだペイロードデータの末尾に次に蓄積されているデータの位置およびそのデータを持つデータブロックの番号を、セッション管理テーブル５００の位置ｗｒｉｔｅ＿ｐｎｔ５６６とデータブロック番号ｗｒｉｔｅ＿ｂｌｋ５６５とに記入する（１６１１）。
【０２３２】
ステップ１６１１の後は上述したステップ１６０６へ続く。
【０２３３】
また、ステップ１６０４、ステップ１６０８およびステップ１６１０において、パケットのペイロードデータと一致するデータが、転送データ蓄積テーブル７００Ａが有するデータブロック７０２の何れかに存在する場合は、ステップ１６１２へ続く。ここで、１６０４、１６０８及び１６１０の処理は、装置２００Ａがそのパケットをこれまでに送信したことがあるか否か、を判定することに対応する。
【０２３４】
ステップ１６１２では、一致したデータ末尾に続くデータを含むデータブロックの番号とそのデータの位置を、セッション管理テーブル５００内の、データブロック番号ｒｅａｄ＿ｂｌｋ５６３と位置ｒｅａｄ＿ｐｎｔ５６４に記録する（１６１２）。例えば、パケットのペイロードと、データブロックの先頭データ(０〜１５６０バイト)に含まれる１００バイト目から１４００バイト目のデータとが一致した場合、一致したデータ末尾の１４００を記録する。
【０２３５】
更に、ペイロードデータと一致したデータの先頭データを含むデータブロック番号とその位置と、ペイロードデータ長をＴＣＰオプションヘッダに追記し、且つペイロードを削除して、パケットをＷＡＮ１４０に向けて送信する（１６１３）。
【０２３６】
ステップ１６０６またはステップ１６１３により、パケットの読み出しから送信までの処理が完了する（１６１４）。
【０２３７】
図１８に、重複データ検索テーブル８００を用いて、パケットのペイロードデータと一致するデータを含むデータブロック７０２の番号およびその位置を、検索する方法の説明図を示す。
【０２３８】
装置２００の差分転送モジュール１４００は、ＷＡＮ１４０に向けて送信しようとするパケットのペイロード４５０の先頭データ（例えば、１００バイト）を取り出す（１８００）。
【０２３９】
次に、差分転送モジュール１４００は、ＭＤ５やＳＨＡ１などのハッシュ関数を用いて（１８０２）ハッシュ値を計算する（１８０３）。
【０２４０】
次に、差分転送モジュール１４００は、算出したハッシュ値の下位ビット（例えば１６バイト）を抽出して、インデックスを算出する（１８０４）。
【０２４１】
次に、差分転送モジュール１４００は、算出したインデックスと同一のｉｎｄｅｘ８０２を持つエントリ８０１を、重複データ検索テーブル８００から読み出す。更に、差分転送モジュール１４００は、エントリ８０１に記載された番号Ｄａｔａ＿Ｂｌｏｃｋ＿Ｎｕｍ８０３を持つデータブロック７０２内の位置Ｐｌａｃｅ８０４から、ペイロード４５０と同じ長さのデータを読み出す（１８００）。なお、計算したインデックスと同一のｉｎｄｅｘ８０２を持つエントリ８０１が複数ある場合、転送データ蓄積テーブル７００から、複数のデータが読み出される。
【０２４２】
次に、差分転送モジュール１４００は、転送データ蓄積テーブル７００から読み出したデータとペイロード４５０とを比較し、これらデータが一致すれば、一致したデータを持つデータブロック７０２の番号と、一致したデータの先頭位置と、ペイロードデータ長を、ＴＣＰオプションヘッダ４３０内のｔａｂｌｅ＿ｉｄ４４５と、ｐｌａｃｅ４４６と、ｌｅｎ４４７に記入する。更に、差分転送モジュール１４００は、オプションヘッダ内のｆｌｇ４４３について読み出してデータの復元を要求するｒｅａｄを記し、且つ、ペイロードデータ４５０を削除したパケットを送信する。
【０２４３】
図１９には、転送データ蓄積テーブル７００が管理するデータブロックの状態値Ｂｌｏｃｋ＿Ｖｌｄ７０７の説明図を示す。
【０２４４】
データブロックの状態値Ｂｌｏｃｋ＿Ｖｌｄ７０７の初期値は、送信側装置２００Ａおよび受信側装置２００Ｂの両方においてゼロ０（１９００／１９０６）である。送信側装置２００Ａにおいて、先頭データを持つパケットのペイロードデータの書き込みが開始されると、送信側のＢｌｏｃｋ＿Ｖｌｄ７０７は書き込み開始を表す１となる（１９０１）。
【０２４５】
先頭データを持つパケット（ｇａｐ４４４＝Ｈｅａｄ）が受信側装置２００Ｂに届くと、受信側装置２００Ｂの転送データ蓄積テーブル７００が管理するデータブロックにもパケットのペイロードデータの書き込みが開始され、受信側のＢｌｏｃｋ＿Ｖｌｄ７０７は書き込み開始を表す１となる（１９０７）。
【０２４６】
その後、後続パケットがネットワークで廃棄されたとする（１９０２）。
【０２４７】
更に、その後、送信側装置２００Ａにおいて、末尾データを持つパケットのペイロードデータの書き込みが完了すると、送信側のＢｌｏｃｋ＿Ｖｌｄ７０７は、書き込み完了を表す２となる（１９０３）。
【０２４８】
末尾データを持つパケット（ｇａｐ４４４＝Ｔａｉｌ）が受信側装置２００Ｂに届くと、受信側装置２００Ｂの転送データ蓄積テーブル７００が管理するデータブロックにも、末尾データを持つパケットのペイロードデータが書き込まれ、受信側のＢｌｏｃｋ＿Ｖｌｄ７０７は、末尾データの書き込み完了を表す２となる（１９０８）。
【０２４９】
送信側装置２００Ａが、１９０２において廃棄されたパケットを再送して（１９０４）、受信側装置２００Ｂの転送データ蓄積テーブル７００が管理するデータブロック内における整列が完了すると、受信側のＢｌｏｃｋ＿Ｖｌｄ７０７は、整列完了を表す３となる（１９０９）。
【０２５０】
更に、末尾データに対するＡＣＫが送信側装置２００Ａに返信されると、送信側のＢｌｏｃｋ＿Ｖｌｄ７０７は、ＡＣＫの確認応答が完了したことを表す３となる（１９０５）。
【０２５１】
パケットのペイロードデータと一致するかどうか判定に用いられるデータブロックは、Ｂｌｏｃｋ＿Ｖｌｄ７０７が３となるデータブロックに限られる。また、上書き可能なデータブロックは、Ｂｌｏｃｋ＿Ｖｌｄ７０７が０または３となるデータブロックに限られる。
【０２５２】
上記により、上書き中に差分転送に用いられるのを防止しつつ、差分転送中に上書きされても差分転送を直ちに停止することが可能になる。
【０２５３】
なお、本実施例は、ＷＡＮ１４０の両側に２つの装置２００を設置する形態を示したが、片側にのみ装置２００を設置して、通信開始時に同等の機能を実現するアプリケーションを自動的に端末にダウンロードおよびインストールさせて、同等の効果を実現してもよい。
【符号の説明】
【０２５４】
２００  装置、１１０、１２０、１３０  ネットワーク、１１１、１２１、１３１  端末、１９１、１９２、１９３  回線、２５０  演算部、２６０  記憶部、２７０  モジュール、３００  ネットワークインターフェース、４００  ヘッダデータ、５００  テーブル、５０９、５１５  ポインタ、６００、６１０  バッファ、８０１  エントリ、１２００、１３００  処理部 
【図１】
2016001810.tif 000003
【図２】
2016001810.tif 000004
【図３】
2016001810.tif 000005
【図４】
2016001810.tif 000006
【図５】
2016001810.tif 000007
【図６】
2016001810.tif 000008
【図７】
2016001810.tif 000009
【図８】
2016001810.tif 000010
【図９】
2016001810.tif 000011
【図１０】
2016001810.tif 000012
【図１１】
2016001810.tif 000013
【図１２】
2016001810.tif 000014
【図１３】
2016001810.tif 000015
【図１４】
2016001810.tif 000016
【図１５】
2016001810.tif 000017
【図１６】
2016001810.tif 000018
【図１７】
2016001810.tif 000019
【図１８】
2016001810.tif 000020
【図１９】
2016001810.tif 000021
【図２０】
2016001810.tif 000022
【図２１】
2016001810.tif 000023