WO2018037495A1 - 転送装置及びネットワークシステム - Google Patents

転送装置及びネットワークシステム Download PDF

Info

Publication number
WO2018037495A1
WO2018037495A1 PCT/JP2016/074632 JP2016074632W WO2018037495A1 WO 2018037495 A1 WO2018037495 A1 WO 2018037495A1 JP 2016074632 W JP2016074632 W JP 2016074632W WO 2018037495 A1 WO2018037495 A1 WO 2018037495A1
Authority
WO
WIPO (PCT)
Prior art keywords
data block
data
value
information
stored
Prior art date
Application number
PCT/JP2016/074632
Other languages
English (en)
French (fr)
Inventor
直輝 谷田
大 明石
藤嶋 堅三郎
雄次 對馬
悠樹 宮崎
Original Assignee
株式会社日立製作所
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 株式会社日立製作所 filed Critical 株式会社日立製作所
Priority to JP2018535971A priority Critical patent/JP6730437B2/ja
Priority to PCT/JP2016/074632 priority patent/WO2018037495A1/ja
Publication of WO2018037495A1 publication Critical patent/WO2018037495A1/ja

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units

Abstract

端末間で送受信されるデータを転送する転送装置であって、データブロックを管理するデータブロック情報と、データブロック情報に格納されるデータブロックを検索するための検索インデックスとを保持し、検索インデックスは、比較値及びポインタ値の組から構成される要素を複数含み、転送装置は、端末からデータを受信した場合、データブロックを生成するための分割処理を実行し、生成されたデータブロックから検索値及び参照値を算出し、参照値に基づいて、検索インデックスに含まれる複数の要素の中から参照する少なくとも一つの要素を特定し、特定された少なくとも一つの要素に含まれる比較値と検索値とを比較することによって、データブロックがデータブロック情報に格納されているか否かを判定し、データブロックがデータブロック情報に格納されていると判定された場合、データブロックの識別情報を外部装置に送信する。

Description

転送装置及びネットワークシステム
 本発明は、データの転送制御に関する。
 クラウドコンピューティングの普及によって、ネットワークを介してデータを利用する機会が増えている。
 ネットワーク帯域が制限されている場合、データへのアクセス時間がかかり、利用者の快適性が損なわれるという問題がある。また、同一のデータに対して繰り返し、アクセスが行われることによって、システム全体の通信量が増加し、ネットワーク帯域を圧迫するという問題もある。
 本技術分野の背景技術として、特許文献1に記載の技術が知られている。特許文献1には、通信データを転送する際に、persistent segment store に保存されているセグメントをreferenceに置き換えて転送することが記載されている。
 また、特許文献2には、「ネットワークの利用度が利用度閾値に達したまたはこれを超過したときに、暗号化ハッシュ関数を適用して通信トラフィックにハッシュ・ダイジェストを組み込み、データの完全性点検およびデータの重複排除を提供し、これによって、送信側ネットワーク・デバイスと受信側ネットワーク・デバイスとの間で伝送されるデータの量を低減する」ことが開示されている。
米国特許出願公開第2013/0246508号明細書 特表2016-517551号公報
 しかし、persistent segment storeが大きい場合、主記憶装置に格納できないため、二次記憶装置に保存されるpersistent segment storeからセグメントを検索する必要がある。一般に、二次記憶装置はアクセス速度が遅いため、通信データの転送速度が遅くなる。
 本願において開示される発明の代表的な一例を示せば以下の通りである。すなわち、端末間で送受信されるデータを転送する転送装置であって、前記転送装置は、プロセッサ、前記プロセッサに接続される主記憶装置、前記プロセッサに接続される副記憶装置、及び前記プロセッサに接続されるネットワークインタフェースを備え、前記端末間のデータの転送処理を制御する転送制御部を有し、データを分割することによって生成されるデータブロックであって、前記端末間で過去に送信されたデータブロックを管理するデータブロック情報と、前記データブロック情報に格納される前記データブロックを検索するための検索インデックスと、を保持し、前記検索インデックスは、前記データブロックから算出された比較値及び前記データブロック情報に格納される前記データブロックへアクセスするためのポインタ値の組から構成される要素を複数含み、前記データブロック情報は、前記ポインタ値及び前記データブロックから構成されるエントリを複数含み、前記転送制御部は、前記端末からデータを受信した場合、前記データから前記データブロックを生成するための分割処理を実行し、前記分割処理によって生成された第1データブロックから、前記検索インデックスを参照するための検索値及び参照値を算出し、前記参照値に基づいて、前記検索インデックスに含まれる複数の要素の中から参照する少なくとも一つの要素を特定し、前記特定された少なくとも一つの要素に含まれる前記比較値と前記検索値とを比較することによって、前記第1データブロックが前記データブロック情報に格納されているか否かを判定し、前記第1データブロックが前記データブロック情報に格納されていると判定された場合、前記第1データブロックの識別情報を外部装置に送信し、前記第1データブロックが前記データブロック情報に格納されていないと判定された場合、前記第1データブロックの識別情報及び前記第1データブロックを外部装置に送信することを特徴とする。
 本発明によれば、検索インデックスを用いることによって、データブロックの検索を高速に行うことができる。前述した以外の課題、構成及び効果は、以下の実施例の説明によって明らかにされる。
