(57)【要約】  通信装置は、記憶部、設定部、送信部を備える。記憶部は、データをデータの宛先に送信した回数を、データを識別する識別子に対応付けて記憶する。設定部は、宛先へ送信する対象のデータである対象データの送信回数が閾値に達すると、対象データの代替として宛先に送信する代替データを、対象データと対象データの保持を要求する保持要求の組み合わせに設定する。設定部は、対象データに対する保持要求の送信後は、対象データの識別子を代替データに設定する。送信部は、代替データを宛先に送信する。
2015107653.tif 000002
【特許請求の範囲】
【請求項１】
データを前記データの宛先に送信した回数を、前記データを識別する識別子に対応付けて記憶する記憶部と、
前記宛先へ送信する対象のデータである対象データの送信回数が閾値に達すると、前記対象データの代替として前記宛先に送信する代替データを、前記対象データと前記対象データの保持を要求する保持要求の組み合わせに設定し、前記対象データに対する保持要求の送信後は、前記対象データの識別子を前記代替データに設定する設定部と、
前記代替データを前記宛先に送信する送信部
を備えることを特徴とする通信装置。
【請求項２】
前記設定部は、前記対象データの送信回数が前記閾値未満の間、前記代替データを、前記対象データと前記対象データの保持を禁止する情報の組み合わせに設定する
ことを特徴とする請求項１に記載の通信装置。
【請求項３】
前記通信装置に向けて送信されたデータを受信する受信部と、
受信データのうちで、前記保持要求が付加されたデータを保持する受信キャッシュと、
前記通信装置にデータを送信する装置である送信元から受信するデータのトラフィックレートを算出する算出部と、
前記送信元が前記保持要求を付加するまでに前記通信装置に同じデータを送信できる回数の上限値の指標として前記送信元が使用する指標値を、前記トラフィックレートが低いほど小さな値になるように決定する決定部を備え、
前記送信部は、前記指標値を含むパケットを前記送信元に送信する
ことを特徴とする請求項１または２に記載の通信装置。
【請求項４】
第１の通信装置と第２の通信装置を含むネットワークにおいて、
前記第１の通信装置は、
前記第２の通信装置に送信するデータを識別する識別子を生成し、
前記第２の通信装置へ送信する対象のデータである対象データの送信回数が閾値に達すると、前記対象データの代替として前記第２の通信装置に送信する代替データを、前記対象データと前記対象データの保持を要求する保持要求との組み合わせに設定し、
前記第２の通信装置は、前記保持要求と共に受信した前記対象データを前記第２の通信装置が保持する受信キャッシュに保持し、
前記第１の通信装置は、前記保持要求の送信後は、前記対象データの識別子を前記代替データに設定し、
前記第２の通信装置は、前記識別子を受信すると、前記識別子に対応付けられたデータを、前記第１の通信装置から受信したデータとして扱う
ことを特徴とする通信方法。
【請求項５】
前記第１の通信装置は、前記第２の通信装置への前記対象データの送信回数が前記閾値未満の間、前記代替データを、前記対象データと前記対象データの保持を禁止する禁止情報の組み合わせに設定し、
前記第２の通信装置は、前記禁止情報と共に受信した対象データを、前記第１の通信装置からの受信データとして処理する際に、前記受信キャッシュに格納しない
ことを特徴とする請求項４に記載の通信方法。
【請求項６】
前記第２の通信装置は、
前記第１の通信装置から受信するデータのトラフィックレートを算出し、
前記閾値の値を、前記トラフィックレートが低いほど小さな値になるように決定し、
前記第１の通信装置に、前記閾値として決定した値を通知し、
前記第１の通信装置は、前記第２の通信装置から通知された値を前記閾値として用いて、前記保持要求を付してデータを前記第２の通信装置に送信するかを判定する
ことを特徴とする請求項４または５に記載の通信方法。
【請求項７】
前記第１の通信装置は、第１の閾値を用いて前記第２の通信装置に送信するデータに前記保持要求を含めるかを判定し、
第３の通信装置は、第２の閾値を用いて前記第２の通信装置に送信するデータに前記保持要求を含めるかを判定し、
前記第２の通信装置は、
前記第１の通信装置から受信するデータのトラフィックレートである第１のレートと、前記第３の通信装置から受信するデータのトラフィックレートである第２のレートを算出し、
前記第２のレートが前記第１のレートより高い場合、前記第２の閾値の値が前記第１の閾値よりも大きくなるように、前記第１および第２の閾値の更新値を決定し、
前記第１の通信装置は、前記第２の通信装置から通知された前記第１の閾値の更新値を用いて、前記第２の通信装置に送信するデータに前記保持要求を含めるかを判定し、
前記第３の通信装置は、前記第２の通信装置から通知された前記第２の閾値の更新値を用いて、前記第２の通信装置に送信するデータに前記保持要求を含めるかを判定する
ことを特徴とする請求項４または５に記載の通信方法。
【請求項８】
データを前記データの宛先に送信した回数を、前記データを識別する識別子に対応付けて記憶し、
前記宛先へ送信する対象のデータである対象データの送信回数が閾値に達すると、前記対象データの代替として前記宛先に送信する代替データを、前記対象データと前記対象データの保持を要求する保持要求の組み合わせに設定し、
前記対象データに対する保持要求の送信後は、前記対象データの識別子を前記代替データに設定し、
前記代替データを前記宛先に送信する
処理を通信装置に行わせることを特徴とする通信プログラム。
【請求項９】
前記対象データの送信回数が前記閾値未満の間、前記代替データを、前記対象データと前記対象データの保持を禁止する情報の組み合わせに設定する
処理を、前記通信装置に行わせることを特徴とする請求項８に記載の通信プログラム。
【請求項１０】
前記通信装置に向けて送信されたデータを受信し、
前記通信装置にデータを送信する装置である送信元から受信するデータのトラフィックレートを算出し、
前記送信元が前記保持要求を付加するまでに前記通信装置に同じデータを送信できる回数の上限値の指標として前記送信元が使用する指標値を、前記トラフィックレートが低いほど小さな値になるように決定し、
前記指標値を含むパケットを前記送信元に送信する
処理を、前記通信装置に行わせることを特徴とする請求項８または９に記載の通信プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数の通信装置の間で行われる通信に関する。
【背景技術】
【０００２】
近年、通信の高速化が求められてきており、通信速度を高速化するために様々な試みが行われてきている。例えば、データの送信量を減らすために、送信対象のデータに対して重複除去が行われることがある。重複除去では、受信側の通信装置が、過去に送信側の通信装置から受信したデータを、識別子に対応付けてキャッシュに保存しており、送信側の通信装置も過去に送信したデータの識別子を記憶している。送信側の通信装置は、送信しようとするデータがすでに送信したことがあるデータであるかを、データの識別子を用いて判定し、すでに送信したことがあるデータについては、データの代わりに、そのデータに対応付けられた識別子を受信側の通信装置に送信する。受信側の通信装置は、受信した識別子に対応付けられたデータをキャッシュから読み出して、読み出したデータを送信側の通信装置から送信されたデータとして扱う。【０００３】
重複するデータの処理に関連して、同一のイメージデータを処理する場合、プリンタドライバはその旨を示す情報をデータに付加してプリンタに転送し、プリンタがイメージデータをキャッシュする方法が提案されている（例えば、特許文献１）。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００２−９１７３１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
キャッシュを用いて送信データ中の重複を除去する場合、受信側の通信装置が備えているキャッシュのサイズが大きいほど多くのデータがキャッシュに格納されるため、重複したデータの送信を防ぎやすくなる。しかし、受信側の通信装置が備えるキャッシュの容量は有限であるため、受信側の装置は、キャッシュの空き容量がなくなると、最終アクセスからの経過時間が長いデータから順に削除することになる。このため、受信側でのデータの削除により、効率的に重複除去ができない場合がある。例えば、送信対象のデータ中に、データＡが複数回含まれていたとしても、先に送信されるデータＡと後に送信されるデータＡの間に、重複していないデータが大量に送信される場合がある。このとき、後から送信されるデータＡの送信前に受信側の通信装置のキャッシュの空き容量がなくなり、データＡが受信側の通信装置で削除されると、送信側の通信装置は、データＡを受信側の通信装置に再度送信することになる。【０００６】
本発明は、１つの側面として、重複部分を含むデータの転送を効率的に防止し、通信を高速化することを目的とする。
【課題を解決するための手段】
【０００７】
実施形態に係る通信装置は、記憶部、設定部、送信部を備える。記憶部は、データを前記データの宛先に送信した回数を、前記データを識別する識別子に対応付けて記憶する。設定部は、前記宛先へ送信する対象のデータである対象データの送信回数が閾値に達すると、前記対象データの代替として前記宛先に送信する代替データを、前記対象データと前記対象データの保持を要求する保持要求の組み合わせに設定する。設定部は、前記対象データに対する保持要求の送信後は、前記対象データの識別子を前記代替データに設定する。送信部は、前記代替データを前記宛先に送信する。
【発明の効果】
【０００８】
重複部分を含むデータの転送が効率的に防止され、通信が高速化される。
【図面の簡単な説明】
【０００９】
【図１】実施形態に係る通信の例を説明する図である。
【図２】実施形態にかかる通信装置が用いられるネットワークの例を示す。
【図３】通信装置の構成の例を示す図である。
【図４】通信装置のハードウェア構成の例を示す図である。
【図５】重複検知部の処理の例を説明する図である。
【図６】送信データテーブルの例を示す図である
【図７】送信処理の例を説明する図である。
【図８】受信キャッシュでのデータの保存方法の例とインデックス値の決定方法の例を示す図である。
【図９】通信処理の例を説明する図である。
【図１０】データを送信する通信装置の処理の例を説明するフローチャートである。
【図１１】データを受信する通信装置の処理の例を説明するフローチャートである。
【図１２】第２の実施形態にかかる通信装置の構成の例を示す図である。
【図１３】閾値の決定方法の例を説明する図である。
【図１４】データを受信する通信装置の処理の例を説明するフローチャートである。
【発明を実施するための形態】
【００１０】
図１は、実施形態に係る通信の例を示す。以下、送信側の通信装置を通信装置１０ａ、受信側の通信装置を通信装置１０ｂとする。さらに、通信装置１０ｂが備えている受信キャッシュを、受信キャッシュ３２ｂとする。
【００１１】
通信装置１０ａは、通信装置１０ｂにデータを送信するとき、送信対象のデータを一意に識別できる識別子を生成する。通信装置１０ａは、送信対象のデータを通信装置１０ｂに送信するときに、そのデータを受信側の通信装置に送信した回数を、識別子に対応付けて記憶するものとする。図１の例では、通信装置１０ａと通信装置１０ｂの通信が開始されたところであり、通信装置１０ａからは、まだデータの送信が行われていないものとする。通信装置１０ａは、予め閾値Ｎを記憶しており、同じデータの送信回数がＮ回未満の間は、送信するデータのキャッシュへの保持を禁止する情報を付して、通信装置１０ｂにデータを送信する。以下、送信するデータのキャッシュへの保持を禁止する情報のことを「禁止情報」と記載することがある。通信装置１０ｂは、禁止情報と共に受信したデータは受信キャッシュ３２ｂに格納しない。
【００１２】
一方、同じデータの送信回数が閾値Ｎと一致すると、通信装置１０ａは、送信するデータのキャッシュへの保持を要求する情報を付して、通信装置１０ｂにデータを送信する。以下、送信するデータのキャッシュへの保持を要求する情報のことを、「保持要求」と記載することがある。通信装置１０ｂは、保持要求と共に受信したデータを、そのデータの識別子に対応付けて受信キャッシュ３２ｂに格納する。
【００１３】
同じデータの送信回数が閾値Ｎを越えると、通信装置１０ａは、送信するデータの代わりに、そのデータの識別子を通信装置１０ｂに通知する。通信装置１０ｂは、通知された識別子に対応付けられたデータを受信キャッシュ３２ｂから読み出し、読み出したデータを、通信装置１０ａから受信したデータとして扱う。
【００１４】
例えば、時刻Ｔ０から通信装置１０ａと通信装置１０ｂが通信を開始した場合を例として説明する。ここでは、閾値Ｎは２に設定されているものとする。通信装置１０ａは、時刻Ｔ０の時点で、データＡを通信装置１０ｂに送信するために、データＡの通信装置１０ｂへの送信回数を閾値Ｎと比較する。この時点では、データＡは通信装置１０ｂに送信されていないので、今回の送信が１回目である。通信装置１０ａは、今回の送信での送信回数が閾値Ｎに達していないため、図１の矢印αに示すように、データＡと共にデータＡについての禁止情報を、通信装置１０ｂに送信する。すると、通信装置１０ｂは、データＡを受信しても、データＡを受信キャッシュ３２ｂに格納しない。このため、受信キャッシュ３２ｂ＿０に示すように、受信キャッシュ３２ｂにデータが格納されない。その後、通信装置１０ａは、データＢ、データＣ、データＤ、データＥについてもデータＡと同様に、禁止情報と共に、通信装置１０ｂに送信する。このため、通信装置１０ｂは、データＥの受信までは、通信装置１０ａから受信したいずれのデータも受信キャッシュ３２ｂに格納しない。
【００１５】
次に、通信装置１０ａは、再度データＡを通信装置１０ｂに送信するための処理を行う。通信装置１０ａから通信装置１０ｂへのデータＡの送信回数は、今回の送信で２回になる。通信装置１０ａは、送信回数が閾値Ｎと同じ値になっているので、図１の矢印βに示すように、データＡとともに、データＡについての保持要求を通信装置１０ｂに送信する。通信装置１０ｂは、データＡを受信すると受信キャッシュ３２ｂに格納する。このため、時刻Ｔ１で行われる送信処理により、通信装置１０ｂは受信キャッシュ３２ｂ＿１を保持する。
【００１６】
その後、通信装置１０ａは、データＦを初めて送信するので、禁止情報と共にデータＦを、通信装置１０ｂに送信する。すると、通信装置１０ｂはデータＦを格納しないため、受信キャッシュ３２ｂに保持されているデータは変更されない。
【００１７】
時刻Ｔ２に、通信装置１０ａは、通信装置１０ｂに向けたデータＢの２回目の送信処理を行う。このとき、通信装置１０ａは、データＢの送信回数が閾値Ｎと同じ値になるので、図１の矢印βに示すように、データＢとデータＢの保持要求を通信装置１０ｂに送信する。通信装置１０ｂはデータＢを受信キャッシュ３２ｂに格納するため、時刻Ｔ２で行われる送信処理により、通信装置１０ｂは、受信キャッシュ３２ｂ＿１を受信キャッシュ３２ｂ＿２に更新する。
【００１８】
その後、通信装置１０ａは、データＧ、データＨを禁止情報と共に通信装置１０ｂに送信する。通信装置１０ｂはデータＧ、データＨを格納しないため、受信キャッシュ３２ｂ＿２に保持されているデータは変更されない。
【００１９】
時刻Ｔ３に通信装置１０ａは、データＡを３回目に送信しようとする。このとき、データＡの送信回数は、閾値Ｎを上回っているので、通信装置１０ａは、データＡがすでに通信装置１０ｂに格納されていると判定する。そこで、通信装置１０ａは、矢印γに示すように、データＡの識別子を通信装置１０ｂに送信する。通信装置１０ｂは、データＡの識別子を受信すると、受信した識別子をキーとして受信キャッシュ３２ｂ＿２を検索し、データＡを取得する。通信装置１０ｂは、取得したデータＡを、通信装置１０ａからの送信データとして扱う。
【００２０】
時刻Ｔ４に通信装置１０ａは、データＢの３回目の送信処理を行う。このときも、時刻Ｔ３でのデータＡの送信処理と同様に、送信回数が閾値Ｎを上回っているので、通信装置１０ａは、データＢの識別子を通信装置１０ｂに送信する。通信装置１０ｂは、データＢの識別子をキーとして受信キャッシュ３２ｂ＿２を検索し、データＢを取得する。通信装置１０ｂは、取得したデータＢを、通信装置１０ａからの送信データとして扱う。
【００２１】
このように、実施形態にかかる方法では、閾値以上の回数送信されるデータは受信側の通信装置１０が備える受信キャッシュ３２に格納されるが、送信回数が閾値未満のデータは受信側の通信装置１０に格納されない。このため、閾値以上の回数送信されるデータ同士の間に、閾値未満の回数しか送信されないデータが受信キャッシュ３２の容量以上に含まれている場合でも、受信側の通信装置１０は、重複して送信されてくるデータを受信キャッシュ３２に記憶できる。図１の例では、時刻Ｔ１でのデータＡの送信から時刻Ｔ３でのデータＡの送信までの間に、受信キャッシュ３２ｂの容量分だけ、データＡ以外のデータが通信装置１０ａから通信装置１０ｂに送信される。しかし、時刻Ｔ１〜Ｔ３に送信されるデータは、データＢ以外は閾値以下の回数しか送信されていないことから受信キャッシュ３２ｂへの格納対象にならない。このため、受信キャッシュ３２ｂでの容量不足が発生せず、時刻Ｔ３にデータＡが再送されるときにも、データＡが受信キャッシュ３２ｂに保持される。このため、重複除去が効率的に行われる。
【００２２】
換言すると、実施形態にかかる送信側の通信装置１０では、データの送信回数を、重複の発生頻度の指標として用いることにより、受信側の通信装置１０に、重複して受信する可能性が比較的高いデータを選択的に記憶させている。従って、通信装置１０は、重複部分を含むデータの転送を効率的に防止できる。
【００２３】
＜ネットワークの例と装置構成＞
図２は、実施形態にかかる通信装置１０が用いられるネットワークの例を示す。図２は、Wide Area Network（ＷＡＮ）５をはさんで、エリア４ａ中の装置とエリア４ｂ中の装置が通信する場合のネットワークの例を示す。エリア４ａ、４ｂには通信を行う任意の種類の装置が任意の数だけ含まれる。図２の例では、エリア４ａにサーバ１ａ〜１ｃ、タブレット２ａ、携帯電話３ａが含まれ、エリア４ｂにサーバ１ｄ〜１ｆ、タブレット２ｂ、携帯電話３ｂが含まれている場合を示している。エリア４ａに含まれている装置は、通信装置１０ａを介してＷＡＮ５にアクセスし、エリア４ｂに含まれている装置は、通信装置１０ｂを介してＷＡＮ５にアクセスするものとする。ここで、通信装置１０ａおよび通信装置１０ｂは、ＷＡＮ高速化装置として動作することができる。図２の例では、エリア４ａに含まれている装置が通信装置１０ａと通信装置１０ｂを介してエリア４ｂに含まれている装置にデータを送信している。
【００２４】
図３は、通信装置１０の構成の例を示す。通信装置１０は、送信部１１、受信部１２、送受信部１３、接続管理部１４、キャッシュ管理部１５、データ処理部１６、重複検知部２０、記憶部３０を備える。重複検知部２０は、分割部２１、識別子生成部２２、および、設定部２３を有する。記憶部３０は、送信データテーブル３１、受信キャッシュ３２を有する。
【００２５】
送信部１１は、通信装置１０がＷＡＮ５に含まれている装置や、他の通信装置１０にパケットを送信するときに使用される。送信部１１は、設定部２３などから入力されたパケットを、宛先に向けて送信する。受信部１２は、ＷＡＮ５に含まれている装置や、他の通信装置１０からパケットを受信する。受信部１２は、受信したパケットを、キャッシュ管理部１５に出力する。送受信部１３は、通信装置１０とＷＡＮ５を介さずに通信する装置との間で通信装置１０がパケットを送受信するときに使用される。ここで、ＷＡＮ５を介さずに通信装置１０と通信する装置は、通信装置１０と通信可能なエリア４に含まれているサーバ１などの装置である。送受信部１３は、エリア４に含まれている装置から受信したパケットを、データ処理部１６に出力する。
【００２６】
接続管理部１４は、通信装置１０同士の接続や、通信装置１０が通信可能なエリア４に含まれている装置との間の接続状態に関する情報を保持する。キャッシュ管理部１５は、受信したパケットに保持要求が含まれている場合、保持要求と共に取得したデータを受信キャッシュ３２に格納し、さらに、受信パケット中のデータをデータ処理部１６に出力する。一方、受信パケットに禁止情報が含まれている場合、キャッシュ管理部１５は、禁止情報と共に取得したデータをデータ処理部１６に出力するが、禁止情報と共に取得したデータを受信キャッシュ３２には格納しない。受信部１２から入力されたパケット中のデータが、特定のデータを表わす識別子である場合、キャッシュ管理部１５は、受信キャッシュ３２から識別子に対応付けられたデータを読み出し、読み出したデータをデータ処理部１６に出力する。なお、受信パケットが、データの受信側の通信装置１０で保持されている受信キャッシュ３２の情報を通知する制御パケットである場合、キャッシュ管理部１５は、入力された制御パケットを設定部２３に出力する。
【００２７】
データ処理部１６は、キャッシュ管理部１５から取得したデータを、送信元の通信装置１０から送られてきたデータとして処理する。キャッシュ管理部１５から取得したデータが通信装置１０自身に宛てたデータである場合、データ処理部１６は、アプリケーション等を用いて、入力されたデータを処理する。一方、キャッシュ管理部１５から入力されたデータが、通信装置１０と通信可能なエリア４に含まれている装置に宛てられたものである場合、データ処理部１６は、データを宛先の装置へ転送するための処理を行う。
【００２８】
重複検知部２０は、データを他の通信装置１０に送信する通信装置１０で動作する。分割部２１は、送信対象とするファイルなどを予め決められたデータ長に分割することにより、個々の送信パケットに含めることができる大きさのデータを生成する。以下、個々の送信パケットに含めることができる大きさのデータのことを「チャンク」と記載する。チャンクは、データの重複が発生しているかの判定や、送信回数を特定するときの対象とされるデータのブロックである。分割部２１は、生成したチャンクを識別子生成部２２に出力する。識別子生成部２２は、各チャンクを一意に識別するための識別子を生成する。識別子の生成方法は、任意であるが、例えば、ハッシュ関数を識別子の生成に用いることができる。識別子生成部２２は、生成した識別子を設定部２３に出力する。
【００２９】
設定部２３は、入力された識別子をキーとして、送信データテーブル３１を検索する。送信データテーブル３１の例については後で示すが、送信データテーブル３１は、チャンクを受信側の通信装置１０に送信した回数を、そのチャンクを識別する識別子に対応付けている。送信データテーブル３１は、キーとして使用する識別子が送信データテーブル３１に含まれていない場合、処理対象の識別子を、送信回数＝１という情報に対応付けて送信データテーブル３１に記録する。一方、識別子に対応付けられた送信回数を送信データテーブル３１から得られた場合、設定部２３は、得られた回数に１を加えて、閾値Ｎと比較する。ここで、閾値Ｎは、保持要求を有するパケットの送信を含めて、受信側の通信装置１０に処理対象のチャンクを送信する回数を示す。送信回数が閾値Ｎよりも小さい間は、設定部２３は、チャンクとそのチャンクに対する禁止情報を、送信パケットに含める。一方、送信回数が閾値Ｎに一致すると、設定部２３は、処理対象のチャンクに保持要求を含めて送信パケットを生成する。送信回数が閾値Ｎを超えると、設定部２３は、識別子を送信パケットに含めて受信側の通信装置１０に送信する。なお、受信側の通信装置１０が個々のチャンクを保持する領域を示すインデックス値を用いて、送信側の通信装置１０に受信側の受信キャッシュ３２の状況を通知しているときには、設定部２３は、インデックス値を識別子として用いても良い。インデックス値を用いた通信の例については、後述する。
【００３０】
図４は、通信装置１０のハードウェア構成の例を示す。通信装置１０は、プロセッサ１０１、メモリ１０２、バス１０５、外部記憶装置１０６、ネットワーク接続装置１０９を備える。さらにオプションとして、通信装置１０は、入力装置１０３、出力装置１０４、媒体駆動装置１０７を備えても良い。通信装置１０は、例えば、コンピュータなどで実現されることがある。
【００３１】
プロセッサ１０１は、Central Processing Unit（ＣＰＵ）を含む任意の処理回路とすることができる。プロセッサ１０１は、接続管理部１４、キャッシュ管理部１５、データ処理部１６、および、重複検知部２０として動作する。なお、プロセッサ１０１は、例えば、外部記憶装置１０６に記憶されたプログラムを実行することができる。メモリ１０２は、記憶部３０として動作し、送信データテーブル３１を記憶する他、受信キャッシュ３２を実現する。さらに、メモリ１０２は、プロセッサ１０１の動作により得られたデータや、プロセッサ１０１の処理に用いられるデータも、適宜、記憶する。ネットワーク接続装置１０９は、他の装置との通信に使用され、送信部１１、受信部１２、送受信部１３として動作する。
【００３２】
入力装置１０３は、例えば、ボタン、キーボードやマウスとして実現され、出力装置１０４は、ディスプレイなどとして実現される。バス１０５は、プロセッサ１０１、メモリ１０２、入力装置１０３、出力装置１０４、外部記憶装置１０６、媒体駆動装置１０７、ネットワーク接続装置１０９の間を相互にデータの受け渡しが行えるように接続する。外部記憶装置１０６は、プログラムやデータなどを格納し、格納している情報を、適宜、プロセッサ１０１などに提供する。媒体駆動装置１０７は、メモリ１０２や外部記憶装置１０６のデータを可搬記憶媒体１０８に出力することができ、また、可搬記憶媒体１０８からプログラムやデータ等を読み出すことができる。ここで、可搬記憶媒体１０８は、フロッピイディスク、Magneto-Optical（ＭＯ）ディスク、Compact Disc Recordable（ＣＤ−Ｒ）やDigital Versatile Disk Recordable（ＤＶＤ−Ｒ）を含む、持ち運びが可能な任意の記憶媒体とすることができる。
【００３３】
＜第１の実施形態＞
以下、図２に示すネットワークにおいて、エリア４ａ中の装置からエリア４ｂ中の装置にデータが送信される場合を例として、通信装置１０ａと通信装置１０ｂで行われる処理の例を説明する。以下、理解し易くするために、エリア４ａ中の装置とエリア４ｂ中の装置の間の通信の開始により、通信装置１０ａと通信装置１０ｂの通信が開始された場合を例として説明する。以下の例でも閾値Ｎは２である場合を例とするが、閾値Ｎの値は実装に応じて任意の値に設定され得る。
【００３４】
また、以下の説明では、いずれの装置による動作であるかを分り易くするために、符号の後に、その通信装置１０の符号の末尾のアルファベットを付すものとする。例えは、設定部２３ａは、通信装置１０ａに備えられている設定部２３であり、受信キャッシュ３２ｂは、通信装置１０ｂに備えられた受信キャッシュ３２である。
【００３５】
（１）通信装置１０ａは、エリア４ａに含まれている装置から、送受信部１３ａを介してデータを受信する。送受信部１３ａは、受信したパケットをデータ処理部１６ａに出力する。データ処理部１６ａは、入力されたパケットから受信データと送信元や宛先の情報などを取得し、通信装置１０ｂ宛てのデータとする。データ処理部１６ａは、通信装置１０ｂ宛てのデータを分割部２１ａに出力する。
【００３６】
図５は、重複検知部２０ａでの処理の例を説明する図である。分割部２１ａは、入力されたデータを予め決められたデータ長のチャンクに分割する。図５の例では、分割部２１ａは、入力されたデータをＸ個のチャンクに分割している。分割部２１ａは、個々のチャンクを、識別子生成部２２ａに出力する。なお、分割部２１ａに入力されたデータの大きさが、チャンクとして許容されるデータの大きさ以下であれば、分割部２１aは、データを分割せずに識別子生成部２２ａに出力する。
【００３７】
図５の例では、識別子生成部２２ａは、予め保持しているハッシュ関数を用いて、チャンクからハッシュ値を生成し、得られたハッシュ値を個々のチャンクの識別子とする。なお、識別子生成部２２ａで使用されるハッシュ関数は、個々のチャンクを一意に識別できるようなハッシュ値を生成可能な任意の関数であるものとする。例えば、Secure Hash Algorithm-1（ＳＨＡ１）等のハッシュ関数が識別子生成部２２ａで使用されることがある。
【００３８】
（２）識別子生成部２２ａは、個々のチャンクとハッシュ値を対応付けて、設定部２３ａに出力する。設定部２３ａは、ハッシュ値を用いて、送信データテーブル３１ａの検索や送信データテーブル３１ａの更新処理を行う。
【００３９】
図６は、送信データテーブル３１の例を示す。図６に示す送信データテーブル３１は、ハッシュ値、送信回数、インデックス（ｉｎｄｅｘ）を対応付けている。ハッシュ値は、識別子生成部２２ａで生成された値である。設定部２３ａは、ハッシュ値で識別されるチャンクの各々について、通信装置１０ｂに送信した回数を記録している。インデックスは、受信側の通信装置１０ｂが保持する受信キャッシュ３２ｂにおいて、ハッシュ値で特定されるチャンクが保持されている領域の特定に使用される値である。設定部２３ａは、保持要求を付して送信するチャンクの大きさを用いて、インデックスを計算し、得られた値を送信データテーブル３１ａに記録する。
【００４０】
図７のＣ１は、データＡであるチャンクがＨａｓｈ１として、設定部２３ａに入力された場合に行われる送信処理の例を示す。なお、図７の場合では、図を簡略化するために、データＡがチャンクとして許容される大きさ以下のデータであった場合の例を示している。識別子生成部２２ａから設定部２３ａに、Ｈａｓｈ１というハッシュ値と、データＡが入力されたとする。今までに通信装置１０ａから通信装置１０ｂにデータの送信が行われていないので、設定部２３ａは、送信データテーブル３１ａにＨａｓｈ１のチャンクのエントリを生成し、Ｈａｓｈ１のチャンクの送信回数を１に設定する。新たにエントリを生成する時点では、設定部２３ａは、インデックスの値を未定とする。このため、Ｈａｓｈ１について、図６の送信データテーブル３１ａ＿１の１番目のエントリに示すデータが、送信データテーブル３１ａに記録される。
【００４１】
設定部２３ａは、送信データテーブル３１ａ中のエントリの更新処理を行った後に、Ｈａｓｈ１のチャンクの送信回数と閾値Ｎを比較する。ここでは、Ｈａｓｈ１の送信回数が１であるので閾値Ｎよりも送信回数は小さい。そこで、設定部２３ａは、Ｈａｓｈ１のチャンク（データＡ）、禁止情報、データＡの最終的な宛先などの情報をペイロードとした通信装置１０ａ宛てのパケットＰ１を生成する。
【００４２】
ここで、禁止情報は、ペイロード中のデータを受信キャッシュ３２ｂに格納しないことを通信装置１０ｂ中のキャッシュ管理部１５ｂに通知できる情報であれば、任意の形式を取ることができる。以下の説明では、パケット中のヘッダの直後の２ビットを、キャッシュ管理部１５ｂがペイロード中のデータを受信キャッシュ３２ｂに格納するかを判定するために使用するフラグとして使用する場合を例として説明する。以下、禁止情報では、ヘッダの直後の２ビットの値が００であり、保持要求では、ヘッダの直後の２ビットの値が０１であるものとする。設定部２３ａは、生成したパケットＰ１を、送信部１１ａに出力する。送信部１１ａは、図７のＣ１に示すように、パケットＰ１を通信装置１０ｂに送信する。
【００４３】
（３）通信装置１０ｂの受信部１２ｂは、通信装置１０ａから送信されたパケットＰ１を受信すると、パケットＰ１をキャッシュ管理部１５ｂに出力する。キャッシュ管理部１５ｂは、パケット中のヘッダの直後の２ビットの値が００であることから、禁止情報が付されたデータを取得したと判定する。すると、キャッシュ管理部１５ｂは、パケットＰ１からデータＡと最終的な宛先の情報などを抽出して、データ処理部１６ｂに出力する。このとき、図７のＣ１に示すように、キャッシュ管理部１５ｂは、抽出したデータＡを受信キャッシュ３２ｂに格納しない。データ処理部１６ｂは、キャッシュ管理部１５ｂから取得した情報に基づいて、データＡをエリア４ｂ中の装置に送信するためのパケットを生成する。データ処理部１６ｂは、送受信部１３ｂを介して、生成したパケットを宛先の装置に送信する。
【００４４】
（４）その後もエリア４ａ中の装置からエリア４ｂ中の装置へのデータの送信が続けられ、送信対象のチャンクに同様の処理が行われたとする。送信処理に伴い、送信データテーブル３１ａの更新も行われる。このため、例えば、Ｈａｓｈ１〜Ｈａｓｈ６のチャンクが通信装置１０ａから通信装置１０ｂに１回ずつ送信されると、送信データテーブル３１ａは、図６に示す送信データテーブル３１ａ＿１に示すようになる。
【００４５】
（５）図７のＣ２に示すように、通信装置１０ａに再度データＡが送信されたとする。すると、通信装置１０ａの分割部２１ａは、手順（１）で述べたようにデータＡを識別子生成部２２ａに出力する。識別子生成部２２ａは、記憶しているハッシュ関数を用いてデータＡに対するハッシュ値（Ｈａｓｈ１）を計算する。識別子生成部２２ａは、Ｈａｓｈ１というハッシュ値と共に、データＡを設定部２３ａに出力する。
【００４６】
（６）設定部２３ａは、識別子生成部２２ａから入力されたＨａｓｈ１というハッシュ値をキーとして、送信データテーブル３１ａ＿１（図６）を検索する。すると、１番目のエントリの情報がヒットする。そこで、設定部２３ａは、送信回数を１つインクリメントした値を、閾値Ｎと比較する。ここでは、送信データテーブル３１ａ＿１でのＨａｓｈ１に対応付けられた送信回数の値は１であり、今回の処理により、設定部２３ａは、Ｈａｓｈ１で識別されるチャンクを通信装置１０ｂに送信するのは２回目になる。閾値Ｎは２であるので、設定部２３ａは、送信回数を１つインクリメントした値と閾値Ｎが一致したと判定する。そこで、設定部２３ａは、通信装置１０ｂにＨａｓｈ１で識別されるチャンクを受信キャッシュ３２ｂに保持することを要求する。
【００４７】
設定部２３ａは、これまでに通信装置１０ｂに対して保持要求を出したデータの大きさの合計値を、通信装置１０ｂの受信キャッシュ３２ｂにおいて、Ｈａｓｈ１のデータが保持される領域のインデックス値に設定する。ここでは、設定部２３ａはこれまでに保持要求を付して通信装置１０ｂに送信したデータは無いものとする。すると、設定部２３ａは、Ｈａｓｈ１のインデックスを０に設定する。このため、２回目に通信装置１０ａが受信したデータＡの処理により、送信データテーブル３１ａ中のＨａｓｈ１に対するエントリ中の情報は、送信データテーブル３１ａ＿２の１番目のエントリに示す通りに更新される。このとき、設定部２３ａは、保持要求を出したデータのデータ長を、保持要求を出したデータのインデックスに加えた値を、次に保持要求を付して送信するデータに対するインデックスとして記憶する。例えば、Ｈａｓｈ１のデータの大きさが１０００バイトである場合、設定部２３ａは、次に通信装置１０ｂに対して保持することを要求するデータのインデックス値が１０００になることを記憶する。
【００４８】
さらに、設定部２３ａは、通信装置１０ｂにＨａｓｈ１で識別されるチャンクを受信キャッシュ３２ｂに保持することを要求するために、データＡと保持要求を含むパケットＰ２を生成する。設定部２３ａは、生成したパケットＰ２を送信部１１ａに出力する。送信部１１ａは、図７のＣ２に示すように、パケットＰ２を通信装置１０ｂに送信する。
【００４９】
（７）通信装置１０ｂのキャッシュ管理部１５ｂは、手順（３）と同様に、受信部１２ｂを介してパケットＰ２を取得する。キャッシュ管理部１５ｂは、パケット中のヘッダの直後の２ビットの値が０１であることから、保持要求が付されたデータを取得したと判定する。すると、キャッシュ管理部１５ｂは、パケットＰ２からデータＡと最終的な宛先の情報などを抽出して、データ処理部１６ｂに出力する。さらに、図７のＣ２に示すように、キャッシュ管理部１５ｂは、抽出したデータＡを受信キャッシュ３２ｂに格納する。データ処理部１６ｂは、キャッシュ管理部１５ｂから取得した情報に基づいて、手順（３）と同様に処理する。
【００５０】
（８）その後、データＢを通信装置１０ａがエリア４ａ中の装置から２回目に受信したとする。ここで、データＢのハッシュ値は、Ｈａｓｈ２であるとする。２回目にデータＢを受信すると、通信装置１０ａは、手順（５）、（６）と同様の処理を用いて、データＢについての保持要求とデータＢを通信装置１０ｂに送信する。すなわち、Ｈａｓｈ２のデータを２回目に送信対象として取得すると、設定部２３ａは、Ｈａｓｈ２のデータに保持要求を付して通信装置１０ｂに送信する。このとき、設定部２３ａは、Ｈａｓｈ２のインデックス値を、手順（６）での計算に従って、１０００に設定する。このため、Ｈａｓｈ２についての送信データテーブル３１ａの情報は、図６の送信データテーブル３１ａ＿２の２番目のエントリに示すとおりに更新される。ここで、Ｈａｓｈ２のデータのデータ長が１２００バイトであるとすると、設定部２３ａは、次に保持要求を出すデータについてのインデックス値を２２００に設定する。
【００５１】
（９）Ｈａｓｈ２のチャンクを含むパケットを受信した通信装置１０ｂは、手順（７）と同様の処理を行う。このため、Ｈａｓｈ２のチャンクは、Ｈａｓｈ２のチャンクの最終的な宛先に転送されると共に、受信キャッシュ３２ｂに格納される。図８に受信キャッシュ３２でのデータの保存方法の例とインデックス値の決定方法の例を示す。図８の左側のテーブルは、受信キャッシュ３２ｂへのデータの格納状況をキャッシュ管理部１５ｂが管理するために保持する情報の例である。右側の図は、受信キャッシュ３２ｂでのデータの格納例を示す。キャッシュ管理部１５ｂは、受信キャッシュ３２ｂに格納されている個々のチャンクについて、ハッシュ値、容量（データ長）、そのチャンクが格納されている領域の先頭の位置を特定するためのインデックス値を記憶する。
【００５２】
手順（７）で述べた処理により、Ｈａｓｈ１で識別されるデータＡがインデックス０から１０００バイト分の領域に保持されているので、キャッシュ管理部１５ｂは、インデックス１０００から始まる領域にＨａｓｈ２で識別されるチャンクを格納する。ここで、Ｈａｓｈ２で識別されるチャンクはデータＢであるとすると、Ｈａｓｈ２のチャンクは、図８の右側に示すように、受信キャッシュ３２ｂにおいてデータＡが格納された領域の続きに格納される。また、キャッシュ管理部１５ｂは、Ｈａｓｈ２のチャンクの格納状況を、図８の左側のテーブルの２番目のエントリに示すように記憶する。
【００５３】
（１０）その後も、エリア４ａ中の装置からエリア４ｂ中の装置へのデータの送信が続けられ、Ｈａｓｈ３〜Ｈａｓｈ５のチャンクについても、閾値Ｎと同数の送信が行われたとする。すると、通信装置１０ａは、Ｈａｓｈ３〜Ｈａｓｈ５のチャンクの各々についても、手順（５）、（６）、（８）等で述べた処理を行うことにより、受信キャッシュ３２ｂに格納することを、通信装置１０ｂに要求する。なお、Ｈａｓｈ３〜Ｈａｓｈ５のチャンクの送信の合間に、送信回数が閾値Ｎに達していない別のチャンク（Ｈａｓｈ７、Ｈａｓｈ８）の送信を行う場合、通信装置１０ａは、手順（３）と同様の処理を行う。このため、Ｈａｓｈ３〜Ｈａｓｈ５のチャンクの２回目の送信と、Ｈａｓｈ６〜Ｈａｓｈ８のチャンクの１回目の送信を終えた段階では、通信装置１０ａが保持する送信データテーブル３１ａは、送信データテーブル３１ａ＿２（図６）に示す通りになる。
【００５４】
（１１）一方、通信装置１０ｂでは、Ｈａｓｈ３〜Ｈａｓｈ５のチャンクを含むパケットを受信すると、手順（９）で述べたように、受信したパケットに含まれているチャンクを受信キャッシュ３２ｂに格納する。さらに、Ｈａｓｈ３〜Ｈａｓｈ５のチャンクのそれぞれについて、ハッシュ値とインデックスを対応付ける。このため、Ｈａｓｈ３〜Ｈａｓｈ５のチャンクの処理により、受信キャッシュ３２ｂには、図８の右側に示すようにデータが格納され、キャッシュ管理部１５ｂは、図８の左側に示すような情報を保持する。
【００５５】
（１２）図７のＣ３に示すように、さらに、エリア４ａ中の装置から通信装置１０ａにデータＡが送信されたとする。すると、通信装置１０ａの分割部２１ａは、手順（１）で述べたようにデータＡを識別子生成部２２ａに出力する。識別子生成部２２ａは、記憶しているハッシュ関数を用いてデータＡに対するハッシュ値（Ｈａｓｈ１）を計算する。識別子生成部２２ａは、Ｈａｓｈ１というハッシュ値と共に、データＡを設定部２３ａに出力する。
【００５６】
（１３）設定部２３ａは、識別子生成部２２ａから入力されたハッシュ値Ｈａｓｈ１をキーとして、送信データテーブル３１ａ＿２（図６）を検索する。すると、１番目のエントリから、Ｈａｓｈ１のチャンクが既に２階送信されていることを特定する。そこで、設定部２３ａは、送信回数を１つインクリメントした値を、閾値Ｎと比較する。ここでは、Ｈａｓｈ１で識別されるチャンクを通信装置１０ｂに送信するのは３回目になるのに対し、閾値Ｎは２であるため、設定部２３ａは、Ｈａｓｈ１のチャンクについては、送信回数が閾値Ｎを越えると判定する。そこで、設定部２３ａは、通信装置１０ｂにＨａｓｈ１で識別されるチャンクの代わりに、そのチャンクを識別する値を含めたパケットを生成する。ここで、チャンクの識別に使用される値は、通信装置１０ｂにおいてチャンクを一意に識別できる任意の情報である。例えば、インデックス値と、チャンクのデータ長がチャンクの識別子としてパケットに含められても良い。この場合、設定部２３ａは、Ｈａｓｈ１に対応付けられたインデックスである０と、データ長が１０００バイトであることをデータとして含めたパケットＰ３を送信部１１ａに出力する。このとき、設定部２３ａは、送信するデータがチャンクを識別するための情報であることを示す情報をパケットＰ３に含めるものとする。以下の説明では、送信するデータがチャンクを識別するための情報であることを示す情報として、設定部２３ａは、パケット中のヘッダの直後の２ビットの値を１１に設定するものとする。図７のＣ３に示すように、送信部１１ａは、パケットＰ３を通信装置１０ｂに送信する。なお、設定部２３ａは、送信データテーブル３１ａのＨａｓｈ１のチャンクについての送信回数を更新する。
【００５７】
（１４）通信装置１０ｂのキャッシュ管理部１５ｂは、手順（３）と同様に、受信部１２ｂを介してパケットＰ３を取得する。キャッシュ管理部１５ｂは、パケット中のヘッダの直後の２ビットの値が１１であることから、受信キャッシュ３２ｂに格納済みのチャンクに対応付けられたインデックス値とデータ長が通知された判定する。すると、キャッシュ管理部１５ｂは、パケットＰ３からインデックス値やデータ長を抽出する。キャッシュ管理部１５ｂは、抽出したインデックス値で表わされる受信キャッシュ３２ｂの領域から、抽出したデータ長の情報を、通信装置１０ａから受信したデータとして取得する。キャッシュ管理部１５ｂは取得したデータをデータ処理部１６ｂに出力する。データ処理部１６ｂは、キャッシュ管理部１５ｂから取得した情報に基づいて、手順（３）と同様に処理する。
【００５８】
図９は、通信処理の手順の例を説明する図である。手順（１）〜（１４）で説明した処理が行われることにより、エリア４ａ中の装置からエリア４ｂ中の装置へのデータの送信の際に、通信装置１０ａと通信装置１０ｂとの間で効率的に重複排除処理が行われる。すなわち、通信装置１０ａは、エリア４ａ中の装置から、エリア４ｂ中の装置への送信データを受信すると、受信したデータを適宜、チャンクに分割して、個々のチャンクについての送信回数の判定を行う。このとき、通信装置１０ａ中の設定部２３ａは、送信データテーブル３１ａのデータを使用して、送信の回数と閾値の関係を判定する。送信回数がＮ回以下のチャンクについては、図９中の矢印Ａに示すように、通信装置１０ａは、実データを含むパケットを通信装置１０ｂに送信する。このとき、送信回数がＮ回未満の間、設定部２３ａは、通信装置１０ｂに送信するパケット中に、禁止情報を含めておくことにより、通信装置１０ｂでのデータの格納を抑制する。また、送信回数がＮ回になると、保持要求を含めることにより、設定部２３ａは、送信するチャンクを通信装置１０ｂに保持させる。送信回数がＮ＋１回以上になると、図９中の矢印Ｂに示すように、設定部２３ａは、実データの代わりにチャンクを一意に特定できる識別子（ＩＤデータ）を含むパケットを通信装置１０ｂに送信する。すなわち、設定部２３ａは、同じデータの送信回数と閾値Ｎとの比較結果に応じて、送信対象のデータの代替として送信する代替のデータを生成し、生成した代替データを受信側の通信装置１０に送信するデータとしている。さらに、通信装置１０ａでは、矢印Ｃに示すように、データの送信状況を送信データテーブル３１ａに保存する。
【００５９】
禁止情報を含むパケットを受信した場合、通信装置１０ｂは、図９の矢印Ｄに示すように、チャンクの実データを転送処理に用いるが、受信キャッシュ３２ｂに受信したデータを格納しない。保持要求を含むパケットを受信した場合、通信装置１０ｂは、図９の矢印Ｅに示すように、チャンクの実データを転送処理に用い、さらに、実データを受信キャッシュ３２ｂに格納する。実データの代わりにチャンクの識別子を含むパケットを受信した場合、通信装置１０ｂ中のキャッシュ管理部１５ｂは、図９の矢印Ｆに示すように、識別子で識別されるチャンクの実データを受信キャッシュ３２ｂから読み出すことによりデータを復元する。通信装置１０ｂは、復元されたデータを転送処理に用いる。なお、チャンクの識別に使用される識別子は、図６〜図８を参照しながら説明したように、インデックス値とチャンクのデータ長とすることができるが、その他の情報を用いても良い。例えば、チャンクのハッシュ値が識別子として用いられても良いものとする。
【００６０】
図１０は、データを送信する通信装置１０での処理の例を説明するフローチャートである。なお、図１０は一例であり、例えば、ステップＳ５とＳ７の判断の順序が互いに変更されるなどの変更が加えられても良い。送信側の通信装置１０の送受信部１３は、送信データを取得する（ステップＳ１）。送受信部１３からデータを入力されると、分割部２１は、データを所定の長さ以下のチャンクに分割する（ステップＳ２）。識別子生成部２２は、分割部２１で生成された各チャンクについて、ハッシュ関数を用いてハッシュ値を計算する（ステップＳ３）。識別子生成部２２は、ハッシュ値とチャンクのデータを設定部２３に出力する。設定部２３は、入力されたチャンクについて、送信データテーブル３１を用いて、今回の送信が同じ通信装置１０への何回目の送信であるかを特定する（ステップＳ４）。設定部２３は、今回の送信を行ったときの送信回数が閾値未満であるかを判定する（ステップＳ５）。今回の送信を行ったときの送信回数が閾値未満の場合、設定部２３は、実データと禁止情報を受信側の通信装置１０に送信する（ステップＳ５で閾値未満、ステップＳ６）。今回の送信を行ったときの送信回数が閾値未満ではない場合、設定部２３は、今回の送信を行ったときの送信回数が閾値を超えているかを判定する（ステップＳ５でＮｏ、ステップＳ７）。送信回数が閾値と一致している場合、設定部２３は、実データと保持要求を、受信側の通信装置１０に送信する（ステップＳ７で閾値と一致、ステップＳ８）。送信回数が閾値を越えている場合、設定部２３は、実データを含めずに、チャンクの識別子のみを、受信側の通信装置１０に送信する（ステップＳ７で閾値より大、ステップＳ９）。
【００６１】
図１１は、データを受信する通信装置１０での処理の例を説明するフローチャートである。図１１は一例であり、例えば、ステップＳ２３では、禁止情報を含むかを判定する代わりに、保持要求を含むかを判定するように変形されても良い。受信部１２は、送信側の通信装置１０からパケットを受信すると、データをキャッシュ管理部１５に出力する（ステップＳ２１）。キャッシュ管理部１５は、パケット中の予め決められている領域の値を特定することにより、パケット中に実データが含まれているかを判定する（ステップＳ２２）。パケット中に実データが含まれている場合、キャッシュ管理部１５は、パケット中に禁止情報が含まれているかを判定する（ステップＳ２２でＹｅｓ、ステップＳ２３）。パケット中に禁止情報が含まれていない場合、キャッシュ管理部１５は、実データを受信キャッシュ３２に書き込んだ後で、実データの転送処理を行う（ステップＳ２３でＮｏ、ステップＳ２４、Ｓ２５）。一方、パケット中に禁止情報が含まれている場合、キャッシュ管理部１５は、実データを受信キャッシュ３２に書き込まずに、実データの転送処理を行う（ステップＳ２３でＹｅｓ、ステップＳ２５）。一方、受信したパケットに実データが含まれていない場合、キャッシュ管理部１５は、受信パケットからデータの識別子を取得する（ステップＳ２２でＮｏ、ステップＳ２６）。キャッシュ管理部１５は、取得した識別子に対応付けられたデータを受信キャッシュ３２から読み込む（ステップＳ２７）。キャッシュ管理部１５は、読み込んだデータをデータ処理部１６に出力する。データ処理部１６は、キャッシュ管理部１５から入力されたデータの転送処理を行う（ステップＳ２８）。
【００６２】
このように、実施形態にかかる方法では、送信回数が閾値未満の間は、送信データが受信側の通信装置１０において格納されない。このため、閾値以上の回数、送信されるデータ同士の間に、閾値未満の回数しか送信されないデータが含まれている場合でも、受信側の通信装置１０は、閾値以上の回数だけ送信される可能性が高いデータを、選択的に受信キャッシュ３２に記憶することができる。従って、通信装置１０を用いたシステムでは、重複部分を含むデータの転送が効率的に防止される。
【００６３】
ネットワーク中で送受信されるトラフィックの傾向として、重複して送受信される回数の多いデータは、一部のデータに集中する傾向があることが報告されている。（例えば、A. Anand, et al., “Redundancy in Network Traffic : Findings and Implications,” in SIGMETRICS/Performance 2009, Seattle, WA USA）。例えば、１回送信されたデータを全て記憶することができる受信キャッシュを用いて重複排除を行った場合に、送信対象とするデータの量を、重複排除を行わない場合に比べてＡ％削減できるとする。同じデータについて、重複回数の多い順にチャンクを並べたときの上位２０％に重複するチャンクだけを重複排除の対象とした場合に削減できる量は、概ね、０．８×Ａ％程度であるということも報告されている。すなわち、重複除去に使用するデータ数を５分の１に削減しても、重複除去の性能の低下は２０％程度に過ぎない。従って、第１の実施形態で示すように、最初の数回は禁止情報を付した実データを受信側の通信装置１０に送信することによって受信キャッシュ３２への格納を妨げたとしても、送受信されるデータ量の削減に対して、ほとんど影響を与えないといえる。
【００６４】
さらに、実施形態にかかる方法では、受信キャッシュ３２に格納されるデータは、受信側の通信装置１０に少なくとも閾値と同じ回数は送信されるチャンクである。このため、全ての受信データが受信キャッシュに格納される場合に比べて、通信装置１０中の受信キャッシュ３２の容量を小さくすることができる。
【００６５】
なお、以上の説明では、分り易くするために通信装置１０ａが送信側、通信装置１０ｂが受信側の場合を例として説明したが、いずれの通信装置１０も、送信側と受信側の両方の装置として動作することができる。さらに、通信装置１０は、複数の通信装置１０にデータの送信をすることができ、また、複数の通信装置１０からデータを受信することもできる。このため、複数の通信装置１０との間で通信が行われる場合、キャッシュ管理部１５は、送信側の通信装置１０と受信側の通信装置１０の組合せごとに分けて、受信キャッシュ３２の情報を管理する。従って、キャッシュ管理部１５は、通信装置１０ａから通信装置１０ｂに送信されたインデックス０に格納されたデータと、通信装置１０ｃから通信装置１０ｂに送信されたインデックス０に格納されたデータを別個に管理できる。同様に、設定部２３も、宛先の通信装置１０ごとに、別の送信データテーブル３１を保持しており、受信側の通信装置１０にあわせた送信データテーブル３１を用いて、送信パケットに含める情報を設定しているものとする。
【００６６】
＜第２の実施形態＞
第２の実施形態では、トラフィックレートに応じて、通信装置５０が閾値Ｎを変更する場合の例を説明する。以下、ネットワーク上を単位時間当たりに流れるデータ量を「トラフィックレート」と記載することがある。また、以下の説明では、特定の経路を１秒に流れるデータ量をｂｐｓ（Bits Per Second）で示すものとする。
【００６７】
図１２は、第２の実施形態にかかる通信装置５０の構成の例を示す図である。通信装置５０は、閾値設定部４０を備え、さらに、送信部１１、受信部１２、送受信部１３、接続管理部１４、キャッシュ管理部１５、データ処理部１６、重複検知部２０、記憶部３０を備える。送信部１１、受信部１２、送受信部１３、接続管理部１４、キャッシュ管理部１５、データ処理部１６、重複検知部２０、記憶部３０は、第１の実施形態と同様に動作する。
【００６８】
閾値設定部４０は、閾値決定部４１とトラフィックレート算出部４２を有する。トラフィックレート算出部４２は、接続管理部１４から、通信装置５０自身が受信側として通信している通信装置５０の数と、それらの通信装置５０の識別子を取得する。閾値決定部４１は、送信側の通信装置５０の各々について、その装置から受信するデータのトラフィックレートを算出する。トラフィックレート算出部４２は、得られた結果を閾値決定部４１に出力する。
【００６９】
閾値決定部４１は、受信キャッシュ３２の空き容量を求め、送信元の装置ごとに、保持要求を付してデータを送信するときの送信回数（閾値Ｎ）を計算する。このとき、閾値決定部４１は、受信データのトラフィックレートが低いほど、送信側の装置で使用される閾値Ｎが小さくなるように、閾値Ｎを決定する。このため、トラフィックレートが低いほど、同じデータが繰り返し送受信される回数が小さくなり、通信経路を有効活用できるようになる。一方、トラフィックレートが高い場合は、閾値Ｎが比較的大きく設定されるので、同じデータが繰り返して送受信されることはあるが、受信側の通信装置５０において受信キャッシュ３２に格納するデータを、送信回数が比較的大きいデータに限定できる。
【００７０】
図１３は、閾値の決定方法の例を説明する図である。図１３では、通信装置５０ａが通信装置５０ｂ〜５０ｅからデータを受信しており、通信装置５０ａが通信装置５０ｂ〜５０ｅの各々で使用される閾値Ｎを計算する場合を例として説明する。なお、図１３では、通信装置５０ａ〜５０ｅの各々が送信側と受信側のいずれとして動作しているときの閾値が計算されているかを見やすくするために、便宜上、通信装置５０ａを受信装置、通信装置５０ｂ〜５０ｅを送信装置と表記している。
【００７１】
通信装置５０ａ中の接続管理部１４ａは、通信装置５０ｂ〜５０ｅとの間で、通信装置５０ａが受信側として通信していることを、トラフィックレート算出部４２ａに通知する。トラフィックレート算出部４２ａは、通信装置５０ｂ〜５０ｅの各々から受信するデータのトラフィックレートを算出する。例えば、トラフィックレート算出部４２ａは、送信元の装置別に所定の時間中に受信したパケットの数を計数することにより、トラフィックレートを計算できる。また、トラフィックレート算出部４２ａは、送信元の装置別に、所定のデータの量を受信するまでにかかった時間から、トラフィックレートを計算することができる。図１３の例では、トラフィックレート算出部４２ａは、通信装置５０ａが通信装置５０ｂとの間では５０Ｍｂｐｓ、通信装置５０ｃとの間では２０Ｍｂｐｓ、通信装置５０ｄおよび５０ｅとの間では１５Ｍｂｐｓで通信していると計算したとする。トラフィックレート算出部４２ａは、各通信装置５０について得られたトラフィックレートの値を、閾値決定部４１ａに出力する。
【００７２】
閾値決定部４１ａは、受信キャッシュ３２ａの空き容量を計算する。閾値決定部４１ａは、閾値Ｎを、トラフィックレートの割合に正比例するように決定することにより、トラフィックレートの低い通信で優先的に受信キャッシュ３２ａを使用できるようにする。すなわち、以下の式を用いて、閾値Ｎを決定する。
Ｎ＝Ｍ×Ｒ×Ｃ    ・・・（１）
ここで、Ｍは、受信キャッシュ３２ａの空き容量、Ｃは定数である。Ｒは、通信装置５０ａが受信しているデータのトラフィックレートの合計値のうち、閾値Ｎを計算する対象とする通信装置５０との間のトラフィックレートが占める割合である。乗数Ｃは、閾値Ｎが１〜２０程度の予め決められた値の範囲に収まるように設定される。閾値決定部４１ａは、通信装置５０ａにデータを送信してきている全ての通信装置５０ｂ〜５０ｅに対して同じ定数Ｃを用いて、閾値Ｎを計算する。なお、計算で得られた閾値Ｎが整数でない場合、閾値決定部４１ａは、得られた計算値より小さい整数の最大値を、閾値Ｎに設定するものとする。なお、得られた計算値より小さい整数の最大値が１より小さくなる場合、閾値決定部４１ａは、閾値Ｎを１に設定する。
【００７３】
例えば、受信キャッシュ３２ａの空き容量が１Ｍバイトであるとすると、式（１）中のＭは１×１０９となる。ここで、閾値決定部４１ａが使用する定数Ｃが１×１０−８であるとする。通信装置５０ａが通信装置５０ｂ〜５０ｅとの間で行っている通信では、トラフィックレートの合計値は、５０Ｍｂｐｓ＋２０Ｍｂｐｓ＋１５Ｍｂｐｓ＋１５Ｍｂｐｓ＝１００Ｍｂｐｓである。そこで、トラフィックレートの割合Ｒは、通信装置５０ｂでは５０／１００、通信装置５０ｃでは２０／１００であり、通信装置５０ｄと５０ｅでは１５／１００である。この場合、閾値決定部４１は、式（１）より、閾値Ｎを以下のように計算する。
Ｎ（通信装置５０ｂ）＝１×１０９×（５０／１００）×１×１０−８＝５
Ｎ（通信装置５０ｃ）＝１×１０９×（２０／１００）×１×１０−８＝２
Ｎ（通信装置５０ｄ、５０ｅ）
＝１×１０９×（１５／１００）×１×１０−８＝１．５
従って、閾値決定部４１ａは、通信装置５０ｂとの間の閾値Ｎを５、通信装置５０ｃとの間の閾値Ｎを２とする。さらに、通信装置５０ｄと通信装置５０ｅについては、計算値が１．５であるので、閾値Ｎを１に設定する。
【００７４】
閾値決定部４１ａは、得られた値を、送信側の通信装置５０に通知するための制御パケットを生成する。制御パケットには、宛先のアドレスを指定するためのヘッダ、閾値Ｎの値を通知することを示す情報、および、得られた閾値Ｎが含まれる。閾値決定部４１ａは、生成した制御パケットを、送信部１１ａを介して送信先の通信装置５０に送信する。
【００７５】
通信装置５０ｂの受信部１２ｂは、通信装置５０ａから受信した制御パケットを設定部２３ｂに出力する。設定部２３ｂは、記憶している閾値Ｎを、制御パケットに格納されている値に更新する。設定部２３ｂは、閾値Ｎを更新すると、以後は、更新後の値を用いて、通信装置５０ａに送信するデータを設定する。すなわち、新たに設定された閾値Ｎよりも送信回数が小さい間、設定部２３ｂは、実データに禁止情報を付したものを、送信対象とし、新たな閾値Ｎと同じ回数の送信では、実データと保持情報を通信装置５０ａへの送信対象とする。通信装置５０ｃ〜通信装置５０ｅも、通信装置５０ａから制御パケットを受信すると、同様の処理を行う。なお、送信側の通信装置５０は、同じデータの送信回数が閾値Ｎになると保持要求と共にデータを送信するので、閾値Ｎは、送信側の通信装置５０にとって、保持要求を付さずに同じデータを送信できる回数の上限値の指標であるともいえる。このため、第２の実施形態では、受信側の通信装置５０が送信側の通信装置５０に対して、同じデータを保持要求を付さずに送信できる回数の上限値の指標を決定しているともいえる。
【００７６】
図１４は、データを受信する通信装置５０の処理の例を説明するフローチャートである。図１４は、閾値Ｎの再計算が所定の周期ごとに行われる場合の例を示している。この場合、各通信装置５０はタイマを保持しており、受信側の通信装置５０が所定の周期ごとに閾値Ｎの計算処理を行うものとする。図１４の例では、変数ｎ、ｍ、定数Ｙを使用する。定数Ｙは、閾値Ｎを計算する通信装置５０に対してデータを送信している通信装置５０の数である。変数ｎは、トラフィックレートの計算を行った経路の数を計数するために使用される変数である。また、変数ｍは、閾値Ｎの計算を行った通信装置５０の数を計数するために使用される。なお、図１４でも、データの送信側の通信装置５０を分かりやすくするために、フローチャート中では、送信側の通信装置５０のことを、便宜上、送信装置と記載している。
【００７７】
トラフィックレート算出部４２は、タイマを初期化する（ステップＳ４１）。トラフィックレート算出部４２は、変数ｎを１に設定すると共に、接続管理部１４から通信装置５０にデータを送信している送信元の通信装置５０の数（Ｙ）を取得する（ステップＳ４２）。トラフィックレート算出部４２は、ｎ番目の送信側の通信装置５０との間の通信のトラフィックレートを計算する（ステップＳ４３）。トラフィックレート算出部４２は、ｎを１つインクリメントして、ｎがＹ以下であるかを判定する（ステップＳ４４、Ｓ４５）。変数ｎがＹ以下である場合、トラフィックレート算出部４２は、ステップＳ４３以降の処理を繰り返す（ステップＳ４５でＹｅｓ）。一方、変数ｎがＹを超えると、閾値決定部４１は、変数ｍを１に設定する（ステップＳ４５でＮｏ、ステップＳ４６）。閾値決定部４１は、ｍ番目の送信側の通信装置５０との間で使用する閾値Ｎを計算する（ステップＳ４７）。閾値決定部４１は、変数ｍを１つインクリメントして、ｍがＹ以下であるかを判定する（ステップＳ４８、Ｓ４９）。変数ｍがＹ以下である場合、閾値決定部４１は、ステップＳ４７以降の処理を繰り返す（ステップＳ４９でＹｅｓ）。一方、変数ｍがＹを超えると、トラフィックレート算出部４２は、タイマが満了したかを判定する（ステップＳ４９でＮｏ、ステップＳ５０）。タイマが満了していない場合、トラフィックレート算出部４２は、タイマが満了するまで待機する（ステップＳ５０でＮｏ）。タイマが満了すると、トラフィックレート算出部４２は、ステップＳ４１以降の処理を繰り返す（ステップＳ５０でＹｅｓ）。
【００７８】
第２の実施形態によると、通信装置５０は、受信キャッシュ３２の空き領域に応じて閾値Ｎの値を変更することができる。さらに、送信側の個々の通信装置５０で使用される閾値Ｎの計算は、定期的に行われるので、受信側の通信装置５０と通信する送信側の通信装置５０の数が変動した場合にも、変動に応じて閾値Ｎが変更できる。従って、通信装置５０で行われている通信の状況に応じて、自律的に閾値Ｎの値が変更されるため、状況に適した通信の設定が行われる。
【００７９】
＜その他＞
なお、実施形態は上記に限られるものではなく、様々に変形可能である。以下にその例をいくつか述べる。
【００８０】
送信回数が閾値を超えたときにチャンクの識別のために送信される情報は、受信側の通信装置１０においてチャンクを一意に識別できる任意の情報であり、例えば、ハッシュ値であっても良い。ハッシュ値が識別子として使用される場合、送信側の通信装置１０に含まれる設定部２３は、送信しようとするチャンクについてハッシュ値を、チャンクの代わりにパケットに含めて受信側の通信装置１０に送信する。この場合、受信側の通信装置１０は、通知されたハッシュ値に対応付けられたデータを受信したものとして処理を行う。
【００８１】
識別子としてインデックス値とチャンクの長さが用いられる場合でも、受信側の通信装置１０に備えられている受信キャッシュ３２の空き容量がなくなることもあり得る。そこで、受信側の通信装置１０は、受信キャッシュ３２の空き容量がなくなったことによりチャンクを削除する場合は、削除するチャンクを送信側の通信装置１０に通知する。この処理により、送信側の通信装置１０と受信側の通信装置１０の間で同じチャンクに対するインデックス値を一致させることができる。なお、通信装置５０同士の通信においても、インデックス値を用いて重複しているデータを受信側の通信装置５０に通知する場合は、送信側と受信側の通信装置５０で同様の処理が行われる。
【００８２】
以上の説明で記載した送信データテーブル３１や受信キャッシュ３２に記憶される情報要素や情報の形式は、一例に過ぎない。送信データテーブル３１や受信キャッシュ３２に記憶される情報要素や情報の記憶の形式等は、実装に応じて任意に変更され得る。
【００８３】
第１および第２の実施形態のいずれにおいても、受信側の装置が保持する受信キャッシュ３２の空き領域が小さいほど、保持情報を含めたデータを送信するかを決定するときに使用する閾値の値が大きくなるように調整されるように、変形することができる。例えば、第２の実施形態の場合では、閾値決定部４１は、閾値Ｎを計算する際に、受信キャッシュ３２の空き容量が小さいほど、定数Ｃの値を大きくすることができる。このとき、閾値決定部４１は、受信キャッシュ３２の空き容量と定数Ｃの関係を予め記憶しているものとし、閾値Ｎを計算するときの受信キャッシュ３２の空き容量に合わせて、定数Ｃを選択できるものとする。第１の実施形態では、設定部２３に設定される閾値Ｎは、受信キャッシュ３２のうちの使用可能な容量が小さいほど、閾値Ｎが小さくなるように設定されるものとする。
【００８４】
第２の実施形態において、受信側の装置が通信装置５０であれば、送信側の装置は通信装置５０と通信装置１０のいずれでも、同様に閾値の変更処理が可能である。なお、この場合、通信装置１０も、データの受信側の通信装置５０から受信した制御パケットについては、送信側の通信装置５０と同様の処理を行うものとする。
【符号の説明】
【００８５】
１  サーバ
２  タブレット
３  携帯電話
４  エリア
５  ＷＡＮ
１０、５０  通信装置
１１  送信部
１２  受信部
１３  送受信部
１４  接続管理部
１５  キャッシュ管理部
１６  データ処理部
２０  重複検知部
２１  分割部
２２  識別子生成部
２３  設定部
３０  記憶部
３１  送信データテーブル
３２  受信キャッシュ
４０  閾値設定部
４１  閾値決定部
４２  トラフィックレート算出部
１０１  プロセッサ
１０２  メモリ
１０３  入力装置
１０４  出力装置
１０５  バス
１０６  外部記憶装置
１０７  媒体駆動装置
１０８  可搬記憶媒体
１０９  ネットワーク接続装置
【図１】
2015107653.tif 000003
【図２】
2015107653.tif 000004
【図３】
2015107653.tif 000005
【図４】
2015107653.tif 000006
【図５】
2015107653.tif 000007
【図６】
2015107653.tif 000008
【図７】
2015107653.tif 000009
【図８】
2015107653.tif 000010
【図９】
2015107653.tif 000011
【図１０】
2015107653.tif 000012
【図１１】
2015107653.tif 000013
【図１２】
2015107653.tif 000014
【図１３】
2015107653.tif 000015
【図１４】
2015107653.tif 000016
【国際調査報告】
2015107653.tif 000017
2015107653.tif 000018
2015107653.tif 000019
2015107653.tif 000020