(57)【要約】【課題】折り返しデータを用いた信頼性の高いデータ通信を効率的に行う技術を提供する。【解決手段】第１の通信装置と第２の通信装置を有する通信システムにおいて、前記第１の通信装置が、第１のデータを前記第２の通信装置に送信し、前記第２の通信装置が、前記第１の通信装置から受信した前記第１のデータに第２のデータを重畳した第３のデータを前記第１の通信装置に送信し、前記第１の通信装置が、前記第１の通信装置が保持する前記第１のデータを用いて、前記第２の通信装置から受信した前記第３のデータから前記第２のデータを取得するように構成する。【選択図】図２
2016025641.tif 000002
【特許請求の範囲】
【請求項１】
第１の通信装置と第２の通信装置を有する通信システムであって、
前記第１の通信装置が、第１のデータを前記第２の通信装置に送信し
前記第２の通信装置が、前記第１の通信装置から受信した前記第１のデータに第２のデータを重畳した第３のデータを前記第１の通信装置に送信し、
前記第１の通信装置が、前記第１の通信装置が保持する前記第１のデータを用いて、前記第２の通信装置から受信した前記第３のデータから前記第２のデータを取得する
ことを特徴とする通信システム。
【請求項２】
前記第２の通信装置は、前記第１のデータと前記第２のデータとの排他的論理和を算出することにより前記第３のデータを取得し、
前記第１の通信装置は、前記第１のデータと前記第３のデータとの排他的論理和を算出することにより前記第２のデータを取得する
ことを特徴とする請求項１に記載の通信システム。
【請求項３】
前記第１の通信装置は、前記第２の通信装置から受信した前記第３のデータと算出された前記第２のデータとの排他的論理和を算出することにより得られたデータと、前記第１の通信装置が保持する前記第１のデータが一致する場合に、算出された前記第２のデータは、前記第２の通信装置から送出された第２のデータであると推定する
ことを特徴とする請求項２に記載の通信システム。
【請求項４】
前記第１の通信装置と前記第２の通信装置との通信の開始時に、既に前記第２の通信装置から値が０のデータが誤りなく前記第１の通信装置に送信されているものと仮定し、
前記第１の通信装置と前記第２の通信装置との通信の終了時に、前記第１の通信装置は、値が０のデータと、直前に前記第２の通信装置から送信されたと推定されたデータとの排他的論理和により得られるデータを前記第２の通信装置に送信する
ことを特徴とする請求項１ないし３のうちいずれか１項に記載の通信システム。
【請求項５】
第１の通信装置と第２の通信装置を有する通信システムにおけるデータ通信方法であって、
前記第１の通信装置が、第１のデータを前記第２の通信装置に送信するステップと、
前記第２の通信装置が、前記第１の通信装置から受信した前記第１のデータに第２のデータを重畳した第３のデータを前記第１の通信装置に送信するステップと、
前記第１の通信装置が、前記第１の通信装置が保持する前記第１のデータを用いて、前記第２の通信装置から受信した前記第３のデータから前記第２のデータを取得するステップと
を備えることを特徴とするデータ通信方法。
【請求項６】
通信相手となる相手通信装置と通信を行う通信装置であって、
第１のデータを前記相手通信装置に送信し、当該相手通信装置から、前記第１のデータに第２のデータを重畳した第３のデータを受信する手段と、
前記相手通信装置に送信した前記第１のデータを保持する格納手段と、
前記格納手段に保持される前記第１のデータを用いて、前記相手通信装置から受信した前記第３のデータから前記第２のデータを取得するデータ取得手段と
を備えることを特徴とする通信装置。
【請求項７】
前記相手通信装置において、前記第１のデータと前記第２のデータとの排他的論理和を算出することにより前記第３のデータが取得され、
前記データ取得手段は、前記第１のデータと前記第３のデータとの排他的論理和を算出することにより前記第２のデータを取得する
ことを特徴とする請求項６に記載の通信装置。
【請求項８】
前記データ取得手段は、前記相手通信装置から受信した前記第３のデータと算出された前記第２のデータとの排他的論理和を算出することにより得られたデータと、前記格納手段に保持される前記第１のデータが一致する場合に、前記算出された前記第２のデータは、前記第２の通信装置から送出された第２のデータであると推定する
ことを特徴とする請求項７に記載の通信装置。
【請求項９】
コンピュータを、請求項６ないし８のうちいずれか１項に記載の通信装置として機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データ通信技術に関するものであり、特に、信頼性の高いデータ通信を効率的に行う技術に関連するものである。
【背景技術】
【０００２】
近年、サーバ等の装置間でデータを送受信することで様々なサービスを提供する技術が普及している。例えば、秘密分散ストレージサービスにおいては、分散ストレージを構成するサーバ間でデータ送受信が行われる。このようなサービスでは、データの送受信は高速かつ、データに誤りなく信頼性が高いことが要求される。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開平１０−３０８９３２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
データ送受信のプロトコルとして、例えばＴＣＰ／ＩＰ等の通信プロトコルが用いられる。ＴＣＰ／ＩＰ等の通信プロトコルでは、チェックサムやＣＲＣ等の誤り検出方式を用いて受信側で正しくデータを受信したかどうかのチェックを行うが、このように受信データを間接的にチェックする誤り検出方式では、誤りを検出できない場合があり、高い信頼性が要求されるサービスにおいては、信頼性が十分でないという問題がある。また、特に、ＴＣＰ／ＩＰでは、ウィンドウサイズ（帯域遅延積）に基づく帯域制御の性質から、データ通信の効率が低下し、高いスループットが得られなくなるという問題もある。
【０００５】
本発明は上記の点に鑑みてなされたものであり、信頼性の高いデータ通信を効率的に行う技術を提供することを目的とする。
【課題を解決するための手段】
【０００６】
本発明の実施の形態によれば、第１の通信装置と第２の通信装置を有する通信システムであって、
前記第１の通信装置が、第１のデータを前記第２の通信装置に送信し
前記第２の通信装置が、前記第１の通信装置から受信した前記第１のデータに第２のデータを重畳した第３のデータを前記第１の通信装置に送信し、
前記第１の通信装置が、前記第１の通信装置が保持する前記第１のデータを用いて、前記第２の通信装置から受信した前記第３のデータから前記第２のデータを取得する通信システムが提供される。
【０００７】
また、本発明の実施の形態によれば、第１の通信装置と第２の通信装置を有する通信システムにおけるデータ通信方法であって、
前記第１の通信装置が、第１のデータを前記第２の通信装置に送信するステップと、
前記第２の通信装置が、前記第１の通信装置から受信した前記第１のデータに第２のデータを重畳した第３のデータを前記第１の通信装置に送信するステップと、
前記第１の通信装置が、前記第１の通信装置が保持する前記第１のデータを用いて、前記第２の通信装置から受信した前記第３のデータから前記第２のデータを取得するステップとを備えるデータ通信方法が提供される。
【０００８】
また、本発明の実施の形態によれば、通信相手となる相手通信装置と通信を行う通信装置であって、
第１のデータを前記相手通信装置に送信し、当該相手通信装置から、前記第１のデータに第２のデータを重畳した第３のデータを受信する手段と、
前記相手通信装置に送信した前記第１のデータを保持する格納手段と、
前記格納手段に保持される前記第１のデータを用いて、前記相手通信装置から受信した前記第３のデータから前記第２のデータを取得するデータ取得手段とを備える通信装置が提供される。
【発明の効果】
【０００９】
本発明の実施の形態によれば、信頼性の高いデータ通信を効率的に行う技術を提供することが可能となる。
【図面の簡単な説明】
【００１０】
【図１】本発明の実施の形態における通信システムの構成図である。
【図２】本実施の形態における通信システムの基本的な動作を説明するための図である。
【図３】本実施の形態における通信システムの動作を詳細に説明するためのシーケンス図である。
【図４】本実施の形態における通信装置Ａもしくは通信装置Ｂとして用いられる通信装置１００の機能構成図である。
【発明を実施するための形態】
【００１１】
以下、図面を参照して本発明の実施の形態を説明する。なお、以下で説明する実施の形態は一例に過ぎず、本発明が適用される実施の形態は、以下の実施の形態に限られるわけではない。例えば、本実施の形態では、２つのデータを重畳する方法として排他的論理和を使用しているが、２つのデータを重畳する方法は排他的論理和に限られるわけではない。
【００１２】
（システム構成）
図１に、本発明の実施の形態に係る通信システムの構成図を示す。図１に示すように、本実施の形態に係る通信システムは、通信装置Ａと通信装置Ｂとが通信回線Ｃにより接続された構成を有する。
【００１３】
通信装置Ａ、Ｂは、それぞれ、通信回線Ｃを介してデータを送受信する機能を含む装置であり、例えば、前述したストレージサービス等のサービスに係るサーバである。ただし、通信装置Ａ、Ｂは、サーバ等の特定の種類の装置に限定されない。例えば、通信装置Ａ、Ｂのいずれか又は両方がユーザ端末であってもよいし、また、通信装置Ａ、Ｂのいずれか又は両方が、データの中継を行うルータ、スイッチ等であってもよい。
【００１４】
通信回線Ｃは、通信装置Ａから通信装置Ｂへの通信と、通信装置Ｂから通信装置Ａへの通信を同時に行うことが可能な双方向通信回線である。通信回線Ｃは、通信装置Ａから通信装置Ｂへの通信帯域、及び通信装置Ｂから通信装置Ａへの通信帯域を持つ回線であれば、どのような回線でもよい。例えば、通信回線Ｃが、１本の回線として識別される回線であってもよいし、各方向で１本ずつの回線から構成される２本の回線であってもよい。また、当該回線は、伝送路、パス、通信路等と呼んでもよい。また、通信回線Ｃは、光ファイバーや電気ケーブル等の物理的な回線であってもよいし、多数の装置からなるインターネット等のネットワーク内に形成された論理的な回線（例：ＶＰＮ）であってもよいし、これらを組み合わせたものであってもよい。
【００１５】
（システムの動作概要）
次に、図２を参照して、本実施の形態に係る通信システムの動作の概要を説明する。図２（ａ）、（ｂ）において、通信装置Ａから通信が開始されているが、これは説明の便宜上のためである。
【００１６】
前述したように、ＴＣＰ／ＩＰ等の通信プロトコルでは、信頼性が十分でないという問題がある。この問題を解消するために、例えば、受信側が、送信側から受信したデータをそのまま送信側に送信し（折り返し）、送信側が、当該データ（折り返しデータ）が、送信したデータと一致するかどうかを検証することで、送信したデータが確実に受信側に届いたか否かを確認することが考えられる。
【００１７】
図２（ａ）は、このような通信の手順例を示す。図２（ａ）に示すように、まず、通信装置Ａが通信装置ＢにデータＡを送信する（ステップ１）。
【００１８】
通信装置Ａにおいて、データＡが確実に通信装置Ｂに届いたことを確認するために、通信装置Ｂは、通信装置Ａから受信したデータＡ（通信装置Ｂで誤りなく受信できたとする）を通信装置Ａに送信する（ステップ２）。
【００１９】
また、データＡを折り返すタイミングで、通信装置Ｂには、通信装置Ａに送るべきデータＢがあり、当該データＢも通信装置Ａに送信する（ステップ２）。このような通信を行うケースにおいて、通信装置Ｂから通信装置Ａには、データＡとデータＢを送信することになり、データＡ（折り返しデータ）とデータＢを送信することを想定した十分な帯域がない場合、データＡ＋データＢの送信のために時間がかかり、遅延が生じることになる。
【００２０】
図２（ｂ）は、本実施の形態に係る通信の概要を示している。まず、上記と同様に通信装置Ａが通信装置ＢにデータＡを送信する（ステップ１０）。データＡを受信した通信装置Ｂは、データＡを通信装置Ａに折り返すとともに、データＢを信装置Ａに送信することになるが、ここでは、これらをそのまま送るのではなく、データＡとデータＢとの排他的論理和（ＸＯＲ）をとったデータ（データＡＢと記述）を送ることとしている（ステップ１１）。例えば、データＡとデータＢのデータサイズがそれぞれ１０であるとした場合、排他的論理和（ＸＯＲ）をとった後のデータＡＢのデータサイズも１０である。つまり、本実施の形態では、データＢ（あるいはデータＡ）のみを送る場合に比べて、データ量を増加させることなく、データＡとデータＢを送ることを可能としている。
【００２１】
データＡＢを受信した通信装置Ａは、ステップ１０にて送信し、保持しているデータＡと、受信したデータＡＢとの排他的倫理和を算出し、その結果であるデータＢ´を取得する（ステップ１２）。データＡＢ、データＡともに誤りなく送受信されている場合、データＡＢとデータＡとの排他的倫理和はデータＢであることから、ステップ１２の結果をデータＢ´と記述している。
【００２２】
通信装置Ａは、ステップ１２での結果であるデータＢ´と、受信したデータＡＢとの排他的論理和を算出し、その結果であるデータＡ´を取得する。データＡＢ、データＡともに誤りなく送受信されている場合、データＡＢとデータＢ´（データＢ）との排他的倫理和はデータＡであることから、ステップ１３の結果をデータＡ´と記述している。
【００２３】
更に、ステップ１３では、保持しているデータＡと、算出されたデータＡ´とを比較して、これらが一致しているか否かをチェックし、一致している場合、データＡＢ、データＡともに誤りなく送受信されているものと推定し、データＢ´をデータＢ（通信装置Ｂが送信したデータＢ）であるとして用いることができる。また、ここで、データＡ´＝データＡであるから、通信装置ＢはデータＡを正しく受信したと判断（推定）することができる。なお、これは例であり、後述するように、より多段のチェックを行うこととしてもよい。
【００２４】
（動作の詳細例）
次に、本実施の形態における通信システムの動作例をより詳細に説明する。以下では、送受信するデータの例として「パケット」を用いる。また、通信装置Ａから通信装置Ｂに送信するパケットをＡ、通信装置Ｂから通信装置Ａに送信するパケットをＢ、排他的論理和演算を行って送信するパケットをＰｋｔの記号で示す。また、明細書においては、排他的論理和演算を示す記号として、＊を使用している。更に、パケットの順序を示す識別子としてｉ（ｉは自然数）を用い、通信エラー等の可能性により正しいかどうか不明であるデータについては´（ダッシュ）を付している。
【００２５】
本例においては、セッション層にてセッション管理を行い、通信装置Ａから通信を開始するものとする。
【００２６】
通信装置Ａにおいて、送出するパケットＡｉと、通信装置Ｂから直前に受信したパケットＢ（ｉ−１）との排他的論理和を、通信装置Ｂへ送信するパケットＰｋｔｉとする。なお、セッションの開始時、つまり、通信装置ＡにパケットＢ（ｉ−１）か存在しない場合、Ｂ（ｉ−１）＝０とする。
【００２７】
一方、通信装置Ｂは、パケットＰｋｔｉ´を受信後、当該パケットＰｋｔｉ´とパケットＢ（ｉ−１）との排他的論理和演算を行って、Ｐｋｔｉ´＊Ｂ（ｉ−１）＝Ａｉ´を求める。この時点で、通信エラーが生じていない仮定においては、Ａｉ´＝Ａｉが成立するが、この時点では、この仮定が正しいかどうかわからない。なお、この例では、ｉが１であることを想定しており、Ｂ（ｉ−１）＝Ｂ０＝０である。つまり、セッション開始時においては、通信装置Ａと通信装置Ｂ間の取決め事項として、既に通信装置Ｂから値が０のデータが誤りなく通信装置Ａに送信されているものと仮定している。
【００２８】
通信装置Ｂにおいて、Ａｉ´を導出後、これとＰｋｔｉ´との排他的論理和をとり、Ｂ（ｉ−１）´＝Ｐｋｔｉ´＊Ａｉ´を得る。ここでは、上記の仮定が正しいかどうか不明であるため、この演算の結果は、Ｂ（ｉ−１）ではなく、Ｂ（ｉ−１）´としている。ただし、ここでは、Ｂ（ｉ−１）＝０であり、これは通信と無関係に決定されており、通信エラーに依存せずに正しい。従って、Ｂ（ｉ−１）´とＢ（ｉ−１）を比較して、これらが等しければ、Ｂ（ｉ−１）´−＞Ｂ（ｉ−１）（Ｂ（ｉ−１）´がＢ（ｉ−１）であること）が決定的に検証される。
【００２９】
よって、Ｐｋｔｉ´から上記の方法により導出したＢ（ｉ−１）´が正しければ、Ａｉ´−＞Ａ（ｉ−１）を仮定する（推定する）。これを確定するために、通信装置Ｂは、パケットＡｉと仮定されたパケットＡｉ´を通信装置Ａに送信する折り返し動作を行う。つまり、通信装置Ｂから送出すべきデータＢｉとＡｉ´との排他的論理和であるＰｋｔ（ｉ＋１）＝Ａｉ´＊Ｂｉを通信装置Ａに送信する。
【００３０】
Ｐｋｔ（ｉ＋１）＝Ａｉ´＊Ｂｉを受信した通信装置Ａは、Ｂｉ´＝Ｐｋｔ（ｉ＋１）´＊Ａｉ、Ａｉ´＝Ｐｋｔ（ｉ＋１）´＊Ｂｉ´を算出し、算出したＡｉ´と、保持しているＡｉが一致していることを確認することで、通信装置ＢにおけるＡｉの到達確認を行うとともに、Ｂｉ´−＞Ｂｉを仮定して、通信装置Ｂへの折り返し動作を行う。ここで、もしも算出したＡｉ´と、保持しているＡｉが一致しない場合、Ａｉが正しく通信装置Ｂに到達しなかったと推定できるので、再送によるリカバリを行う。つまり、Ｐｋｔｉの再送を行う。
【００３１】
次に、図３を参照して、上記の内容を含む通信装置Ａと通信装置Ｂ間の動作シーケンス例を説明する。この例では、通信装置Ａと通信装置Ｂとの間で同時双方向通信を行う。また、セッションを通信装置Ａから開始し、通信装置Ａがセッションを終了させる。また、双方の通信装置Ａ、Ｂは、同一長のデータ（パケット）を通信する。なお、双方の送りたいデータ長が異なる場合は、０パディング等でデータ長を揃えることとしてもよい。
【００３２】
また、通信装置Ａが通信を開始する際に、パケットＡに排他的論理和演算にて重畳するパケットＢは０であるとする。これが０であることは、通信装置Ａと通信装置Ｂにて既知である。以下の説明では、記述を簡潔にする観点から、パケットＰｋｔｉをＰｋｔｉと記述する等、適宜、パケットを記号のみで示している。また、図３及び本明細書中の"Ｘ＝＝Ｙ"は、ＸとＹが一致するか比較することを意味する。
【００３３】
図３は、通信開始から既に複数回のパケット送受信が行われ、通信装置Ａが、パケットＡｉを送信するところからを示す図である。
【００３４】
通信装置Ａが、Ｐｋｔｉ＝Ｂ（ｉ−１）´＊Ａｉを通信装置Ｂに送信する（ステップ１０１）。Ｂ（ｉ−１）´は通信装置ＡにおいてＢ（ｉ−１）であると推定されたパケットであり、通信装置Ｂへの折り返しデータである。
【００３５】
通信装置Ａから送信されたＰｋｔｉは、通信エラーが発生している可能性のあるパケットであるＰｋｔｉ´として通信装置Ｂに届く。Ｐｋｔｉ´を受信した通信装置Ｂは、ステップ１０２において、Ａｉ´＝Ｐｋｔｉ´＊Ｂ（ｉ−１）、Ｂ（ｉ−１）´＝Ｐｋｔｉ´＊Ａｉ´の演算を行って、Ａｉ´とＢ（ｉ−１）´を取得する。ここで、Ａｉ´＝Ｐｋｔｉ´＊Ｂ（ｉ−１）の演算においては、Ｐｋｔｉ´に含まれるＢ（ｉ−１）´がＮｏｎ−Ｅｒｒｏｒ（エラーがない）であることを仮定している。
【００３６】
通信装置Ｂは、Ｂ（ｉ−１）´と、通信装置Ｂが保持しているＢ（ｉ−１）との比較を行い、Ｂ（ｉ−１）´がＮｏｎ−Ｅｒｒｏｒであることの検証を行う。これらが一致した場合に、（ｉ−１）番のパケットで通信装置Ａに送信したＢ（ｉ−１）が正しく通信装置Ａに到達したことを推定でき、送達確認を行うことができる。また、Ｂ（ｉ−１）´とＢ（ｉ−１）が一致した場合には、Ａｉ´をＡｉであると推定する（Ａｉ´−＞Ａｉ）。この時点で、通信装置Ｂにおいて、Ａｉ´はその完全性が不明であるが、具体的な処理としては、この時点で、Ａｉ´をＡｉであると見なし、Ａｉ´をＡｉとして扱う処理を行うこととしてもよい。なお、Ｂ（ｉ−１）´とＢ（ｉ−１）が一致し、連続して、Ｂｉ´とＢｉが一致した場合に、Ａｉ´をＡｉであると見なし、ここで、Ａｉを用いる処理を行うこととしてもよい。
【００３７】
Ｂ（ｉ−１）´とＢ（ｉ−１）が一致しなかった場合には、例えば、通信装置Ａに対してＢ（ｉ−１）を含むＰｋｔを再送する。
【００３８】
次に、通信装置Ｂは、Ｐｋｔ（ｉ＋１）＝Ａｉ´＊Ｂｉを通信装置Ａに送信する（ステップ１０３）。Ａｉ´は、Ａｉに対する折り返しデータである。
【００３９】
通信装置Ｂから送信されたＰｋｔ（ｉ＋１）は、通信エラーが発生している可能性のあるパケットであるＰｋｔ（ｉ＋１）´として通信装置Ａに届く。Ｐｋｔ（ｉ＋１）´を受信した通信装置Ａは、ステップ１０４において、Ｂｉ´＝Ｐｋｔ（ｉ＋１）´＊Ａｉ、Ａｉ´＝Ｐｋｔ（ｉ＋１）´＊Ｂｉ´の演算を行って、Ｂｉ´とＡｉ´を取得する。また、通信装置Ａは、Ａｉ´と、通信装置Ａが保持しているＡｉとの比較を行い、一致した場合に、ｉ番のパケットで通信装置Ｂに送信したＡｉが正しく通信装置Ｂに到達したことを推定でき、送達確認を行うことができる。また、Ａｉ´とＡｉが一致した場合には、Ｂｉ´をＢｉであると推定する（Ｂｉ´−＞Ｂｉ）。この時点で、通信装置Ａにおいて、Ｂｉ´はその完全性が不明であるが、具体的な処理としては、この時点で、Ｂｉ´をＢｉであると見なし、Ｂｉ´をＢｉとして扱う処理を行うこととしてもよい。
【００４０】
Ａｉ´とＡｉが一致しなかった場合には、例えば、通信装置Ｂに対してＰｋｔｉを再送する。つまり、ステップ１０１に戻る。
【００４１】
次に、通信装置Ａは、Ｐｋｔ（ｉ＋２）＝Ｂｉ´＊Ａ（ｉ＋１）を通信装置Ｂに送信する（ステップ１０５）。
【００４２】
通信装置Ａから送信されたＰｋｔ（ｉ＋２）は、通信エラーが発生している可能性のあるパケットであるＰｋｔ（ｉ＋２）´として通信装置Ｂに届く。Ｐｋｔ（ｉ＋２）´を受信した通信装置Ｂは、ステップ１０６において、Ａ（ｉ＋１）´＝Ｐｋｔ（ｉ＋２）´＊Ｂｉ、Ｂｉ´＝Ｐｋｔ（ｉ＋２）´＊Ａ（ｉ＋１）´の演算を行って、Ａ（ｉ＋１）´とＢｉ´を取得する。また、通信装置Ｂは、Ｂｉ´と、通信装置Ｂが保持しているＢｉとの比較を行い、一致した場合に、（ｉ＋１）番のパケットで通信装置Ａに送信したＢｉが正しく通信装置Ａに到達したことを推定でき、送達確認を行うことができる。また、Ｂｉ´とＢｉが一致した場合には、Ａ（ｉ＋１）´をＡ（ｉ＋１）であると推定する（Ａ（ｉ＋１）´−＞Ａ（ｉ＋１））。この時点で、通信装置Ｂにおいて、Ａ（ｉ＋１）´はその完全性が不明であるが、具体的な処理としては、この時点で、Ａ（ｉ＋１）´をＡ（ｉ＋１）であると見なし、Ａ（ｉ＋１）´をＡ（ｉ＋１）として扱う処理を行うこととしてもよい。
【００４３】
Ｂｉ´とＢｉが一致しなかった場合には、例えば、通信装置Ａに対してＰｋｔ（ｉ＋１）を送信する。つまり、ステップ１０３に戻る。ここで、ステップ１０３に戻った後のステップ１０４の処理において、仮に、Ａｉ´とＡｉが一致しなかった場合には、ステップ１０１に戻ることになる。
【００４４】
ステップ１０１の開始時点から、上記ステップ１０６におけるＢｉ´とＢｉの一致が確認された時点で、通信装置Ａと通信装置Ｂとの間で同時双方向通信により、ＡｉとＢｉの転送が完了している。ここで、通信装置ＡにおいてＢｉが、通信装置ＢにおいてＡｉがそれぞれ確定したものとしてもよい。
【００４５】
図３に示すように、ステップ１０７以降も同様の動作により、パケットの送受信が実施される。
【００４６】
図３の例では、通信装置Ａがステップ１１３においてセッションを終了させるために値が０のデータ（図３の例では、Ａ（ｉ＋３））を送ることとする。これは、セッションを開始する場合、通信装置Ａにおいて、直前に届いている受信データ（Ｂ０）を０と仮定した場合と同様である。換言すると、最終データが相手に、確実に届いた前提を設ける。つまり、送受信側において事前に取り決めておく。通信装置Ｂにおいて、通信装置Ａから最後のデータが０と判明していた場合、一つ前の通信装置Ｂの送信データと通信装置Ａからのその折り返しパケットの一致、および通信装置Ａからの最終パケットから導出した、通信装置Ａからの最後のデータと思われる値が０か否かを確認すれば十分である。
【００４７】
なお、パケットの順序性について、相手側装置から受信したＰｋｔｉに対して、直前に相手側装置に送信したＰｋｔ（ｉ−１）と直後に相手側装置に送信するＰｋｔ（ｉ＋１）に保証が必要となる。順序性については、例えば、パケットに付される番号等により識別すればよい。
【００４８】
（実装例における並列性について）
本実施の形態における通信装置Ａ、Ｂとしては、ＩＡ−Ｓｅｒｖｅｒ等が利用される（ＮＦＶ等）ことが実装例として想定される。ＯＳとしては、Ｌｉｎｕｘ（登録商標）等が使用されることが想定される。通信ソフトウェアは、ＢＳＤ  Ｓｏｃｋｅｔにより抽象化された全二重仮想回線（Ｖｉｒｔｕａｌ  ｃｉｒｃｕｉｔ）を使用する。ＵＤＰを適用した場合、ポート番号が活用可能であり、ポート単位に並列性を確保する方法が有効である。具体的に、１つのポートを１つのスレッドで処理し、マルチスレッドをマルチポートで実行することにより、並列性が担保される。また、マルチコアへもマルチスレッドで対応も可能である。
【００４９】
上述した順序性に関しては、１つのスレッド内において確保するのみであり、順序性の確保が並列度の向上を妨げない。ＢＳＤ  Ｓｏｃｋｅｔにおいて、ポートは、ＤｅｓｔｉｎａｔｉｏｎとＳｏｕｒｃｅに、それぞれ１６ビットが割当てられる。また、ＩＰ  Ａｄｄｒｅｓｓとも対となるため、識別子の制限に関する問題が生じない。
【００５０】
なお、上記の実装例は一例に過ぎず、本発明に係る技術は、上記の実装例と異なる様々な方式で実装することができる。
【００５１】
（検証例）
以下では、図３を参照して説明した通信のアルゴリズムにおけるｉｆ文の判定に関するいくつかの検証例を示す。
【００５２】
＜検証例１＞
図３のステップ１０１の処理がｉ＝１から開始されるものとした場合に、Ｂ０＝０００、Ａ１＝１００とするとＰｋｔ１＝１００である。ここで、Ｐｋｔ１＝１００の先頭ビットに通信エラーが生じ、Ｐｋｔ１´＝０００を通信装置Ｂが受信したとする。この場合、通信装置Ｂは、Ａ１´＝Ｐｋｔ１´＊Ｂ０＝０００＊０００＝０００と、Ｂ０´＝Ｐｋｔ１´＊Ａ１´＝０００＊０００＝０００を算出する。すなわち、通信エラーが生じているが、Ｂ０´＝Ｂ０となったので、Ａ１´がＡ１であるとする誤った推定を行うが、通信装置Ｂは折り返しデータを通信装置Ａに送信するため、折り返しデータが有効に機能して、通信装置Ａにおいて誤りが検出される。
【００５３】
＜検証例２＞
図３のステップ１０１でＰｋｔｉ´を受信した通信装置Ｂにおいて、仮にＡがＥｒｒｏｒかつＢがＮｏｎ−Ｅｒｒｏｒであるとする場合、Ｐｋｔｉ´＝Ｂ（ｉ−１）Ｎｏｎ−Ｅｒｒｏｒ＊ＡｉＥｒｒｏｒだから、Ａｉ´＝Ｐｋｔｉ´＊Ｂ（ｉ−１）＝（Ｂ（ｉ−１）Ｎｏｎ−Ｅｒｒｏｒ＊ＡｉＥｒｒｏｒ）＊Ｂ（ｉ−１）＝ＡｉＥｒｒｏｒ−１（＝ＡｉＥｒｒｏｒ）、Ｂ（ｉ−１）´＝Ｐｋｔｉ´＊Ａｉ´＝（Ｂ（ｉ−１）Ｎｏｎ−Ｅｒｒｏｒ＊ＡｉＥｒｒｏｒ）＊ＡｉＥｒｒｏｒ−１＝（Ｂ（ｉ−１）Ｎｏｎ−Ｅｒｒｏｒ＊ＡｉＥｒｒｏｒ）＊（Ｂ（ｉ−１）Ｎｏｎ−Ｅｒｒｏｒ＊ＡｉＥｒｒｏｒ）＊Ｂ（ｉ−１）＝Ｂ（ｉ−１）となる。
【００５４】
ｉｆ文のＢ（ｉ−１）´＝＝Ｂ（ｉ−１）が成立するから、Ａｉ´（＝ＡｉＥｒｒｏｒ−１（＝ＡｉＥｒｒｏｒ））が折り返しデータとして用いられるが、通信装置Ａにおけるｉｆ（Ａｉ´＝＝Ａｉ）が成立しないため、Ｐｋｔｉの再送が実施される。このケースでは、Ｂ（ｉ−１）がＮｏｎ−Ｅｒｒｏｒであり、この点で再送は無駄であるが、パケット双方を重畳しているため、実質的な無駄はない。
【００５５】
＜検証例３＞
図３のステップ１０１でＰｋｔｉ´を受信した通信装置Ｂにおいて、仮にＡがＮｏｎ−ＥｒｒｏｒかつＢがＥｒｒｏｒであるとする場合、Ｐｋｔｉ´＝Ｂ（ｉ−１）Ｅｒｒｏｒ＊ＡｉＮｏｎ−Ｅｒｒｏｒだから、Ａｉ´＝Ｐｋｔｉ´＊Ｂ（ｉ−１）＝（Ｂ（ｉ−１）Ｅｒｒｏｒ＊ＡｉＮｏｎ−Ｅｒｒｏｒ）＊Ｂ（ｉ−１）＝ＡｉＥｒｒｏｒ−２、Ｂ（ｉ−１）´＝Ｐｋｔｉ´＊Ａｉ´＝（Ｂ（ｉ−１）Ｅｒｒｏｒ＊ＡｉＮｏｎ−Ｅｒｒｏｒ）＊ＡｉＥｒｒｏｒ−２＝（Ｂ（ｉ−１）Ｅｒｒｏｒ＊ＡｉＮｏｎ−Ｅｒｒｏｒ）＊（Ｂ（ｉ−１）Ｅｒｒｏｒ＊ＡｉＮｏｎ−Ｅｒｒｏｒ）＊Ｂ（ｉ−１）＝Ｂ（ｉ−１）となる。
【００５６】
つまり、Ｂ（ｉ−１）´＝Ｂ（ｉ−１）Ｅｒｒｏｒであり、Ｂ（ｉ−１）´とＢ（ｉ−１）は実際には一致しないが、ｉｆ文のＢ（ｉ−１）´＝＝Ｂ（ｉ−１）が成立するから、Ａｉ´（＝ＡｉＥｒｒｏｒ−２）＊Ｂｉが通信装置Ａに送信され、通信装置からＰｋｔｉ（Ｂ（ｉ−１）含む）の再送が実施される。このケースでは、ＡｉがＮｏｎ−Ｅｒｒｏｒであり、この点で再送が無駄であるが、パケット双方を重畳しているため、実質的な無駄はない。
【００５７】
＜検証例４＞
図３のステップ１０１でＰｋｔｉ´を受信した通信装置Ｂにおいて、仮にＡがＥｒｒｏｒかつＢがＥｒｒｏｒであるとする場合、Ｐｋｔｉ´＝Ｂ（ｉ−１）Ｅｒｒｏｒ＊ＡｉＥｒｒｏｒだから、Ａｉ´＝Ｐｋｔｉ´＊Ｂ（ｉ−１）＝（Ｂ（ｉ−１）Ｅｒｒｏｒ＊ＡｉＥｒｒｏｒ）＊Ｂ（ｉ−１）＝ＡｉＥｒｒｏｒ−３、Ｂ（ｉ−１）´＝Ｐｋｔｉ´＊Ａｉ´＝（Ｂ（ｉ−１）Ｅｒｒｏｒ＊ＡｉＥｒｒｏｒ）＊ＡｉＥｒｒｏｒ−３＝（Ｂ（ｉ−１）Ｅｒｒｏｒ＊ＡｉＥｒｒｏｒ）＊（Ｂ（ｉ−１）Ｅｒｒｏｒ＊ＡＥｒｒｏｒ）＊Ｂ（ｉ−１）＝Ｂ（ｉ−１）となる。
【００５８】
つまり、Ｂ（ｉ−１）´＝Ｂ（ｉ−１）Ｅｒｒｏｒであり、Ｂ（ｉ−１）´とＢ（ｉ−１）は実際には一致しないが、ｉｆ文のＢ（ｉ−１）´＝Ｂ（ｉ−１）が成立するから、Ａｉ´（＝ＡｉＥｒｒｏｒ−３）＊Ｂｉが通信装置Ａに送信され、通信装置ＡからＰｋｔｉ（Ｂ（ｉ−１）含む）の再送が実施される。このケースでは、Ｂ（ｉ−１）とＡｉがＥｒｒｏｒであり、再送は無駄にあたらない。
【００５９】
＜通信装置Ｂにおいて、Ｂ（ｉ−１）の到達が確定するタイミング＞
上記のように、Ｂ（ｉ−１）´＝＝Ｂ（ｉ−１）が成立しても、エラーがある場合には、再送となるから、Ｂ（ｉ−１）´＝＝Ｂ（ｉ−１）が成立しただけではＢ（ｉ−１）の到達を確定はできない。このような観点から、通信装置Ｂ向けの折り返しパケットのＢ（ｉ−１）´＝＝Ｂ（ｉ−１）とＢｉ´＝＝Ｂｉが連続的に成立した場合に、通信装置ＡにＢ（ｉ−１）が到着済と判断することができる（パケットＡについても同様である）。換言すると、Ｐｋｔｉで通信装置Ｂに届いたＡｉが、正常に折り返され、通信装置ＡがＡｉの折り返しデータを確認した後に、Ａ（ｉ＋１）を送信する順序性を保つ必要がある。ただし、伝送路Ｅｒｒｏｒが連続しない仮定を設ける。この方式は、通信品質が高い伝送路を想定したプロトコルであるため、実用上の問題がない。
【００６０】
上述した例の場合、通信装置Ａから通信装置Ｂに送信されたＰｋｔｉと、通信装置Ｂから通信装置Ａに送信されたＰｋｔ（ｉ＋１）、及び通信装置Ａから通信装置Ｂに送信されたＰｋｔ（ｉ＋２）の３つのパケットが連続して伝送Ｅｒｒｏｒが生じた場合にのみ転送データの完全性が失われる。
【００６１】
なお、連続した２つのパケットがＥｒｒｏｒ、かつ、ｉｆ文の誤り（実際に一致でないのに一致と判断）が連続した場合、再送信不可能になる。これを回避するためには、Ｎｏｎ−Ｅｒｒｏｒのパケットが連続する回数を増やす必要があり、送信バッファの利用効率低下が生じる。つまり、当該利用効率がペナルティーコストとなる。無論、上述した"無駄"も生じるが、伝送路Ｅｒｒｏｒが要因であるため、必要不可欠なトラフィックと考えることができる。
【００６２】
（単方向通信との親和性）
双方向通信においては、送信対象データと折り返しデータの排他的論理和をとった値を送信データとしている。単方向通信においては、相手側からのデータが不要であり、これを０と定めておけば、排他的論理和を施したとしても、送信対象データと送信データが一致する。換言すると、相手側からの送信データが、常に０と事前に取り決めておくことで、双方向通信と単方向通信の親和性が確保できる。すなわち、本実施の形態で説明した方式は、双方向通信と単方向通信についてアルゴリズムを変更することなく同様に適用可能である。
【００６３】
なお、単方向通信の場合、相手からの折り返しデータを一回確認するのみで十分だが、若干の送信バッファ利用効率が低下するも、双方向通信に備えて、次の折り返しデータも確認することとしてもよい。
【００６４】
（装置構成）
図４に、本実施の形態における通信装置Ａもしくは通信装置Ｂとして用いられる通信装置１００の構成図を示す。図４に示すように、通信装置１００は、データ送受信部１０１、送信データ作成部１０２、データ抽出部１０３、データ検証部１０４、データ格納部１０５、データ処理部１０６を含む。
【００６５】
データ送受信部１０１は、通信回線を介してパケット等の送受信を行う。また、データ送受信部１０１は、送信バッファ、受信バッファを有する。データ処理部１０６は、送信すべきデータの生成や、受信したデータの利用等を行う機能部であり、例えば、上位レイヤ通信機能や所定のサービスを提供するアプリケーション等に相当するものである。
【００６６】
送信データ作成部１０２は、データ処理部１０６により生成された相手側に送るべきデータをデータ処理部１０６から受け取るとともに、相手側に折り返すべきデータをデータ検証部１０４から受け取り、これらのデータの排他的論理和を計算することにより相手側に送信するデータを作成する。
【００６７】
データ抽出部１０３は、相手側から受信したデータと、データ格納部１０５に格納されている既に送信したデータとに基づき、排他的論理和演算を行うことで、前述したＡ´、Ｂ´のデータを抽出する。一例として、通信装置１００が通信装置Ａとして使用される場合の図３でのステップ１０４において、データ抽出部１０３は、Ｂｉ´＝Ｐｋｔ（ｉ＋１）´＊Ａｉ、Ａｉ´＝Ｐｋｔ（ｉ＋１）´＊Ｂｉ´の演算を行う。この例で、Ａｉはデータ格納部１０５に格納されているデータである。
【００６８】
データ検証部１０４は、上記の例において、Ａｉ´がＡｉと一致するかどうかのチェックを行う。一致する場合は、Ａｉの送達確認がとれたと判断するとともに、Ｂｉ´をＢｉと見なしてデータ処理部１０６に渡す。もしくは、よりチェックを厳密に行うために、Ａｉ´がＡｉと一致した後、次にＡ（ｉ＋１）´がＡ（ｉ＋１）と一致したときに、Ａｉの送達確認がとれたと判断するとともに、Ｂｉ´をＢｉと見なしてデータ処理部１０６に渡すこととしてもよい。なお、このように多段のチェックを行う際に保持しておくデータについてもデータ格納部１０５に保持しておくこととしてよい。
【００６９】
本実施の形態に係る通信装置１００は、例えば、１つ又は複数のコンピュータに、本実施の形態で説明する処理内容を記述したプログラムを実行させることにより実現可能である。すなわち、通信装置１００が有する機能は、当該コンピュータに内蔵されるＣＰＵやメモリ、ハードディスクなどのハードウェア資源を用いて、通信装置１００で実施される処理に対応するプログラムを実行することによって実現することが可能である。また、上記プログラムは、コンピュータが読み取り可能な記録媒体（可搬メモリ等）に記録して、保存したり、配布したりすることが可能である。また、上記プログラムをインターネットや電子メールなど、ネットワークを通して提供することも可能である。
【００７０】
（実施の形態のまとめ、効果等）
以上説明したように、本実施の形態においては、第１の通信装置と第２の通信装置を有する通信システムであって、前記第１の通信装置が、第１のデータを前記第２の通信装置に送信し前記第２の通信装置が、前記第１の通信装置から受信した前記第１のデータに第２のデータを重畳した第３のデータを前記第１の通信装置に送信し、前記第１の通信装置が、前記第１の通信装置が保持する前記第１のデータを用いて、前記第２の通信装置から受信した前記第３のデータから前記第２のデータを取得する通信システムが提供される。
【００７１】
前記第２の通信装置は、前記第１のデータと前記第２のデータとの排他的論理和を算出することにより前記第３のデータを取得し、前記第１の通信装置は、前記第１のデータと前記第３のデータとの排他的論理和を算出することにより前記第２のデータを取得するように構成してもよい。
【００７２】
また、前記第１の通信装置は、前記第２の通信装置から受信した前記第３のデータと算出された前記第２のデータとの排他的論理和を算出することにより得られたデータと、前記第１の通信装置が保持する前記第１のデータが一致する場合に、算出された前記第２のデータは、前記第２の通信装置から送出された第２のデータであると推定することとしてもよい。
【００７３】
また、例えば、前記第１の通信装置と前記第２の通信装置との通信の開始時に、既に前記第２の通信装置から値が０のデータが誤りなく前記第１の通信装置に送信されているものと仮定し、前記第１の通信装置と前記第２の通信装置との通信の終了時に、前記第１の通信装置は、値が０のデータと、直前に前記第２の通信装置から送信されたと推定されたデータとの排他的論理和により得られるデータを前記第２の通信装置に送信することとしてもよい。
【００７４】
また、本実施の形態によれば、通信相手となる相手通信装置と通信を行う通信装置であって、第１のデータを前記相手通信装置に送信し、当該相手通信装置から、前記第１のデータに第２のデータを重畳した第３のデータを受信する手段と、前記相手通信装置に送信した前記第１のデータを保持する格納手段と、前記格納手段に保持される前記第１のデータを用いて、前記相手通信装置から受信した前記第３のデータから前記第２のデータを取得するデータ取得手段とを備える通信装置が提供される。
【００７５】
例えば、前記相手通信装置において、前記第１のデータと前記第２のデータとの排他的論理和を算出することにより前記第３のデータが取得され、前記データ取得手段は、前記第１のデータと前記第３のデータとの排他的論理和を算出することにより前記第２のデータを取得する。
【００７６】
前記データ取得手段は、前記相手通信装置から受信した前記第３のデータと算出された前記第２のデータとの排他的論理和を算出することにより得られたデータと、前記格納手段に保持される前記第１のデータが一致する場合に、前記算出された前記第２のデータは、前記第２の通信装置から送出された第２のデータであると推定するように構成してもよい。
【００７７】
本実施の形態によれば、折り返しデータを用いることでデータの到達性、完全性を担保することができ、信頼性の高い通信が可能となる。また、ＴＣＰのようにＡＣＫやウィンドウサイズ等の仕組みを持たないため、通信開始時および通信再開時などから効率のよい通信が可能となる。さらに、折り返しデータと、本来のデータとを排他的論理和等を用いて重畳して送信することとしたので、折り返しデータを用いた信頼性の高い通信を、スループットに影響を与えることなく、効率良く実施することが可能となる。
【００７８】
本発明は、上記の実施の形態に限定されることなく、特許請求の範囲内において、種々変更・応用が可能である。
【符号の説明】
【００７９】
Ａ  通信装置
Ｂ  通信装置
Ｃ  通信回線
１００  通信装置
１０１  データ送受信部
１０２  送信データ作成部
１０３  データ抽出部
１０４  データ検証部
１０５  データ格納部
１０６  データ処理部
【図１】
2016025641.tif 000003
【図２】
2016025641.tif 000004
【図３】
2016025641.tif 000005
【図４】
2016025641.tif 000006