実施例1のネットワークシステムの構成例を示す図である。 実施例1の転送装置のハードウェア構成及びソフトウェア構成の一例を示す図である。 実施例1の転送装置のソフトウェア構成の論理的な接続関係を示す図である。 実施例1の転送装置がLANを介して送受信するTCPパケットのフォーマットの一例を示す図である。 実施例1の転送装置がWANを介して送受信するTCPパケットのフォーマットの一例を示す図である。 実施例1のフロー情報の一例を示す図である。 実施例1の送信検索インデックスの一例を示す図である。 実施例1の送信データブロック情報の一例を示す図である。 実施例1のデータ転送処理の流れを説明するシーケンス図である。 実施例1のデータ転送処理の流れを説明するシーケンス図である。 実施例1のデータ転送処理の流れを説明するシーケンス図である。 実施例1の転送制御部がLANからデータを受信した場合に実行する処理を説明するフローチャートである。 実施例1の転送制御部がデータ分割部から応答を受け取った場合に実行する処理を説明するフローチャートである。 実施例1の転送制御部がタイマに設定された時間が経過した場合に実行する処理を説明するフローチャートである。 実施例1の転送制御部が他の転送装置から応答を受信した場合に実行する処理を説明するフローチャートである。 実施例1のデータ分割部が実行する処理を説明するフローチャートである。 実施例1の重複排除部が転送制御部によって呼び出された場合に実行する処理を説明するフローチャートである。 実施例1の重複排除部が転送制御部から更新指示を受け付けた場合に実行する処理を説明するフローチャートである。 実施例1の転送制御部がWANからデータを受信した場合に実行する処理を説明するフローチャートである。 実施例1の重複復元部が転送制御部によって呼び出された場合に実行する処理を説明するフローチャートである。 実施例1の重複排除部が実行する処理の具体例を示す図である。 実施例2の転送装置のハードウェア構成及びソフトウェア構成の一例を示す図である。 実施例2の転送装置のソフトウェア構成の論理的な接続関係を示す図である。 実施例2のフロー情報の一例を示す図である。 実施例2のデータの分割方法の概念を示す図である。 実施例2の副検索インデックスの一例を示す図である。 実施例2の転送制御部がLANからデータを受信した場合に実行する処理を説明するフローチャートである。 実施例2の重複排除部が転送制御部から副データブロックの検出指示を受け付けた場合に実行する処理を説明するフローチャートである。 実施例2の重複排除部が転送制御部によって呼び出された場合に実行する処理を説明するフローチャートである。
 以下、添付図面を参照して本発明の実施例を説明する。各図において共通の構成については同一の参照符号が付されている。
 実施例1では、本発明の基本的な一例として、転送装置が、二次記憶装置に格納されるデータブロック情報からデータブロックを高速に検索する転送制御方法を説明する。これによって、データの高速な転送を実現できる。本実施例では、TCP/IP通信におけるデータ転送を一例として示す。ただし、本発明は、データ転送に用いる通信プロトコルに限定されない。
 図1は、実施例1のネットワークシステムの構成例を示す図である。
 ネットワークシステムは、複数の端末100、複数の転送装置110、及び各装置を接続するネットワークから構成される。なお、本発明は、ネットワークシステムに含まれる装置及びネットワークの数には限定されない。
 端末100及び転送装置110は、LAN(Local Area Network)140を介して互いに接続される。また、複数の転送装置110は、WAN(Wide Area Network)を介して互いに接続される。各ネットワークの接続方式は、無線及び有線のいずれもよい。LAN140及びWAN120には、中継装置130が一つ以上含まれる。
 なお、各装置を接続するネットワークの種別に限定されず、専用回線及びインターネット等のネットワークでもよい。また、端末100及び転送装置110は、直接接続されてもよい。複数の転送装置110は、直接接続されてもよい。
 図1では、二つの端末100-1、100-2が、LAN140-1、140-2、転送装置110-1、110-2、及びWAN120を介して、互いに通信を行う。
 端末100は、通信を行う装置である。端末100は、物理計算機及びプロキシ装置等が考えられる。端末100は、図示しない演算装置、主記憶装置、及びネットワークインタフェースを有する。なお、端末100は、仮想計算機を用いて実現してもよい。
 中継装置130は、LAN140及びWAN120等のネットワークを構成する装置であり、スイッチ、ルータ、及びゲートウェイ装置等が考えられる。中継装置130は、図示しない演算装置、主記憶装置、及びネットワークインタフェースを有する。
 転送装置110は、端末100間のTCP通信の終端及び中継を行う装置であり、端末100間で送受信されるデータを転送する。本実施例の転送装置110は、フロー単位で通信を制御するものとする。
 端末100-1と端末100-2との間のTCP通信150において、転送装置110-1は、TCP通信150を終端し、LAN140-1を介して端末100-1との間でTCP通信151を行う。なお、TCP通信151では、転送装置110-1は、TCP通信150において端末100-2が用いるIPアドレス及びポート番号を、転送装置110-1のIPアドレス及びポート番号として用いる。同様に、TCP通信150において、転送装置110-2は、TCP通信150を終端し、LAN140-2を介して端末100-2とTCP通信153を行う。TCP通信153では、転送装置110-2は、TCP通信150において端末100-1が用いるIPアドレス及びポート番号を、転送装置110-2のIPアドレス及びポート番号として用いる。
 また、転送装置110-1及び転送装置110-2は、WAN120を介して、TCP通信152を行う。TCP通信152では、転送装置110-1は、端末100-1のIPアドレス及びポート番号を用い、また、転送装置110-2は、端末100-2のIPアドレス及びポート番号を用いる。
 前述のようなTCP通信によって、端末100-1及び端末100-2は、端末100間で直接通信するTCP通信150を行っている場合と同様の動作を行う。
 また、本実施例の転送装置110は、重複したデータの転送を排除するように通信を制御する。具体的には、転送装置110は、送信したデータ及び受信したデータを格納する情報を管理する。転送元の端末100から過去に送信されたデータと同一のデータを受信した場合、転送装置110は当該データの識別情報を送信する。データの識別情報を受信した場合、転送装置110は、当該データの識別情報に一致するデータを情報から読み出し、転送先の端末100に読み出されたデータを送信する。
 前述したようなデータの転送制御を行うことによって、WAN120へのデータ転送量が削減される。したがって、通信コストの削減及び端末100間の通信速度の高速化を実現できる。
 以下の説明では、ネットワークシステム内で過去に送信されたデータと同一のデータの転送を排除する処理を「重複排除」とも記載する。また、以下の説明では、ネットワークシステム内で過去に送信されたデータを転送装置110が管理する情報から取得する処理を「重複復元」とも記載する。
 図2は、実施例1の転送装置110のハードウェア構成及びソフトウェア構成の一例を示す図である。図3は、実施例1の転送装置110のソフトウェア構成の論理的な接続関係を示す図である。
 転送装置110は、演算装置201、主記憶装置202、二次記憶装置203、及び複数のネットワークインタフェース204を有する。転送装置110が有するハードウェアは、システムバス205を介して互いに接続され、システムバス205を介して互いに通信を行う。
 なお、転送装置110が有する各ハードウェアの数は二つ以上でもよい。また、各ハードウェアは、複数のシステムバス205を介して、互いに接続されてもよい。また、各ハードウェアは、直接接続されてもよい。
 なお、前述したハードウェアは、仮想的なハードウェアを用いて実現してもよい。例えば、一つのネットワークインタフェース204上に複数の論理的なネットワークインタフェースを構成し、論理的なネットワークインタフェースを用いることもできる。
 なお、転送装置110は、入出力装置を有してもよい。入出力装置には、キーボード、マウス、タッチパネル、及びディスプレイ等が含まれる。
 演算装置201は、主記憶装置202に格納されるプログラムを実行する。演算装置201は、CPU(Central Processing Unit)及びGPU(Graphics Processing Unit)等が考えられる。演算装置201がプログラムを実行することによって転送装置110が有する機能を実現できる。以下の説明では、機能部(モジュール)を主語に処理を説明する場合、演算装置201が当該機能部を実現するプログラムを実行していることを示す。
 主記憶装置202は、演算装置201が実行するプログラム及び当該プログラムによって使用される情報を格納する。主記憶装置202は、また、プログラムが使用するワークエリア及びバッファ等の一時記憶領域を含む。主記憶装置202は、メモリ等が考えられる。
 二次記憶装置203は、永続的にデータを格納する。また、二次記憶装置203は、主記憶装置202に格納できないデータを格納する一時記憶領域を含む。二次記憶装置203は、HDD(Hard Disk Drive)及びSSD(Solid State Drive)等が考えられる。
 主記憶装置202に格納されるプログラム及び情報は、二次記憶装置203に格納されてもよい。この場合、演算装置201は、二次記憶装置203から、プログラム及び情報を読み出し、主記憶装置202にプログラム及び情報をロードする。
 ネットワークインタフェース204は、ネットワークと接続するためのインタフェースである。本実施例では、転送装置110は、ネットワークインタフェース204-1を介してLAN140と接続し、また、ネットワークインタフェース204-2を介してWAN120と接続する。
 ここで、主記憶装置202及び二次記憶装置203に格納されるプログラム及び情報に吹いて説明する。
 主記憶装置202は、プログラムとして、重複排除部211、重複復元部212、転送制御部213、プロトコル処理部214、及びデータ分割部215を実現するプログラムを格納する。主記憶装置202は、情報として、フロー情報217、送信検索インデックス218、及び受信検索インデックス219を格納する。また、主記憶装置202は、一時記憶領域としてデータブロックバッファ216を含む。
 二次記憶装置203は、送信データブロック情報220及び受信データブロック情報221を格納する。
 フロー情報217は、フローを管理するための情報である。フロー情報217の詳細は、図6を用いて説明する。
 送信データブロック情報220は、重複排除を行う場合に使用されるデータブロックを格納する。受信データブロック情報221は、重複復元を行う場合に使用されるデータブロックを格納する。送信データブロック情報220及び受信データブロック情報221の詳細は、図8を用いて説明する。
 送信検索インデックス218は、送信データブロック情報220に格納されるデータブロックを検索する場合に使用されるインデックスである。受信検索インデックス219は、受信データブロック情報221に格納されるデータブロックを検索する場合に使用されるインデックスである。送信検索インデックス218及び受信検索インデックス219の詳細は、図7を用いて説明する。
 データブロックバッファ216は、データブロックを一時的に格納する記憶領域である。
 転送制御部213は、転送装置110全体を制御する。転送制御部213は、内部変数として更新フラグを保持する。転送制御部213は、ネットワークインタフェース204-1を介してLAN140からデータを受信した場合、重複排除部211及びデータ分割部215等と連携して、重複排除を行い、ネットワークインタフェース204-2を介してWAN120にデータを転送する。転送制御部213は、ネットワークインタフェース204-2を介してWAN120からデータを受信した場合、重複復元部212等と連携して、重複復元を行い、ネットワークインタフェース204-1を介してLAN140にデータを転送する。転送制御部213が実行する処理の詳細は後述する。
 プロトコル処理部214は、ネットワークインタフェース204を管理し、所定の通信プロトコルに基づく通信処理を実行する。本実施例の通信プロトコルは、TCP/IPプロトコルである。また、プロトコル処理部214は、アプリケーション等に対して通信を行うためのAPI(Application Programming Interface)を提供する。例えば、プロトコル処理部214は、送信アドレス及び送信ポート、並びに受信アドレス及び受信ポートを転送制御部213に通知する。また、プロトコル処理部214は、ネットワークインタフェース204を介してデータを受信した場合、転送制御部213にデータを出力し、転送制御部213からデータを受信した場合、ネットワークインタフェース204を介してデータをネットワークに送信する。
 なお、プロトコル処理部214は、OS(Operating System)に含まれるTCP/IP機能として実現されてもよいし、専用のプログラムとして実現されてもよい。
 データ分割部215は、所定の分割方法(プロトコル)に基づいて、データを分割することによって複数のデータブロックを生成する。データ分割部215が実行する処理の詳細は後述する。
 重複排除部211は、送信検索インデックス218を用いて重複排除を行う。また、重複排除部211は、送信検索インデックス218及び送信データブロック情報220を管理する。重複排除部211が実行する処理の詳細は後述する。
 重複復元部212は、受信検索インデックス219を用いて重複復元を行う。また、重複復元部212は、受信検索インデックス219及び受信データブロック情報221を管理する。重複復元部212が実行する処理の詳細は後述する。
 なお、重複排除部211は、第1ハッシュ関数及び第2ハッシュ関数を保持する。ハッシュ関数は、例えば、md5及びsha1等が考えられる。
 なお、前述した各機能部は、複数の機能部を一つの機能部に集約してもよいし、また、一つの機能部を複数の機能部に分割してもよい。例えば、重複排除部211、重複復元部212、及びデータ分割部215を、転送制御部213に集約してもよい。
 なお、前述した各機能部は、ソフトウェアとして実現されているが、こられの機能の一部又は全てを演算装置201及びネットワークインタフェース204等のハードウェアを用いて実現されてもよい。
 本実施例では、送信検索インデックス218及び受信検索インデックス219を主記憶装置202に格納することによって、データブロックの検索処理を高速に行うことができる。また、後述するように、送信検索インデックス218及び受信検索インデックス219のデータ構造を工夫することによって、検索処理の高速化及び検索精度の向上を実現できる。
 次に、図4及び図5を用いてTCP通信に使用されるTCPパケットについて説明する。
 図4は、実施例1の転送装置110がLAN140を介して送受信するTCPパケット400のフォーマットの一例を示す図である。
 TCPパケット400は、MACヘッダ410、IPヘッダ420、IPオプションヘッダ430、TCPヘッダ440、TCPオプションヘッダ450、及びTCPペイロード460を含む。
 MACヘッダ410は、DMAC411、SMAC412、TPID413、TCI414、及びType415を含む。DMAC411は、宛先MACアドレスを表す。SMAC412は、送信元MACアドレスを表す。TPID413は、タグ付きフレームであること及びタグの種類を表す。TCI414は、タグの情報を表す。Type415は、MACフレームタイプを表す。
 TCI414は、さらに、PCP416、CFI417、及びVID418を含む。PCP416は優先度を表す。CFI417は、MACアドレスが正規フォーマットであるかを表す。VID418は、VLANのIDを表す。なお、VLANが使用されていないネットワークの場合、TPID413及びTCI414は存在しない。この場合、転送装置110は、VID418が「0」であるものとして処理を行う。
 IPヘッダ420は、IP length421、protocol422、SIP423、及びDIP424を含む。IP length421は、MACヘッダ410を除くパケット長を表す。protocol422は、プロトコル番号を表す。SIP423は、送信元IPアドレスを表す。DIP424は、宛先IPアドレスを表す。
 IPオプションヘッダ430は、0又は複数のIPオプション情報431を含む。
 TCPヘッダ440は、src.port441、dst.port442、SEQ443、ACK444、flag445、tcp hlen446、及びwin_size447を含む。src.port441は、送信元ポート番号を表す。dst.port442は、宛先ポート番号を表す。SEQ443は、送信シーケンス番号を表す。ACK444は、受信シーケンス番号を表す。flag445は、TCPフラグ番号を表す。tcp hlen446は、TCPのヘッダ長を表す。win_size447は、対向装置へ通知する広告ウインドウサイズを表す。
 TCPオプションヘッダ450は、0又は複数のオプションを含む。例えば、option kind451、option length452、及びオプション情報453等のオプションが含まれる。option kind451は、オプションの種別を表す。option length452は、オプション長を表す。オプション情報453は、オプションの種類に応じた情報を表す。
 図5は、実施例1の転送装置110がWAN120を介して送受信するTCPパケット500のフォーマットの一例を示す図である。
 TCPパケット500は、TCPパケット400と同様にMACヘッダ410、IPヘッダ420、IPオプションヘッダ430、TCPヘッダ440、及びTCPオプションヘッダ450を含む。さらに、TCPパケット500は、符号化されたデータ部分に対応するDedupヘッダ510及びDedupペイロード520の組を一つ以上含む。
 TCPパケット500に含まれるMACヘッダ410、IPヘッダ420、TCPヘッダ440、及びTCPオプションヘッダ450は、TCPパケット400に含まれるものと同一である。TCPパケット500に含まれるIPオプションヘッダ430には、オプション情報の一つとしてDedup501を含む。Dedup501は、転送装置110によって重複排除が行われたパケットであることを表す。
 Dedupヘッダ510は、dedup.type511、dedup.data_len512、dedup.hash1 513、及びdedup.hash2 514を含む。Dedupヘッダ510に含まれる各情報のデータサイズは、一例であって、必要に応じてデータサイズを変更できる。
 dedup.type511は、Dedupペイロード520の種類を表す。dedup.data_len512は、Dedupペイロード520の長さを表す。dedup.hash1 513及びdedup.hash2 514は、データブロックを検索するために用いるハッシュ値を表す。本実施例では、dedup.hash1 513及びdedup.hash2 514が、データブロックの識別情報として用いられる。
 なお、dedup.type511には「1」、「2」、「3」のいずれかが設定される。「1」は、データブロックの識別情報のみを含むTCPパケット500であることを示す。「2」は、データブロック及びデータブロックの識別情報を含むTCPパケット500であることを示す。「3」は、分割されなかったデータを含むTCPパケット500であることを示す。
 Dedupペイロード520は、Dedup.type511の値に応じて、データブロック又はLAN140から受信したデータ等が格納される。なお、データブロックの識別情報を送信する場合、空のDedupペイロード520が付与されてもよいし、Dedupペイロード520が付与されなくてもよい。
 次に、図6、図7、及び図8を用いて、転送装置110が管理する情報等について説明する。
 図6は、実施例1のフロー情報217の一例を示す図である。
 フロー情報217は、フローを管理する情報を格納するエントリを含む。エントリは、フローID601、VLAN602、LAN-IP603、WAN-IP604、LAN-PORT605、WAN-PORT606、バッファ607、及びタイマ608から構成される。
 フローID601は、フローを一意に識別するための識別情報である。VLAN602は、フローが属するVLANの識別情報である。LAN-IP603及びLAN-PORT605は、LAN140を介して接続される端末100のIPアドレス及びポート番号である。WAN-IP604及びWAN-PORT606は、WAN120を介して接続される端末100のIPアドレス及びポート番号である。バッファ607は、LAN140から受信したデータをWAN120に転送する場合に、一時的にデータを格納するための領域である。タイマ608は、データ転送に用いるタイマ値である。
 図7は、実施例1の送信検索インデックス218の一例を示す図である。なお、受信検索インデックス219のデータ構造は、送信検索インデックス218と同一であるため、説明を省略する。
 送信検索インデックス218は、2次元配列のデータ構造である。図7では、N行4列の2次元配列となっている。なお、行及び列の数は一例であって、任意の値に設定できる。
 2次元配列の一つの要素701には、ハッシュ値X及びポインタ値Pが含まれる。ハッシュ値Xは、ハッシュ関数にデータブロックを入力することによって算出されるハッシュ値である。ハッシュ値Xは、データブロックが送信データブロック情報220に格納されているか否かを判定する場合に使用される。ポインタ値は、送信データブロック情報220内のデータブロックをアクセスするための値である。ポインタ値には、後述するファイル名801の値が設定される。
 後述するように、重複排除部211は、二つのハッシュ関数を用いて、送信検索インデックス218を参照する。
 図8は、実施例1の送信データブロック情報220の一例を示す図である。なお、受信データブロック情報221のデータ構造は、送信データブロック情報220と同一であるため、説明を省略する。
 送信データブロック情報220は、データブロックを格納するエントリを含む。エントリは、ファイル名801及びデータブロック802から構成される。本実施例では、個々のデータブロックがファイルとして管理される。
 ファイル名801は、データブロックを管理するファイルの識別情報である。本実施例では、ファイルの識別情報に数値を用いる。データブロック802は、データブロックそのものである。
 次に、図9A、図9B、及び図9Cを用いて、データ転送処理の一連の流れについて説明する。以下では、一例として、端末100-1から端末100-2へデータを転送する場合のデータ転送処理について説明する。なお、端末100-2から端末100-2へデータを転送する場合も同様の処理となる。
 図9A、図9B、及び図9Cは、実施例1のデータ転送処理の流れを説明するシーケンス図である。なお、TCP通信における確認応答等のTCPレイヤの処理については省略している。
 図9Aは、転送装置110-1及び転送装置110-2が、端末100-1から送信されるデータ(データブロック)を保持している場合のデータ転送処理の流れを示す。
 端末100-1が端末100-2へデータを送信する(ステップS901)。
 転送装置110-1は、LAN140-1を介して、端末100-1からデータを受信した場合、当該データをデータブロックに分割する(ステップS902)。転送装置110-1は、データブロックのハッシュ値に基づいて送信検索インデックス218を検索し、データブロックが送信データブロック情報220に格納されているか否かを判定する(ステップS903)。
 データブロックは送信データブロック情報220に格納されているため、転送装置110-1は、WAN120を介して、端末100-2にデータブロックの識別情報を送信する(ステップS904)。このとき、転送装置110-1は、データブロックバッファ216にデータブロックを格納する。
 転送装置110-2は、データブロックの識別情報を受信した場合、データブロックの識別情報に基づいて受信検索インデックス219を検索し、データブロックが受信データブロック情報221に格納されているか否かを判定する(ステップS905)。
 データブロックは受信データブロック情報221に格納されているため、転送装置110-2は、WAN120を介して、転送装置110-1に復元確認通知を送信する(ステップS906)。なお、復元確認通知は、データブロックの転送が完了した旨を示す通知である。
 また、転送装置110-2は、データブロックの識別情報に基づいて受信データブロック情報221からデータブロックを取得し、LAN140-2を介して、端末100-2に取得されたデータブロックを端末100-1から送信されたデータとして送信する(ステップS907)。
 転送装置110-1は、WAN120を介して、復元確認通知を受信した場合、データブロックバッファ216に格納されるデータブロックを削除する(ステップS908)。
 なお、端末100-1から受信したデータは複数のデータブロックに分割される。したがって、転送装置110-1は、Dedupヘッダ510及びDedupペイロード520の組を一つ以上含むTCPパケット500の送信を一回以上行う。また、転送装置110-2は、データブロックを送信する場合、複数のデータブロックを含む一つのTCPパケット400を送信してもよいし、一つのデータブロックを含むTCPパケット400を複数回送信してもよい。
 図9Bは、転送装置110-1が、端末100-1から送信されるデータ(データブロック)を保持していない場合のデータ転送処理の流れを示す。
 端末100-1が端末100-2へデータを送信する(ステップS911)。
 転送装置110-1は、LAN140-1を介して、端末100-1からデータを受信した場合、当該データをデータブロックに分割する(ステップS912)。転送装置110-1は、データブロックのハッシュ値に基づいて送信検索インデックス218を検索し、データブロックが送信データブロック情報220に格納されているか否かを判定する(ステップS913)。
 データブロックは送信データブロック情報220に格納されていないため、転送装置110-1は、WAN120を介して、転送装置110-2にデータブロックを送信する(ステップS914)。
 転送装置110-2は、データブロックを受信した場合、受信データブロック情報221に当該データブロックを格納する(ステップS915)。転送装置110-2は、WAN120を介して、転送装置110-1に復元確認通知を送信する(ステップS916)。また、転送装置110-2は、LAN140-2を介して、端末100-2に受信したデータブロックを端末100-1から送信されたデータとして送信する(ステップS917)。
 転送装置110-1は、WAN120を介して、復元確認通知を受信した場合、データブロックバッファ216に格納されるデータブロックを送信データブロック情報220に格納する(ステップS918)。
 図9Cは、転送装置110-1のみが、端末100-1から送信されるデータ(データブロック)を保持している場合のデータ転送処理の流れを示す。
 ステップS921からステップS924の処理は、ステップS901からステップS904の処理と同一である。
 転送装置110-2は、データブロックの識別情報を受信した場合、データブロックの識別情報に基づいて受信検索インデックス219を検索し、データブロックが受信データブロック情報221に格納されているか否かを判定する(ステップS925)。
 データブロックは受信データブロック情報221に格納されていないため、転送装置110-2は、WAN120を介して、データブロック要求を送信する(ステップS926)。
 転送装置110-1は、WAN120を介して、データブロック要求を受信した場合、WAN120を介して、転送装置110-2にデータブロックバッファ216に格納されるデータブロックを送信する(ステップS927)。
 転送装置110-2は、WAN120を介して、データブロックを受信した場合、受信データブロック情報221に当該データブロックを格納する(ステップS928)。転送装置110-2は、WAN120を介して、転送装置110-1に復元確認通知を送信する(ステップS929)。また、転送装置110-2は、LAN140-2を介して、端末100-2に受信したデータブロックを端末100-1から送信されたデータとして送信する(ステップS930)。
 転送装置110-1は、WAN120を介して、復元確認通知を受信した場合、データブロックバッファ216に格納されるデータブロックを削除する(ステップS931)。
 転送装置110-1は、復元確認通知を受信するまで、データブロックバッファ216にデータブロックを格納するため、転送装置110-2からのデータブロック要求を受信した場合、即座に転送装置110-2にデータブロックを送信できる。
 また、図9Bに示すように、転送装置110-1は、復元確認通知を受信した後に、送信データブロック情報220にデータブロックを格納する。送信データブロック情報220へのデータブロックの格納順番が逆の場合、転送装置110-2にデータブロックが登録されていない可能性がある。そのため、図9Cに示すようなデータ転送処理が発生する可能性がある。一方、図9Bに示すような処理手順にすることによって、図9Cに示すようなデータ転送処理が発生する可能性を低くすることができる。図9Cに示すデータ転送処理では、転送装置110間の通信回数が増えることから、通信の遅延が発生する。したがって、図9Cに示すようなデータ転送処理の発生を防止することによって、ネットワークシステム全体の通信速度、通信品質等を向上させることができる。
 次に、図10から図18を用いて、転送装置110の各機能部が実行する処理の詳細を説明する。
 図10は、実施例1の転送制御部213がLAN140からデータを受信した場合に実行する処理を説明するフローチャートである。
 転送制御部213は、プロトコル処理部214から、LAN140から受信したデータを受け取った場合(ステップS1001)、フロー情報217にデータを格納する(ステップS1002)。
 具体的には、転送制御部213は、プロトコル処理部214から受け取ったIPアドレス、ポート番号、及びVLANのID等に基づいてフロー情報217を参照し、フローに対応するエントリを特定する。転送制御部213は、特定されたエントリのバッファ607に、受け取ったデータ(TCPペイロード460)を格納する。なお、バッファ607にデータが格納されている場合、転送制御部213は、当該データの後方に受け取ったデータを追加する。
 次に、転送制御部213は、データ分割部215を呼び出す(ステップS1003)。このとき、転送制御部213は、受け取ったデータをデータ分割部215に出力する。その後、転送制御部213は、処理を終了する。
 図11は、実施例1の転送制御部213がデータ分割部215から応答を受け取った場合に実行する処理を説明するフローチャートである。
 転送制御部213は、データ分割部215から受け取った応答が分割不可通知であるか否かを判定する(ステップS1101)。
 データ分割部215から受け取った応答が分割不可通知であると判定された場合、転送制御部213は、ステップS1106に進む。
 データ分割部215から受け取った応答が分割不可通知ではないと判定された場合、すなわち、データ分割部215からデータブロックを受け取った場合、転送制御部213は、ステップS1002において特定されたエントリのバッファ607に格納されるデータから当該データブロックを削除する(ステップS1102)。
 具体的には、転送制御部213は、ステップS1002において特定されたエントリのバッファ607に格納されるデータからデータブロックに一致するデータ列を削除する。
 次に、転送制御部213は、重複排除部211を呼び出す(ステップS1103)。転送制御部213は、重複排除部211から応答があるまで待ち状態に移行する。このとき、転送制御部213は、データブロックを重複排除部211に入力する。
 転送制御部213は、一定時間経過した後、重複排除部211から符号化されたデータを取得したか否かを判定する(ステップS1104)。
 重複排除部211から符号化されたデータを取得していないと判定された場合、転送制御部213は、待ち状態に移行し、一定時間経過した後にステップS1104に戻る。
 重複排除部211から符号化されたデータを取得したと判定された場合、転送制御部213は、WAN120を介して、符号化されたデータを送信し、また、データブロックバッファ216にデータブロックを格納する(ステップS1105)。
 具体的には、転送制御部213は、符号化されたデータをプロトコル処理部214に出力する。なお、符号化されたデータとは、一つ以上のDedupヘッダ510及びDedupペイロード520の組を表す。
 ステップS1101の判定結果がYESの場合、又は、ステップS1105の処理が実行された後、転送制御部213は、ステップS1002において特定されたエントリのバッファ607にデータが残っているか否かを判定する(ステップS1106)。
 ステップS1002において特定されたエントリのバッファ607にデータが残っていると判定された場合、転送制御部213は、当該エントリのタイマ608に任意の時間を設定する(ステップS1107)。その後、転送制御部213は、処理を終了する。
 ステップS1002において特定されたエントリのバッファ607にデータが残っていないと判定された場合、転送制御部213は、当該エントリのタイマ608に「0」を設定する(ステップS1108)。その後、転送制御部213は、処理を終了する。
 図12は、実施例1の転送制御部213がタイマ608に設定された時間が経過した場合に実行する処理を説明するフローチャートである。
 転送制御部213は、各フローについてタイマをカウントし、タイマ608に設定された時間が経過したエントリを検出した場合、以下の処理を開始する。以下では、タイマ608に設定された時間が経過したエントリを対象エントリと記載する。
 転送制御部213は、対象エントリのバッファ607に格納されるデータの符号化を重複排除部211に指示する(ステップS1201)。転送制御部213は、重複排除部211から符号化されたデータを取得するまで待ち状態に移行する。なお、当該指示には、対象エントリのバッファ607に格納されるデータが含まれる。
 重複排除部211は、当該指示を受け付けた場合、dedup.type511に「3」を設定し、dedup.data_len512にバッファ607に格納されるデータの長さを設定し、dedup.hash1 513及びdedup.hash2 514にダミーの値として「0」を設定することによってDedupヘッダ510を生成する。また、重複排除部211は、Dedupペイロード520に対象エントリのバッファ607に格納されるデータを設定する。重複排除部211は、Dedupヘッダ510及びDedupペイロード520を転送制御部213に出力する。
 次に、転送制御部213は、重複排除部211から符号化されたデータを取得した場合、WAN120を介して、符号化されたデータを送信する(ステップS1202)。
 具体的には、転送制御部213は、符号化されたデータをプロトコル処理部214に出力する。これによって、Dedupヘッダ510及びDedupペイロード520を含むTCPパケット500が送信される。
 次に、転送制御部213は、対象エントリのタイマ608に「0」を設定する(ステップS1203)。その後、転送制御部213は、処理を終了する。
 このように、タイマ608に設定された時間が経過した場合に、転送装置110がバッファ607に格納されるデータを送信することによって、受信したデータが転送されない状態を防止できる。
 図13は、実施例1の転送制御部213が他の転送装置110から応答を受信した場合に実行する処理を説明するフローチャートである。
 転送制御部213は、プロトコル処理部214から、WAN120から受信した他の転送装置110の応答を受け取った場合(ステップS1301)、受け取った応答がデータブロック要求であるか否かを判定する(ステップS1302)。
 受け取った応答がデータブロック要求であると判定された場合、転送制御部213は、データブロックバッファ216からデータブロックを読み出し、重複排除部211にデータブロックの符号化を指示する(ステップS1303)。転送制御部213は、重複排除部211から符号化されたデータブロックを取得するまで待ち状態に移行する。なお、当該指示には、データブロックが含まれる。
 重複排除部211は、当該指示を受け付けた場合、第1ハッシュ関数及び第2ハッシュ関数を用いて、変数α及び変数βを算出する。変数α及び変数βの算出方法は、図15を用いて説明する。重複排除部211は、dedup.type511に「2」を設定し、dedup.data_len512にデータブロックの長さを設定し、dedup.hash1 513に変数αを設定し、dedup.hash2 514に変数βを設定することによってDedupヘッダ510を生成する。また、重複排除部211は、Dedupペイロード520にデータブロックを設定する。重複排除部211は、Dedupヘッダ510及びDedupペイロード520を転送制御部213に出力する。
 次に、転送制御部213は、重複排除部211から符号化されたデータブロックを取得した場合、WAN120を介して、符号化されたデータブロックを送信する(ステップS1304)。その後、転送制御部213は、処理を終了する。
 具体的には、転送制御部213は、符号化されたデータブロックをプロトコル処理部214に出力する。これによって、Dedupヘッダ510及びDedupペイロード520を含むTCPパケット500が送信される。
 ステップS1302において、受け取った応答がデータブロック要求でないと判定された場合、転送制御部213は、更新フラグがONであるか否かを判定する(ステップS1305)。
 更新フラグがOFFであると判定された場合、転送制御部213は、ステップS1307に進む。
 更新フラグがONであると判定された場合、転送制御部213は、重複排除部211に更新指示を出力する(ステップS1306)。このとき、転送制御部213は、更新フラグをOFFに設定する。当該更新指示にはデータブロックが含まれる。重複排除部211が、更新指示を受け付けた場合に実行する処理は図16を用いて説明する。
 ステップS1305の判定結果がNOである場合、又は、ステップS1306の処理が実行された後、転送制御部213は、データブロックバッファ216からデータブロックを削除する(ステップS1307)。その後、転送制御部213は、処理を終了する。
 図14は、実施例1のデータ分割部215が実行する処理を説明するフローチャートである。
 ここでは、データ分割部215が、Content Defined Chunkingとして知られるアルゴリズムに基づいて、データを可変長のデータブロックに分割する方法について説明する。Content Defined Chunkingでは、計算機が、固定長のウインドウ(例えば、48バイト)をデータの先頭から1バイトずつスライドし、ウインドウに含まれるデータのハッシュ値を用いて分割位置を決定する。
 データ分割部215は、転送制御部213から呼び出された場合、処理を開始する。まず、データ分割部215は、転送制御部213からLAN140から受信したデータを取得する(ステップS1401)。
 データ分割部215は、データの先頭に所定のサイズのウインドウを配置する(ステップS1402)。データ分割部215は、ウインドウに含まれるデータのハッシュ値を算出する(ステップS1403)。ハッシュ値を算出するためのハッシュ関数は、例えば、ローリングハッシュとして知られるハッシュ関数を用いる。
 次に、データ分割部215は、ハッシュ値が所定の条件を満たすか否かを判定する(ステップS1404)。
 例えば、2進法表記におけるハッシュ値の下10桁が全て1であるか否かが判定される。ハッシュ値が入力されたデータに応じて適切に散らばる場合、2進法表記におけるハッシュ値の下10桁が全て1になる確率は1024分の1である。このとき、データブロックの平均サイズは約1024バイトとなる。
 ハッシュ値が所定の条件を満たすと判定された場合、データ分割部215は、ウインドウに含まれるデータを出力するデータブロックに決定し、転送制御部213に当該データブロックを応答として出力する(ステップS1405)。その後、転送制御部213は処理を終了する。
 ステップS1404において、ハッシュ値が所定の条件を満たさないと判定された場合、データ分割部215は、ウインドウの移動が可能であるか否かを判定する(ステップS1406)。
 具体的には、データ分割部215は、ウインドウの終端がLAN140から受信したデータの終端と一致するか否かが判定される。ウインドウの終端がLAN140から受信したデータの終端と一致しない場合、データ分割部215は、ウインドウの移動が可能であると判定する。
 ウインドウの移動が不可能であると判定された場合、データ分割部215は、転送制御部213に分割不可通知を応答として出力する(ステップS1407)。その後、転送制御部213は処理を終了する。
 ウインドウの移動が可能であると判定された場合、データ分割部215は、ウインドウをデータの後方にスライドさせ(ステップS1408)、その後、ステップS1403に戻る。例えば、データ分割部215は、ウインドウを1バイト分だけ後方にスライドさせる。
 図15は、実施例1の重複排除部211が転送制御部213によって呼び出された場合に実行する処理を説明するフローチャートである。
 重複排除部211は、転送制御部213からデータブロックを取得する(ステップS1501)。重複排除部211は、第1ハッシュ関数及び第2ハッシュ関数を用いて、変数α及び変数βを算出する(ステップS1502)。
 具体的には、重複排除部211は、第1ハッシュ関数にデータブロックを入力することによって算出された第1ハッシュ値を2次元配列の行数Nで除算し、その余りを変数αとして算出する。また、重複排除部211は、第2ハッシュ関数にデータブロックを入力することによって算出される第2ハッシュ値を変数βとして算出する。
 次に、重複排除部211は、送信検索インデックス218を参照し(ステップS1503)、ハッシュ値が変数βに一致する要素701が存在するか否かを判定する(ステップS1504)。
 具体的には、重複排除部211は、α行目の行に含まれる要素701を参照する要素701群として特定する。重複排除部211は、α行目に含まれる各要素701に格納されるハッシュ値Xと、変数βとを比較する。
 ハッシュ値Xが変数βに一致する要素701が存在しないと判定された場合、重複排除部211は、ステップS1508に進む。
 ハッシュ値Xが変数βに一致する要素701が存在すると判定された場合、重複排除部211は、送信データブロック情報220からデータブロックを読み出す(ステップS1505)。
 具体的には、重複排除部211は、ハッシュ値Xが変数βに一致する要素701に含まれるポインタ値Pを取得し、送信データブロック情報220を参照して、当該ポインタ値Pがファイル名801に一致するエントリを検索する。重複排除部211は、検索されたエントリのデータブロック802からデータブロックを読み出す。
 次に、重複排除部211は、転送制御部213から取得したデータブロックと、送信データブロック情報220から読み出したデータブロックとが一致するか否かを判定する(ステップS1506)。
 二つのデータブロックが一致しないと判定された場合、重複排除部211は、ステップS1508に進む。
 二つのデータブロックが一致すると判定された場合、重複排除部211は、転送制御部213に、符号化されたデータブロックの識別情報を出力する(ステップS1507)。その後、重複排除部211は、処理を終了する。
 具体的には、重複排除部211は、dedup.type511に「1」を設定し、dedup.data_len512に「0」を設定し、dedup.hash1 513に変数αを設定し、dedup.hash2 514に変数βを設定することによってDedupヘッダ510を生成する。重複排除部211は、Dedupヘッダ510及びDedupペイロード520を転送制御部213に出力する。なお、Dedupペイロード520は空であるものとする。
 Dedupヘッダ510のサイズが28バイト、データブロックのサイズの平均値が4キロバイトである場合、データブロックの識別情報のみを送信する通信は、データブロックを送信する通信より通信量が100分の1以下となる。なお、前述の比較は、TCPヘッダ440等を除いたものである。
 ステップS1504の判定結果がNOである場合、又は、ステップS1506の判定結果がNOである場合、重複排除部211は、転送制御部213の更新フラグをONに設定する(ステップS1508)。このとき、重複排除部211は、変数α及び変数βを一時的に保持する。
 次に、重複排除部211は、転送制御部213に、符号化されたデータブロックの識別情報及び符号化されたデータブロックを出力する(ステップS1509)。その後、重複排除部211は、処理を終了する。
 具体的には、重複排除部211は、dedup.type511に「2」を設定し、dedup.data_len512にデータブロックのサイズを設定し、dedup.hash1 513に変数αを設定し、dedup.hash2 514に変数βを設定することによってDedupヘッダ510を生成する。また、重複排除部211は、Dedupペイロード520にデータブロックを設定する。重複排除部211は、Dedupヘッダ510及びDedupペイロード520を転送制御部213に出力する。
 変数αは、行数Nで割った余りであるため、0からN-1までの値となる。したがって、任意のデータブロックの変数αは、他のデータブロックを用いて算出された変数αとN分の1の確率で一致する。送信検索インデックス218のデータサイズは行数Nの大きさに依存するため、行数Nの大きさには制限がある。一方、変数βは、第2ハッシュ値をそのまま入力したものであり、Nより十分大きな値を設定できる。
 例えば、変数αのサイズを20ビット、変数βのサイズを128ビット、ポインタ値Pのサイズを64ビットとした場合、送信検索インデックス218のサイズは、式(1)に示すように約100MBとなる。変数αのサイズを128ビット、変数βのサイズを20ビット、ポインタ値Pのサイズを64ビットとした場合、送信検索インデックス218のサイズは、式(2)に示すように約1.2×1016YBとなる。
