(57)【要約】【課題】キャッシュの使用効率を改善する。【解決手段】通信装置は、記憶部、通信部、特定部を備える。記憶部は、通信先への送信履歴の無い送信データの一部である第１の分割データを、送信データを識別する識別情報に対応付けて記憶する。通信部は、送信データと第１の分割データを特定する情報の組み合わせを含む送信パケットを送信することにより、送信データのうち第１の分割データに含まれないデータである第２の分割データを識別情報に対応付けて通信先に記憶させる。特定部は、送信パケットの送信後は、送信データの代わりに、識別情報と第１の分割データを通信先への送信対象として特定する。【選択図】図２
2018113645.tif 000002
【特許請求の範囲】
【請求項１】
通信先への送信履歴の無い送信データの一部である第１の分割データを、前記送信データを識別する識別情報に対応付けて記憶する記憶部と、
前記送信データと前記第１の分割データを特定する情報の組み合わせを含む送信パケットを送信することにより、前記送信データのうち前記第１の分割データに含まれないデータである第２の分割データを前記識別情報に対応付けて前記通信先に記憶させる通信部と、
前記送信パケットの送信後は、前記送信データの代わりに、前記識別情報と前記第１の分割データを前記通信先への送信対象として特定する特定部
を備えることを特徴とする通信装置。
【請求項２】
前記送信データのうちで前記記憶部が記憶するデータを決定する決定部をさらに備え、
前記送信パケットの送信後に、前記決定部が前記送信データのうちで前記記憶部が記憶するデータを第３の分割データに決定すると、前記記憶部は、前記識別情報に対応付けて記憶するデータを、前記第１の分割データから第３の分割データに変更し、
前記通信部は、前記識別情報と前記第３の分割データを特定する情報の組み合わせを含む他の送信パケットを前記通信先に送信することにより、前記通信先に、前記送信データのうちで前記第３の分割データに含まれないデータである第４の分割データを前記識別情報に対応付けて記憶させる
ことを特徴とする請求項１に記載の通信装置。
【請求項３】
前記記憶部は、前記通信先に記憶させるデータを調整する調整回数をさらに記憶し、
前記決定部は、前記通信先へ前記送信データの一部以上を送信した回数が前記調整回数を超えると、前記送信データのうちで前記通信先に記憶させるデータを変更しないと判定し、
前記特定部は、前記送信データを識別する識別情報と共に、前記識別情報に対応付けて前記記憶部に格納されているデータを、前記通信先に送信する対象として特定する
ことを特徴とする請求項２に記載の通信装置。
【請求項４】
前記記憶部は、他の通信装置から受信した受信データに含まれている他の識別情報に対応付けて、前記他の識別情報で識別されるデータのうち、前記他の通信装置が記憶していない領域のデータを記憶し、
前記他の識別情報を含むデータパケットを受信すると、前記データパケット中のデータと前記他の識別情報に対応付けて前記記憶部が格納しているデータを用いて、送信対象のデータを復元する復元処理部
をさらに備えることを特徴とする請求項１〜３のいずれか１項に記載の通信装置。
【請求項５】
第１の通信装置と、
前記第１の通信装置と通信する第２の通信装置
を備え、
前記第２の通信装置は、
前記第１の通信装置への送信履歴の無い送信対象である対象データの一部である第１の分割データを、前記対象データを識別する識別情報に対応付けて記憶し、
前記対象データと前記第１の分割データを特定する情報の組み合わせを含む送信パケットを、前記第１の通信装置へ送信し、
前記第１の通信装置は、前記対象データのうち前記第１の分割データに含まれないデータである第２の分割データを前記識別情報に対応付けて記憶し、
前記第２の通信装置は、前記送信パケットの送信後は、前記対象データの代わりに、前記識別情報と前記第１の分割データを前記第１の通信装置へ送信する
ことを特徴とする通信システム。
【請求項６】
第１の通信装置と、前記第１の通信装置と通信する第２の通信装置を含むネットワークにおいて、
前記第２の通信装置は、
前記第１の通信装置への送信履歴の無い送信対象である対象データの一部である第１の分割データを、前記対象データを識別する識別情報に対応付けて記憶し、
前記対象データと前記第１の分割データを特定する情報の組み合わせを含む送信パケットを、前記第１の通信装置へ送信し、
前記第１の通信装置は、前記対象データのうち前記第１の分割データに含まれないデータである第２の分割データを前記識別情報に対応付けて記憶し、
前記第２の通信装置は、前記送信パケットの送信後は、前記対象データの代わりに、前記識別情報と前記第１の分割データを前記第１の通信装置へ送信する
ことを特徴とする通信方法。
【請求項７】
通信先への送信履歴の無い送信データの一部である第１の分割データを、前記送信データを識別する識別情報に対応付けて記憶し、
前記送信データと前記第１の分割データを特定する情報の組み合わせを含む送信パケットを送信することにより、前記送信データのうち前記第１の分割データに含まれないデータである第２の分割データを前記識別情報に対応付けて前記通信先に記憶させ、
前記送信パケットの送信後は、前記送信データの代わりに、前記識別情報と前記第１の分割データを前記通信先への送信対象として特定する
処理を通信装置に行わせることを特徴とする通信プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、通信装置、通信システム、通信方法、および、通信プログラムに関する。
【背景技術】
【０００２】
近年、通信の高速化が求められてきており、通信速度を高速化するために様々な試みが行われてきている。例えば、データの送信量を減らすために、送信対象のデータに対して重複除去が行われることがある。重複除去では、受信側の転送装置が、過去に送信側の転送装置から受信したデータを、識別子に対応付けて記憶しており、送信側の転送装置も過去に送信したデータと識別子を対応付けて記憶している。送信側の転送装置は、送信対象のデータの一部または全部が既に送信したことがあるデータであるかを判定し、既に送信したことがあるデータについては、実際のデータの代わりに、そのデータに対応付けられた識別子を受信側の転送装置に送信する。受信側の転送装置は、受信した識別子に対応付けて記憶しているデータを読み出し、読み出したデータを送信側の転送装置から送信されたデータとして扱う。
【０００３】
図１は、重複除去の例を説明する図である。図１に示すシステムでは、端末１０ａと端末１０ｂが、転送装置５ａと転送装置５ｂを介して通信する。端末１０ａは転送装置５ａに接続されており、端末１０ｂは転送装置５ｂに接続されている。さらに、転送装置５ａと転送装置５ｂは、ＷＡＮ（Wide Area Network）３を介して通信する。
【０００４】
例えば、端末１０ａが端末１０ｂにデータＡを送信しようとしたとする。この場合、端末１０ａは、転送装置５ａにデータＡを送信する（矢印Ａ１）。転送装置５ａは、端末１０ａから受信した送信データが過去に送信したことがあるデータであるかを判定する。ここで、端末１０ａから送信されたデータが比較的大きい場合、転送装置５ａは、受信したデータを適宜、複数のデータに区切り、過去に送信したことがあるデータや送信データ中に複数回含まれるデータを特定する。図１の例では、転送装置５ａと転送装置５ｂの間では、過去に、データＡ、データＢ、データＣを用いた通信が行われている。このため、転送装置５ａと転送装置５ｂのいずれも、データＡ、データＢ、データＣをキャッシュ６（６ａ、６ｂ）に、各データを識別する識別子に対応付けて記憶している。例えば、転送装置５ａと転送装置５ｂのいずれも、データＡを識別子ａに対応付けて記憶しているとする。同様に、データＢは識別子ｂ、データＣは識別子ｃと対応付けられているとする。
【０００５】
図１の例では、送信データがデータＡである。そこで、転送装置５ａは、データＡの代わりに、データＡに対応付けられている識別子ａを端末１０ｂに向けて送信する（矢印Ａ２）。このため、端末１０ｂ宛のデータとして識別子ａが転送装置５ｂに到達する（矢印Ａ３）。すると、転送装置５ｂは、キャッシュ６ｂを参照することにより、識別子ａに対応付けられたデータＡを取得し、端末１０ａから送信されたデータとして、データＡを端末１０ｂに送信する（矢印Ａ４）。
【０００６】
関連する技術として、第１装置から受信したデータのうち、過去に第１装置から受信したデータに重複する重複パターンをその重複パターンに対応付けられた識別子に置き換えて第２装置に転送する中継装置が知られている（例えば、特許文献１など）。また、データを送信する際にキャッシュデータとの差分データとキャッシュデータの識別子を送信するサーバも提案されている（例えば、特許文献２など）。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２０１５−８２２９６号公報
【特許文献２】特開２００７−２９９０１９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
双方向通信で重複除去を行う際には、送信側の転送装置と受信側の転送装置のいずれかから一度送信されたデータが、送信側の転送装置と受信側の転送装置の両方に保持されることになる。従って、ネットワーク全体では、重複除去の対象となるデータの大きさと転送装置の台数分の積と同じ容量が、重複除去を用いた通信のために使用されることになってしまい、ネットワーク中に含まれる装置が備えるキャッシュの使用効率が悪い。
【０００９】
本発明は、１つの側面では、キャッシュの使用効率を改善することを目的とする。
【課題を解決するための手段】
【００１０】
ある１つの態様にかかる通信装置は、記憶部、通信部、特定部を備える。記憶部は、通信先への送信履歴の無い送信データの一部である第１の分割データを、前記送信データを識別する識別情報に対応付けて記憶する。通信部は、前記送信データと前記第１の分割データを特定する情報の組み合わせを含む送信パケットを送信することにより、第２の分割データを前記識別情報に対応付けて前記通信先に記憶させる。ここで、第２の分割データは、前記送信データのうち前記第１の分割データに含まれないデータである。特定部は、前記送信パケットの送信後は、前記送信データの代わりに、前記識別情報と前記第１の分割データを前記通信先への送信対象として特定する。
【発明の効果】
【００１１】
キャッシュの使用効率が改善される。
【図面の簡単な説明】
【００１２】
【図１】重複除去の例を説明する図である。
【図２】実施形態にかかる通信方法の例を説明する図である。
【図３】通信装置の構成の例を説明する図である。
【図４】通信装置のハードウェア構成の例を説明する図である。
【図５】第１の実施形態にかかる通信方法の例を説明する図である。
【図６】送信処理の例を説明するフローチャートである。
【図７】受信処理の例を説明するフローチャートである。
【図８】第２の実施形態にかかる通信方法の例を説明する図である。
【図９】第２の実施形態にかかる通信方法の例を説明する図である。
【図１０】送信処理の例を説明するフローチャートである。
【図１１】受信処理の例を説明するフローチャートである。
【図１２】分割サイズの調整例を説明する図である。
【図１３】３つの通信装置での通信処理の例を説明する図である。
【図１４】送信処理の例を説明するフローチャートである。
【図１５】受信処理の例を説明するフローチャートである。
【図１６】第４の実施形態にかかる通信装置の構成の例を説明する図である。
【図１７】消失訂正を用いた割符情報の生成方法の例を説明する図である。
【図１８】３つの通信装置での通信処理の例を説明する図である。
【発明を実施するための形態】
【００１３】
図２は、実施形態にかかる通信方法の例を説明する図である。実施形態にかかる方法では、データを送信しようとする通信装置２０は、送信対象のデータを、自装置がキャッシュに記憶する分と、転送先の通信装置２０に記憶させる分に分ける。さらに、各通信装置２０は、分割される前のデータを一意に識別可能な識別情報に対応付けて、自装置が記憶する分のデータを保持するものとする。以下の説明では、分割前のデータの識別情報（インデックス）として、分割前のデータから得られる情報を用いるものとする。なお、識別情報の計算方法は、データの送信側と受信側で共通していれば、任意の既知の方法に設定できる。
【００１４】
例えば、図２の例では、通信装置２０ａがＷＡＮ３を介して通信装置２０ｂと通信可能である。この状態で、通信装置２０ａがデータＡを初めて通信装置２０ｂに送信しようとしているとする。ここで、通信装置２０ａは、データＡを分割データＡ−１と分割データＡ−２に分割したとする。さらに、通信装置２０ａは、分割データＡ−１をデータＡの識別情報に対応付けて通信装置２０ａが保持するキャッシュ４１ａに格納する。
【００１５】
通信装置２０ａは、データＡと共に、データＡのうちで通信装置２０ａが記憶する分割データＡ−１を識別するための情報を、通信装置２０ｂに送信する。例えば、通信装置２０ａは、分割データＡ−１を識別するための情報として、データＡのうちで分割データＡ−１に該当する領域を表わすアドレスの情報、データの先頭からの割合、データの先頭からのビット数などを使用できる。
【００１６】
データＡとデータ分割Ａ−１を識別するための情報が通信装置２０ｂに到達したとする。すると、通信装置２０ｂは、データＡのうち、分割データＡ−１を識別するための情報によって特定される領域分のデータを除いたデータ（分割データＡ−２）を、データＡの識別情報と共に通信装置２０ｂが保持しているキャッシュ４１ｂに記録する。
【００１７】
その後、通信装置２０ａが通信装置２０ｂにデータＡを送信しようとするときには、通信装置２０ａは、データＡの識別情報と分割データＡ−１の組み合わせを通信装置２０ｂに送信する。すると、通信装置２０ｂは、データＡの識別情報に対応付けて記憶している分割データＡ−２と、通信装置２０ａから受信した分割データＡ−１を用いて、データＡを再現する。
【００１８】
一方、通信装置２０ｂが通信装置２０ａにデータＡを送信しようとする場合、通信装置２０ｂは、データＡの識別情報と分割データＡ−２の組み合わせを通信装置２０ａに送信する。すると、通信装置２０ａは、データＡの識別情報に対応付けて記憶している分割データＡ−１と、通信装置２０ｂから受信した分割データＡ−２を用いて、データＡを再現する。
【００１９】
このように、実施形態にかかる方法では、データＡの転送処理に使用されるキャッシュは、通信装置２０ａと通信装置２０ｂの間で相補的になるように分割して保持される。また、通信装置２０ａに保持されている分割データＡ−１と、通信装置２０ｂに保持されている分割データＡ−２を合わせるとデータＡとほぼ同じ程度の容量である。このため、実施形態にかかる方法では、ネットワーク中の各通信装置２０が保持するキャッシュを効率的に使用しつつ、重複除去処理を行うことができる。
【００２０】
なお、図２では、通信装置２０ａと通信装置２０ｂが直接通信する場合の例を説明したが、通信装置２０ａと通信装置２０ｂのいずれも、通信可能な他の装置から受信したデータを転送する際にも、図２に示す通信方法を使用できる。
【００２１】
＜装置構成＞
図３は、通信装置２０の構成の例を説明する図である。通信装置２０は、通信部２１、制御部３０、記憶部４０を備える。制御部３０は、重複判定部３１、分割サイズ決定部３２、分割処理部３３、保存処理部３４、特定部３５、復元処理部３６を有する。記憶部４０は、キャッシュ４１として動作する。さらに、オプションとして、記憶部４０は、重複カウンタ４２を保持しても良い。
【００２２】
キャッシュ４１には、送信対象となったデータの識別情報と、識別情報で識別されるデータの一部、識別情報で識別されるデータのうちのどの領域を記憶しているかを表わす情報などが記録される。重複カウンタ４２には、送信対象となったデータか、そのデータの識別情報に対応付けて、データの送信回数が記録される。なお、通信装置２０が複数の通信装置２０と通信する場合、キャッシュ４１や重複カウンタ４２は、通信先となる通信装置２０ごとに、通信先の通信装置２０を特定可能な情報に対応付けて生成されても良い。キャッシュ４１や重複カウンタ４２の例は後述する。
【００２３】
通信部２１は、ネットワーク中の他の通信装置２０や通信装置２０に接続している端末１０との間でパケットを送受信する。重複判定部３１は、送信対象のデータの識別情報がキャッシュ４１に含まれているかにより、送信対象のデータを過去に送受信したことがあるかを判定する。分割サイズ決定部３２は、送信対象のデータを複数の通信装置２０で記憶するために、分割データの大きさを決定する。分割処理部３３は、分割サイズ決定部３２が決定したサイズに合わせて送信対象のデータを分割することにより、分割データを生成する。特定部３５は、通信先の通信装置２０に送信するデータを特定する。保存処理部３４は、自装置が記憶する分割データと、その分割データに含まれているデータが分割前のデータ中のどの領域に当たるかを特定する情報をキャッシュ４１に記録することにより、適宜、キャッシュ４１を更新する。復元処理部３６は、他の通信装置２０から受信した受信パケット中のデータと、キャッシュ４１に記録されているデータを用いて、送信元が送信対象としたデータを復元する。
【００２４】
図４は、通信装置２０のハードウェア構成の例を説明する図である。通信装置２０は、プロセッサ１０１、メモリ１０２、バス１０３、ネットワーク接続装置１０４を有する。プロセッサ１０１は、任意の処理回路であり、例えば、ＣＰＵ（Central Processing Unit）とすることができる。プロセッサ１０１は、メモリ１０２をワーキングメモリとして使用して、プログラムを実行することにより、様々な処理を実行する。メモリ１０２には、ＲＡＭ（Random Access Memory）が含まれ、さらに、ＲＯＭ（Read Only Memory）等の不揮発性のメモリも含まれる。メモリ１０２は、プログラムやプロセッサ１０１での処理に使用されるデータの格納に使用される。ネットワーク接続装置１０４は、ネットワークを介した他の装置との通信に使用される。バス１０３は、プロセッサ１０１、メモリ１０２、ネットワーク接続装置１０４を、互いにデータの入出力が可能になるように接続する。
【００２５】
プロセッサ１０１は制御部３０として動作し、メモリ１０２は記憶部４０として動作する。さらに、ネットワーク接続装置１０４は、通信部２１として動作する。なお、図４には図示していないが、通信装置２０は、さらに、オペレータが指示などを入力するための入力装置や、通信装置２０が保持している情報をオペレータが視認可能になるように表示するための表示装置などを保持していていてもよい。入力装置は、例えば、キーボードなどであり、表示装置は例えばディスプレイなどである。
【００２６】
＜第１の実施形態＞
図５は、第１の実施形態にかかる通信方法の例を説明する図である。図５においても、通信装置２０ａが通信装置２０ｂにデータＡを送信する場合を例として説明する。以下の説明では、いずれの通信装置２０に関する説明であるかを分かりやすくするために、符号の後にその通信装置２０の符号の末尾のアルファベットを示すことがある。例えば、重複判定部３１ａは制御装置２０ａ中の重複判定部３１である。また、以下の説明では、送信対象のデータを識別する識別情報として、ハッシュ値が用いられるものとする。なお、ハッシュ値の計算に用いられるハッシュ関数は、通信装置２０ａと通信装置２０ｂで共通していれば、任意の既知のハッシュ関数に設定できる。
【００２７】
ケースＣ１は、通信装置２０ａが初めて通信装置２０ｂにデータＡを送信するときの処理の例である。まず、重複判定部３１ａは、データＡが通信装置２０ａから送信されているかを、キャッシュ４１ａを参照することによって判定する。この時点では、キャッシュ４１ａには、データＡのハッシュ値は含まれていなかったとする。すると、重複判定部３１ａは、データＡは過去に通信装置２０ａから送信したデータとは重複していないと判定する。分割サイズ決定部３２ａは、データＡから生成する分割データの大きさを決定する。ここでは、分割サイズ決定部３２ａは、データＡを５０％ずつ２つに分けることを決定したとする。分割処理部３３は、データＡの前半の５０％を分割データＡ−１とし、データＡの後半の５０％を分割データＡ−２としたとする。
【００２８】
図５の例では、特定部３５ａは、分割データＡ−１を通信装置２０ａが記憶するデータとし、分割データＡ−２を通信装置２０ｂに記憶させるデータとして特定したとする。すると、保存処理部３４ａは、データＡから得られたハッシュ値、および、分割データＡ−１のアドレス情報と共に、分割データＡ−１をキャッシュ４１ａに記録する。図５のテーブルＴ１は、キャッシュ４１ａに記録されている情報のうち、分割データＡ−１に関する情報例を示す。テーブルＴ１の例では、データＡのハッシュ値はｈａｓｈＡである。アドレス情報は、分割データＡ−１がデータＡのうちのどの領域を占めているかを表わす情報である。図５では、分割前のデータＡの前半５０％であることを、Ａ（１−５０）と表記する。さらに、保存処理部３４ａは、分割データＡ−１自体もキャッシュ４１ａに格納する。
【００２９】
特定部３５ａは、今回の送信処理が通信装置２０ｂへの初めてのデータＡの送信であるため、分割前のデータＡと、通信装置２０ａが格納している分割データＡ−１を識別するための情報を、通信装置２０ｂへの送信対象として特定する。特定部３５ａは送信対象のデータＡ等を含むパケットＰ１を生成し、通信部２１ａを介して通信装置２０ｂに送信する。このため、ケースＣ１に示すように、データＡが通信装置２０ａから通信装置２０ｂに送信される。
【００３０】
通信装置２０ｂの通信部２１ｂは、パケットＰ１を受信する。復元処理部３６ｂは、パケットＰ１に、送信データを識別するための識別情報が含まれているかを判定する。ここでは、ハッシュ値はパケットＰ１に含まれていないとする。すると、復元処理部３６ｂは、パケットＰ１に含まれているデータは復元対象とせずに処理を終了する。
【００３１】
一方、保存処理部３４ｂは、パケットＰ１で送信されてきたデータＡのうち、通信装置２０ａで格納されている分割データＡ−１の領域を識別する情報を取得する。さらに、保存処理部３４ｂは、パケットＰ１に含まれているデータＡのうち、通信装置２０ａで保持されていない領域を、通信装置２０ｂが保持する対象として認識する。図５の例では、データＡの前半５０％（Ａ（１−５０））が通信装置２０ａで格納されているので、保存処理部３４ｂは、データＡの後半５０％（Ａ（５１−１００））を通信装置２０ｂで格納することが要求されていると認識する。そこで、保存処理部３４ｂは、データＡの後半５０％を、分割データＡ−２に該当する領域を表わすアドレスの情報に対応付けてキャッシュ４１ｂに格納する。さらに、保存処理部３４ｂは、データＡのハッシュ値（ｈａｓｈＡ）を求め、得られた値も分割データＡ−２に対応付けてキャッシュ４１ｂに記録する。このため、パケットＰ１の処理が終わった時点では、通信装置２０ｂは、テーブルＴ２に示す情報をキャッシュ４１ｂに含んでいる。
【００３２】
ケースＣ２は、通信装置２０ａが再び通信装置２０ｂにデータＡを送信するときの処理の例である。重複判定部３１ａは、データＡのハッシュ値（ｈａｓｈＡ）がキャッシュ４１ａに含まれているかを判定する。ケースＣ−２の時点では、テーブルＴ１に示すように、データＡのハッシュ値はキャッシュ４１ａに含まれている。このため、重複判定部３１ａは、データＡは過去に通信装置２０ｂに送信ずみのデータであると判定する。
【００３３】
特定部３５ａは、キャッシュ４１ａを参照することにより、データＡのハッシュ値（ｈａｓｈＡ）と、ｈａｓｈＡに対応付けられている分割データＡ−１を、データＡの代わりに通信装置２０ａから通信装置２０ｂに送信するデータとして決定する。特定部３５ａは、データＡのハッシュ値と送信対象の分割データＡ−１を含むパケットＰ２を生成し、通信部２１ａを介して通信装置２０ｂに送信する。このため、ケースＣ２に示すように、分割データＡ−１が通信装置２０ａから通信装置２０ｂに送信される。
【００３４】
通信装置２０ｂの通信部２１ｂは、パケットＰ２を受信する。復元処理部３６ｂは、パケットＰ２に、送信データを識別するための識別情報として、データＡのハッシュ値が含まれているので、パケットＰ２に含まれているデータを復元対象として認識する。キャッシュ４１ｂには、テーブルＴ２に示すように、データＡのハッシュ値（ｈａｓｈＡ）に対応付けて分割データＡ−２が記録されている。そこで、復元処理部３６ｂは、パケットＰ２中の分割データＡ−１と、キャッシュ４１ｂ中に格納されている分割データＡ−２を用いて、データＡを復元する。なお、復元処理部３６は、復元処理の際に、適宜、キャッシュ４１ｂに記録されている分割データＡ−２のアドレス情報を用いることができる。このため、ケースＣ２に示すように、通信装置２０ａが分割データＡ−１をデータＡのハッシュ値と共に通信装置２０ｂに送信することにより、通信装置２０ｂは元の送信データであるデータＡを復元できる。
【００３５】
図５では、通信装置２０ａから通信装置２０ｂにデータＡが送信される場合について説明したが、通信装置２０ｂから通信装置２０ａにデータＡを送信する場合にも同様の処理が行われる。例えば、通信装置２０ｂが通信装置２０ａにデータＡを送信する場合、重複判定部３１ｂは、キャッシュ４１ｂ（テーブルＴ２）を用いて、データＡの送受信が通信装置２０ｂで行われていると判定する。すると、復元処理部３６ｂは、キャッシュ４１ｂに基づいて、データＡのハッシュ値（ｈａｓｈＡ）と、ｈａｓｈＡに対応付けられている分割データＡ−２を、データＡの代わりに送信するデータとして決定する。このため、通信装置２０ｂからは、データＡのハッシュ値と分割データＡ−２を含むパケットが通信装置２０ａに送信される。すると、通信装置２０ａでは、復元処理部３６ａがキャッシュ４１ａ（テーブルＴ１）を参照することにより、キャッシュ４１ａ中に格納されている分割データＡ−１と受信パケット中の分割データＡ−２から送信データＡを復元できる。
【００３６】
図５を参照しながら、パケットＰ１とＰ２によって送信対象のデータが送信される場合を例として説明したが、図５は一例である。送信対象のデータは、任意の数のパケットを用いて送受信され得る。
【００３７】
図６は、送信処理の例を説明するフローチャートである。図６の例では、送信対象のデータを識別する際にインデックスが使用されている。インデックスは送信対象のデータのハッシュ値など、送信側と受信側の両方の通信装置２０がデータから計算可能な値であって、送信対象のデータを識別可能な値である。
【００３８】
まず、重複判定部３１は、送信データＡを取得する（ステップＳ１）。ここで、通信装置２０自身がアプリケーションなどを処理する場合、重複判定部３１は、通信装置２０での処理によって生成された送信データＡを取得できる。一方、通信装置２０に端末１０が接続されており、端末１０でアプリケーションが動作している場合、重複判定部３１は、端末１０から送信データＡを取得できる。重複判定部３１は、送信データＡの識別に使用するインデックスを作成する（ステップＳ２）。重複判定部３１は、作成したインデックスがキャッシュ４１中にあるかを判定する（ステップＳ３）。
【００３９】
インデックスがキャッシュ４１中にない場合、保存処理部３４は、送信データのうちで送信側の通信装置２０で記憶するアドレス分の領域を分割データ（Ａ−１）として抽出する（ステップＳ３でＮｏ、ステップＳ４）。保存処理部３４は、抽出した分割データ（Ａ−１）を、送信データ（Ａ）のインデックスに対応付けて、キャッシュ４１に保存する（ステップＳ５）。特定部３５は、送信側の通信装置２０で記憶しているデータのアドレスと、送信データＡを含むパケットを生成し、通信部２１を介して送信する（ステップＳ６）。
【００４０】
インデックスがキャッシュ４１中にある場合、特定部３５は、送信側の通信装置２０で記憶しているデータのアドレスと、送信データＡのインデックスを含むパケットを生成し、通信部２１を介して送信する（ステップＳ３でＹｅｓ、ステップＳ７）。
【００４１】
図７は、受信処理の例を説明するフローチャートである。図７でも、送信対象のデータの識別に用いられるインデックスとして、送信対象のデータのハッシュ値など、送信側と受信側の両方の通信装置２０がデータから計算可能であり、かつ、送信対象のデータを識別可能な値が使用されている。
【００４２】
通信部２１は、データを受信する（ステップＳ１１）。復元処理部３６は、受信したデータにインデックスが含まれているかを判定する（ステップＳ１２）。受信したデータにインデックスが含まれていない場合、保存処理部３４は、受信データＡの識別に使用するインデックスを計算して記憶する（ステップＳ１２でＮｏ、ステップＳ１３）。保存処理部３４は、受信データのうちで送信側の通信装置２０で記憶されていない領域を分割データ（Ａ−２）として抽出する（ステップＳ１４）。保存処理部３４は、抽出した分割データ（Ａ−２）を、受信データ（Ａ）のインデックスに対応付けて、キャッシュ４１に保存する（ステップＳ１５）。
【００４３】
一方、受信したデータにインデックスが含まれている場合、復元処理部３６は、インデックスに対応付けられている分割データをキャッシュ４１から読み出す（ステップＳ１２でＹｅｓ、ステップＳ１６）。復元処理部３６は、受信したデータと読み出した分割データを、アドレス情報に従って組み合わせることにより、復元データを生成する（ステップＳ１７）。復元データの生成後、復元データは実装に応じて処理される。通信装置２０自身がアプリケーションなどを処理する場合、復元処理部３６は、復元データを通信装置２０中のアプリケーション処理部（図示せず）に出力し、復元データをアプリケーション処理部に処理させる。一方、通信装置２０に端末１０が接続されており、端末１０でアプリケーションが動作している場合、復元処理部３６は、通信部２１を介して、復元データを端末１０に向けて送信する。
【００４４】
このように、実施形態にかかる方法では、あるデータの転送処理に使用されるキャッシュは、送信側の通信装置２０と受信側の通信装置２０に分割して保持され、転送処理に使用されるデータ自体の容量と同程度にまで削減される。このため、実施形態にかかる方法では、ネットワーク中の各通信装置２０が保持するキャッシュを効率的に使用しつつ、重複除去処理を行うことができる。
【００４５】
なお、以上の説明では、送信側の通信装置２０と受信側の通信装置２０の各々が同程度の量のデータを保持する場合を例として説明したが、これは一例である。送信側の通信装置２０と受信側の通信装置２０が保持するデータの割合は実装に応じて任意に変更され得る。例えば、送信側の通信装置２０が備えるキャッシュ４１の容量が、受信側の通信装置２０の備えるキャッシュ４１の容量よりも小さい場合、送信側の通信装置２０は、送信対象のデータのうちで自装置が保持するデータの量を少なくするように設定され得る。
【００４６】
＜第２の実施形態＞
第２の実施形態では、送受信の対象となるデータのうち各通信装置２０が保持するデータの割合を変動させる場合の例を説明する。第２の実施形態では、各通信装置２０は、重複カウンタ４２を保持している。さらに、第２の実施形態では、各通信装置２０は、通信先の通信装置２０との間で通信を確立した際に、通信先の通信装置２０が保存可能なデータ容量の最大値を取得するものとする。
【００４７】
図８と図９は、第２の実施形態にかかる通信方法の例を説明する図である。以下、図８と図９を参照しながら、通信装置２０ａから通信装置２０ｂにデータＤ（Ｄ（１−１００）とも表記する）が複数回送信される場合について、送信処理と各通信装置２０が保持するデータの詳細を、送信回数ごとに分けて説明する。以下の説明では、各通信装置２０が保持するデータ量が３回の送信処理によって最適化される場合を例とする。なお、各通信装置２０が備える分割サイズ決定部３２は、予め、記憶するデータ量の調整に使用される送信処理の回数を記憶しているものとする。さらに、以下の説明では、データＤのハッシュ値をＨと表わす。
【００４８】
（１）１回目のデータ送信
重複判定部３１ａは、データＤのハッシュ値がキャッシュ４１ａに記録されていないと判定したとする。すると、分割サイズ決定部３２ａは、１回目の送信処理の際に通信装置２０ａが記憶するデータの大きさと、通信装置２０ｂに記憶させるデータの大きさを決定する。図８の例では、分割サイズ決定部３２ａは、１回目の送信処理の際に通信装置２０ａがデータＤの前半５０％を保持し、通信装置２０ｂにデータＤの後半５０％を保持させることを決定したとする。すると、分割処理部３３ａは、データＤを分割データＤ（１−５０）と分割データＤ（５１−１００）に分割する。なお、分割データＤ（１−５０）はデータＤの前半５０％のデータであり、分割データＤ（５１−１００）はデータＤの後半５０％のデータである。
【００４９】
保存処理部３４ａは、重複カウンタ４２ａにデータＤの送信回数を記録する。なお、４２では、図８の重複カウンタ４２ａ−１に示すように、データに対応付けてそのデータの送信回数が記録されても良く、また、データのハッシュ値に対応付けてデータの送信回数が記録されても良い。
【００５０】
保存処理部３４ａは、さらに、データＤのうちで転送装置２０ａが保持する分のデータをキャッシュ４１ａに格納する。キャッシュ４１には、分割前のデータのハッシュ値、保持対象のデータ、保持対象のデータのアドレス情報が含まれている。このため、保存処理部３４ａの処理により、通信装置２０ａが保持するキャッシュ４１ａには、キャッシュ４１ａ−１に示す情報が格納される。すなわち、キャッシュ４１ａには、データＤのハッシュ値としてＨが記録され、キャッシュ対象のデータは、データＤの前半５０％分の分割データＤ（１−５０）となる。さらに、アドレスの情報として、前半５０％を表わす情報（１−５０）が記録される。
【００５１】
特定部３５ａは、データＤが初めて通信装置２０ｂに送信されるため、データＤの全体を送信対象として特定する。さらに、データＤのうち、通信装置２０ａが保持する情報のアドレスも、通信装置２０ｂへの通知対象とする。このため、例えば、特定部３５ａは、図８に示すパケットＴＤ１を生成することができる。なお、パケットＴＤ１の例では、データＤと通信装置２０ａが記憶している分割データのアドレス情報の他に、データＤのハッシュ値Ｈも含まれているが、受信側の通信装置２０ｂがハッシュ値を計算する場合、送信パケットにハッシュ値が含まれていなくても良い。さらに、図を見やすくするために、パケットＴＤ１中のペイロード部分を図示しているが、適宜、パケットＴＤ１にはヘッダ等が含められる。特定部３５ａは、生成したパケットＴＤ１を通信部２１ａ経由で通信装置２０ｂに向けて送信する。
【００５２】
通信装置２０ｂの通信部２１ｂは、パケットＴＤ１を受信する。復元処理部３６ｂは、パケットＴＤ１に含まれているハッシュ値がキャッシュ４１ｂに含まれているかを判定する。通信装置２０ｂがパケットＴＤ１を受信したときには、ハッシュ値Ｈやハッシュ値Ｈに対応付けられた情報がキャッシュ４１ｂに含まれていないとする。すると、復元処理部３６ｂは、パケットＴＤ１に含まれているデータは復元対象としない。復元処理部３６ｂは、予め行われている設定に従って、パケットＴＤ１中のデータを出力する。例えば、受信データが通信装置２０ｂ中で処理される場合には、復元処理部３６ｂはデータＤを、通信装置２０ｂ中のアプリケーション処理部（図示せず）に出力できる。一方、通信装置２０に端末１０が接続されており、端末１０でアプリケーションが動作している場合、復元処理部３６ｂは通信部２１ｂ経由でデータを端末１０に送信する。
【００５３】
一方、保存処理部３４ｂは、復元されたデータＤのうち、通信装置２０ａで格納されている領域のアドレスを取得する。さらに、保存処理部３４ｂは、データＤのうち、通信装置２０ａで保持されていない領域を、通信装置２０ｂが保持する対象として認識する。図８の例では、データＤの前半５０％（Ｄ（１−５０））が通信装置２０ａで格納されているので、保存処理部３４ｂは、データＤの後半５０％（Ｄ（５１−１００））を通信装置２０ｂで格納することが要求されていると認識する。そこで、保存処理部３４ｂは、データＤの後半５０％と、分割データＤ（５１−１００）のアドレス情報を、データＤのハッシュ値（Ｈ）に対応付けて、キャッシュ４１ｂに格納する。このため、通信装置２０ｂには、キャッシュ４１ｂ−１に示す情報が記録される。
【００５４】
さらに、保存処理部３４ｂは、データＤに対するデータの送受信が行われていることを重複カウンタ４２に記録しても良い。なお、データに関する送受信の回数が受信側でも記録される場合、送信側と受信側の各々の通信装置２０は、対向装置ごとに異なる重複カウンタ４２を保持している。
【００５５】
（２）２回目のデータ送信
次に、通信装置２０ａから通信装置２０ｂに、データＤが２回目に送信される場合の処理の例を説明する。
【００５６】
重複判定部３１ａは、データＤのハッシュ値がキャッシュ４１ａに記録されていると判定し、重複カウンタ４２ａ−１からデータＤの送信回数を取得する。ここでは、重複判定部３１ａは、データＤが既に１回送信されているので今回の送信処理が２回目であることを特定する。分割サイズ決定部３２ａは、データＤの送受信処理の回数が、記憶するデータ量の調整に使用される送信処理の回数Ｐを超えているかを判定する。ここでは、記憶するデータ量の調整に使用される送信処理の回数Ｐは３であるとする。今回は２回目のデータ送信であるため、送受信処理の回数はデータ量の調整に使用される送信処理の回数Ｐを超えていない。そこで、分割サイズ決定部３２ａは、今回の送受信処理により、通信装置２０ａと通信装置２０ｂにおいて記憶するデータ量を調整することを決定する。分割サイズ決定部３２ａは、通信装置２０ａが記憶するデータの大きさの変動量を、式（１）を用いて算出する。
【００５７】
【数１】
2018113645.tif 000003
式（１）において、ＩＲｓは、処理対象のデータの全容量のうち、送信側の通信装置２０が最初の送信の際に記憶しているデータ量の割合を表わす。Ｖｓは、送信側の通信装置２０が保存可能なデータ容量の最大値であり、Ｖｒは受信側の通信装置２０が保存可能なデータ容量の最大値である。Ｐは、記憶するデータ量の調整に使用される送信処理の回数である。
【００５８】
図８の例では、データＤについての最初の送受信の際には、送信側の通信装置２０ａにおいて、データＤのうちの５０％を保持している。例えば、通信装置２０ａが保存可能なデータ容量の最大値は、通信装置２０ｂが保存可能なデータ容量の最大値の半分であるとする。すると、ＶｓがＶｒの２分の１となるので、Ｖｓ／（Ｖｓ＋Ｖｒ）＝１／３となる。図８の例では、記憶するデータ量の調整に使用される送信処理の回数Ｐが３であるので、式（１）より、変動量は、次のように計算できる。
【００５９】
変動量（％）＝（０．５−１／３）×１００／３≒８％  ・・・（２）
分割サイズ決定部３２ａは、得られた変動量を、適宜、データのハッシュ値に対応付けて記憶する。
【００６０】
分割サイズ決定部３２ａは、得られた変動量を用いて、２回目の送信処理の際に通信装置２０ａが記憶するデータの大きさと、通信装置２０ｂに記憶させるデータの大きさを決定する。図８の例では、データＤのうちで最初に通信装置２０ａが記憶している割合は５０％であり、変動量が８％である。さらに、通信装置２０ａが記憶可能なデータの最大量は転送装置２０ｂが記憶可能なデータの最大量よりも小さい。このため、データ分割サイズ決定部３２ａは、２回目の送信処理の際に通信装置２０ａが保持するデータを、データＤの前半５０％から変動量である８％分を減らすことにより、データの先頭から４２％に変更する。通信装置２０ａが保持するデータ量の変動に伴い、分割サイズ決定部３２ａは、通信装置２０ｂに記憶させるデータを、データＤの後半５０％から８％分を増加させることにより、データの末尾側の５８％分に変更する。分割サイズ決定部３２ａは、決定した割合を分割処理部３３ａと特定部３５ａに通知する。
【００６１】
分割処理部３３ａは、分割サイズ決定部３２ａからの通知に従って、データＤを分割データＤ（１−４２）と分割データＤ（４３−１００）に分割する。なお、分割データＤ（１−４２）はデータＤの先頭から４２％のデータであり、分割データＤ（４３−１００）はデータＤの先頭から４２％に後続するデータである。
【００６２】
特定部３５ａは、キャッシュ４１ａ−１を参照することにより、通信装置２０ｂとの通信に際して通信装置２０ａがデータＤの前半５０％を記憶していることを特定する。そこで、特定部３５ａは、データＤの前半５０％と、送信対象のデータがデータＤの前半５０％であることを表わすアドレス情報を、通信装置２０ｂに対する送信対象のデータとして特定する。さらに、特定部３５ａは、分割サイズ決定部３２ａから通知された割合のうち、通信装置２０ａが記憶するデータのアドレス情報と、データＤのハッシュ値Ｈも、送信対象として特定する。このため、例えば、特定部３５ａは、図８に示すパケットＴＤ２を、データＤの２回目の送信の際に送信するパケットとして生成することができる。なお、パケットＴＤ１と同様に、パケットＴＤ２には適宜ヘッダ等が含められる。特定部３５ａは、生成したパケットＴＤ２を通信部２１ａ経由で通信装置２０ｂに向けて送信する。
【００６３】
一方、保存処理部３４ａは、重複カウンタ４２ａにデータＤの送信回数を記録する。このため、通信装置２０ａが保持する重複カウンタ４２ａは、重複カウンタ４２ａ−２に示すように更新される。さらに、保存処理部３４ａは、データＤのうちで転送装置２０ａが保持する分のデータを、分割前のデータのハッシュ値、および、保持対象のデータのアドレス情報に対応付けて格納する。このため、保存処理部３４ａの処理により、通信装置２０ａが保持するキャッシュ４１ａには、キャッシュ４１ａ−２に示す情報が格納される。すなわち、キャッシュ４１ａには、データＤのハッシュ値Ｈに対応付けて、データＤの先頭から４２％分の分割データＤ（１−４２）と、アドレスの情報（１−４２）が記録される。
【００６４】
次に、通信装置２０ｂでの処理について説明する。通信装置２０ｂの通信部２１ｂは、パケットＴＤ２を受信する。復元処理部３６ｂは、パケットＴＤ２に含まれているハッシュ値がキャッシュ４１ｂ−１に含まれているかを判定する。通信装置２０ｂがパケットＴＤ２を受信したときには、ハッシュ値Ｈやハッシュ値Ｈに対応付けられた情報がキャッシュ４１ｂ−１に含まれている。すると、復元処理部３６ｂは、パケットＴＤ２に含まれているデータと、キャッシュ４１ｂ−１に含まれているデータを、各データのアドレス情報に対応付けられた順序でつなぎ合わせることにより、データＤを復元する。すなわち、復元処理部３６ｂは、パケットＴＤ２に含まれているデータＤ（１−５０）の後に、キャッシュ４１ｂ−１中に保持しているＤ（５１−１００）をつなげたデータを生成することにより、データＤを復元できる。復元処理部３６ｂは、復元したデータＤを、予め設定された出力先に出力する。例えば、データＤが通信装置２０ｂ中で処理される場合には、復元処理部３６ｂはデータＤを、通信装置２０ｂ中のアプリケーション処理部（図示せず）に出力できる。一方、通信装置２０に端末１０が接続されており、端末１０でアプリケーションが動作している場合、復元処理部３６ｂは通信部２１ｂ経由でデータＤを端末１０に送信する。
【００６５】
一方、保存処理部３４ｂは、パケットＴＤ２を用いて、データＤのうちで通信装置２０ａにおいて格納されている領域のアドレスを取得する。さらに、保存処理部３４ｂは、パケットＴＤ２に含まれているデータＤのうち、通信装置２０ａで保持されていない領域を、通信装置２０ｂが保持する対象として認識する。図８の例では、データＤの先頭から４２％（Ｄ（１−４２））が通信装置２０ａで格納されるので、保存処理部３４ｂは、データＤの先頭から４２％のデータの後続データ（Ｄ（４３−１００））を通信装置２０ｂで格納することが要求されていると認識する。そこで、保存処理部３４ｂは、分割データＤ（４３−１００）と、分割データＤ（４３−１００）のアドレス情報を、データＤのハッシュ値（Ｈ）に対応付けて、キャッシュ４１ｂに格納する。このため、通信装置２０ｂに中のキャッシュ４１ｂ−１は、キャッシュ４１ｂ−２に示すように更新される。
【００６６】
（３）３回目のデータ送信
図９を参照しながら、通信装置２０ａから通信装置２０ｂに、データＤが３回目に送信される場合の処理の例を説明する。
【００６７】
重複判定部３１ａは、データＤのハッシュ値がキャッシュ４１ａ−２に記録されていると判定し、重複カウンタ４２ａ−２からデータＤの送信回数を取得する。ここでは、重複判定部３１ａは、データＤが既に２回送信されているので今回の送信処理が３回目であると認識する。分割サイズ決定部３２ａは、データＤの送受信処理の回数が、記憶するデータ量の調整に使用される送信処理の回数Ｐを超えているかを判定する。図９の例でもＰ＝３であるので、分割サイズ決定部３２ａは、通信装置２０ａと通信装置２０ｂにおいて記憶するデータ量を調整することを決定する。そこで、分割サイズ決定部３２ａは、２回目のデータ送信の際に求めた変動量を用いて、３回目の送信処理の際に通信装置２０ａが記憶するデータの大きさと、通信装置２０ｂに記憶させるデータの大きさを決定する。
【００６８】
図９の例では、通信装置２０ａがデータＤのうちの先頭の４２％を記憶している。さらに、図８を参照しながら説明したとおり、１回の変動処理によって、通信装置２０ａが保持するデータ量は８％減少する。このため、データ分割サイズ決定部３２ａは、３回目の送信処理の際に通信装置２０ａが保持するデータを、データＤの先頭から３４％に変更する。さらに、通信装置２０ａが保持するデータ量の変動に伴い、分割サイズ決定部３２ａは、通信装置２０ｂに記憶させるデータを、データの末尾側の６６％分に変更する。分割サイズ決定部３２ａは、決定した割合を分割処理部３３ａと特定部３５ａに通知する。
【００６９】
分割処理部３３ａは、分割サイズ決定部３２ａからの通知に従って、データＤを分割データＤ（１−３４）と分割データＤ（３５−１００）に分割する。ここで、分割データＤ（１−３４）はデータＤの先頭から３４％のデータであり、分割データＤ（３５−１００）はデータＤの先頭から３４％に後続するデータである。
【００７０】
特定部３５ａは、キャッシュ４１ａ−２を参照することにより、通信装置２０ｂとの通信に際して通信装置２０ａがデータＤの先頭から４２％を記憶していることを特定する。そこで、特定部３５ａは、データＤの先頭から４２％を、アドレス情報、および、データＤのハッシュ値と共に、通信装置２０ｂに対する送信対象のデータとして特定する。さらに、特定部３５ａは、分割サイズ決定部３２ａから通知された割合のうち、通信装置２０ａが送信する割合の情報も、送信対象の情報とする。このため、特定部３５ａは、図９に示すパケットＴＤ３を、データＤの２回目の送信の際に送信するパケットとして生成することができる。なお、パケットＴＤ１などと同様に、パケットＴＤ３には、適宜、ヘッダ等が含められる。特定部３５ａは、生成したパケットＴＤ３を通信部２１ａ経由で通信装置２０ｂに向けて送信する。
【００７１】
その後、保存処理部３４ａは、２回目にデータＤを送信したときと同様に、重複カウンタ４２ａとキャッシュ４１ａの更新処理を行う。この処理により、通信装置２０ａが保持する重複カウンタ４２ａは、重複カウンタ４２ａ−３に示すとおりになる。一方、通信装置２０ａが保持するキャッシュ４１ａには、キャッシュ４１ａ−３に示す情報が格納される。
【００７２】
次に、通信装置２０ｂでの処理について説明する。通信装置２０ｂでの処理は、２回目にデータＤを通信装置２０ｂが受信した場合と同様である。通信装置２０ｂの復元処理部３６ｂは、通信部２１ｂを介してパケットＴＤ３を受信する。復元処理部３６ｂは、パケットＴＤ３に含まれているハッシュ値がキャッシュ４１ｂ−２に含まれているので、パケットＴＤ３に含まれているデータと、キャッシュ４１ｂ−２に含まれているデータから、データＤを復元する。その後、復元処理部３６ｂは、復元したデータＤを、予め設定された出力先に出力する。
【００７３】
一方、保存処理部３４ｂは、復元されたデータＤのうち、通信装置２０ａで格納されている領域のアドレスを取得する。さらに、保存処理部３４ｂは、データＤのうち、通信装置２０ａで保持されていない領域を、通信装置２０ｂが保持する対象としてキャッシュ４１ｂに格納する。図９の例では、データＤの先頭から３４％（Ｄ（１−３４））が通信装置２０ａで格納されている。このため、保存処理部３４ｂは、データＤの先頭から３４％のデータに後続する分割データ（Ｄ（３５−１００））と、分割データＤ（３５−１００）のアドレス情報を、データＤのハッシュ値（Ｈ）に対応付けて、キャッシュ４１ｂに格納する。その結果、通信装置２０ｂに中のキャッシュ４１ｂ−２は、キャッシュ４１ｂ−３に示すように更新される。
【００７４】
（４）送信回数がデータ量の調整に用いる送信処理の回数Ｐを超えたケース
４回目以降にデータＤが通信装置２０ａから通信装置２０ｂに送信される場合、送信側の通信装置２０ａの分割サイズ決定部３２ａは、送信回数が記憶するデータ量の調整に使用される送信処理の回数Ｐを超えていると判定する。このため、４回目以降には、分割サイズ決定部３２ａはデータ量の変更を行わないことを決定する。そこで、特定部３５ａは、キャッシュ４１ａ−３に記録されているデータＤの先頭から３４％（Ｄ（１−３４））と、データのアドレス情報、データＤのハッシュ値を含むパケットを通信装置２０ｂに送信する。
【００７５】
一方、通信装置２０ｂでは、３回目の送信処理と同様に復元処理が行われる。保存処理部３４ｂは、データＤのうちで通信装置２０ａが保持している割合が変動していないことを、受信パケット中の情報とキャッシュ４１ｂ−３の情報から特定すると、キャッシュ４１ｂ−３を更新せずに処理を終了する。
【００７６】
なお、図８、図９を参照しながら説明した処理は一例であり、実装に応じて処理は変更され得る。例えば、送信側の通信装置２０がデータの送信処理のたびに変動量を計算しても良い。さらに、データ量の調整に用いる送信処理の回数Ｐや、最初に送信側の通信装置２０が記憶するデータの容量は任意に変更され得る。
【００７７】
図１０は、送信処理の例を説明するフローチャートである。重複判定部３１は、送信データＤ（１−１００）を取得する（ステップＳ２１）。ここで、通信装置２０自身がアプリケーションなどを処理する場合、重複判定部３１は、通信装置２０での処理によって生成された送信データを取得できる。一方、通信装置２０に端末１０が接続されており、端末１０でアプリケーションが動作している場合、重複判定部３１は、端末１０から送信データを取得できる。重複判定部３１は、送信対象のデータＤ（１−１００）を識別する情報として、データＤ（１−１００）のハッシュ値Ｈを算出する（ステップＳ２２）。重複判定部３１は、ハッシュ値Ｈがキャッシュ４１中に含まれているかを判定する（ステップＳ２３）。
【００７８】
ハッシュ値Ｈがキャッシュ４１中に含まれていない場合、分割サイズ決定部３２は、送信側の通信装置２０で保存するデータのアドレスの範囲（保存データアドレス範囲）Ｒを決定する（ステップＳ２３でＮｏ、ステップＳ３０）。保存処理部３４は、ハッシュ値Ｈを重複カウンタ４２に保存する（ステップＳ３１）。なお、ステップＳ３１では、ハッシュ値Ｈに送受信の回数＝０が対応付けられる。さらに、保存処理部３４は、保存データアドレス範囲分のデータ（Ｄ（Ｒ））と、保存データアドレス範囲の値Ｒをキャッシュ４１に保存する（ステップＳ３２）。その後、特定部３５は、送信先の通信装置２０に向けて、保存データアドレス範囲Ｒ、送信対象のデータＤ（１−１００）、送信対象のデータのハッシュ値Ｈを含むパケットを、通信部２１経由で送信する（ステップＳ３３）。その後、保存処理部３４は、重複カウンタ４２において、ハッシュ値Ｈに対応するカウント値を１つインクリメントして処理を終了する（ステップＳ３４）。
【００７９】
一方、送信対象のデータのハッシュ値Ｈがキャッシュ４１中に含まれている場合、分割サイズ決定部３２は、保存データ量の調整終了までの転送回数Ｐがカウント値以下であるかを判定する（ステップＳ２３でＹｅｓ、ステップＳ２４）。保存データ量の調整終了までの転送回数Ｐがカウント値以下である場合、分割サイズ決定部３２は、保存データアドレスの変動量Ｖを算出する（ステップＳ２４でＹｅｓ、ステップＳ２５）。分割サイズ決定部３２は、保存データアドレス範囲Ｒを保存データアドレスの変動量Ｖだけ変更したものを、新たな保存データアドレス範囲Ｒ’とする（ステップＳ２６）。通信部２１は、送信先の通信装置２０に向けて、過去の保存データアドレス範囲Ｒ、保存データアドレス範囲分のデータＤ（Ｒ）、送信対象のデータのハッシュ値Ｈ、新たな保存データアドレス範囲Ｒ’を送信する（ステップＳ２７）。保存処理部３４は、新たな保存データアドレス範囲分のデータＤ（Ｒ’）をキャッシュ４１に保存する（ステップＳ２８）。その後、保存処理部３４は、重複カウンタ４２において、ハッシュ値Ｈに対応するカウント値を１つインクリメントして処理を終了する（ステップＳ３４）。
【００８０】
一方、保存データ量の調整終了までの転送回数Ｐがカウント値を越えている場合、保存データアドレスの範囲は変更されない（ステップＳ２４でＮｏ）。そこで、特定部３５は、送信先の通信装置２０に向けて、保存データアドレス範囲Ｒ、保存していたデータＤ（Ｒ）、送信対象のデータのハッシュ値Ｈを含むパケットを、通信部２１経由で送信する（ステップＳ２９）。その後、ステップＳ３４以降の処理が行われる。
【００８１】
なお、図１０は処理の一例である。例えば、ステップＳ３１〜Ｓ３３の順序は任意に変更され得る。さらに、図８、図９を参照しながら説明したように、送信側の通信装置２０において一度計算した変動量を記憶する場合には、ステップＳ２５の処理は３回目以降の送信処理では行われなくても良い。さらに、ステップＳ２３での判定の際、重複判定部３１は、ハッシュ値がキャッシュ４１に記録されているかを判定する代わりに、ハッシュ値が重複カウンタ４２に記録されているかを判定しても良い。
【００８２】
図１１は、受信処理の例を説明するフローチャートである。なお、図１１は、データの全体が送信される場合には、パケット中にデータのハッシュ値が含まれないケースについての処理の例である。さらに、図１１の例では、端末１０でアプリケーションが動作しているため、通信装置２０で復元されたデータは端末１０に送信される。
【００８３】
通信部２１は、パケットを受信する（ステップＳ４０）。復元処理部３６は、受信パケット中に、データのハッシュ値が含まれているかを判定する（ステップＳ４１）。受信パケット中にデータのハッシュ値が含まれていない場合、１回目の送信であるため、データの全体（Ｄ（１−１００））が送信されている（ステップＳ４１でＮｏ）。そこで、保存処理部３４は、受信したデータのうち、送信側の通信装置２０で保存されないデータを特定する（ステップＳ４４）。保存処理部３４は、受信データからハッシュ値Ｈを求め、得られたハッシュ値Ｈをキャッシュ４１に保存する（ステップＳ４５）。保存処理部３４は、特定したデータを、特定したデータのアドレスと共にハッシュ値Ｈに対応付けてキャッシュ４１に保存する（ステップＳ４６）。その後、通信部２１は、通信装置２０に接続している端末１０に送受信の対象となったデータＤ（１−１００）を出力する（ステップＳ４８）。
【００８４】
一方、受信パケット中にデータのハッシュ値が含まれている場合、送受信の対象となっているデータは、自装置により、過去に送受信されている（ステップＳ４１でＹｅｓ）。そこで、復元処理部３６は、キャッシュ４１中でハッシュ値Ｈに対応付けられているデータを取得すると共に、受信したデータＤ（Ｒ）とキャッシュ４１から取得したデータを結合して、送受信対象のデータを復元する（ステップＳ４２）。保存処理部３４は、復元したデータＤ（１−１００）のうち、送信側での保存データアドレス範囲Ｒ’に含まれないデータをキャッシュに保存する（ステップＳ４３）。その後、復元処理部３６は、データの復元に成功したかを判定する（ステップＳ４７）。データの復元に成功すると、通信部２１は、通信装置２０に接続している端末１０に送受信の対象となったデータＤ（１−１００）を出力する（ステップＳ４７でＹｅｓ、Ｓ４８）。一方、データの復元に成功していないと判定すると、ステップＳ４０以降の処理が繰り返される（ステップＳ４７でＮｏ）。
【００８５】
図１２は、分割サイズの調整例を説明する図である。図８〜図１１の説明では、分かり易くするために、特定のデータに注目して説明したが、複数のデータに対して個別に分割サイズの調整等が行われ得る。このため、図１２に示すように、データＡ〜データＣが通信装置２０ａから通信装置２０ｂに送信される場合、送信回数に応じて、送信側の通信装置２０ａは自装置で記憶するデータの範囲を決定する。送信側の通信装置２０ａは、自装置で記憶する対象に決定したデータを保持すると共に、各データについて、自装置で記憶する対象に決定した範囲を、受信側の通信装置２０ｂに通知する。このため、受信側の通信装置２０ｂでは、送信側の通信装置２０ａが保持していないアドレス領域のデータに対する格納処理を、データＡ〜Ｃの各々に対して行う。
【００８６】
例えば、通信装置２０ａがデータの格納に使用可能な領域は、通信装置２０ｂがデータの格納に使用可能な領域よりも小さいとする。また、データＡ〜Ｃの中では、送信処理回数は、データＡ、データＢ、データＣの順に大きくなるとする。すると、通信装置２０ａは、送信処理の回数が格納データ量の調整に使用する送信回数Ｐになるまで、データＡのうちで通信装置２０ｂに記憶させるデータ量を段階的に増加させていくと共に、自装置が記憶するデータ量を削減する。データＡについては、送受信の回数が送信回数Ｐに達していないので、データＡのうちで通信装置２０ａが保持している分割データＡ＿１の量は、データＡのうちで通信装置２０ｂが保持している分割データＡ＿２の量よりも多い。
【００８７】
データＢに対する送受信の回数は、送信回数Ｐには至っていないものの、データＡの送信回数よりも大きいとする。この場合、図１２に示すように、データＢのうちで通信装置２０ａが保持している分割データＢ＿１の量と、データＢのうちで通信装置２０ｂが保持している分割データＢ＿２の量の差は、分割データＡ＿１と分割データＡ＿２の差よりも小さくなっている。
【００８８】
一方、データＣについては、送受信の回数は、送信回数Ｐを超えているとする。このため、通信装置２０ａと通信装置２０ｂがデータＣを保持する割合は各装置が保持可能なデータ量に応じて最適化されている。従って、データＣのうちで通信装置２０ａが保持している分割データＣ＿１の量と、データＣのうちで通信装置２０ｂが保持している分割データＣ＿２の量の比は、各装置が保持可能なデータ量の比となっている。
【００８９】
このように、第２の実施形態によると、通信装置２０が格納可能なデータ量に応じて、各装置が保持するデータの割合を変更することができる。なお、以上の例では、各装置が保持可能なデータ量に応じて、各装置の保持するデータ量を最適化する場合を例として説明したが、送信側と受信側の各々で保持するデータの割合や、割合の決定方法は、実装に応じて任意に変更され得る。
【００９０】
＜第３の実施形態＞
第１および第２の実施形態では、２台の通信装置２０の間での通信処理の例を説明したが、第３の実施形態では、３台以上の各通信装置２０の各々がデータの一部を記憶し、通信処理を行う場合について説明する。
【００９１】
図１３は、３つの通信装置での通信処理の例を説明する図である。図１３に示すネットワークには、通信装置２０ａ〜２０ｃが含まれている。第３の実施形態では、パケットを受信した通信装置２０は、送信側の通信装置２０に対して、送信対象となっているデータの取得に成功した場合、データ取得を完了したことを表わす通知（完了通知）を送信側の通信装置２０に送信する。また、送信側の通信装置２０は、受信側の通信装置２０から完了通知を受信するまでは、記憶部４０のうちのキャッシュ４１以外の領域に送信対象のデータを保持しているものとする。以下、第３の実施形態を、通信装置２０ａから通信装置２０ｂへのデータＡの送信、通信装置２０ａから通信装置２０ｃへのデータＡの送信、通信装置２０ｃから通信装置２０ｂへのデータＡの送信に分けて説明する。
【００９２】
（１）通信装置２０ａから通信装置２０ｂへのデータＡの送信
通信装置２０ａが初めてデータＡを送信するとする。通信装置２０ａの分割処理部３３ａは、第１の実施形態で説明した処理と同様の処理により、送信対象のデータＡを分割データＡ−１とＡ−２に分割したとする。また、保存処理部３４ａは、分割データＡ−１と分割データＡ−１のアドレス情報を、データＡのハッシュ値と共にキャッシュ４１ａに格納したとする。特定部３５ａは、通信装置２０ｂ宛に、データＡと通信装置２０ａが分割データＡ−１を保持することを示す情報を含むパケットを送信する。
【００９３】
通信装置２０ｂ中の保存処理部３４ｂは、第1の実施形態と同様の処理により、データＡのうち分割データＡ−２を通信装置２０ａで保持されていない情報として、キャッシュ４１ｂに格納する。さらに、特定部３５ｂは、データＡの受信に成功したことを表わす完了通知を生成し、通信部２１経由で通信装置２０ａに送信する。
【００９４】
通信装置２０ａ中の通信部２１ａは完了通知を受信する。重複判定部３１ａは、データＡの受信の成功を通知する完了通知が通信部２１ａで受信されると、記憶部４０ａ中に保持しているデータＡを削除する。
【００９５】
その後、通信装置２０ａが、再度、データＡを通信装置２０ｂに送信する場合、重複判定部３１ａは、第１の実施形態と同様に、データＡを取得し、キャッシュ４１ａにデータＡのハッシュ値が含まれていることを特定する。さらに、重複判定部３１ａは、取得したデータＡを記憶部４０ａに保持する。一方、特定部３５ａは、キャッシュ４１ａ中に格納されているデータＡのハッシュ値（ｈａｓｈＡ）、分割データＡ−１、および、分割データＡ−１のアドレス情報を、通信装置２０ｂに送信する（ステップＳ５１）。通信装置２０ｂ中の復元処理部３６ｂは、第１の実施形態と同様の処理により、受信したパケット中の分割データＡ−１とキャッシュ４１ｂに格納している分割データＡ−２を用いてデータＡを復元する。
【００９６】
（２）通信装置２０ａから通信装置２０ｃへのデータＡの送信
次に、通信装置２０ａが通信装置２０ｃにもデータＡを送信する場合、重複判定部３１ａは、送信対象のデータＡのハッシュ値がキャッシュ４１ａに含まれていることを特定する。すると、特定部３５ａは、キャッシュ４１ａ中に格納されているデータＡのハッシュ値、分割データＡ−１、および、分割データＡ−１のアドレス情報を、通信装置２０ｃに送信する（ステップＳ５２）。
【００９７】
通信装置２０ｃの復元処理部３６ｃは、受信パケットにデータＡのハッシュ値が含まれているため、受信パケットに含まれているデータを用いた復元処理を行おうとする。しかし、ステップＳ５２の時点では、受信パケット中の含まれているハッシュ値がキャッシュ４１ｃに含まれていないので、復元処理部３６ｃは復元処理に失敗する。すると、復元処理部３６ｃは、受信パケット中に含まれている分割データＡ−１とハッシュ値の組み合わせを保持すると共に、データの復元を行うために通信装置２０ｃへの追加のデータ送信を要求する送信要求を生成する。ここで、送信要求には、データ送信を要求するデータを特定するために使用可能な情報が含まれる。図１３の例では、送信要求には、データＡのハッシュ値、受信に成功した分割データＡ−１のアドレスとそのアドレスで特定される情報の受信に成功したことを表わす情報が含まれているとする。復元処理部３６ｃは、通信部２１ｃを介して、送信要求を通信装置２０ａに送信する（ステップＳ５３）。
【００９８】
通信装置２０ａ中の特定部３５ａは、通信部２１ａを介して送信要求を取得する。特定部３５ａは、送信要求中のハッシュ値とアドレスの情報を用いて、送信要求によって要求されたデータを特定する。ステップＳ５３で送信された送信要求の場合、データＡのハッシュ値と分割データＡ−１の受信に成功したことが通知されている。そこで、特定部３５ａは、データＡのうちで分割データＡ−１を除いた領域のデータ（分割データＡ−２）が、通信装置２０ｃにおいて受信されていないと判定する。特定部３５ａは、データＡのハッシュ値、分割データＡ−２、データＡのうちで通信装置２０ａが記憶する領域のアドレスを含めた送信パケットを生成する。例えば、特定部３５ａは、以下の情報を含む送信パケットを生成する。
【００９９】
ハッシュ値  ：ｈａｓｈＡ
データ      ：分割データＡ−２
通信装置２０ａで記憶するデータのアドレス：Ａ（１−５０）
特定部３５ａは、生成したパケットを通信部２１ａ経由で通信装置２０ｃに送信する（ステップＳ５４）。
【０１００】
通信装置２０ｃの復元処理部３６ｃは、通信部２１ｃを介してパケットを取得すると、既に取得済みの分割データＡ−１と、受信パケット中の分割データＡ−２を用いてデータＡを復元する。保存処理部３４ｃは、復元処理が成功すると、復元されたデータＡのうちで、通信装置２０ａで記憶されていない領域を、データＡのハッシュ値に対応付けて記憶する。このため、保存処理部３４ｃの処理により、キャッシュ４１ｃには、図１３に示すように、分割データＡ−２が格納される。さらに、ステップＳ５４のパケットの受信により、復元処理に成功しているので、特定部３５ｃは、データＡの受信に成功したことをあらわす完了通知を生成し、通信部２１ｃ経由で通信装置２０ａに送信する。
【０１０１】
通信装置２０ａ中の重複判定部３１ａは、データＡの受信の成功を通知する完了通知が通信部２１ａで受信されると、記憶部４０ａ中に保持しているデータＡを削除する。
【０１０２】
（３）通信装置２０ｃから通信装置２０ｂへのデータＡの送信
この時点では、ステップＳ５４での処理により、通信装置２０ｃのキャッシュ４１ｃにデータＡのハッシュ値や分割データＡ−２が含まれている。このため、送信対象のデータＡの代わりに、特定部３５ｃは、データＡのハッシュ値、分割データＡ−２、および、分割データＡ−２のアドレス情報を、通信装置２０ｂに送信する（ステップＳ５５）。
【０１０３】
通信装置２０ｂの復元処理部３６ｂは、受信パケットにデータＡのハッシュ値が含まれているため、受信パケットに含まれているデータを用いた復元処理を行おうとする。しかし、通信装置２０ｂが備えるキャッシュ４１ｂには、データＡのハッシュ値に対応付けて分割データＡ−２と、分割データＡ−２のアドレス情報が記録されている。このため、復元処理部３６ｂは、データＡのうち分割データＡ−２しか取得しないので、復元処理に失敗する。そこで、復元処理部３６ｂは、データの復元を行うために通信装置２０ｃへの追加のデータ送信を要求する送信要求を生成する。ここで生成される送信要求には、以下の情報が含まれる。
【０１０４】
ハッシュ値                    ：ｈａｓｈＡ
受信に成功したデータのアドレス：Ａ（５１−１００）
復元処理部３６ｂは、通信部２１ｂを介して、送信要求を通信装置２０ｃに送信する（ステップＳ５６）。
【０１０５】
通信装置２０ｃ中の特定部３５ｃは、通信部２１ｃを介して送信要求を取得する。特定部３５ｃは、送信要求中のハッシュ値とアドレスの情報を用いて、送信要求によって要求されたデータを特定する。ステップＳ５６で送信された送信要求の場合、データＡのハッシュ値とＡ（５１−１００）の領域のデータの受信に成功したことが通知されているので、特定部３５ａは、データＡのうちでＡ（５１−１００）を除いた領域のデータ（分割データＡ−１）が、通信装置２０ｂにおいて受信されていないと判定する。そこで、特定部３５ｃは、データＡのハッシュ値、分割データＡ−１、データＡのうちで通信装置２０ｃが記憶する領域のアドレスを含めた送信パケットを生成する。例えば、特定部３５ｃは、以下の情報を含む送信パケットを生成する。
【０１０６】
ハッシュ値  ：ｈａｓｈＡ
データ      ：分割データＡ−１
通信装置２０ｃで記憶するデータのアドレス：Ａ（５１−１００）
特定部３５ｃは、生成したパケットを通信部２１ｃ経由で通信装置２０ｂに送信する（ステップＳ５７）。
【０１０７】
通信装置２０ｂの復元処理部３６ｂは、通信部２１ｂを介してパケットを取得すると、分割データＡ−２と受信パケット中の分割データＡ−１を用いてデータＡを復元する。ここで、保存処理部３４ｃは、復元されたデータＡのハッシュ値に対応付けてデータＡの一部（分割データＡ−２）を既にキャッシュ４１ｂに記憶しているので、復元処理が成功してもキャッシュ４１ｂの情報を更新しない。ステップＳ５７のパケットの受信により、復元処理に成功しているので、特定部３５ｂは、データＡの受信に成功したことを表わす完了通知を生成し、通信部２１ｂ経由で通信装置２０ｃに送信する。
【０１０８】
通信装置２０ｃ中の重複判定部３１ｃは、データＡの受信の成功を通知する完了通知が通信部２１ｃで受信されると、記憶部４０ｃ中に保持しているデータＡを削除する。
【０１０９】
図１４は、第３の実施形態での送信処理の例を説明するフローチャートである。ステップＳ６１〜Ｓ６７の処理は、図６を参照しながら説明したステップＳ１〜Ｓ７と同様である。
【０１１０】
特定部３５は、データの送信先の通信装置２０から完了通知を受信したかを判定する（ステップＳ６８）。データの送信先の通信装置２０から完了通知を受信した場合、特定部３５は処理を終了する（ステップＳ６８でＹｅｓ）。
【０１１１】
一方、データの送信先の通信装置２０から完了通知を受信していない場合、特定部３５は、データの送信先の通信装置２０から送信要求を受信したかを判定する（ステップＳ６８でＮｏ、ステップＳ６９）。送信要求を受信していない場合、ステップＳ６８に戻る（ステップＳ６９でＮｏ）。送信要求を受信した場合、送信要求で要求されたアドレスのデータを送信して、ステップＳ６８に戻る（ステップＳ６９でＹｅｓ、ステップＳ７０）。
【０１１２】
図１５は、受信処理の例を説明するフローチャートである。ステップＳ８１〜Ｓ８５の処理は、図７を参照しながら説明したステップＳ１１〜Ｓ１５と同様である。従って、ステップＳ８１〜Ｓ８５では、受信側の通信装置２０は、送信側の通信装置２０から送信対象のデータの全体を受信している。そこで、ステップＳ８５の処理後、特定部３５は、受信完了通知を、データの送信元の通信装置２０に送信する（ステップＳ９５）。
【０１１３】
受信したデータにインデックスが含まれている場合、復元処理部３６は、インデックスに対応付けられている分割データがキャッシュ４１に保持されているかを判定する（ステップＳ８２でＹｅｓ、ステップＳ８６）。インデックスに対応付けられている分割データがキャッシュ４１に保持されていない場合、復元処理部３６は、不足しているデータのアドレス情報を送信要求として、データの送信元の通信装置２０に送信する（ステップＳ８６でＮｏ、ステップＳ８７）。その後、通信部２１は、送信要求の宛先とした通信装置２０からパケットを受信する（ステップＳ８８）。すると、復元処理部３６は、ステップＳ８８で取得したパケット中のデータを含めて、送信元の通信装置２０が送信しようとしたデータの復元ができたかを判定する（ステップＳ８９）。送信元の通信装置２０が送信しようとしたデータの復元ができていない場合、ステップＳ８７以降の処理が行われる（ステップＳ８９でＮｏ）。
【０１１４】
一方、データの復元ができた場合、受信側の通信装置２０は、これまでに送受信の対象となっているデータの一部をキャッシュ４１に保持していないが、今回、送受信の対象のデータを取得したことになる（ステップＳ８９でＹｅｓ）。そこで、次回以降の通信に備えて、送受信の対象となっているデータの一部をキャッシュ４１に保持するために、ステップＳ８３以降の処理を行う（ステップＳ８９でＹｅｓ、ステップＳ８３）。
【０１１５】
次に、受信したデータにインデックスが含まれており、かつ、インデックスに対応付けられている分割データがキャッシュ４１に保持されている場合の処理について説明する（ステップＳ８２でＹｅｓ、ステップＳ８６でＹｅｓ）。この場合、復元処理部３６は、インデックスに対応付けられている分割データをキャッシュ４１から読み出す（ステップＳ９０）。復元処理部３６は、受信したデータと読み出した分割データを、アドレス情報に従って組み合わせる（ステップＳ９１）。復元処理部３６は、ステップＳ９１の処理により送信元の通信装置２０が送信しようとしたデータの復元ができたかを判定する（ステップＳ９２）。送信元の通信装置２０が送信しようとしたデータの復元ができていない場合、復元処理部３６は、不足しているデータのアドレス情報を送信要求として、データの送信元の通信装置２０に送信する（ステップＳ９２でＮｏ、ステップＳ９３）。その後、通信部２１は、送信要求の宛先とした通信装置２０からパケットを受信する（ステップＳ９４）。すると、復元処理部３６は、ステップＳ９４で取得したパケット中のデータを含めて、送信元の通信装置２０が送信しようとしたデータの復元ができたかを判定する（ステップＳ９２）。送信元の通信装置２０が送信しようとしたデータの復元ができていない場合、ステップＳ９３以降の処理が行われる（ステップＳ９２でＮｏ）。一方、送信元の通信装置２０が送信しようとしたデータの復元ができた場合、特定部３５は、受信完了通知を、データの送信元の通信装置２０に送信する（ステップＳ９２でＹｅｓ、ステップＳ９５）。
【０１１６】
このように、第３の実施形態によると、３台以上の各通信装置２０の各々がデータの一部を記憶し、記憶したデータを活用した重複処理を行いつつ、通信処理を行うことができる。さらに、送信側の通信装置２０で記憶しているデータと受信側の通信装置２０で記憶しているデータから、送受信対象のデータが再現されない場合、受信側の通信装置２０からの要求に応じて、送信側の通信装置２０は、未送信の分割データを送信する。このため、各通信装置２０が他の通信装置２０で保持されている分割データのアドレス情報等を管理しなくても、３台以上の各通信装置２０が自装置で記憶しているデータを用いた重複処理を行うことができる。このため、第３の実施形態を用いると、通信装置２０が他の通信装置２０と行った通信の結果を用いて重複除去を効率的に行うことができる場合がある。
【０１１７】
＜第４の実施形態＞
第４の実施形態では、消失訂正符号を用いた通信が行われる場合について説明する。
【０１１８】
図１６は、第４の実施形態にかかる通信装置の構成の例を説明する図である。通信装置５０は、通信部２１、制御部５５、記憶部４０を備える。制御部５５は、重複判定部３１、分割サイズ決定部３２、保存処理部３４、特定部３５、符号化処理部５６、復号処理部５７を有する。記憶部４０は、キャッシュ４１として動作し、さらに、オプションとして、重複カウンタ４２を保持する。
【０１１９】
符号化処理部５６は、分割サイズ決定部３２で決定されたサイズに合わせて送信対象のデータを分割した上で、符号化する。保存処理部３４は、符号化処理部５６が符号化した分割データを、送信対象のデータのハッシュ値に対応付けてキャッシュ４１に記録する。特定部３５は、キャッシュ４１中に含まれている符号化された分割データ等を、適宜、送信対象として特定する。復号処理部５７は、他の通信装置５０から符号化された分割データを含むパケットを受信した場合、符号化された分割データとキャッシュ４１に保持しているデータを用いて、送受信の対象のデータを復元する。
【０１２０】
なお、送信側の通信装置５０から受信側の通信装置５０に、送信履歴の無いデータが送信される場合は、他の実施形態と同様に、符号化を行わずに送信対象のデータの全体が受信側の通信装置５０に送信される。ただし、送信側の通信装置５０が記憶するデータは、符号化によって得られた割符などの形で、送信対象のデータのハッシュ値と共にキャッシュ４１に格納される。さらに、第４の実施形態においても、送信側の通信装置５０は、送信側の通信装置５０で記憶しているデータを特定する際に使用可能なアドレス情報を受信側の通信装置５０に通知する。このため、受信側の通信装置５０に含まれている符号化処理部５６は、送信側で保存しているデータのアドレスを用いて、自装置が保持するデータの量を決定すると共に、自装置が保持するデータを符号化する。このとき、符号化処理部５６は、送受信の対象となっているデータのうち、送信側の通信装置５０で記憶されていないデータと、送信側の通信装置５０で記憶されているデータの一部を、受信側の通信装置５０で記憶するデータとして選択しても良い。すると、送信側と受信側の双方で、符号化したデータを保持しているので、２回目以降に送信されたデータの一部が欠落した場合でも、データの復元が可能になるケースがある。
【０１２１】
例えば、送信側の通信装置５０ａにおいてデータＡの先頭から６０％を符号化した上で、記憶しているとする。受信側の通信装置５０ｂは、データＡの末尾側４０％に加えて、通信装置５０ａが保持しているデータの一部を保持対象としたために、データＡの末尾よりの６０％のデータを符号化して保持したとする。この場合、通信装置５０ａから送信されたデータの一部が欠落したとしても、通信装置５０ｂが保持している符号化データと通信装置５０ｂが通信装置５０ａから受信した符号化データを合わせて、通信装置５０ｂがデータＡを復元できる場合がある。
【０１２２】
図１６に示す転送装置５０でも、ハードウェア構成は図４に示すとおりである。ネットワーク接続装置１０４は、通信部２１として動作する。制御部５５はプロセッサ１０１により実現される。さらに、記憶部４０はメモリ１０２によって実現される。
【０１２３】
図１７は、消失訂正を用いた割符情報の生成方法の例を説明する図である。図１７の例では、送受信の対象のデータを４つの分割データに分割した上で、８行４列の行列式を割符化行列として８種類の符号化データを生成する場合を示している。また、異なる２つの符号化データが１つの割符データとして使用される。
【０１２４】
図１７の例では、割符化行列で成分の値が１に設定されている分割データ同士での排他的論理和（ＸＯＲ）を計算することにより、各符号化データが生成される。例えば、送受信の対象のデータが１〜４の分割データに分割された場合、割符Ａに含める１つ目の符号化データは、１つ目の分割データ、２つ目の分割データ、および、４つ目の分割データの排他的論理和である。同様に、割符Ａの２つ目の符号化データは、２つ目の分割データと３つ目の分割データの排他的論理和である。さらに、割符Ｂの１つ目の符号化データは、１つ目の分割データと３つ目の分割データの排他的論理和であり、２つ目の符号化データは、２つ目の分割データ、３つ目の分割データ、および、４つ目の分割データの排他的論理和である。割符Ｃの１つ目の符号化データは、１つ目の分割データと４つ目の分割データの排他的論理和であり、２つ目の符号化データは、２つ目の分割データである。割符Ｄの１つ目の符号化データは、１つ目の分割データであり、２つ目の符号化データは２つ目の分割データと４つ目の分割データの排他的論理和である。これらの割符の生成は、送信側の通信装置５０の符号化処理部５６で行われる。
【０１２５】
一方、復号処理部５７では、受信したデータやキャッシュ４１に含まれている符号化データを復号することにより、送受信の対象となっているデータを復元する。このとき、例えば、復号処理部５７は、割符同士の排他的論理和の算出等を行うことにより、データを復元する。
【０１２６】
なお、符号化されたデータを含む割符を用いて、第３の実施形態と同様に、３つの通信装置５０の間でのデータの送受信が行われても良い。３つの通信装置５０の間でのデータの送受信が割符を用いて行われると、符号化データによる誤り訂正により、再送処理を行わずに通信ができる場合がある。
【０１２７】
図１８は、３つの通信装置５０（５０ａ〜５０ｃ）での通信処理の例を説明する図である。例えば、送受信の対象がデータＡであるとする。また、図１８では、通信装置５０ａから通信装置５０ｂにデータＡと共に、通信装置５０ａがデータＡの８０％分の分割データを保持することを通知したとする。２回目以降の通信に備えて、通信装置５０ａは、データＡの８０％分の分割データを符号化して得られた符号化データａ１＿８０を、データＡのハッシュ値に対応付けて、キャッシュ４１ａに保持する。
【０１２８】
一方、通信装置５０ｂの符号化処理部５６ｂは、データＡのうちで通信装置５０ａが保持していないデータと、通信装置５０ａが保持しているデータの一部を合わせて、通信装置５０ｂが保持するデータを決定する。図１８の例では、符号化処理部５６ｂは、データＡの８０％分のデータを含む符号化データａ２＿８０を、データＡのハッシュ値に対応付けて、キャッシュ４１ｂに格納したとする。
【０１２９】
次に、通信装置５０ａは、通信装置５０ｂへのデータＡの送信後に通信装置５０ｃにデータＡを送信しようとしたとする。この場合、図１３を参照した説明と同様の処理により、通信装置５０ｃには符号化データａ１＿８０が送信される。通信装置５０ｃの復号処理部５７ｃは、符号化データａ１＿８０を復号化するが、符号化データａ１＿８０にはデータＡの８０％しか含まれていないので、データＡの復元に失敗する。そこで、特定部３５ｃは、第３の実施形態と同様に、通信装置５０ａに追加のデータを要求する。追加のデータの受信により、通信装置５０ｃでデータＡが復元されると、符号化処理部５６ｃは、データＡのうち、通信装置５０ａで保持されていないデータを含むデータを符号化して、キャッシュ４１ｃに格納する。図１８の例では、符号化処理部５６ｃは、データＡの４０％分のデータを含む符号化データａ３＿４０を、データＡのハッシュ値に対応付けて、キャッシュ４１ｃに格納したとする。
【０１３０】
このように、通信装置５０ａ中のキャッシュ４１ａに符号化データａ１＿８０、通信装置５０ｂ中のキャッシュ４１ｂに符号化データａ２＿８０、通信装置５０ｃ中のキャッシュ４１ｃに符号化データａ３＿４０が格納されたとする。
【０１３１】
その後、通信装置５０ａが通信装置５０ｂにデータＡを送信する際には、特定部３５ａは、キャッシュ４１ａに格納されている符号化データａ１＿８０とデータＡのハッシュ値を送信対象とする（ステップＳ１０１）。すると、通信装置５０ｂの復号処理部５７ｂは、キャッシュ４１ｂに格納されている符号化データａ２＿８０と符号化データａ１＿８０を用いてデータＡを復元する。
【０１３２】
一方、通信装置５０ａが通信装置５０ｃにデータＡを送信する際にも、特定部３５ａは、符号化データａ１＿８０とデータＡのハッシュ値を送信対象とする（ステップＳ１０２）。この場合、通信装置５０ｃの復号処理部５７ｃは、キャッシュ４１ｃに格納されている符号化データａ３＿４０と符号化データａ１＿８０を用いてデータＡを復元する。
【０１３３】
次に、通信装置５０ｃが通信装置５０ｂにデータＡを送信する場合の例を説明する。通信装置５０ｃにおいても、データＡの送信の際には、第３の実施形態と同様に、重複判定部３１ｃがキャッシュ４１ｃ中にデータＡのハッシュ値と符号化データａ３＿４０が格納指されていることを認識する。すると、特定部３５ｃはデータＡの代わりに符号化データａ３＿４０を送信対象として特定するので、データＡのハッシュ値と符号化データａ３＿４０が、通信装置５０ｂに送信される（ステップＳ１０３）。
【０１３４】
通信装置５０ｂ中の符号化処理部５６ｂは、データＡのハッシュ値に対応付けてキャッシュ４１ｂに格納している符号化データａ２＿８０と、受信データ中の符号化データａ３＿４０を用いてデータＡの復元を試みる。ここで、符号化データａ２＿８０にはデータＡの８０％のデータが含まれ、符号化データａ３＿４０にはデータＡの４０％のデータが含まれている。このため、符号化処理部５６ｂは、符号化データａ２＿８０と符号化データａ３＿４０を用いてデータＡの復元に成功する可能性がある。符号化処理部５６ｂがステップＳ１０３で送信された符号化データとキャッシュ４１ｂ中に格納している符号化データから、データＡの復元に成功すると、通信装置５０ｂは通信装置５０ｃに対して追加のデータの送信を要求しない。
【０１３５】
このため、図１８に示すように、符号化データを用いた３台以上の通信装置５０間での通信では、第３の実施形態に比べて、送信側の通信装置５０からの再送処理が発生しない場合がある。このため、第４の実施形態のように、消失訂正符号化を用いることにより、３台以上の通信装置５０を含むシステムでの通信効率が改善する可能性がある。
【０１３６】
＜その他＞
なお、実施形態は上記に限られるものではなく、様々に変形可能である。以下にその例をいくつか述べる。
【０１３７】
例えば、以上の説明で示したキャッシュ４１や重複カウンタ４２は一例であり、実装に応じて変更され得る。例えば、キャッシュ４１や重複カウンタ４２に含まれる情報要素は、実装に応じて変更され得る。
【０１３８】
符号化処理に使用される割符化行列は一例であり、実装に応じて変更され得る。また、割符に含まれるデータの量や各通信装置５０が保持するデータの割合も、実装に応じて任意に変更され得る。
【０１３９】
上述の第１〜第４の実施形態を含む実施形態に関し、さらに以下の付記を開示する。
（付記１）
通信先への送信履歴の無い送信データの一部である第１の分割データを、前記送信データを識別する識別情報に対応付けて記憶する記憶部と、
前記送信データと前記第１の分割データを特定する情報の組み合わせを含む送信パケットを送信することにより、前記送信データのうち前記第１の分割データに含まれないデータである第２の分割データを前記識別情報に対応付けて前記通信先に記憶させる通信部と、
前記送信パケットの送信後は、前記送信データの代わりに、前記識別情報と前記第１の分割データを前記通信先への送信対象として特定する特定部
を備えることを特徴とする通信装置。
（付記２）
前記送信データのうちで前記記憶部が記憶するデータを決定する決定部をさらに備え、
前記送信パケットの送信後に、前記決定部が前記送信データのうちで前記記憶部が記憶するデータを第３の分割データに決定すると、前記記憶部は、前記識別情報に対応付けて記憶するデータを、前記第１の分割データから第３の分割データに変更し、
前記通信部は、前記識別情報と前記第３の分割データを特定する情報の組み合わせを含む他の送信パケットを前記通信先に送信することにより、前記通信先に、前記送信データのうちで前記第３の分割データに含まれないデータである第４の分割データを前記識別情報に対応付けて記憶させる
ことを特徴とする付記１に記載の通信装置。
（付記３）
前記記憶部は、前記通信先に記憶させるデータを調整する調整回数をさらに記憶し、
前記決定部は、前記通信先へ前記送信データの一部以上を送信した回数が前記調整回数を超えると、前記送信データのうちで前記通信先に記憶させるデータを変更しないと判定し、
前記特定部は、前記送信データを識別する識別情報と共に、前記識別情報に対応付けて前記記憶部に格納されているデータを、前記通信先に送信する対象として特定する
ことを特徴とする付記２に記載の通信装置。
（付記４）
前記記憶部は、他の通信装置から受信した受信データに含まれている他の識別情報に対応付けて、前記他の識別情報で識別されるデータのうち、前記他の通信装置が記憶していない領域のデータを記憶し、
前記他の識別情報を含むデータパケットを受信すると、前記データパケット中のデータと前記他の識別情報に対応付けて前記記憶部が格納しているデータを用いて、送信対象のデータを復元する復元処理部
をさらに備えることを特徴とする付記１〜３のいずれか１項に記載の通信装置。
（付記５）
誤り訂正符号を用いた符号化処理を行う符号化処理部をさらに備え、
前記記憶部は、前記符号化処理により前記第１の分割データを符号化して得られたデータを、前記送信データを識別する識別情報に対応付けて記憶し、
前記通信部は、前記送信パケットを送信することにより、前記第２の分割データを符号化して得られるデータを前記識別情報に対応付けて前記通信先に記憶させる
ことを特徴とする付記１〜４のいずれか１項に記載の通信装置。
（付記６）
第１の通信装置と、
前記第１の通信装置と通信する第２の通信装置
を備え、
前記第２の通信装置は、
前記第１の通信装置への送信履歴の無い送信対象である対象データの一部である第１の分割データを、前記対象データを識別する識別情報に対応付けて記憶し、
前記対象データと前記第１の分割データを特定する情報の組み合わせを含む送信パケットを、前記第１の通信装置へ送信し、
前記第１の通信装置は、前記対象データのうち前記第１の分割データに含まれないデータである第２の分割データを前記識別情報に対応付けて記憶し、
前記第２の通信装置は、前記送信パケットの送信後は、前記対象データの代わりに、前記識別情報と前記第１の分割データを前記第１の通信装置へ送信する
ことを特徴とする通信システム。
（付記７）
前記第１の通信装置は、前記第２の通信装置から前記識別情報に前記第１の分割データを対応付けたパケットを受信すると、前記第１の分割データと前記第２の分割データを用いて、前記対象データを復元する
ことを特徴とする付記６に記載の通信システム。
（付記８）
前記第２の通信装置は、
前記送信パケットの送信後に、前記対象データのうちで前記第２の通信装置が記憶するデータを前記第１の分割データから第３の分割データに変更する場合、前記識別情報に対応付けて前記第３の分割データを記憶し、
前記識別情報と前記第３の分割データを特定する情報の組み合わせを含む他の送信パケットを前記第１の通信装置に送信し、
前記第１の通信装置は、前記他の送信パケットを受信すると、前記対象データのうち前記第３の分割データに含まれないデータである第４の分割データを前記識別情報に対応付けて記憶する
ことを特徴とする付記６または７に記載の通信システム。
（付記９）
第１の通信装置と、前記第１の通信装置と通信する第２の通信装置を含むネットワークにおいて、
前記第２の通信装置は、
前記第１の通信装置への送信履歴の無い送信対象である対象データの一部である第１の分割データを、前記対象データを識別する識別情報に対応付けて記憶し、
前記対象データと前記第１の分割データを特定する情報の組み合わせを含む送信パケットを、前記第１の通信装置へ送信し、
前記第１の通信装置は、前記対象データのうち前記第１の分割データに含まれないデータである第２の分割データを前記識別情報に対応付けて記憶し、
前記第２の通信装置は、前記送信パケットの送信後は、前記対象データの代わりに、前記識別情報と前記第１の分割データを前記第１の通信装置へ送信する
ことを特徴とする通信方法。
（付記１０）
前記第１の通信装置は、前記第２の通信装置から前記識別情報に前記第１の分割データを対応付けたパケットを受信すると、前記第１の分割データと前記第２の分割データを用いて、前記対象データを復元する
ことを特徴とする付記９に記載の通信方法。
（付記１１）
前記第２の通信装置は、
前記送信パケットの送信後に、前記対象データのうちで前記第２の通信装置が記憶するデータを前記第１の分割データから第３の分割データに変更する場合、前記識別情報に対応付けて前記第３の分割データを記憶し、
前記識別情報と前記第３の分割データを特定する情報の組み合わせを含む他の送信パケットを前記第１の通信装置に送信し、
前記第１の通信装置は、前記他の送信パケットを受信すると、前記対象データのうち前記第３の分割データに含まれないデータである第４の分割データを前記識別情報に対応付けて記憶する
ことを特徴とする付記９または１０に記載の通信方法。
（付記１２）
通信先への送信履歴の無い送信データの一部である第１の分割データを、前記送信データを識別する識別情報に対応付けて記憶し、
前記送信データと前記第１の分割データを特定する情報の組み合わせを含む送信パケットを送信することにより、前記送信データのうち前記第１の分割データに含まれないデータである第２の分割データを前記識別情報に対応付けて前記通信先に記憶させ、
前記送信パケットの送信後は、前記送信データの代わりに、前記識別情報と前記第１の分割データを前記通信先への送信対象として特定する
処理を通信装置に行わせることを特徴とする通信プログラム。
（付記１３）
前記送信パケットの送信後に、前記送信データのうちで前記識別情報に対応付けて記憶するデータを前記第１の分割データから第３の分割データに変更すると、前記識別情報と前記第３の分割データを特定する情報の組み合わせを含む他の送信パケットを前記通信先に送信することにより、前記通信先に、前記送信データのうちで前記第３の分割データに含まれないデータである第４の分割データを前記識別情報に対応付けて記憶させる
処理を通信装置に行わせることを特徴とする付記１２に記載の通信プログラム。
（付記１４）
前記通信装置に、
前記通信先に記憶させるデータを調整する調整回数をさらに記憶し、
前記通信先への前記送信データの一部以上を送信した回数が前記調整回数を超えると、前記送信データのうちで前記通信先に記憶させるデータを変更しないと判定し、
前記送信データを識別する識別情報と共に、前記識別情報に対応付けて記憶しているデータを、前記通信先に送信する対象として特定する
処理を行わせることを特徴とする付記１３に記載の通信プログラム。
（付記１５）
前記通信装置に、
他の通信装置から受信した受信データに含まれている他の識別情報に対応付けて、前記他の識別情報で識別されるデータのうち、前記他の通信装置が記憶していない領域のデータを記憶し、
前記他の識別情報を含むデータパケットを受信すると、前記データパケット中のデータと前記他の識別情報に対応付けて記憶しているデータを用いて、送信対象のデータを復元する、
処理を行わせることを特徴とする付記１２〜１４のいずれか１項に記載の通信プログラム。
【符号の説明】
【０１４０】
３  ＷＡＮ
５  転送装置
６  キャッシュ
１０  端末
２０、５０  通信装置
２１  通信部
３０、５５  制御部
３１  重複判定部
３２  分割サイズ決定部
３３  分割処理部
３４  保存処理部
３５  特定部
３６  復元処理部
４０  記憶部
４１  キャッシュ
４２  重複カウンタ
５６  符号化処理部
５７  復号処理部
１０１  プロセッサ
１０２  メモリ
１０３  バス
１０４  ネットワーク接続装置
【図１】
2018113645.tif 000004
【図２】
2018113645.tif 000005
【図３】
2018113645.tif 000006
【図４】
2018113645.tif 000007
【図５】
2018113645.tif 000008
【図６】
2018113645.tif 000009
【図７】
2018113645.tif 000010
【図８】
2018113645.tif 000011
【図９】
2018113645.tif 000012
【図１０】
2018113645.tif 000013
【図１１】
2018113645.tif 000014
【図１２】
2018113645.tif 000015
【図１３】
2018113645.tif 000016
【図１４】
2018113645.tif 000017
【図１５】
2018113645.tif 000018
【図１６】
2018113645.tif 000019
【図１７】
2018113645.tif 000020
【図１８】
2018113645.tif 000021