Figure JPOXMLDOC01-appb-M000001
Figure JPOXMLDOC01-appb-M000002
 変数βのサイズを大きくすると、ハッシュ値の衝突が発生する確率が非常に低くなる。したがって、変数βとハッシュ値Xとが一致する場合、受信したデータブロックと、送信データブロック情報220から読み出したデータブロックとは、高い確率で一致する。この場合、変数β及びハッシュ値Xの比較のみを行えばよく、データブロック同士を比較する必要はない。そのため、ステップS1506の省略できる。
 ステップS1506の処理を省略した場合、二次記憶装置203へのアクセスする必要がないため、重複排除部211は、さらに高速に、データブロックを検索することができる。したがって、処理速度を重視する場合には、変数βのサイズを大きくし、ステップS1506の処理を行わないように設定すればよい。
 図16は、実施例1の重複排除部211が転送制御部213から更新指示を受け付けた場合に実行する処理を説明するフローチャートである。
 重複排除部211は、転送制御部213から更新指示を受け取った場合(ステップS1601)、送信検索インデックス218及び送信データブロック情報220を更新する(ステップS1602)。その後、重複排除部211は、処理を終了する。具体的には、以下のような処理が実行される。
 重複排除部211は、ポインタ値Pに設定する値を式(3)を用いて算出する。なお、mは、第2ハッシュ関数の出力値の最大ビット数である。
Figure JPOXMLDOC01-appb-M000003
 式(3)に示すように変数α及び変数βに基づいて一意に定まる値をポインタ値に用いることによって、異なるデータブロックのポインタ値が同一となる確率を非常に小さくできる。
 重複排除部211は、送信検索インデックス218のα行目を参照し、α行目に含まれる要素701の中に空の要素701が存在するか否かを判定する。空の要素701とは、ハッシュ値X及びポインタ値Pが設定されていない要素701を示す。
 空の要素701が存在する場合、重複排除部211は、当該要素701のハッシュ値Xに変数βを設定し、ポインタ値Pに式(3)を用いて算出された値を設定する。また、重複排除部211は、送信データブロック情報220にエントリを追加し、追加されたエントリのファイル名801に式(3)を用いて算出された値を設定し、データブロック802に更新指示に含まれるデータブロックを格納する。
 空の要素701が存在しない場合、重複排除部211は、α行目に含まれる要素701の中から値を設定する要素701を一つ選択する。要素701を選択する方法は様々考えられる。例えば、ランダムに選択する方法、及びLRU(Least Recently Used)アルゴリズムに基づいて選択する方法等が考えられる。
 重複排除部211は、送信データブロック情報220を参照し、ファイル名801が選択された要素701のポインタ値Pに一致するエントリを検索し、検索されたエントリを削除する。重複排除部211は、選択された要素701のハッシュ値Xに変数βを設定し、ポインタ値Pに式(3)を用いて算出された値を設定する。また、重複排除部211は、送信データブロック情報220にエントリを追加し、追加されたエントリのファイル名801に式(3)を用いて算出された値を設定し、データブロック802にデータブロックを格納する。以上がステップS1602の処理の説明である。
 図17は、実施例1の転送制御部213がWAN120からデータを受信した場合に実行する処理を説明するフローチャートである。
 転送制御部213は、プロトコル処理部214から、WAN120から受信したデータ(TCPパケット500)を受け取った場合(ステップS1701)、重複復元部212を呼び出す(ステップS1702)。このとき、転送制御部213は、受け取ったデータを重複復元部212に出力する。転送制御部213は、重複復元部212から応答を受け付けるまで待ち状態に移行する。
 転送制御部213は、重複復元部212からの応答に基づいて、データブロックを取得する必要があるか否かを判定する(ステップS1703)。
 具体的には、転送制御部213は、重複復元部212からの応答が「該当データ無し」であるか否かを判定する。重複復元部212からの応答が「該当データ無し」である場合、転送制御部213は、データブロックを取得する必要があると判定する。
 データブロックを取得する必要がないと判定された場合、転送制御部213は、LAN140を介して、復元されたデータを送信する(ステップS1704)。
 具体的には、転送制御部213は、復元されたデータをプロトコル処理部214に出力する。これによって、Dedupペイロード520に設定されたデータがTCPペイロード460に設定されたTCPパケット400が送信される。
 次に、転送制御部213は、WAN120を介して、復元確認通知を送信する(ステップS1705)。その後、転送制御部213は、処理を終了する。
 具体的には、転送制御部213は、プロトコル処理部214に復元確認通知の送信を指示する。なお、復元確認通知を送信する場合には、TCPパケット400及びTCPパケット500のいずれを用いてもよい。
 ステップS1703において、データブロックを取得する必要があると判定された場合、転送制御部213は、WAN120を介して、データブロック要求を送信する(ステップS1706)。その後、転送制御部213は、処理を終了する。
 具体的には、転送制御部213は、プロトコル処理部214にデータブロック要求の送信を指示する。なお、データブロック要求を送信する場合には、TCPパケット400及びTCPパケット500のいずれを用いてもよい。
 図18は、実施例1の重複復元部212が転送制御部213によって呼び出された場合に実行する処理を説明するフローチャートである。
 重複復元部212は、転送制御部213からデータを取得し(ステップS1801)、Dedupヘッダ510に含まれるdedup.type511の値が「2」であるか否かを判定する(ステップS1802)。
 dedup.type511の値が「2」ではないと判定された場合、重複復元部212は、dedup.type511の値が「3」であるか否かを判定する(ステップS1803)。
 dedup.type511の値が「1」であると判定された場合、重複復元部212は、受信検索インデックス219を参照し、ハッシュ値Xがdedup.hash2 514の値に一致する要素701が存在するか否かを判定する(ステップS1804)。
 具体的には、重複復元部212は、(dedup.hash1 513)行目の行に含まれる要素701を参照する要素701群として特定する。重複復元部212は、(dedup.hash1 513)行目に含まれる各要素701に格納されるハッシュ値Xと、dedup.hash2 514の値とを比較する。
 ハッシュ値Xがdedup.hash2 514の値に一致する要素701が存在すると判定された場合、重複復元部212は、受信データブロック情報221からデータブロックを読み出す(ステップS1805)。
 具体的には、重複復元部212は、ハッシュ値Xがdedup.hash2 514の値に一致する要素701からポインタ値Pを取得し、受信データブロック情報221を参照して、当該ポインタ値Pがファイル名801に一致するエントリを検索する。重複復元部212は、検索されたエントリのデータブロック802からデータブロックを読み出す。
 次に、重複復元部212は、転送制御部213に読み出されたブロックデータを応答として出力する(ステップS1806)。その後、重複復元部212は、処理を終了する。
 ステップS1804において、ハッシュ値がdedup.hash2 514の値に一致する要素701が存在しないと判定された場合、重複復元部212は、転送制御部213に「該当データ無し」を応答として出力する(ステップS1808)。その後、重複復元部212は、処理を終了する。
 ステップS1803において、dedup.type511の値が「3」であると判定された場合、重複復元部212は、転送制御部213に、Dedupペイロード520に設定されたデータを応答として出力する(ステップS1807)。その後、重複復元部212は、処理を終了する。
 ステップS1802において、dedup.type511の値が「2」であると判定された場合、重複復元部212は、受信検索インデックス219及び受信データブロック情報221を更新する(ステップS1809)。具体的には、以下のような処理が実行される。
 重複復元部212は、ポインタ値Pに設定する値を式(4)を用いて算出する。
Figure JPOXMLDOC01-appb-M000004
 式(4)に示すようにdedup.hash1 513及びdedup.hash2 514に基づいて一意に定まる値をポインタ値に用いることによって、異なるデータブロックのポインタ値が同一となる確率を非常に小さくできる。
 重複復元部212は、受信検索インデックス219の(dedup.hash1 513)行目を参照し、(dedup.hash1 513)行目に含まれる要素701の中に空の要素701が存在するか否かを判定する。
 空の要素701が存在する場合、重複復元部212は、当該要素701のハッシュ値Xにdedup.hash2 514の値を設定し、ポインタ値Pに式(4)を用いて算出された値を設定する。また、重複復元部212は、受信データブロック情報221にエントリを追加し、追加されたエントリのファイル名801に式(4)を用いて算出された値を設定し、データブロック802にデータブロックを格納する。
 空の要素701が存在しない場合、重複復元部212は、(dedup.hash1 513)行目に含まれる要素701の中から、値を設定する要素701を一つ選択する。要素701を選択する方法は重複排除部211が使用する方法と同一の方法とする。重複排除部211及び重複復元部212が同一の方法を用いることによって、送信データブロック情報220及び受信データブロック情報221の内容が一致する可能性が高くなる。これによって、データブロック要求を送信する回数を低減できる。
 重複復元部212は、受信データブロック情報221を参照し、ファイル名801が選択された要素701のポインタ値Pに一致するエントリを検索し、検索されたエントリを削除する。重複復元部212は、選択された要素701のハッシュ値Xにdedup.hash2 514の値を設定し、ポインタ値Pに式(4)を用いて算出された値を設定する。また、重複復元部212は、受信データブロック情報221にエントリを追加し、追加されたエントリのファイル名801に式(4)を用いて算出された値を設定し、データブロック802にデータブロックを格納する。以上がステップS1809の処理の説明である。
 次に、重複復元部212は、転送制御部213に、Dedupペイロード520に設定されたデータブロックを応答として出力する(ステップS1810)。その後、重複復元部212は、処理を終了する。
 次に、図19を用いて、重複排除部211が実行する具体的な処理内容について説明する。
 図19は、実施例1の重複排除部211が実行する処理の具体例を示す図である。ここで、送信検索インデックス218及び送信データブロック情報220は、それぞれ、図19に示すエントリが格納されるものとする。なお、送信検索インデックスの左側の数字は行数を表す。
 まず、重複排除部211がデータブロック「abc...z」を受信した場合を例に説明する。なお、当該データブロックの変数αは「6423」、変数βは「0x11121239」であるものとする。
 ステップS1503において、重複排除部211は、6423行目に含まれる四つの要素701のハッシュ値Xと、変数βとを比較する。このとき、2列目の要素701のハッシュ値Xと変数βとが一致するため、ステップS1504の判定結果はYESとなる。
 ステップS1505では、重複排除部211は、2列目の要素701のポインタ値Pの値「p2」を用いて、送信データブロック情報220からデータブロック「abc...z」を読み出す。
 転送制御部213から取得したデータブロックと、送信データブロック情報220から読み出したデータブロックとは一致するため、ステップS1506の判定結果はYESとなる。
 したがって、重複排除部211は、符号化されたデータブロックの識別情報を出力する(ステップS1507)。なお、Dedupヘッダ510のdedup.hash1 513には「6242」が設定され、dedup.hash2 514には「0x11121239」が設定される。
 次に、重複排除部211がデータブロック「012...9」を受信した場合を例に説明する。なお、当該データブロックの変数αは「312」、変数βは「0x121f12d9」であるものとする。
 ステップS1503において、重複排除部211は、312行目に含まれる四つの要素701のハッシュ値Xと、変数βとを比較する。このとき、変数βに一致するハッシュ値Xを含む要素701は存在しないため、ステップS1504の判定結果はNOとなる。
 したがって、重複排除部211は、更新フラグをONに設定し(ステップS1508)、符号化されたデータブロックの識別情報及びデータブロックを出力する(ステップS1509)。なお、Dedupヘッダ510のdedup.hash1 513には「312」が設定され、dedup.hash2 514には「0x121f12d9」が設定される。また、Dedupペイロード520にはデータブロック「012...9」が設定される。
 重複排除部211は、転送制御部213から更新指示を受け取った場合、データブロック「012...9」から変数α及び変数βを算出し、また、式(3)を用いてポインタ値Pに設定する値を算出する。
 重複排除部211は、送信検索インデックス218の312行目を参照する。312行目には空の要素701が存在しないため、重複排除部211は、312行目に含まれる要素701の中から一つの要素を選択する。ここでは、2列目の要素701が選択されたものとする。
 重複排除部211は、送信データブロック情報220を参照して、ファイル名801がp6であるエントリを検索し、検索されたエントリを削除する。
 重複排除部211は、312行目の2列目の要素701のハッシュ値Xに変数βを設定し、また、ポインタ値Pに式(3)を用いて算出された値を設定する。また、重複排除部211は、送信データブロック情報220にエントリを追加し、追加されたエントリのファイル名801に式(3)を用いて算出された値を設定し、データブロック802にデータブロック「012...9」を設定する。
 二つのデータブロックを例に、送信検索インデックス218及び送信データブロック情報220の使用方法について説明した。なお、受信検索インデックス219及び受信データブロック情報221の使用方法も同様である。
 実施例1によれば、転送装置110は、送信検索インデックス218及び受信検索インデックス219を用いることによって、二次記憶装置203に格納される送信データブロック情報220及び受信データブロック情報221にアクセスすることなくデータブロックを保持しているか否かを判定できる。
 特に、dedup.hash2 514(変数β)のサイズを大きくすることによって、ハッシュ値の衝突を回避することができるため、転送装置110は、送信検索インデックス218及び受信検索インデックス219のみを用いてデータブロックを検索することができる。
 また、送信検索インデックス218及び受信検索インデックス219は、送信データブロック情報220及び受信データブロック情報221よりサイズを小さくできるため、主記憶装置202に送信検索インデックス218及び受信検索インデックス219を格納することができる。
 したがって、転送装置110は、送信検索インデックス218及び受信検索インデックス219を用いて、データブロックの重複排除及び重複復元を高速に行うことができる。これによって、データ転送処理の高速化を実現することができる。
 実施例2では、データブロックの分割方法が実施例1と異なる。以下、実施例1との差異を中心に実施例2について説明する。なお、実施例1と同一の構成、同一の処理には、同一の符号を付し、説明を省略する。
 実施例2のネットワークシステムの構成は、実施例1のネットワークシステムの構成と同一であるため説明を省略する。
 図20は、実施例2の転送装置110のハードウェア構成及びソフトウェア構成の一例を示す図である。図21は、実施例2の転送装置110のソフトウェア構成の論理的な接続関係を示す図である。
 実施例2の転送装置110のハードウェア構成は、実施例1の転送装置110のハードウェア構成と同一であるため説明を省略する。
 実施例2の転送装置110の主記憶装置202は、副検索インデックス2001を格納する。副検索インデックス2001は、送信データブロック情報220に格納されるデータブロックを検索する場合に使用されるインデックスである。副検索インデックス2001の詳細は、図24を用いて説明する。
 実施例2のフロー情報217のデータ構造は、実施例1のフロー情報217のデータ構造と異なる。実施例2のフロー情報217の詳細は、図22を用いて説明する。
 実施例2のデータ分割部215は、実施例1とは異なる方法を用いてデータブロックを生成する。データ分割部215が生成するデータブロックについて、図23を用いて説明する。
 実施例2の転送制御部213が実行する処理は、実施例1の転送制御部213が実行する処理と一部異なる。異なる処理については、図25を用いて説明する。実施例2の重複排除部211が実行する処理は、実施例1の重複排除部211が実行する処理と一部異なる。異なる処理については、図26及び図27を用いて説明する。また、実施例2の重複排除部211は、第1ハッシュ関数及び第2ハッシュ関数の他に、第3ハッシュ関数を保持する。
 その他の情報及び機能部が実行する処理は、実施例1と同一である。
 図22は、実施例2のフロー情報217の一例を示す図である。
 フロー情報217に含まれるエントリは、head2201を含む。head2201は、バッファ607に格納されるデータの先頭がデータブロックの先頭であるか否かを示す情報であり、初期値は「NO」である。エントリに含まれるその他のカラムは実施例1と同一である。
 図23は、実施例2のデータの分割方法の概念を示す図である。
 実施例2では、LAN140を介して受信したデータは、固定長のデータブロックに分割される。図23では、i番目のデータブロックの識別情報をMiと記載している。
 さらに、実施例2では、一つのデータブロックが、固定長の副データブロックに分割される。転送装置110は、副データブロックの場所を検索するためのインデックスとして、副検索インデックス2001を保持する。
 図24は、実施例2の副検索インデックス2001の一例を示す図である。
 副検索インデックス2001は、2次元配列のデータ構造である。図24では、N行4列の2次元配列となっている。なお、行及び列の数は一例であって、任意の値に設定できる。
 2次元配列の一つの要素2401には、ハッシュ値XX及び添字Iが含まれる。ハッシュ値XXは、第3ハッシュ関数にデータブロックを入力することによって算出されるハッシュ値である。ハッシュ値XXは、データブロックが送信データブロック情報220に格納されているか否かを判定する場合に使用される。添字Iは、データブロックの先頭から何番目の副データブロックであるかを示す値である。
 図25は、実施例2の転送制御部213がLAN140からデータを受信した場合に実行する処理を説明するフローチャートである。
 転送制御部213は、ステップS1002の処理が完了した後、特定されたエントリのバッファ607に格納されるデータの先頭がデータブロックの先頭であるか否かを判定する(ステップS2501)。
 具体的には、転送制御部213は、特定されたエントリのhead2201が「YES」であるか否かを判定する。head2201が「YES」である場合、転送制御部213は、特定されたエントリのバッファ607に格納されるデータの先頭がデータブロックの先頭であると判定する。
 特定されたエントリのバッファ607に格納されるデータの先頭がデータブロックの先頭であると判定された場合、転送制御部213は、データ分割部215を呼び出す(ステップS1003)。このとき、転送制御部213は、受け取ったデータをデータ分割部215に出力する。その後、転送制御部213は、処理を終了する。
 特定されたエントリのバッファ607に格納されるデータの先頭がデータブロックの先頭ではないと判定された場合、転送制御部213は、特定されたエントリのバッファ607に格納されるデータのサイズが比較ブロックサイズ以上であるか否かを判定する(ステップS2502)。なお、比較ブロックサイズは、予め設定されているものとする。
 特定されたエントリのバッファ607に格納されるデータのサイズが比較ブロックサイズより小さいと判定された場合、転送制御部213は、特定されたエントリのバッファ607にデータが残っているか否かを判定する(ステップS2503)。
 特定されたエントリのバッファ607にデータが残っていると判定された場合、転送制御部213は、当該エントリのタイマ608に任意の時間を設定する(ステップS2504)。その後、転送制御部213は、処理を終了する。
 特定されたエントリのバッファ607にデータが残っていないと判定された場合、転送制御部213は、当該エントリのタイマ608に「0」を設定する(ステップS2505)。その後、転送制御部213は、処理を終了する。
 ステップS2502において、特定されたエントリのバッファ607に格納されるデータのサイズが比較ブロックサイズ以上であると判定された場合、転送制御部213は、重複排除部211に副データブロックの検出指示を出力する(ステップS2506)。転送制御部213は、重複排除部211から応答を受け取るまで待ち状態に移行する。なお、副データブロックの検索処理は、図26を用いて説明する。
 転送制御部213は、重複排除部211から受け取った応答に基づいて、特定されたエントリのバッファ607に格納されるデータに副データブロックが存在するか否かを判定する(ステップS2507)。
 具体的には、転送制御部213は、重複排除部211からの応答が「該当データ無し」であるか否かを判定する。重複排除部211からの応答が「該当データ無し」である場合、転送制御部213は、特定されたエントリのバッファ607に格納されるデータに副データブロックが存在すると判定する。
 特定されたエントリのバッファ607に格納されるデータに副データブロックが存在すると判定された場合、転送制御部213は、副データブロックを含むデータブロックを特定し、特定されたエントリのバッファ607に格納されるデータの先頭から当該データブロックの手前までのデータを削除し、符号化されたデータを出力するとともに、特定されたエントリのhead2201を「YES」に更新する(ステップS2508)。その後、転送制御部213は、ステップS1003に進む。具体的には、以下のような処理が実行される。
 転送制御部213は、重複排除部211を介して、検索された副データブロックの識別情報(添字I)に基づいて、特定されたエントリのバッファ607に格納されるデータにおける、データブロックの先頭を特定する。
 転送制御部213は、重複排除部211にデータブロックの符号化を指示する。転送制御部213は、重複排除部211から符号化されたデータを取得するまで待ち状態に移行する。当該指示には、特定されたエントリのバッファ607に格納されるデータが含まれる。以下では、バッファ607に格納されるデータの先頭から当該データブロックの手前までのデータを対象データと記載する。
 重複排除部211は、当該指示を受け付けた場合、dedup.type511に「3」を設定し、dedup.data_len512に対象データの長さを設定し、dedup.hash1 513及びdedup.hash2 514にダミーの値として「0」を設定することによってDedupヘッダ510を生成する。また、重複排除部211は、Dedupペイロード520に対象データを設定する。以上がステップS2508の処理の説明である。
 特定されたエントリのバッファ607に格納されるデータに副データブロックが存在しないと判定された場合、転送制御部213は、特定されたエントリのバッファ607に格納されるデータから比較ブロックサイズ分のデータを削除し、符号化されたデータを出力する(ステップS2509)。
 ステップS2509の処理は、ステップS2508の処理と同様の処理である。ただし、Dedupペイロード520にはバッファ607から削除されたデータが含まれ、また、特定されたエントリのhead2201は更新されない。
 比較ブロックサイズは、副データブロックのサイズより大きい値が設定される。比較ブロックサイズが大きい場合、処理の負荷が軽くなるため、データの分割を高速に行うことができる。一方、比較ブロックサイズが大きい場合、重複排除されるデータの割合が小さくなる。
 図26は、実施例2の重複排除部211が転送制御部213から副データブロックの検出指示を受け付けた場合に実行する処理を説明するフローチャートである。
 重複排除部211は、転送制御部213から副データブロックの検出指示を受け付けた場合、特定されたエントリのバッファ607に格納されるデータを取得する(ステップS2601)。
 重複排除部211は、変数Sに「1」を設定し(ステップS2602)、また、データの先頭に所定のサイズのウインドウを配置する(ステップS2603)。データ分割部215は、ウインドウに含まれるデータのハッシュ値を算出する(ステップS2604)。
 具体的には、データ分割部215は、変数αと同様の手順に基づいてハッシュ値SAを算出し、第3ハッシュ関数にデータを入力することによってハッシュ値SCを算出する。なお、ウインドウのサイズは、副データブロックのサイズと同一のものとする。
 次に、重複排除部211は、副検索インデックス2001を参照し(ステップS2605)、ハッシュ値XXがハッシュ値SCに一致する要素2401が存在するか否かを判定する(ステップS2606)。
 具体的には、重複排除部211は、SA行目の行に含まれる各要素2401に格納されるハッシュ値XXと、ハッシュ値SCとを比較する。
 ハッシュ値XXがハッシュ値SCに一致する要素2401が存在すると判定された場合、重複排除部211は、転送制御部213に、当該要素2401に含まれる添字Iを応答として出力する(ステップS2607)。その後、重複排除部211は処理を終了する。
 ハッシュ値XXがハッシュ値SCに一致する要素2401が存在しないと判定された場合、重複排除部211は、変数Sが閾値以上であるか否かを判定する(ステップS2608)。閾値は任意に設定できる。
 変数Sが閾値以上であると判定された場合、重複排除部211は、転送制御部213に、「該当データ無し」を応答として出力する(ステップS2609)。
 変数Sが閾値より小さいと判定された場合、重複排除部211は、変数Sに「1」を加算し(ステップS2610)、また、ウインドウをデータの後方にスライドさせる(ステップS2611)。その後、重複排除部211は、ステップS2604に戻る。例えば、重複排除部211は、ウインドウを1バイト分だけ後方にスライドさせる。
 図27は、実施例2の重複排除部211が転送制御部213によって呼び出された場合に実行する処理を説明するフローチャートである。
 実施例2では、重複排除部211は、ステップS1508の処理が完了した後、副検索インデックス2001を更新する(ステップS2701)。その後、重複排除部211は、ステップS1509に進む。具体的には、以下のような処理が実行される。
 重複排除部211は、データブロックに含まれる副データブロックの中から、対象の副データブロックを選択し、当該副データブロックを第1ハッシュ関数及び第2ハッシュ関数に入力し、ハッシュ値Sa及びハッシュ値Scを算出する。
 重複排除部211は、副検索インデックス2001を参照し、Sa行目に含まれる要素2401に空の要素2401が存在するか否かを判定する。
 Sa行目に含まれる要素2401に空の要素2401が存在する場合、重複排除部211は、空きの要素2401のハッシュ値XXにハッシュ値Scを格納し、添字Iにデータブロックにおける対象の副データブロックの位置を示す値を格納する。
 Sa行目に含まれる要素2401に空の要素2401が存在しない場合、重複排除部211は、所定のアルゴリズムに基づいて、Sa行目に含まれる要素2401の中から値を設定する要素2401を一つ選択する。重複排除部211は、選択された要素2401のハッシュ値XXにハッシュ値Scを格納し、添字Iにデータブロックにおける対象の副データブロックの位置を示す値を格納する。以上がステップS2701の処理の説明である。
 実施例2によれば、実施例1と同様にデータ転送処理の高速化を実現することができる。また、実施例2によれば、転送装置110は、比較ブロックサイズの間隔をあけながら副データブロックを用いて、データブロックの境界をバイト単位で調べることができる。データ全体に対してデータブロックの境界を特定する処理が転送処理の速度を律速する場合、比較ブロックサイズのサイズを大きくすることによって、データブロックの境界を特定する処理を間引くことができる。
 また、データブロックサイズと独立したパラメータである比較ブロックサイズを用いることによって、バイト単位のデータブロックの境界の特定処理の間引き方を調整できる。データブロックサイズを小さくした場合、データブロックが一致する可能性が高まるため重複排除の効果を高めることができ、比較ブロックサイズを大きくした場合、バイト単位のデータブロックの境界の特定処理が間引かれるため処理を高速化できる。
 請求の範囲に記載した以外の発明の観点の代表的なものとして、次のものがあげられる。
(1)端末間で送受信されるデータを転送する複数の転送装置を備えるネットワークシステムであって、
 前記複数の転送装置の各々は、
 前記端末間のデータの転送処理を制御する転送制御部を有し、
 データを分割することによって生成されるデータブロックであって、前記端末間で過去に送信されたデータブロックを管理するデータブロック情報と、前記データブロック情報に格納される前記データブロックを検索するための識別情報を管理する検索インデックスと、を保持し、
 前記複数の転送装置は、第1検索インデックス及び第1データブロック情報を保持する第1転送装置、並びに、第2検索インデックス及び第2データブロック情報を保持する第2転送装置を含み、
 前記第1転送装置は、
 前記第1転送装置に接続する端末から送信データを受信した場合、前記送信データから前記データブロックを生成するための分割処理を実行し、
 前記分割処理によって生成された第1データブロックから、前記検索インデックスを参照するための第1識別情報を算出し、
 前記第1識別情報に基づいて前記第1検索インデックスを参照して、前記第1データブロックが前記第1データブロック情報に格納されているか否かを判定し、
 前記第1データブロックが前記第1データブロック情報に格納されていないと判定された場合、前記第1識別情報及び前記第1データブロックを前記第2転送装置に送信し、
 前記第2転送装置は、
 前記第1識別情報及び前記第1データブロックを受信した場合、前記第2検索インデックスに前記第1識別情報を格納し、前記第2データブロック情報に前記第1データブロックを格納し、
 前記第1転送装置に応答を送信し、
 前記第1転送装置は、前記第2転送装置からの応答を受信した場合、前記第1検索インデックスに前記第1識別情報を格納し、前記第1データブロック情報に前記第1データブロックを格納することを特徴とするネットワークシステム。
 なお、本発明は上記した実施例に限定されるものではなく、様々な変形例が含まれる。また、例えば、上記した実施例は本発明を分かりやすく説明するために構成を詳細に説明したものであり、必ずしも説明した全ての構成を備えるものに限定されるものではない。また、実施例の構成の一部について、他の構成に追加、削除、置換することが可能である。
 また、上記の各構成、機能、処理部、処理手段等は、それらの一部又は全部を、例えば集積回路で設計する等によりハードウェアで実現してもよい。また、本発明は、実施例の機能を実現するソフトウェアのプログラムコードによっても実現できる。この場合、プログラムコードを記録した記憶媒体をコンピュータに提供し、そのコンピュータが備えるCPUが記憶媒体に格納されたプログラムコードを読み出す。この場合、記憶媒体から読み出されたプログラムコード自体が前述した実施例の機能を実現することになり、そのプログラムコード自体、及びそれを記憶した記憶媒体は本発明を構成することになる。このようなプログラムコードを供給するための記憶媒体としては、例えば、フレキシブルディスク、CD-ROM、DVD-ROM、ハードディスク、SSD(Solid State Drive)、光ディスク、光磁気ディスク、CD-R、磁気テープ、不揮発性のメモリカード、ROMなどが用いられる。
 また、本実施例に記載の機能を実現するプログラムコードは、例えば、アセンブラ、C/C++、perl、Shell、PHP、Java等の広範囲のプログラム又はスクリプト言語で実装できる。
 さらに、実施例の機能を実現するソフトウェアのプログラムコードを、ネットワークを介して配信することによって、それをコンピュータのハードディスクやメモリ等の記憶手段又はCD-RW、CD-R等の記憶媒体に格納し、コンピュータが備えるCPUが当該記憶手段や当該記憶媒体に格納されたプログラムコードを読み出して実行するようにしてもよい。
 上述の実施例において、制御線や情報線は、説明上必要と考えられるものを示しており、製品上必ずしも全ての制御線や情報線を示しているとは限らない。全ての構成が相互に接続されていてもよい。

Claims (12)

  1.  端末間で送受信されるデータを転送する転送装置であって、
     前記転送装置は、プロセッサ、前記プロセッサに接続される主記憶装置、前記プロセッサに接続される副記憶装置、及び前記プロセッサに接続されるネットワークインタフェースを備え、
     前記端末間のデータの転送処理を制御する転送制御部を有し、
     データを分割することによって生成されるデータブロックであって、前記端末間で過去に送信されたデータブロックを管理するデータブロック情報と、前記データブロック情報に格納される前記データブロックを検索するための検索インデックスと、を保持し、
     前記検索インデックスは、前記データブロックから算出された比較値及び前記データブロック情報に格納される前記データブロックへアクセスするためのポインタ値の組から構成される要素を複数含み、
     前記データブロック情報は、前記ポインタ値及び前記データブロックから構成されるエントリを複数含み、
     前記転送制御部は、
     前記端末からデータを受信した場合、前記データから前記データブロックを生成するための分割処理を実行し、
     前記分割処理によって生成された第1データブロックから、前記検索インデックスを参照するための検索値及び参照値を算出し、
     前記参照値に基づいて、前記検索インデックスに含まれる複数の要素の中から参照する少なくとも一つの要素を特定し、
     前記特定された少なくとも一つの要素に含まれる前記比較値と前記検索値とを比較することによって、前記第1データブロックが前記データブロック情報に格納されているか否かを判定し、
     前記第1データブロックが前記データブロック情報に格納されていると判定された場合、前記第1データブロックの識別情報を外部装置に送信し、
     前記第1データブロックが前記データブロック情報に格納されていないと判定された場合、前記第1データブロックの識別情報及び前記第1データブロックを外部装置に送信することを特徴とする転送装置。
  2.  請求項1に記載の転送装置であって、
     前記検索インデックスは、前記主記憶装置に格納され、
     前記データブロック情報は、前記副記憶装置に格納され、
     前記比較値及び前記検索値は、ハッシュ値であり、
     前記転送制御部は、第1ハッシュ関数及び第2ハッシュ関数を保持し、
     前記第1ハッシュ関数及び前記第1データブロックを用いて前記参照値を算出し、
     前記第2ハッシュ関数及び前記第1データブロックを用いて前記検索値を算出し、
     前記検索値及び前記参照値を前記第1データブロックの識別情報として送信し、
     前記検索値が前記比較値と一致する場合、前記第1データブロックが前記データブロック情報に格納されると判定することを特徴とする転送装置。
  3.  請求項2に記載の転送装置であって、
     前記転送制御部は、
     前記第1データブロックが前記データブロック情報に格納されていないと判定された場合、前記検索値及び前記参照値を用いて前記ポインタ値を算出し、
     前記参照値に基づいて前記検索インデックスを参照して、値を設定する要素を一つ選択し、
     前記選択された要素に、前記検索値及び前記算出されたポインタ値を設定し、
     前記データブロック情報にエントリを追加し、
     前記追加されたエントリに、前記算出されたポインタ値及び前記第1データブロックを格納することを特徴とする転送装置。
  4.  請求項3に記載の転送装置であって、
     前記主記憶装置は、前記データブロックを一時的に格納するバッファを含み、
     前記転送制御部は、
     前記第1データブロックを前記バッファに格納し、
     前記第1データブロックの識別情報を送信した後、前記第1データブロックの送信を要求するデータブロック要求を受信した場合、前記バッファに格納される前記第1データブロックを前記外部装置に送信し、
     前記第1データブロックの識別情報を送信した後、当該第1データブロックの転送完了を通知する応答を受信した場合、前記バッファから前記第1データブロックを削除することを特徴とする転送装置。
  5.  端末間で送受信されるデータを転送する転送装置であって、
     前記転送装置は、プロセッサ、前記プロセッサに接続される主記憶装置、前記プロセッサに接続される副記憶装置、及び前記プロセッサに接続されるネットワークインタフェースを備え、
     前記端末間のデータの転送処理を制御する転送制御部を有し、
     データを分割することによって生成されるデータブロックであって、前記端末間で過去に送信されたデータブロックを管理するデータブロック情報と、前記データブロック情報に格納される前記データブロックを検索するための検索インデックスと、を保持し、
     前記検索インデックスは、前記データブロックから算出された比較値及び前記データブロック情報に格納される前記データブロックへアクセスするためのポインタ値の組から構成される要素を複数含み、
     前記データブロック情報は、前記ポインタ値及び前記データブロックから構成されるエントリを複数含み、
     前記転送制御部は、
     前記検索インデックスを参照するための検索値及び参照値を含む前記データブロックの識別情報を受信した場合、前記参照値に基づいて前記検索インデックスを参照して、前記検索インデックスに含まれる複数の要素の中から参照する要素を特定し、
     前記特定された要素に含まれる比較値と前記検索値とを比較することによって、前記受信したデータブロックの識別情報に対応するデータブロックが前記データブロック情報に格納されているか否かを判定し、
     前記受信したデータブロックの識別情報に対応するデータブロックが前記データブロック情報に格納されていると判定された場合、前記データブロック情報から前記受信したデータブロックの識別情報に対応するデータブロックを読み出し、当該データブロックを外部装置に送信し、
     前記受信したデータブロックの識別情報に対応するデータブロックが前記データブロック情報に格納されていないと判定された場合、前記受信したデータブロックの識別情報に対応するデータブロックの送信を要求するデータブロック要求を外部装置に送信することを特徴とする転送装置。
  6.  請求項5に記載の転送装置であって、
     前記検索インデックスは、前記主記憶装置に格納され、
     前記データブロック情報は、前記副記憶装置に格納され、
     前記転送制御部は、
     前記データブロック、並びに、前記検索値及び前記参照値を含む前記データブロックの識別情報を受信した場合、前記検索値及び前記参照値を用いて前記ポインタ値を算出し、
     前記参照値に基づいて前記検索インデックスを参照して、値を設定する要素を選択し、
     前記選択された要素に、前記検索値及び前記算出されたポインタ値を設定し、
     前記データブロック情報にエントリを追加し、
     前記追加されたエントリに、前記算出されたポインタ値及び前記受信したデータブロックを格納することを特徴とする転送装置。
  7.  端末間で送受信されるデータを転送する複数の転送装置を備えるネットワークシステムであって、
     前記複数の転送装置の各々は、
     プロセッサ、前記プロセッサに接続される主記憶装置、前記プロセッサに接続される副記憶装置、及び前記プロセッサに接続されるネットワークインタフェースを有し、
     前記端末間のデータの転送処理を制御する転送制御部を有し、
     データを分割することによって生成されるデータブロックであって、前記端末間で過去に送信されたデータブロックを管理するデータブロック情報と、前記データブロック情報に格納される前記データブロックを検索するための検索インデックスと、を保持し、
     前記検索インデックスは、前記データブロックから算出された比較値及び前記データブロック情報に格納される前記データブロックへアクセスするためのポインタ値の組から構成される要素を複数含み、
     前記データブロック情報は、前記ポインタ値及び前記データブロックから構成されるエントリを複数含み、
     前記複数の転送装置は、第1検索インデックス及び第1データブロック情報を保持する第1転送装置、並びに、第2検索インデックス及び第2データブロック情報を保持する第2転送装置を含み、
     前記第1転送装置は、
     前記第1転送装置に接続する端末から送信データを受信した場合、前記送信データから前記データブロックを生成するための分割処理を実行し、
     前記分割処理によって生成された第1データブロックから、前記検索インデックスを参照するための検索値と参照値を算出し、
     前記参照値に基づいて、前記第1検索インデックスに含まれる複数の要素の中から参照する少なくとも一つの要素を特定し、
     前記特定された少なくとも一つの要素に含まれる前記比較値と前記検索値とを比較することによって、前記第1データブロックが前記第1データブロック情報に格納されているか否かを判定し、
     前記第1データブロックが前記第1データブロック情報に格納されていると判定された場合、前記検索値及び前記参照値を前記第1データブロックの識別情報として前記第2転送装置に送信し、
     前記第2転送装置は、
     前記第1データブロックの識別情報を受信した場合、前記参照値に基づいて、前記第2検索インデックスに含まれる複数の要素の中から参照する少なくとも一つの要素を特定し、
     前記特定された少なくとも一つの要素に含まれる前記比較値と前記第1データブロックの識別情報に含まれる前記検索値とを比較することによって、前記第1データブロックが前記第2データブロック情報に格納されているか否かを判定し、
     前記第1データブロックが前記第2データブロック情報に格納されていると判定された場合、前記第2データブロック情報から前記第1データブロックを読み出して、前記第1データブロックを前記第2転送装置に接続される端末に送信し、
     前記第1データブロックが前記第2データブロック情報に格納されていないと判定された場合、前記第1データブロックの送信を要求するデータブロック要求を前記第1転送装置に送信することを特徴とするネットワークシステム。
  8.  請求項7に記載のネットワークシステムであって、
     前記検索インデックスは、前記主記憶装置に格納され、
     前記データブロック情報は、前記副記憶装置に格納され、
     前記第1転送装置は、前記第1データブロックが前記第1データブロック情報に格納されていないと判定された場合、又は、前記データブロック要求を受信した場合、前記第1データブロックの識別情報及び前記第1データブロックを前記第2転送装置に送信することを特徴とするネットワークシステム。
  9.  請求項8に記載のネットワークシステムであって、
     前記第1転送装置は、
     第1ハッシュ関数及び第2ハッシュ関数を保持し、
     前記第1ハッシュ関数及び前記第1データブロックを用いて前記参照値を算出し、
     前記第2ハッシュ関数及び前記第1データブロックを用いて前記検索値を算出し、
     前記検索値が前記比較値と一致する場合、前記第1データブロックが前記データブロック情報に格納されると判定することを特徴とするネットワークシステム。
  10.  請求項9に記載のネットワークシステムであって、
     前記第1転送装置は、
     前記第1データブロックが前記データブロック情報に格納されていないと判定された場合、前記検索値及び前記参照値を用いて前記ポインタ値を算出し、
     前記参照値に基づいて前記検索インデックスを参照して、値を設定する要素を一つ選択し、
     前記選択された要素に、前記検索値及び前記算出されたポインタ値を設定し、
     前記データブロック情報にエントリを追加し、
     前記追加されたエントリに、前記算出されたポインタ値及び前記第1データブロックを格納することを特徴とするネットワークシステム。
  11.  請求項10に記載のネットワークシステムであって、
     前記第1転送装置が有する前記主記憶装置は、前記データブロックを一時的に格納するバッファを含み、
     前記第2転送装置は、前記第2転送装置に接続される端末に前記第1データブロックを送信した後、前記第1データブロックの転送完了を通知する応答を前記第1転送装置に送信し、
     前記第1転送装置は、
     前記第1データブロックを前記バッファに格納し、
     前記第1データブロックの識別情報を送信した後、前記第2転送装置から前記データブロック要求を受信した場合、前記バッファに格納される前記第1データブロックを前記第2転送装置に送信し、
     前記第1データブロックの識別情報を送信した後、前記第2転送装置から前記第1データブロックの転送完了を通知する応答を受信した場合、前記バッファから前記第1データブロックを削除することを特徴とするネットワークシステム。
  12.  請求項8に記載のネットワークシステムであって、
     前記第2転送装置は、
     前記第1データブロック及び前記第1データブロックの識別情報を受信した場合、前記検索値及び前記参照値を用いて前記ポインタ値を算出し、
     前記参照値に基づいて前記検索インデックスを参照して、値を設定する要素を選択し、
     前記選択された要素に、前記検索値及び前記算出されたポインタ値を設定し、
     前記データブロック情報にエントリを追加し、
     前記追加されたエントリに、前記算出されたポインタ値及び前記第1データブロックを格納することを特徴とするネットワークシステム。
PCT/JP2016/074632 2016-08-24 2016-08-24 転送装置及びネットワークシステム WO2018037495A1 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2018535971A JP6730437B2 (ja) 2016-08-24 2016-08-24 転送装置及びネットワークシステム
PCT/JP2016/074632 WO2018037495A1 (ja) 2016-08-24 2016-08-24 転送装置及びネットワークシステム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/JP2016/074632 WO2018037495A1 (ja) 2016-08-24 2016-08-24 転送装置及びネットワークシステム

Publications (1)

Publication Number Publication Date
WO2018037495A1 true WO2018037495A1 (ja) 2018-03-01

Family

ID=61246648

Family Applications (1)

Application Number Title Priority Date Filing Date
PCT/JP2016/074632 WO2018037495A1 (ja) 2016-08-24 2016-08-24 転送装置及びネットワークシステム

Country Status (2)

Country Link
JP (1) JP6730437B2 (ja)
WO (1) WO2018037495A1 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2019205897A1 (zh) * 2018-04-23 2019-10-31 华为技术有限公司 一种数据传输方法及相关设备

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2004096692A (ja) * 2002-09-04 2004-03-25 Matsushita Electric Ind Co Ltd ハッシュによる可変長符号化装置および方法
JP2006505215A (ja) * 2002-10-30 2006-02-09 リバーベッド テクノロジー インコーポレーティッド クライアント−サーバ通信システムのトランザクション・アクセルレータ
WO2016121024A1 (ja) * 2015-01-28 2016-08-04 富士通株式会社 通信方法、プログラム及び通信装置

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2004096692A (ja) * 2002-09-04 2004-03-25 Matsushita Electric Ind Co Ltd ハッシュによる可変長符号化装置および方法
JP2006505215A (ja) * 2002-10-30 2006-02-09 リバーベッド テクノロジー インコーポレーティッド クライアント−サーバ通信システムのトランザクション・アクセルレータ
WO2016121024A1 (ja) * 2015-01-28 2016-08-04 富士通株式会社 通信方法、プログラム及び通信装置

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2019205897A1 (zh) * 2018-04-23 2019-10-31 华为技术有限公司 一种数据传输方法及相关设备
US11476977B2 (en) 2018-04-23 2022-10-18 Huawei Technologies Co., Ltd. Data transmission method and related device

Also Published As

Publication number Publication date
JP6730437B2 (ja) 2020-07-29
JPWO2018037495A1 (ja) 2019-01-10

Similar Documents

Publication Publication Date Title
US10534547B2 (en) Consistent transition from asynchronous to synchronous replication in hash-based storage systems
WO2013175909A1 (ja) データ解凍/圧縮装置
US8972358B2 (en) File storage apparatus, file storage method, and program
JP7105870B2 (ja) データアクセス方法、装置およびシステム
US11232073B2 (en) Method and apparatus for file compaction in key-value store system
CN102782643A (zh) 使用布隆过滤器的索引搜索
EP3128716B1 (en) Data processing method and apparatus
WO2016202222A1 (zh) 一种随机存取存储器的访问方法、装置及控制芯片、存储介质
EP2960800B1 (en) Wireless access device and wireless access system
WO2015042909A1 (zh) 一种数据处理方法、系统及客户端
JP6164042B2 (ja) 中継装置、中継方法、中継プログラム、および中継システム
CN112749145A (zh) 存储和访问数据的方法、设备和计算机程序产品
US11226778B2 (en) Method, apparatus and computer program product for managing metadata migration
US10437849B2 (en) Method and apparatus for implementing storage of file in IP disk
WO2018037495A1 (ja) 転送装置及びネットワークシステム
CN109417507A (zh) 部分延迟的报文访问
US10185783B2 (en) Data processing device, data processing method, and non-transitory computer readable medium
KR20170006742A (ko) 소프트웨어 라우터, 그 소프트웨어 라우터에서의 라우팅 테이블 검색 방법 및 라우팅 엔트리 갱신 방법
JP6113816B1 (ja) 情報処理システム、情報処理装置、及びプログラム
CN110896408B (zh) 一种数据处理方法及服务器集群
US20230283292A1 (en) System and method for data compaction and security with extended functionality
US10469581B2 (en) File storage protocols header transformation in RDMA operations
JP2018511131A (ja) オンライン媒体のための階層的なコストベースのキャッシング
CN112241336A (zh) 用于备份数据的方法、设备和计算机程序产品
US20160085683A1 (en) Data receiving device and data receiving method

Legal Events

Date Code Title Description
WWE Wipo information: entry into national phase

Ref document number: 2018535971

Country of ref document: JP

121 Ep: the epo has been informed by wipo that ep was designated in this application

Ref document number: 16914169

Country of ref document: EP

Kind code of ref document: A1

NENP Non-entry into the national phase

Ref country code: DE

122 Ep: pct application non-entry in european phase

Ref document number: 16914169

Country of ref document: EP

Kind code of ref document: A1