(57)【特許請求の範囲】
【請求項１】
端末で動作するアプリケーションから通信先への通信を中継する通信プログラムであって、
前記通信先とのコネクションの状態に応じて、前記通信先との通信を第１のプロトコルによる通信から途絶耐性ネットワークのプロトコルによる通信に切り替え、
前記通信先への通信の完了を前記アプリケーションに通知済みであり、かつ、前記途絶耐性ネットワークのプロトコルによる通信が失敗した通信について、前記通信の失敗を前記端末に表示すること、または前記端末に記憶させることにより前記端末のユーザに通知する、処理を、前記端末に設けられたコンピュータまたは他の装置のコンピュータに実行させることを特徴とする通信プログラム。
【請求項２】
前記通信先との間の複数の通信回線の通信品質をそれぞれ測定し、
前記通信品質に基づき前記複数の通信回線から１以上の通信回線を選択し、
該選択した前記１以上の通信回線により前記途絶耐性ネットワークのプロトコルによる通信を行う、処理を前記コンピュータに実行させることを特徴とする請求項１に記載の通信プログラム。
【請求項３】
前記アプリケーションから前記通信先に送信されるデータの所定の先頭部分を複数のブロックに分割し、
前記複数のブロックを前記複数の通信回線のそれぞれを介して前記通信先に送信することにより、前記複数の通信回線の前記通信品質をそれぞれ測定し、
前記通信品質に基づき前記複数の通信回線から前記１以上の通信回線を選択し、
該選択した前記１以上の通信回線を介して前記データの他部分を前記通信先に送信する、処理を前記コンピュータに実行させることを特徴とする請求項２に記載の通信プログラム。
【請求項４】
端末で動作するアプリケーションから通信先への通信を中継する通信方法であって、
前記通信先とのコネクションの状態に応じて、前記通信先との通信を第１のプロトコルによる通信から途絶耐性ネットワークのプロトコルによる通信に切り替える工程と、
前記通信先への通信の完了を前記アプリケーションに通知済みであり、かつ、前記途絶耐性ネットワークのプロトコルによる通信が失敗した通信について、前記通信の失敗を前記端末に表示すること、または前記端末に記憶させることにより前記端末のユーザに通知する工程とを、前記端末に設けられたコンピュータまたは他の装置のコンピュータが実行することを特徴とする通信方法。
【請求項５】
端末または他の装置に設けられ、前記端末で動作するアプリケーションから通信先への通信を中継する通信装置であって、
前記通信先とのコネクションの状態に応じて、前記通信先との通信を第１のプロトコルによる通信から途絶耐性ネットワークのプロトコルによる通信に切り替える切り替え処理部と、
前記通信先への通信の完了を前記アプリケーションに通知済みであり、かつ、前記途絶耐性ネットワークのプロトコルによる通信が失敗した通信について、前記通信の失敗を前記端末に表示すること、または前記端末に記憶させることにより前記端末のユーザに通知する失敗通知部とを有することを特徴とする通信装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本件は、通信プログラム、通信方法、及び通信装置に関する。
【背景技術】
【０００２】
近年、無線アクセスポイント（以下、「ＡＰ」と表記）が普及した結果、スマートフォンなどの端末は、無線アクセスポイントと通信キャリアの広域無線接続を切り替えながら通信を行うスタイルが広まっている。このような環境において、通信状態は、端末の接続数や周囲の電波状況に影響されるため、通信品質が場所や時間によりばらついて、通信が断続的となる。
【０００３】
例えば、ユーザが移動中、リンク対象のＡＰを切り替えながらインターネット上のサーバと通信を行う場合、通信のデータ量が多く、ＡＰのリンク可能範囲内の滞在時間が短いと、通信が途中で切断されるため、他のＡＰとの再リンク後に通信のやり直しが必要となる。
【０００４】
これに対し、端末のアプリケーションに、通信の遅延や途絶に対する耐性を持たせることが検討されている（例えば特許文献１）。例えば、通信が断続的となる環境でも円滑な通信を可能にする技術として、途絶耐性ネットワーク（DTN：Delay, Disruption Tolerant Networking）が知られている。この技術は、ＩＥＴＦ（The Internet Engineering Task Force）により標準化が進められ、例えばＲＦＣ（Request For Comments）５０５０には、ＤＴＮに適用するバンドルプロトコルが規定されている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特表２０１５−５２８２２２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
バンドルプロトコルは、本来、宇宙空間や海中などの特殊な環境下の通信のように、リアルタイム性がなく、遅延を前提とした通信に適用することを想定しているため、一般的なアプリケーションには直接的に用いることが難しい。このため、一般的なアプリケーションの通信にバンドルプロトコルを用いるためには、バンドルプロトコルに基づき通信を行うプロキシ機能の使用が考えられる。
【０００７】
しかし、プロキシ機能を用いた場合、バンドルプロトコル上でデータ送信が失敗しても、アプリケーションには通信が成功したように認識させてしまうため、ユーザは通信結果の把握が難しいという問題がある。さらにバンドルプロトコルでは通信可否を判定するためのタイマの満了時間が他のプロトコルより長いため、通常のエラー検出手段を使用することが難しい。
【０００８】
そこで本件は上記の課題に鑑みてなされたものであり、通信結果の把握を容易とする通信プログラム、通信方法、及び通信装置を提供することを目的とする。
【課題を解決するための手段】
【０００９】
本明細書に記載の通信プログラムは、端末で動作するアプリケーションから通信先への通信を中継する通信プログラムであって、前記通信先とのコネクションの状態に応じて、前記通信先との通信を第１のプロトコルによる通信から途絶耐性ネットワークのプロトコルによる通信に切り替え、前記通信先への通信の完了を前記アプリケーションに通知済みであり、かつ、前記途絶耐性ネットワークのプロトコルによる通信が失敗した通信について、前記通信の失敗を前記端末に表示すること、または前記端末に記憶させることにより前記端末のユーザに通知する、処理を、前記端末に設けられたコンピュータまたは他の装置のコンピュータに実行させるプログラムである。
【００１０】
本明細書に記載の通信方法は、端末で動作するアプリケーションから通信先への通信を中継する通信方法であって、前記通信先とのコネクションの状態に応じて、前記通信先との通信を第１のプロトコルによる通信から途絶耐性ネットワークのプロトコルによる通信に切り替える工程と、前記通信先への通信の完了を前記アプリケーションに通知済みであり、かつ、前記途絶耐性ネットワークのプロトコルによる通信が失敗した通信について、前記通信の失敗を前記端末に表示すること、または前記端末に記憶させることにより前記端末のユーザに通知する工程とを、前記端末に設けられたコンピュータまたは他の装置のコンピュータが実行する方法である。

【００１１】
本明細書に記載の通信装置は、端末または他の装置に設けられ、前記端末で動作するアプリケーションから通信先への通信を中継する通信装置であって、前記通信先とのコネクションの状態に応じて、前記通信先との通信を第１のプロトコルによる通信から途絶耐性ネットワークのプロトコルによる通信に切り替える切り替え処理部と、前記通信先への通信の完了を前記アプリケーションに通知済みであり、かつ、前記途絶耐性ネットワークのプロトコルによる通信が失敗した通信について、前記通信の失敗を前記端末に表示すること、または前記端末に記憶させることにより前記端末のユーザに通知する失敗通知部とを有する。
【発明の効果】
【００１２】
通信結果の把握を容易とすることができる。
【図面の簡単な説明】
【００１３】
【図１】端末の一例を示す構成図である。
【図２】サーバの一例を示す構成図である。
【図３】端末及びサーバの各機能構成の一例を示す構成図である。
【図４】バンドルのフォーマットを示す図である。
【図５】コネクションリスト、フィルタテーブル、及びバンドルバッファの一例を示す図である。
【図６】プロトコル変換の一例を示す図である。
【図７】クライアントアプリケーションのデータ送信処理の一例を示すフローチャートである。
【図８】バンドルの送信処理の一例を示すフローチャートである。
【図９】バンドルの受信処理の一例を示すフローチャートである。
【図１０】バンドルプロトコルの適用の切り替え処理の一例を示すフローチャートである。
【図１１】複数の通信回線によるバンドル通信の比較例及び実施例を示す図である。
【図１２】バンドル通信の最適化処理の一例を示すフローチャートである。
【図１３】通知処理の一例を示すフローチャートである。
【図１４】通信動作例１の初期設定ファイル及び経路テーブルを示す図である。
【図１５】通信動作例１を示す図である。
【図１６】通信動作例１を示す図である。
【図１７】通信動作例１を示す図である。
【図１８】通信動作例１を示す図である。
【図１９】通信動作例１を示す図である。
【図２０】回送通知の利用例を示す図である。
【図２１】通信動作例２の初期設定ファイル及び経路テーブルを示す図である。
【図２２】通信動作例２を示す図である。
【図２３】ウェブブラウザの画面の例を示す図である。
【発明を実施するための形態】
【００１４】
図１は、端末の一例を示す構成図である。端末１としては、例えば、スマートフォンやパーソナルコンピュータなどの通信装置が挙げられるが、これに限定されない。
【００１５】
端末１は、ＣＰＵ（Central Processing Unit）１０、ＲＯＭ（Read Only Memory）１１、ＲＡＭ（Random Access Memory）１２、ＨＤＤ（Hard Disk Drive）やメモリなどの記憶部１３、無線ＬＡＮ（Local Area Network）モジュール１４、入力部１５、及び表示部１６を有する。ＣＰＵ１０は、互いに信号の入出力ができるように、ＲＯＭ１１、ＲＡＭ１２、記憶部１３、無線ＬＡＮモジュール１４、入力部１５、及び表示部１６と、バス１９を介して接続されている。
【００１６】
ＲＯＭ１１は、ＣＰＵ１０を駆動するプログラムが格納されている。ＲＯＭ１１内のプログラムには、実施例の通信方法を実行する通信プログラムが含まれる。
【００１７】
ＲＡＭ１２は、ＣＰＵ１０のワーキングメモリとして機能する。記憶部１３には、プログラムの実行に用いられる各種の情報が記憶されている。無線ＬＡＮモジュール１４は、例えば、アクセス系ネットワークに接続されたＡＰとリンクアップすることによりインターネット上のサーバと通信する。無線ＬＡＮモジュール１４は、複数の通信回線によりＡＰとリンクアップすることが可能である。
【００１８】
入力部１５は、端末１に情報を入力する手段である。入力部１５としては、例えばキーボード、マウス、及びタッチパネルなどが挙げられる。入力部１５は、入力された情報を、バス１９を介しＣＰＵ１０に出力する。
【００１９】
表示部１６は、端末１の情報を出力する手段である。表示部１６としては、例えばディスプレイ、タッチパネル、及びプリンタなどが挙げられる。表示部１６は、ＣＰＵ１０からバス１９を介して情報を取得して表示する。表示部１６には、後述するように端末１のクライアントアプリケーションの通信の状況及び結果が表示される。
【００２０】
ＣＰＵ１０は、ＲＯＭ１１からプログラムを読み込むと、通信方法を実行するための各種の機能が形成される。ＣＰＵ１０は、プログラムを実行するコンピュータの一例である。なお、端末１の機能構成については後述する。
【００２１】
図２は、サーバ２の一例を示す構成図である。サーバ２は、例えばインターネットに接続され、端末１と通信することにより所定のサービスを提供する通信装置である。
【００２２】
サーバ２は、ＣＰＵ２０、ＲＯＭ２１、ＲＡＭ２２、ＨＤＤ２３、及び通信ポート２４を有する。ＣＰＵ２０は、互いに信号の入出力ができるように、ＲＯＭ２１、ＲＡＭ２２、ＨＤＤ２３、及び通信ポート２４と、バス２９を介して接続されている。
【００２３】
ＲＯＭ２１は、ＣＰＵ２０を駆動するプログラムが格納されている。ＲＡＭ２２は、ＣＰＵ２０のワーキングメモリとして機能する。通信ポート２４は、例えばＮＩＣ（Network Interface Card）であり、インターネットを介し端末１と通信する。
【００２４】
ＣＰＵ２０は、ＲＯＭ２１からプログラムを読み込むと、各種の機能が形成される。
【００２５】
図３は、端末１及びサーバ２の各機能構成の一例を示す構成図である。端末１及びサーバ２は、ネットワークＮＷを介して接続されている。
【００２６】
端末１は、アプリケーション機能部１００と、プロキシプロトコル機能部１１０と、バンドル制御部１２０と、状態通知部１２１と、バンドルバッファ１２２と、経路テーブル（経路ＴＢＬ）１２３とを有する。
【００２７】
アプリケーション機能部１００は、クライアントアプリケーション（ＡＰＬｃ）１０１と、ＴＣＰ（Transmission Control Protocol）処理部１０２とを有する。プロキシプロトコル機能部１１０は、プロキシ制御部１１１と、コネクション監視部１１２と、アドレス変換部１１３と、送受信制御部１１４と、応答制御部１１５と、コネクションリスト１１６と、初期設定ファイル１１７と、フィルタテーブル（フィルタＴＢＬ）１１８とを有する。
【００２８】
クライアントアプリケーション１０１、ＴＣＰ処理部１０２、プロキシ制御部１１１、コネクション監視部１１２、アドレス変換部１１３、送受信制御部１１４、応答制御部１１５、バンドル制御部１２０、及び状態通知部１２１は、端末１のＣＰＵ１０に形成される機能である。また、コネクションリスト１１６と、初期設定ファイル１１７と、フィルタＴＢＬ１１８、バンドルバッファ１２２、及び経路ＴＢＬ１２３は、記憶部１３に記憶されている。
【００２９】
なお、図３に示された端末１の機能構成のうち、アプリケーション機能部１００を除く部分は、実施例の通信装置及び通信プログラムとして機能し、クライアントアプリケーション１０１から通信先への通信を中継する。実施例の通信装置及び通信プログラムは、図３に示されるように端末１の内部に設けられてもよいが、端末１とは別の装置に設けられてもよい。
【００３０】
一方、サーバ２は、アプリケーション機能部２００と、プロキシプロトコル機能部２１０と、バンドル制御部２２０と、状態通知部２２１と、バンドルバッファ２２２と、経路ＴＢＬ２２３とを有する。
【００３１】
アプリケーション機能部２００は、サーバアプリケーション（ＡＰＬｓ）２０１と、ＴＣＰ処理部２０２とを有する。プロキシプロトコル機能部２１０は、プロキシ制御部２１１と、コネクション監視部２１２と、アドレス変換部２１３と、送受信制御部２１４と、応答制御部２１５と、コネクションリスト２１６と、初期設定ファイル２１７と、フィルタＴＢＬ２１８とを有する。
【００３２】
サーバアプリケーション２０１、ＴＣＰ処理部２０２、プロキシ制御部２１１、コネクション監視部２１２、アドレス変換部２１３、送受信制御部２１４、応答制御部２１５、バンドル制御部２２０、及び状態通知部２２１は、サーバ２のＣＰＵ２０に形成される機能である。また、コネクションリスト２１６と、初期設定ファイル２１７と、フィルタＴＢＬ２１８、バンドルバッファ２２２、及び経路ＴＢＬ２２３は、ＨＤＤ２３に記憶されている。
【００３３】
サーバアプリケーション２０１とクライアントアプリケーション１０１は、ＴＣＰ処理部１０２，２０２により通信することにより連携して所定の機能を提供する。サーバアプリケーション２０１とクライアントアプリケーション１０１の機能としては、例えばファイル転送機能やウェブブラウザ機能などが挙げられるが限定はない。なお、クライアントアプリケーション１０１は、端末１で動作するアプリケーションの一例である。
【００３４】
ＴＣＰ処理部１０２，２０２は、例えばＯＳ（Operating System）のドライバなどにより提供されるＴＣＰ／ＩＰ（Internet Protocol）の通信機能を備える。端末１のＴＣＰ処理部１０２は、無線ＬＡＮモジュール１４を制御してパケットの送受信を行い、サーバ２のＴＣＰ処理部２０２は、通信ポート２４を制御してパケットの送受信を行う。なお、ＴＣＰ／ＩＰは第１のプロトコルの一例である。
【００３５】
サーバアプリケーション２０１とクライアントアプリケーション１０１は、ネットワークＮＷを介し、直接的にＴＣＰ／ＩＰに基づく通信を行う。しかし、通信が断続的となる環境においては、バンドル制御部１２０，２２０が、ＴＣＰ／ＩＰに基づく通信に代えて、ＤＴＮのバンドルプロトコルに基づく通信を行う。
【００３６】
バンドル制御部１２０は、クライアントアプリケーション１０１から通信先への通信を、その通信先とのコネクションの状態に応じて、ＴＣＰ／ＩＰに基づく通信からＤＴＮのバンドルプロトコルに基づく通信に切り替えて行う。このとき、コネクション監視部１１２は、通信先とのコネクションを状態を監視し、コネクションの状態に応じてアドレス変換部１１３を制御する。
【００３７】
これにより、コネクション監視部１１２は、切り替え処理部の一例として、クライアントアプリケーション１０１の通信先との通信をＴＣＰ／ＩＰによる通信からＤＴＮのバンドルプロトコルによる通信に切り替える。したがって、クライアントアプリケーション１０１の通信が、ＴＣＰ処理部１０２によるＴＣＰ／ＩＰに基づく通信からバンドル制御部１２０によるバンドルプロトコルに基づく通信に切り替えられる。
【００３８】
また、バンドル制御部２２０は、サーバアプリケーション２０１から通信先への通信を、その通信先とのコネクションの状態に応じて、ＴＣＰ／ＩＰに基づく通信からＤＴＮのバンドルプロトコルに基づく通信に切り替えて行う。このとき、コネクション監視部２１２は、通信先とのコネクションを状態を監視し、コネクションの状態に応じて、アドレス変換部２１３を制御する。
【００３９】
これにより、コネクション監視部２１２は、サーバアプリケーション２０１の通信先との通信をＴＣＰ／ＩＰによる通信からＤＴＮのバンドルプロトコルによる通信に切り替える。したがって、サーバアプリケーション２０１の通信が、ＴＣＰ処理部２０２によるＴＣＰ／ＩＰに基づく通信からバンドル制御部２２０によるバンドルプロトコルに基づく通信に切り替えられる。
【００４０】
バンドル制御部１２０，２２０は、例えば、ＲＦＣ５０５０の規定に従い、バンドルプロトコルに基づく通信を行う。バンドル制御部１２０，２２０は、サーバアプリケーション２０１とクライアントアプリケーション１０１の送信対象データを、バンドルと呼ばれるデータメッセージのペイロード部分に収容して送信する。なお、バンドル制御部１２０は、バンドルプロトコルにより通信先と通信する通信部の一例である。
【００４１】
図４には、バンドルのフォーマットが示されている。バンドルは、プライマリバンドルブロック及びバンドルペイロードブロックを含む。プライマリバンドルブロックには、送信元や宛先に関する情報、及び、バンドルの削除までの時間を示すライフタイム（「Life time」）などが含まれる。バンドルペイロードブロックには、データを収容するペイロード（「Bundle Payload」）が含まれる。なお、バンドル内の各項目についてはＲＦＣ５０５０に規定されている。
【００４２】
バンドル制御部１２０，２２０は、バンドルを送信するとき、経路ＴＢＬ１２３，２２３を参照して、バンドルプロトコルにおける宛先を示すＥＩＤ（Endpoint ID）に対応するＴＣＰ／ＩＰ上の宛先ＩＰアドレス及びＴＣＰポート番号（以下、「ポート番号」と表記）を取得する。バンドル制御部１２０，２２０は、その宛先とのコネクション、つまり端末１とサーバ２の間のコネクションが切断されているとき、バンドルバッファ１２２，２２２にバンドルを格納しておき、コネクションが再接続されたとき、バンドルバッファ１２２，２２２からバンドルを読み出して送信する。これにより、ＤＴＮに基づく通信が行われる。なお、バンドルの送受信は、端末１の場合、バンドル制御部１２０が無線ＬＡＮモジュール１４を制御して行い、サーバ２の場合、バンドル制御部２２０が通信ポート２４を制御して行う。
【００４３】
図５には、バンドルバッファ１２２，２２２の一例が示されている。バンドルバッファ１２２，２２２はバンドルの格納領域である。バンドルは、バンドルを識別するバンドルＩＤとともにバンドルバッファ１２２，２２２に格納される。なお、バンドル制御部１２０，２２０は、バンドルの送信時だけでなく、バンドルの受信時もバンドルをバンドルバッファ１２２，２２２に格納する。
【００４４】
再び図３を参照すると、プロキシプロトコル機能部１１０，２１０は、クライアントアプリケーション１０１及びサーバアプリケーション２０１の通信を、ＴＣＰのソケット通信からバンドルプロトコルの通信に変換する。このとき、プロキシプロトコル機能部１１０，２１０は、バンドル制御部１２０，２２０に対しバンドルＡＰＩ（Application Programing Interface）により設定及び制御を行うことにより、一般的なアプリケーションでもＤＴＮを利用可能とする。以下にプロキシプロトコル機能部１１０，２１０の詳細を説明する。
【００４５】
アドレス変換部１１３，２１３は、クライアントアプリケーション１０１及びサーバアプリケーション２０１の通信の宛先を送受信制御部１１４，２１４の宛先に変換する。例えば端末１において、アドレス変換部１１３は、サーバ２を宛先とするパケットの宛先ＩＰアドレス及びポート番号を、送受信部に設定されたＴＣＰソケット（以下、「ソケット」と表記）の宛先ＩＰアドレス及びポート番号に変換する。
【００４６】
このため、プロキシプロトコル機能部１１０，２１０は、クライアントアプリケーション１０１及びサーバアプリケーション２０１から通信先に送信されるパケットのデータを受信することができる。なお、アドレス変換部１１３，２１３は、例えば、ＯＳとしてWindows（登録商標）が使用される場合、ＷＦＰ（Windows Filtering Platform）により実現され、ＯＳとしてLinux（登録商標）が使用される場合、「iptables」により実現される。
【００４７】
送受信制御部１１４，２１４は、クライアントアプリケーション１０１及びサーバアプリケーション２０１のＴＣＰのソケット通信を終端する。送受信制御部１１４，２１４は、装置内のローカルなループバックコネクションを確立する。
【００４８】
例えば、端末１の送受信制御部１１４は、クライアントアプリケーション１０１からのソケットの接続を監視し、プロキシ制御部１１１からの指示に従い、サーバアプリケーション２０１に対するソケットの確立と、指示されたソケットへのデータの送信を行う。
【００４９】
送受信制御部１１４，２１４は、クライアントアプリケーション１０１及びサーバアプリケーション２０１からソケット経由で受信したパケットを、ユーザやオペレータが設定したポリシー（アルゴリズムや処理方針）に従い指定サイズで分割してプロキシ制御部１１１，２１１に出力する。分割のサイズは、例えば、ソケットのオープンからクローズまでに受信したデータサイズ、パケットの受信サイズ、または所定値とする。
【００５０】
プロキシ制御部１１１，２１１は、送受信制御部１１４，２１４で受信したパケットのデータを、プロキシメッセージのペイロードに収容して、バンドルＡＰＩによりバンドル制御部１２０，２２０に出力する。これにより、プロキシ制御部１１１，２１１からバンドル制御部１２０，２２０に対してバンドルの送信が要求される。
【００５１】
プロキシ制御部１１１，２１１は、プロキシメッセージを、宛先に応じたコネクション番号により管理する。プロキシ制御部１１１，２１１は、送受信制御部１１４，２１４によりソケットがオープンされるたびに新規のコネクション番号をコネクションリスト１１６，２１６に登録する。
【００５２】
図５には、コネクションリスト１１６，２１６の一例が示されている。コネクションリスト１１６，２１６には、コネクション番号、ソケットチャネルＩＤ、及び宛先ＥＩＤが対応付けられて登録されている。ソケットチャネルＩＤは、送受信制御部１１４，２１４のソケットの識別子である。
【００５３】
プロキシ制御部１１１，２１１は、パケットの受信元のソケットのソケットチャネルＩＤに応じたコネクション番号をプロキシメッセージに付与してバンドル制御部１２０，２２０に出力する。また、プロキシ制御部１１１，２１１は、該当する宛先ＥＩＤへのバンドルの送信をバンドル制御部１２０，２２０に要求する。したがって、端末１のコネクションリスト１１６の宛先ＥＩＤには、サーバ２のＥＩＤが登録され、サーバ２のコネクションリスト２１６の宛先ＥＩＤには、端末１のＥＩＤが登録されている。なお、プロキシ制御部１１１，２１１は、初期設定ファイル１１７，２１７を読み出すことにより、自装置のＥＩＤや通信先のＥＩＤなどの通信に必要な情報を取得する。
【００５４】
また、プロキシ制御部１１１，２１１は、バンドル制御部１２０，２２０からプロキシメッセージを受信する。プロキシ制御部１１１，２１１は、受信したプロキシメッセージのコネクション番号がコネクションリスト１１６，２１６に未登録である場合、送受信制御部１１４，２１４に新規のソケットのオープンを指示し、そのソケットによる通信を開始する。
【００５５】
また、プロキシ制御部１１１，２１１は、受信したプロキシメッセージにデータが収容されていない場合、そのコネクション番号に対応するソケットチャネルＩＤをコネクションリスト１１６，２１６から検索する。プロキシ制御部１１１，２１１は、検索したソケットチャネルＩＤのソケットの削除を送受信制御部１１４，２１４に指示する。
【００５６】
このように、ソケットとＥＩＤは、コネクションリスト１１６により対応付けられて管理される。このため、ソケットを用いるＴＣＰ／ＩＰの通信をバンドルプロトコルに基づき行うことが可能となる。
【００５７】
また、バンドル制御部１２０，２２０は、プロキシ制御部１１１，２１１からのバンドルの送信要求に応じてバンドルを送信する。したがって、バンドル制御部１２０，２２０は、クライアントアプリケーション１０１及びサーバアプリケーション２０１から通信先への通信を途絶耐性ネットワークのプロトコルに基づいて行うことができる。
【００５８】
応答制御部１１５，２１５は、クライアントアプリケーション１０１及びサーバアプリケーション２０１からの通信が応答を要する場合、その応答を生成してクライアントアプリケーション１０１及びサーバアプリケーション２０１に出力する。このため、コネクションの切断により通信先との通信が途絶した場合でも、クライアントアプリケーション１０１及びサーバアプリケーション２０１は、通信の途絶を知ることなく動作を行う。したがって、コネクションの再接続後に通信のやり直しを必要としない。
【００５９】
例えば、端末１において、プロキシ制御部１１１がクライアントアプリケーション１０１の通信を行った場合、応答制御部１１５はその通信に対する応答をクライアントアプリケーション１０１に出力する。クライアントアプリケーション１０１からサーバアプリケーション２０１に対してファイルを分割して転送の場合、端末１の応答制御部１１５は、サーバアプリケーション２０１に代わり、応答として、クライアントアプリケーション１０１に対し次のファイルデータの送信を促す。
【００６０】
つまり、応答制御部１１５，２１５は、クライアントアプリケーション１０１及びサーバアプリケーション２０１に通信の完了を通知する。このため、クライアントアプリケーション１０１及びサーバアプリケーション２０１は、バンドル制御部１２０，２２０のバンドルプロトコルに基づく通信の結果を知らず、通信が成功したと認識する。
【００６１】
そこで、状態通知部１２１，２２１は、通信の状態及び結果に関する通信情報を、例えば画面へのポップアップ表示やログによりユーザに通知する。より具体的には、端末１の状態通知部１２１は表示部１６に通信情報を出力し、または通信情報が記録されたログファイルを記憶部１３に書き込む。また、サーバ２の状態通知部２２１は、通信情報が記録されたログファイルをＨＤＤ２３に書き込む。
【００６２】
プロキシ制御部１１１，２１１は、通信の状態に応じた通知を状態通知部１２１，２２１に指示する。この通知としては、プロキシ制御部１１１，２１１からバンドルの送信の要求を受け付けたことを通知する受付通知や、通信先とのコネクションの切断のためにバンドルの送信が保留されていることを通知する保留通知が含まれる。
【００６３】
また、プロキシ制御部１１１，２１１は、バンドル制御部１２０，２２０からの各種のレポートに基づいた通知を状態通知部１２１，２２１に指示する。この通知としては、削除レポートに基づく転送失敗通知、配信レポートに基づく転送完了通知、及び回送レポートに基づく転送通知が含まれる。プロキシ制御部１１１，２１１は、各レポートにより、バンドルプロトコルに基づく通信の成否を判定する。
【００６４】
バンドル制御部１２０，２２０は、バンドルのライフタイム（図４参照）が満了した場合、またはバンドルを送信した場合、バンドルに削除レポートを収容して、バンドルの送信元に送信する。また、バンドル制御部１２０，２２０は、バンドルの受信が完了した場合、バンドルに配信レポートまたは回送レポートを収容して、バンドルの送信元に送信する。なお、レポートについては、例を挙げて後述する。
【００６５】
状態通知部１２１，２２１は、プロキシ制御部１１１，２１１が通信を失敗と判定した場合、ユーザに通信の失敗を通知する。状態通知部１２１は、応答制御部１１５により通信先への通信の完了がクライアントアプリケーション１０１に通知済みであり、かつ、プロキシ制御部１１１の判定の結果としてＤＴＮのバンドルプロトコルによる通信が失敗した通信について、通信の失敗を端末１に通知する。このとき、通信の失敗は、後述するように端末１の表示部１６のポップアップ表示または記憶部１３に記憶されるログとしてユーザに通知される。また、状態通知部２２１も、状態通知部１２１と同様に、サーバアプリケーション２０１に通知済みであり、かつ、プロキシ制御部２１１の判定の結果としてＤＴＮのバンドルプロトコルによる通信が失敗した通信について、通信の失敗を通知する。
【００６６】
このため、ユーザは、バンドルプロトコルに基づく通信が行われ、クライアントアプリケーション１０１及びサーバアプリケーション２０１上では通信が成功したように認識した場合でも、状態通知部１２１，２２１の通知により通信の失敗を知ることができる。したがって、ユーザは通信結果を容易に把握することができる。なお、状態通知部１２１は失敗通知部の一例である。
【００６７】
コネクション監視部１１２，２１２は、バンドル制御部１２０，２２０のコネクションの状態を監視する。コネクション監視部１１２，２１２は、コネクションが切断された状態ではコネクションの接続を行い、接続に成功した場合、コネクション監視部１１２，２１２にバンドルバッファ１２２，２２２内の送信対象のバンドルの送信を指示する。
【００６８】
また、コネクション監視部１１２，２１２は、コネクションの状態に応じて、アドレス変換部１１３，２１３に対し変換情報の設定及び削除を行う。コネクション監視部１１２，２１２は、フィルタＴＢＬ１１８，２１８に基づき変換情報を設定する。
【００６９】
図５には、フィルタＴＢＬ１１８，２１８の一例が示されている。フィルタＴＢＬ１１８，２１８には、パケットのフィルタ条件、変換情報、及び設定状態が対応付けられて登録されている。フィルタ条件には、アドレス変換の対象のパケットの送信元及び宛先のＩＰアドレスやポート番号などが指定されている。変換情報には、フィルタ条件に合致するパケットの書き換え対象の部分及び書き換え後の値を示す。設定状態は、フィルタ条件及び変換情報の設定の有効または無効を示す。
【００７０】
コネクション監視部１１２，２１２は、コネクションの状態に応じて、アドレス変換部１１３，２１３の変換情報の設定または削除を行う。このため、クライアントアプリケーション１０１及びサーバアプリケーション２０１の通信に自動的にバンドルプロトコルが適用される。
【００７１】
このように、コネクション監視部１１２，２１２は、通信先とのコネクションの状態を検出し、コネクションの状態に応じて、クライアントアプリケーション１０１及びサーバアプリケーション２０１の通信に対するバンドルプロトコルの適用の可否を決定する。このため、バンドルプロトコルは、コネクションの状態に応じてクライアントアプリケーション１０１及びサーバアプリケーション２０１の通信に使用される。
【００７２】
クライアントアプリケーション１０１及びサーバアプリケーション２０１は、通信が断続的となる場合、上記の構成によりＴＣＰ／ＩＰをプロトコル変換することにより通信を行う。
【００７３】
図６にはプロトコル変換の一例が示されている。図６には、図３に示された構成のうち、端末１のクライアントアプリケーション１０１、プロキシ制御部１１１、及びバンドル制御部１２０と、サーバ２のサーバアプリケーション２０１、プロキシ制御部２１１、及びバンドル制御部２２０が示されている。
【００７４】
クライアントアプリケーション１０１及びサーバアプリケーション２０１の間では、ＩＰアドレス及びポート番号によるＴＣＰ／ＩＰの通信が行われる。クライアントアプリケーション１０１には任意のソケットＳＣ１がオープンされ、サーバアプリケーション２０１には固定のソケットＳＣ６がオープンされる。
【００７５】
プロキシ制御部１１１，２１１の間では、コネクション番号によるプロキシ間プロトコルによる通信が行われる。プロキシ制御部１１１には、送受信制御部１１４によりサーバアプリケーション２０１のソケットＳＣ６に１対１で対応するソケットＳＣ２がオープンされる。プロキシ制御部２１１には、送受信制御部２１４によりクライアントアプリケーション１０１のソケットＳＣ１に１対１で対応するソケットＳＣ５がオープンされる。
【００７６】
クライアントアプリケーション１０１とプロキシ制御部１１１の間ではソケットＳＣ１，ＳＣ２による通信が行われ、サーバアプリケーション２０１とプロキシ制御部２１１の間ではソケットＳＣ５，ＳＣ６による通信が行われる。このため、送受信制御部１１４，２１４は、クライアントアプリケーション１０１及びサーバアプリケーション２０１の各ソケットＳＣ１，ＳＣ６に合わせてソケットＳＣ２，ＳＣ５のオープン及びクローズを行いい、そのソケットＳＣ２，ＳＣ５によるデータ送受信を行う。
【００７７】
バンドル制御部１２０，２２０の間では、ＥＩＤによるバンドルプロトコルの通信が行われる。バンドル制御部１２０，２２０には、ソケットＳＣ３，ＳＣ４がそれぞれオープンされる。
【００７８】
クライアントアプリケーション１０１からサーバアプリケーション２０１への通信が行われる場合、端末１において、プロキシ制御部１１１は、初期設定ファイル１１７に基づきパケットのポート番号を宛先ＥＩＤに変換し、バンドル制御部１２０は、経路ＴＢＬ１２３に基づき宛先ＥＩＤを宛先ＩＰアドレス及びポート番号に変換する。
【００７９】
また、サーバ２において、バンドル制御部２２０は、宛先ＥＩＤを、後述する出力ポインタに変換し、プロキシ制御部２１１は、出力ポインタを宛先ＩＰアドレス及びポート番号に変換する。このようにして、クライアントアプリケーション１０１からサーバアプリケーション２０１への通信は行われる。以下に通信において実行される処理について述べる。
【００８０】
図７は、クライアントアプリケーション１０１のデータ送信処理の一例を示すフローチャートである。端末１のプロキシ制御部１１１は、符号Ｇ１で示されるような初期設定ファイル１１７を読み出す（ステップＳｔ１）。初期設定ファイル１１７には、「TCP_PROXY_CLIENT」として、端末１のＥＩＤ「dtn://node1」と、通信先のサーバアプリケーション２０１宛てのパケットをＴＣＰで受信するためのポート番号「８００１」が書き込まれている。
【００８１】
次に、プロキシ制御部１１１は、クライアントアプリケーション１０１からサーバアプリケーション２０１宛のパケットを受信するためのソケットを送受信制御部１１４に生成する（ステップＳｔ２）。ソケットには、上記のポート番号「８００１」、またはループバックＩＰアドレス「127.0.0.1」が設定される。クライアントアプリケーション１０１は、サーバアプリケーション２０１のソケットに代えて、送受信制御部１１４が生成したソケットにパケットを送信する。このとき、パケットの宛先ＩＰアドレス及びポート番号は、所定の設定またはアドレス変換部１１３により変換される。
【００８２】
次に、送受信制御部１１４は、ソケットでのパケットの受信の有無を判定する（ステップＳｔ３）。送受信制御部１１４は、パケットが受信されていない場合（ステップＳｔ３のＮｏ）、再度、ステップＳｔ３の判定処理を実行する。
【００８３】
プロキシ制御部１１１は、パケットが受信された場合（ステップＳｔ３のＹｅｓ）、パケットの送信元ポート番号が新規であるか否かを判定する（ステップＳｔ４）。つまり、プロキシ制御部１１１は、クライアントアプリケーション１０１のポート番号が変更され、新たなチャネルが確立されたか否かを判定する。なお、送受信制御部１１４は、ソケットでパケットが受信されると、クライアントアプリケーション１０１からの通信の完了を検出し、受信したパケットのデータをメモリなどを介してプロキシ制御部１１１に出力する。
【００８４】
プロキシ制御部１１１は、送信元ポート番号が新規である場合（ステップＳｔ４のＹｅｓ）、コネクションリスト１１６に新たなコネクション番号と、そのコネクション番号に対応するソケットチャネルＩＤ及び宛先ＥＩＤを登録する（ステップＳｔ９）。また、プロキシ制御部１１１は、送信元ポート番号が新規ではない場合（ステップＳｔ４のＮｏ）、ステップＳｔ９の処理を実行しない。
【００８５】
次に、プロキシ制御部１１１は、符号Ｇ２で示されるようなプロキシメッセージを生成する（ステップＳｔ５）。プロキシメッセージには、コネクション番号及びペイロードが含まれる。プロキシ制御部１１１は、ペイロードにパケットのデータを収容し、コネクションリスト１１６から検索したコネクション番号を付与することにより、プロキシメッセージを生成する。プロキシメッセージは、バンドルＡＰＩによりバンドル制御部１２０に出力される。
【００８６】
次に、応答制御部１１５は、送信対象のパケットに対する応答の要否を判定する（ステップＳｔ６）。応答制御部１１５は、ＴＣＰのＡＣＫではなく、アプリケーションレベルでの通信の継続に必要な応答の有無を判定する。
【００８７】
応答制御部１１５は、応答が必要である場合（ステップＳｔ６のＹｅｓ）、所定のアルゴリズムに基づき、サーバアプリケーション２０１の代わりに応答データを生成してクライアントアプリケーション１０１に送信する（ステップＳｔ７）。つまり、応答制御部１１５，２１５は、クライアントアプリケーション１０１及びサーバアプリケーション２０１に通信の完了を通知する。このため、上述したように、クライアントアプリケーション１０１は、バンドルプロトコルの通信が失敗しても、通信が成功したと認識する。また、応答制御部１１５は、応答が不要である場合（ステップＳｔ６のＮｏ）、応答データを生成しない。
【００８８】
次に、プロキシ制御部１１１は、バンドルＡＰＩによりバンドル制御部１２０にバンドルの送信を要求する（ステップＳｔ８）。バンドル制御部１２０は、プロキシメッセージからバンドルを生成して送信する。これにより、バンドル制御部１２０，２２０は、クライアントアプリケーション１０１及びサーバアプリケーション２０１から通信先への通信を途絶耐性ネットワークのプロトコルに基づいて行う。このようにして、クライアントアプリケーション１０１のデータ送信処理は実行される。
【００８９】
図８は、バンドルの送信処理の一例を示すフローチャートである。バンドル制御部１２０は、プロキシ制御部１１１からバンドルの送信を要求されると、経路ＴＢＬ１２３を読み出す（ステップＳｔ１１）。次に、バンドル制御部１２０は、経路ＴＢＬ１２３に基づき、宛先ＩＰアドレス及びポート番号に対応する宛先ＥＩＤのバンドルを生成する（ステップＳｔ１２）。
【００９０】
次に、バンドル制御部１２０は、宛先ＥＩＤに応じた通信先とのコネクションが確立状態であるか否かを判定する（ステップＳｔ１４）。バンドル制御部１２０は、コネクションが確立状態でない場合（ステップＳｔ１４のＮｏ）、バンドルをバンドルバッファ１２２に格納し（ステップＳｔ１３）、再びステップＳｔ１４の処理を実行する。
【００９１】
バンドル制御部１２０は、コネクションが確立状態である場合（ステップＳｔ１４のＹｅｓ）、バンドルを送信する（ステップＳｔ１５）。このようにして、バンドルの送信処理は実行される。
【００９２】
図９は、バンドルの受信処理の一例を示すフローチャートである。本処理は、サーバ２において実行される。
【００９３】
プロキシ制御部２１１は、符号Ｇ３で示されるような初期設定ファイル２１７を読み出す（ステップＳｔ２１）。初期設定ファイル２１７には、「COM_EID」として、サーバ２のＥＩＤ「dtn://node1」が記録され、「TCP_PROXY_REGISTRATION」として、サーバ２の受信データの出力ポインタ「data/service」が記録され、「TCP_PROXY_SERVER」として、サーバ２のＩＰアドレス「192.168.1.1」及びポート番号「８００１」が記録されている。
【００９４】
次に、プロキシ制御部２１１は、バンドル制御部２２０に対して端末１のクライアントアプリケーション１０１からバンドルを受信できるように、バンドルＡＰＩによりＥＩＤ及び出力ポインタを登録する（ステップＳｔ２２）。このとき、プロキシ制御部２１１は、初期設定ファイル２１７の「COM_EID」及び「TCP_PROXY_REGISTRATION」でそれぞれ指定されたＥＩＤ及び出力ポインタを登録する。これにより、バンドル制御部２２０は、バンドルを受信したとき、出力ポインタ「data/receive」の指定ディレクトリにバンドルを出力する。
【００９５】
次に、バンドル制御部２２０は、バンドルの受信の有無を判定する（ステップＳｔ２３）。バンドル制御部２２０は、バンドルを受信していない場合（ステップＳｔ２３のＮｏ）、再びステップＳｔ２３の処理を実行する。また、バンドル制御部２２０は、バンドルを受信した場合（ステップＳｔ２３のＹｅｓ）、ステップＳｔ２２で登録済みのＥＩＤとバンドルの宛先ＥＩＤが一致するか否かを判定する（ステップＳｔ２４）。
【００９６】
バンドル制御部２２０は、登録済みのＥＩＤとバンドルの宛先ＥＩＤが不一致である場合（ステップＳｔ２４のＮｏ）、自装置宛てのバンドルではないため、バンドルを廃棄して処理を終了する。バンドル制御部２２０は、登録済みのＥＩＤとバンドルの宛先ＥＩＤが一致する場合（ステップＳｔ２４のＹｅｓ）、バンドルのペイロードからパケットのデータを取得してプロキシメッセージを生成して、出力ポインタの指定ディレクトリに出力する（ステップＳｔ２５）。
【００９７】
次に、プロキシ制御部２１１は、出力ポインタの指定ディレクトリを参照して、プロキシメッセージを取得する（ステップＳｔ２６）。次に、プロキシ制御部２１１は、プロキシメッセージのコネクション番号がコネクションリスト２１６に登録済みであるか否かを判定する（ステップＳｔ２７）。
【００９８】
プロキシ制御部２１１は、コネクション番号が未登録である場合（ステップＳｔ２７のＮｏ）、送受信制御部２１４に対し、初期設定ファイル２１７の「TCP_PROXY_SERVER」で指定されたＩＰアドレス及びポート番号のソケットのオープンを指示する（ステップＳｔ２８）。また、プロキシ制御部２１１は、コネクション番号が登録済みである場合（ステップＳｔ２７のＹｅｓ）、プロキシメッセージのペイロードにパケットのデータが収容されているか否かを判定する（ステップＳｔ３０）。
【００９９】
プロキシ制御部２１１は、パケットのデータが収容されている場合（ステップＳｔ３０のＹｅｓ）、該当するソケットにデータを送信する（ステップＳｔ２９）。また、プロキシ制御部２１１は、パケットのデータが収容されていない場合（ステップＳｔ３０のＮｏ）、送受信制御部２１４に対し、該当するソケットのクローズを指示する（ステップＳｔ３１）。このようにして、バンドルの受信処理は実行される。
【０１００】
このように、クライアントアプリケーション１０１及びサーバアプリケーション２０１の間では、端末１とサーバ２の間のコネクションの有無とは無関係に、アプリケーションの動作に基づきプロキシプロトコル機能部１１０，２１０によりソケットのオープン及びクローズが再現される。このため、クライアントアプリケーション１０１及びサーバアプリケーション２０１の間では、コネクションが切断されている場合でも通信の継続が可能となる。
【０１０１】
上述したように、コネクション監視部１１２，２１２は、コネクションの状態に応じて、アドレス変換部１１３，２１３の変換情報の設定または削除を行う。このため、クライアントアプリケーション１０１及びサーバアプリケーション２０１の通信に自動的にバンドルプロトコルが適用される。
【０１０２】
図１０は、バンドルプロトコルの適用の切り替え処理の一例を示すフローチャートである。コネクション監視部１１２，２１２は、通信先とのコネクションの接続の有無を検出する（ステップＳｔ４１）。
【０１０３】
バンドル制御部１２０，２２０は、経路ＴＢＬ１２３，２２３に設定された宛先ＩＰアドレス及びポート番号に基づき、該当する通信先とのリンクのアップ・ダウンや、キープアライブ（keep alive）機能により通信の状態を検出する。コネクション監視部１１２，２１２は、バンドル制御部１２０，２２０の検出結果を取得し、またはバンドルＡＰＩによる制御などによりコネクションの状態を検出する。
【０１０４】
コネクション監視部１１２，２１２は、コネクションが接続されている場合（ステップＳｔ４１のＹｅｓ）、バンドルバッファ１２２，２２２に送信待ちのバンドルが格納されているか否かを判定する（ステップＳｔ４２）。コネクション監視部１１２，２１２は、格納済みのバンドルがない場合（ステップＳｔ４２のＮｏ）、再びステップＳｔ４１の処理を実行する。
【０１０５】
また、コネクション監視部１１２，２１２は、格納済みのバンドルがある場合（ステップＳｔ４２のＹｅｓ）、フィルタＴＢＬ１１８，２１８の設定状態を参照することによりアドレス変換部１１３，２１３に対する変換情報の設定の有無を判定する（ステップＳｔ４３）。コネクション監視部１１２，２１２は、変換情報の設定がない場合（ステップＳｔ４３のＮｏ）、処理を終了する。また、コネクション監視部１１２，２１２は、変換情報の設定が有る場合（ステップＳｔ４３のＹｅｓ）、変換情報を削除する（ステップＳｔ４４）。
【０１０６】
これにより、ＴＣＰ処理部１０２，２０２から送受信制御部１１４，２１４のソケットに対するパケットの転送が停止する。したがって、クライアントアプリケーション１０１及びサーバアプリケーション２０１の間の通信に対してバンドルプロトコルの適用が停止されるため、プロキシプロトコル機能部１１０，２１０を介さない直接的なＴＣＰ／ＩＰの通信が行われる。
【０１０７】
一方、コネクション監視部１１２，２１２は、コネクションが切断されている場合（ステップＳｔ４１のＮｏ）、フィルタＴＢＬ１１８，２１８の設定状態を参照することによりアドレス変換部１１３，２１３に対する変換情報の設定の有無を判定する（ステップＳｔ４５）。コネクション監視部１１２，２１２は、変換情報の設定が有る場合（ステップＳｔ４５のＹｅｓ）、処理を終了する。また、コネクション監視部１１２，２１２は、変換情報の設定がない場合（ステップＳｔ４５のＮｏ）、変換情報を設定する（ステップＳｔ４６）。
【０１０８】
これにより、ＴＣＰ処理部１０２，２０２から送受信制御部１１４，２１４のソケットに対するパケットの転送が開始される。したがって、クライアントアプリケーション１０１及びサーバアプリケーション２０１の間の通信に対してバンドルプロトコルの適用が開始されるため、プロキシプロトコル機能部１１０，２１０を介した通信が行われる。
【０１０９】
このように、コネクション監視部１１２，２１２は、通信先とのコネクションの状態を検出し、そのコネクションの状態に応じて、クライアントアプリケーション１０１及びサーバアプリケーション２０１の間の通信に対するバンドルプロトコルの適用の可否を決定する。このため、バンドルプロトコルの適用が自動的に行われる。
【０１１０】
なお、バンドルプロトコルが適用されていないとき、通信中にコネクションが切断されると、通信の継続が不可能となる。このため、コネクション監視部１１２，２１２は、上記の判定処理とは異なる判定処理によりバンドルプロトコルの適用の可否を決定してもよい。
【０１１１】
例えば、コネクション監視部１１２，２１２は、物理的な通信インターフェースの識別子や通信履歴を参照することにより通信インターフェースの通信可能期間を予測し、予測結果に基づき、通信可能期間が短い通信インターフェースのコネクションを用いる場合、常時、バンドルプロトコルを適用してもよい。また、コネクション監視部１１２，２１２は、長い通信時間を要する大容量のファイルの転送を行う場合、常時、バンドルプロトコルを適用してもよい。この場合、例えば、端末１を、短時間だけ接続が可能なＷｉ−Ｆｉ（登録商標、以下同様）のＡＰに接続するときでも通信を継続することができる。
【０１１２】
もっとも、バンドルプロトコルを適用した場合、バンドルのオーバーヘッド分のデータ量がパケットのデータに加わるため、バンドルプロトコルを適用しない場合よりネットワークＮＷの負荷が高くなる。したがって、図１０に示される処理によりバンドルプロトコルの適用の可否を決定することにより、ネットワークＮＷの負荷を適切に低減することができる。
【０１１３】
バンドル制御部１２０は、複数の通信回線が利用できる場合、各通信回線の通信品質を測定し、測定結果に基づき選択した通信回線を介してバンドルを送信することにより、バンドル通信を最適化してもよい。
【０１１４】
図１１には、複数の通信回線によるバンドル通信の比較例及び実施例が示されている。本例では、ノードＮａの端末１とノードＮｂのサーバ２が、２つの通信回線Ｌ１，Ｌ２を介してバンドル通信すると仮定する。
【０１１５】
比較例において、ノードＮａは、バンドルのデータＤＴをブロック＃１〜＃ｎ（ｎ：正の整数）に分割し、各ブロック＃１〜＃ｎを２つの通信回線Ｌ１，Ｌ２により均等に送信する。ノードＮｂは、２つの通信回線Ｌ１，Ｌ２を介し各ブロック＃１〜＃ｎを受信し、元のバンドルのデータＤＴを復元する。
【０１１６】
しかし、例えば一方の通信回線Ｌ１の通信品質が他方の通信回線Ｌ２より低い場合、その通信回線Ｌ１で送信されるブロック＃１，＃３，・・・，＃ｎ−１の遅延、エラー、または損失が生ずるため、ノードＮｂにおけるデータＤＴの復元時間が増加し、スループットが低下する。
【０１１７】
これに対し、実施例では、符号Ｇ４で示されるように、ノードＮａは、データＤＴの先頭部分（点線枠を参照）を複数のブロック＃１，＃２に分割し、ブロック＃１を通信回線Ｌ１経由で送信し、ブロック＃２を通信回線Ｌ２経由で送信する。これにより、ノードＮａは、２つの通信回線Ｌ１，Ｌ２の通信品質を測定する。
【０１１８】
より具体的には、ノードＮａは、先頭部分のブロック＃１，＃２の送信所要時間を計測する。送信所要時間は、例えば、ブロック＃１，＃２の送信時刻と、ブロック＃１，＃２の受信後のノードＮｂからの応答の到着時刻とから算出される。ノードＮａは、送信所要時間に基づき各通信回線Ｌ１，Ｌ２の速度を判定する。ノードＮａは、判定結果に基づき通信回線Ｌ１，Ｌ２の一方を選択する。
【０１１９】
ノードＮａは、符号Ｇ５で示されるように、通信回線Ｌ１の速度が低く（「低速」参照）、通信回線Ｌ２の速度が高い（「高速」参照）場合、残りのブロック＃３〜＃ｎを、通信回線Ｌ２を介して送信する。このため、全データ＃１〜＃ｎの送信所要時間を短縮され、スループットを向上することができる。
【０１２０】
図１２は、バンドル通信の最適化処理の一例を示すフローチャートである。本処理は、端末１において実行される。
【０１２１】
バンドル制御部１２０はバンドルのデータ量（サイズ）を閾値ＴＨと比較する（ステップＳｔ５１）。バンドル制御部１２０は、データ量≦ＴＨの場合（ステップＳｔ５１のＮｏ）、バンドルを送信する（ステップＳｔ５８）。これは、バンドルのサイズが小さい場合、バンドルのデータの分割後のブロック数が少ないため、通信品質の測定時間によりかえってスループットが低下するおそれがあるためである。
【０１２２】
バンドル制御部１２０は、データ量＞ＴＨの場合（ステップＳｔ５１のＹｅｓ）、例えば無線ＬＡＮモジュール１４の情報から複数の通信回線でリンク中であるか否かを判定する（ステップＳｔ５２）。バンドル制御部１２０は、リンク中の通信回線が１つだけである場合（ステップＳｔ５２のＮｏ）、バンドルを送信する（ステップＳｔ５８）。これは、通信回線の選択の余地がないためである。
【０１２３】
また、バンドル制御部１２０は、リンク中の複数の通信回線がある場合（ステップＳｔ５２のＹｅｓ）、バンドルのデータの所定の先頭部分を複数のブロックに分割する（ステップＳｔ５３）。このとき、バンドル制御部１２０は、少なくとも通信回線数と同数のブロックを生成する。
【０１２４】
次に、バンドル制御部１２０は、複数のブロックを、各通信回線を介して送信する（ステップＳｔ５４）。なお、各通信回線により送信されるブロック数は同じであっても異なっていてもよい。
【０１２５】
次に、バンドル制御部１２０は、各通信回線のブロックの送信所要時間を測定する（ステップＳｔ５５）。なお、送信所要時間は通信品質の一例である。次に、バンドル制御部１２０は、送信所要時間に基づき１以上の通信回線を選択する（ステップＳｔ５６）。より具体的には、バンドル制御部１２０は、送信所要時間の短い通信回線を優先的に選択する。
【０１２６】
次に、バンドル制御部１２０は、選択した通信回線を介して残りのデータを送信する（ステップＳｔ５７）。バンドル制御部１２０は、１つの通信回線だけを選択した場合、残りのデータをブロックに分割することなく、送信することができる。また、バンドル制御部１２０は、例えば所定の基準値を満たす複数の通信回線を選択した場合、その通信回線数に基づくサイズの複数のブロックに残りのデータを分割して送信することができる。
【０１２７】
このため、残りのデータは、高速の通信回線により短時間で送信が完了する。このようにして、バンドル通信の最適化処理は実行される。なお、本例において、バンドル制御部１２０は、通信品質として、送信所要時間を測定したが、これに限定されず、例えばエラーレートを測定してもよい。
【０１２８】
このように、バンドル制御部１２０は、通信先との間の複数の通信回線の通信品質をそれぞれ測定し、通信品質に基づき１以上の通信回線を選択し、その選択した通信回線によりバンドル通信を行う。このため、バンドル制御部１２０は、バンドル通信の通信品質を向上することができる。例えば、バンドル制御部１２０は、低速なＷｉ−Ｆｉの通信回線と高速なＬＴＥ（Long Term Evolution、登録商標、以下同様）の通信回線が利用可能である場合、各通信回線の通信速度を実際に測定し、その測定結果に基づきＬＴＥを選択することができる。
【０１２９】
さらに、バンドル制御部１２０は、データの所定の先頭部分を複数のブロックに分割し、複数のブロックを各通信回線のそれぞれを介して通信先に送信することにより、複数の通信回線の通信品質をそれぞれ測定する。バンドル制御部１２０は、通信品質に基づき通信回線を選択し、その選択した通信回線を介してデータの他部分を通信先に送信する。このため、バンドル制御部１２０は、通信品質の測定用の試験データを用意する必要がなく、送信対象のバンドルのデータの先頭部分のみを用いて簡単に各通信回線の通信品質を測定することができる。
【０１３０】
次に、状態通知部１２１，２２１の機能を説明する。
【０１３１】
図１３は、通知処理の一例を示すフローチャートである。本例では、端末１の状態通知部１２１の通知処理を挙げるが、サーバ２の状態通知部２２１も同様の通知処理を実行することが可能である。
【０１３２】
プロキシ制御部１１１は、バンドル制御部１２０に対しバンドルの送信を要求するとき、起動後の最初の送信要求であるか否かを判定する（ステップＳｔ６１）。プロキシ制御部１１１は、最初のバンドルの送信要求の場合（ステップＳｔ６１のＹｅｓ）、状態通知部１２１にデータ送信の受付通知を指示する（ステップＳｔ６２）。状態通知部１２１は、受付通知を表示部１６にポップアップ表示させ、あるいは記憶部１３にログとして残す。また、プロキシ制御部１１１は、最初のバンドルの送信要求ではない場合（ステップＳｔ６１のＮｏ）、受付通知が重複しないように受付通知の指示を行わない。
【０１３３】
次に、プロキシ制御部１１１は、バンドル送信保留時間を計時するタイマに基づき、データ送信の保留通知を状態通知部１２１に指示する（ステップＳｔ６３）。保留通知は、例えばタイマ値も基づき一定時間経過することに行われる。状態通知部１２１は、保留通知を表示部１６にポップアップ表示させ、あるいは記憶部１３にログとして残す。
【０１３４】
プロキシ制御部１１１は、通信結果に応じたレポートの要求フラグをバンドルＡＰＩ経由でバンドル制御部１２０に出力する。バンドル制御部１２０は、要求フラグに応じたレポートをバンドルに含めて送信することができる。レポートとしては、例えば、データが宛先に配信されたことを示す配信レポート、データが次ノードに回送されたことを示す回送レポート、及びバンドルの削除を示す削除レポートが挙げられる。削除レポートは、バンドルが送信されずにライフタイムが満了したとき、またはバンドルの送信によりバンドルバッファ１２２から削除されたときに発行される。以下の処理では、各レポートに応じた通知が行われる。
【０１３５】
プロキシ制御部１１１は、配信レポートの受信の有無を判定する（ステップＳｔ６４）。プロキシ制御部１１１は、配信レポートを受信した場合（ステップＳｔ６４のＹｅｓ）、配信完了通知を状態通知部１２１に指示する（ステップＳｔ６８）。状態通知部１２１は、配信完了通知を表示部１６にポップアップ表示させ、あるいは記憶部１３にログとして残す。
【０１３６】
プロキシ制御部１１１は、配信レポートを受信していない場合（ステップＳｔ６４のＮｏ）、回送レポートの受信の有無を判定する（ステップＳｔ６５）。プロキシ制御部１１１は、回送レポートを受信した場合（ステップＳｔ６５のＹｅｓ）、転送通知を状態通知部１２１に指示する（ステップＳｔ６９）。状態通知部１２１は、転送通知を表示部１６にポップアップ表示させ、あるいは記憶部１３にログとして残す。
【０１３７】
プロキシ制御部１１１は、回送レポートを受信していない場合（ステップＳｔ６５のＮｏ）、削除レポートの受信の有無を判定する（ステップＳｔ６６）。つまり、プロキシ制御部１１１は、削除レポートに基づきバンドル通信の成否を判定する。
【０１３８】
プロキシ制御部１１１は、削除レポートを受信していない場合（ステップＳｔ６６のＮｏ）、処理を終了する。プロキシ制御部１１１は、削除レポートを受信した場合（ステップＳｔ６６のＹｅｓ）、転送失敗通知を状態通知部１２１に指示する（ステップＳｔ６７）。状態通知部１２１は、転送失敗通知を表示部１６にポップアップ表示させ、あるいは記憶部１３にログとして残すことにより、端末１に転送失敗を通知する。
【０１３９】
このように、状態通知部１２１は、プロキシ制御部１１１が削除レポートに基づき通信を失敗と判定した場合、ユーザに通信の失敗を通知する。このため、ユーザは、バンドルプロトコルに基づく通信が行われ、クライアントアプリケーション１０１及びサーバアプリケーション２０１上では通信が成功したように認識した場合でも、状態通知部１２１，２２１の通知により通信の失敗を知ることができる。
【０１４０】
次に、クライアントアプリケーション１０１及びサーバアプリケーション２０１の間の通信の動作例を説明する。
【０１４１】
（通信動作例１）
図１４には通信動作例１の初期設定ファイル１１７，２１７及び経路ＴＢＬ１２３，２２３が示され、図１５〜図１９には通信動作例１が時系列に示されている。本例では、図１５に示されるように、アプリケーションクライアント（ＡＰＬクライアント）である端末１からアプリケーションサーバ（ＡＰＬサーバ）２ｂへのファイル転送を行う場合を仮定する。
【０１４２】
ＡＰＬサーバ２ｂは、図３のサーバ２のうち、アプリケーション機能部２００を備えるものであり、ＤＴＮサーバ２ａは、図３のサーバ２のうち、アプリケーション機能部２００を除く他部分を備えるものである。ＤＴＮサーバ２ａ及びＡＰＬサーバ２ｂは、図２と同様の構成を有し、インターネットＮＷｂに接続されている。なお、ＡＰＬサーバ２ｂは複数台であってもよい。
【０１４３】
このように、サーバ２のアプリケーション機能部２００は他装置に実装することにより、サーバ２のプロキシ制御部２１１などの他部分を、サーバアプリケーション２０１から独立した通信装置として構成することができる。
【０１４４】
また、端末１は、点線で示される無線の通信回線を介してアクセスネットワークＮＷａに接続されている。アクセスネットワークＮＷａには、端末１がリンク可能なＡＰ（例えばＷｉ−Ｆｉのホットスポット）が含まれている。
【０１４５】
図１４には、ＡＰＬクライアント（端末１）の初期設定ファイル１１７及び経路ＴＢＬ１２３と、ＡＰＬサーバ２ｂの初期設定ファイル２１７及び経路ＴＢＬ２２３が示されている。初期設定ファイル１１７，２１７及び経路ＴＢＬ１２３，２２３は、アプリケーションの起動前にＡＰＬクライアント及びＡＰＬサーバ２ｂに格納済みである。
【０１４６】
端末１は、初期設定ファイル１１７によりＥＩＤが「dtn://node1」に設定され、クライアントアプリケーション１０１の通信先として、ＡＰＬサーバ２ｂのＩＰアドレス「10.10.30.1」及びポート番号「40000」が設定される。また、端末１は、経路ＴＢＬ１２３に基づき、ＤＴＮサーバ２ａの宛先ＥＩＤ「dtn://dtnserver」、宛先ＩＰアドレス「10.10.20.1」、及びポート番号「4556」が設定される。
【０１４７】
また、ＤＴＮサーバ２ａは、初期設定ファイル２１７によりＥＩＤが「dtn://dtnserver」に設定され、ＡＰＬサーバ２ｂのＩＰアドレス「10.10.30.1」及びポート番号「40000」が設定される。また、ＤＴＮサーバ２ａは、経路ＴＢＬ２２３に基づき、端末１の宛先ＥＩＤ「dtn://node1」、宛先ＩＰアドレス「10.10.10.1」、及びポート番号「4556」が設定される。
【０１４８】
図１５には、端末１がアクセスネットワークＮＷａと接続している場合の通信の様子が示されている。この場合、端末１のコネクション監視部１１２は、コネクションが接続されていると判定するため、アドレス変換部１１３に変換情報を設定しない。このため、クライアントアプリケーション１０１は、ＴＣＰ／ＩＰによりＡＰＬサーバ２ｂと直接的に通信を行う。符号Ｇ６は、端末１が送信するＴＣＰのアプリケーションデータ（ＡＰＬデータ）を示す。ＡＰＬデータ（パケット）は、ＩＰアドレス「10.10.30.1」及びポート番号「40000」を宛先とする。
【０１４９】
図１６には、端末１がアクセスネットワークＮＷａと接続していない場合の通信の様子が示されている。この場合、端末１のコネクション監視部１１２は、コネクションが切断されていると判定するため、アドレス変換部１１３に変換情報を設定する。これにより、クライアントアプリケーション１０１のＡＰＬデータは、プロキシプロトコル機能部１１０で処理されるように、アドレス変換部１１３により変換されて送受信制御部１１４のソケットで受信される。
【０１５０】
より具体的には、符号Ｇ７で示されるように、ＩＰアドレス「10.10.30.1」及びポート番号「40000」を宛先とするＡＰＬデータは、アドレス変換部１１３によりＩＰアドレス「10.10.10.1」及びポート番号「8001」を宛先とするＡＰＬデータに変換される。プロキシ制御部１１１は、そのＡＰＬデータを受信すると、ＡＰＬデータの受付通知を状態通知部１２１に指示する。
【０１５１】
状態通知部１２１は、符号Ｇ８に示されるように、受付通知を表示部１６にポップアップ表示し、または記憶部１３にログを出力する。受付通知には、受付の日付、時刻、及び通信先のＩＰアドレス及びポート番号などが含まれる。
【０１５２】
プロキシ制御部１１１は、ＡＰＬデータの送信をバンドル制御部１２０に要求する。このとき、プロキシ制御部１１１は、ＡＰＬデータをプロキシメッセージのペイロードに収容してバンドル制御部１２０に出力する。バンドル制御部１２０は、要求に応じ、ＡＰＬデータを、経路ＴＢＬ１２３に基づきＥＩＤ「dtn://dtnserver」宛てのバンドルに収容して送信を試みる。しかし、バンドル制御部１２０は、アクセスネットワークＮＷａとのコネクションが切断されているため、バンドルをバンドルバッファ１２２に格納する。
【０１５３】
図１７には、バンドル通信が保留された状態が示されている。プロキシ制御部１１１は、符号Ｇ９で示されるように、アクセスネットワークＮＷａとのコネクションが切断されている間、通知タイマによりバンドルの送信保留時間を計時する。プロキシ制御部１１１は、通知タイマが満了すると、保留通知を状態通知部１２１に指示する。
【０１５４】
状態通知部１２１は、符号Ｇ１０に示されるように、保留通知を表示部１６にポップアップ表示し、または記憶部１３にログを出力する。保留通知には、現在の日付、時刻、保留時間、及び通信先のＩＰアドレス及びポート番号などが含まれる。
【０１５５】
図１８には、ライフタイムの満了によりバンドルの送信が失敗した状態が示されている。バンドル制御部１２０は、符号Ｇ１１に示されるように、タイマによりバンドルのライフタイムを管理し、ライフタイムが満了した場合、削除レポートをプロキシ制御部１１１に出力する。プロキシ制御部１１１は、削除レポートを受信すると、転送失敗通知を状態通知部１２１に指示する。
【０１５６】
状態通知部１２１は、符号Ｇ１２に示されるように、転送失敗通知を表示部１６にポップアップ表示し、または記憶部１３にログを出力する。転送失敗通知には、失敗の日付、時刻、及び通信先のＩＰアドレス及びポート番号などが含まれる。
【０１５７】
図１９は、ライフタイムの満了前に端末１がアクセスネットワークＮＷａと再接続したことによりバンドルが送信される様子を示す。バンドル制御部１２０は、符号Ｇ１３に示されるように、アクセスネットワークＮＷａとのコネクションの確立を検出すると、バンドルをバンドルバッファ１２２から読み出して送信する。
【０１５８】
バンドルは、符号Ｇ１４で示されるように、ＴＣＰ上のＩＰアドレス「10.10.20.1」及びポート番号「４５５６」に宛先に対応するＥＩＤ「dtn://dtnserver」宛てに送信される。ＤＴＮサーバ２ａにおいて、バンドル制御部２２０は、バンドルを受信すると、プロキシメッセージをプロキシ制御部２１１に送信する。プロキシ制御部２１１は、初期設定ファイル２１７により設定された出力ポインタの指定ディレクトリ「data/receive」からＡＰＬデータを受信する。
【０１５９】
プロキシ制御部２１１は、初期設定ファイル２１７で設定されたＡＰＬサーバ２ｂのＩＰアドレス「10.10.30.1」及びポート番号「40000」とＴＣＰでコネクションを確立し、符号Ｇ１６に示されるように、その宛先のＡＰＬデータを送信する。また、バンドル制御部２２０は、プロキシ制御部２１１へのＡＰＬデータの出力が完了すると、転送が完了したと認識し、配信レポートを端末１に送信する。
【０１６０】
端末１において、バンドル制御部１２０は、配信レポートを受信するとプロキシ制御部１１１に転送する。プロキシ制御部１１１は、配信レポートを受信すると、転送完了通知を状態通知部１２１に指示する。
【０１６１】
状態通知部１２１は、符号Ｇ１５に示されるように、転送完了通知を表示部１６にポップアップ表示し、または記憶部１３にログを出力する。転送完了通知には、転送完了の日付、時刻、及び通信先のＩＰアドレス及びポート番号などが含まれる。
【０１６２】
また、本例とは異なり、バンドル通信機能を有する複数のノードを中継して通信を行う場合、回送通知により有効に通信状況を把握することが可能である。
【０１６３】
図２０には回送通知の利用例が示されている。本例の通信システムには、ＡＰＬクライアント１ａ、プロキシノード（＃１）１ｂ、中継ノード（＃２）７、ＤＴＮサーバ２ａ、及びＡＰＬサーバ２ｂが含まれる。ＡＰＬクライアント１ａ、プロキシノード（＃１）１ｂ、中継ノード（＃２）７、ＤＴＮサーバ２ａ、及びＡＰＬサーバ２ｂは、この順に接続されている。
【０１６４】
ＡＰＬクライアント１ａは、図３の端末１のうち、アプリケーション機能部１００を備えるものであり、プロキシノード１ｂは、図３の端末１のうち、アプリケーション機能部１００以外の部分を備えるものである。ＡＰＬクライアント１ａ及びプロキシノード１ｂは、図１と同様の構成を有する。
【０１６５】
このように、端末１のアプリケーション機能部１００は他装置に実装することにより、端末１のプロキシ制御部１１１などの他部分を、クライアントアプリケーション１０１から独立した通信装置として構成することができる。
【０１６６】
ＡＰＬクライアント１ａは、ＩＰアドレス「10.10.10.1」のプロキシノード１ｂにＡＰＬデータを送信し、プロキシノード１ｂは、ＩＰアドレス「10.10.40.1」の中継ノード７にＡＰＬデータを送信する。中継ノード７は、ＲＦＣ５０５０に準拠した中継機能を備えるものである。中継ノード７は、ＡＰＬデータを、ＩＰアドレス「10.10.20.1」のＤＴＮサーバ２ａに中継する。ＤＴＮサーバ２ａは、ＡＰＬデータを、ＩＰアドレス「10.10.30.1」のＡＰＬサーバ２ｂに送信する。
【０１６７】
プロキシノード１ｂは、ＡＰＬデータを中継ノード７に転送したとき、ノード＃１からノード＃２にＡＰＬデータを回送した旨の回送レポートを中継ノード７に送信する。また、中継ノード７は、ＡＰＬデータをＤＴＮサーバ２ａに中継したとき、プロキシノード１ｂの回送レポートとともに、ノード＃２からＤＴＮサーバ２ａにＡＰＬデータを回送した旨の回送レポートをＤＴＮサーバ２ａに送信する。
【０１６８】
ＤＴＮサーバ２ａは、このようにして収集した回送レポートを、符号Ｇ１７に示されるように、ログ９上に回送通知として記録する。転送完了通知には、転送の日付、時刻、転送先のノード（node1,node2）、及び通信先のＩＰアドレス及びポート番号などが含まれる。
【０１６９】
また、ＤＴＮサーバ２ａに転送履歴管理アプリケーション（転送履歴管理ＡＰＬ）８を実装し、符号Ｇ１８に示されるように、ログ９に基づき転送履歴を管理することができる。転送履歴には、一例として、送信元や宛先のＩＰアドレス、送信元の転送時刻、中継ノード７の転送時刻、ＤＴＮサーバ２ａへの配信時刻などが記録される。
【０１７０】
このような通信システムは、例えば、広範囲に設置された複数のセンサ装置から環境モニタリングのための情報を車両で巡回しつつ収集する場合に適用される。この場合、車両に搭載されたＡＰＬクライアント１ａが、各地のセンサ装置から測定データを収集してＡＰＬサーバ２ｂに転送する。このとき、システム管理者は、ＤＴＮサーバ２ａのログ９や転送履歴を参照することにより、データ中継の経緯を把握することが可能である。
【０１７１】
（通信動作例２）
図２１には、通信動作例２の初期設定ファイル１１７，２１７及び経路ＴＢＬ１２３，２２３が示されている。また、図２２には通信動作例２が示されている。なお、図２２において、図１５と共通する構成については同一の符号を付し、その説明を省略する。
【０１７２】
インターネットＮＷｂには、ＤＴＮサーバ２ａ、ウェブプロキシサーバ２ｃ、及びウェブサーバ２ｄが接続されている。端末１は、ウェブブラウザのＡＰＬクライアントとして機能し、ウェブプロキシサーバ２ｃによりウェブサーバ２ｄにアクセスする。
【０１７３】
図２１に示されるように、端末１は、初期設定ファイル１１７によりＥＩＤが「dtn://node1/web」に設定され、クライアントアプリケーション１０１の通信先として、ウェブプロキシサーバ２ｃのＩＰアドレス「10.10.40.1」及びポート番号「8080」が設定される。また、端末１は、経路ＴＢＬ１２３に基づき、ＤＴＮサーバ２ａの宛先ＥＩＤ「dtn://dtnserver/web」、宛先ＩＰアドレス「10.10.20.1」、及びポート番号「4556」が設定される。
【０１７４】
また、ＤＴＮサーバ２ａは、初期設定ファイル２１７によりＥＩＤが「dtn://dtnserver/web」に設定され、ウェブプロキシサーバ２ｃのＩＰアドレス「10.10.40.1」及びポート番号「8080」が設定される。また、ＤＴＮサーバ２ａは、経路ＴＢＬ２２３に基づき、端末１の宛先ＥＩＤ「dtn://node1/web」、宛先ＩＰアドレス「10.10.10.1」、及びポート番号「4556」が設定される。
【０１７５】
まず、端末１とアクセスネットワークＮＷａのコネクションが確立している場合の通信動作について述べる。端末１のウェブブラウザにおいて、ＵＲＬ（Uniform resource Locator）「http://sample.abc.com」へのアクセスを要求すると、ＨＴＴＰ（Hyper Text Transfer Protocol）の要求メッセージがウェブプロキシサーバ２ｃに送信される。
【０１７６】
ウェブプロキシサーバ２ｃは、要求メッセージを受信すると、上記ＵＲＬのキャッシュデータを検索するウェブプロキシサーバ２ｃは、キャッシュデータがない場合、ＵＲＬのＦＱＤＮ（Fully Qualified Domain Name）である「sample.abc.com」をＤＮＳ（Domain Name System）で検索することにより、該当するウェブサーバ２ｄのＩＰアドレス「10.10.50.1」を特定する。ウェブプロキシサーバ２ｃは、ＴＣＰのポート番号「80」を設定したＨＴＴＰの要求メッセージをウェブサーバ２ｄに送信する。
【０１７７】
ウェブサーバ２ｄは、要求メッセージへの応答メッセージとして、ウェブブラウザに表示される情報をウェブプロキシサーバ２ｃに送信する。ウェブプロキシサーバ２ｃは、応答メッセージを端末１に転送する。これにより、端末１のウェブブラウザには、例えば図２３の符号Ｇ１９に示されるような画面が表示される。
【０１７８】
次に、端末１とアクセスネットワークＮＷａのコネクションが切断されている場合の通信動作について述べる。端末１は、コネクションが切断されているため、ウェブブラウザは上記ＵＲＬのＨＴＴＰの要求メッセージを送信しても、要求メッセージはウェブプロキシサーバ２ｃで受信されない。このため、仮に、端末１のクライアントアプリケーション１０１の通信にバンドルプロトコルが適用されていない場合、ウェブブラウザには、例えば図２３の符号Ｇ２０に示されるように、接続不可能の旨のメッセージが表示される。
【０１７９】
一方、端末１のクライアントアプリケーション１０１の通信にバンドルプロトコルが適用されている場合、要求メッセージはアドレス変換部１１３によりプロキシプロトコル機能部１１０で受信される。このため、ウェブブラウザには、例えば図２３の符号Ｇ２１に示されるように、通信要求中の状態が表示されたままとなる。
【０１８０】
次に、端末１とアクセスネットワークＮＷａとのコネクションが再確立した場合の通信動作について述べる。アクセスネットワークＮＷａとのコネクションが再接続されると、バンドル制御部１２０は、要求メッセージを収容したバンドルをバンドルバッファ１２２から読み出して、ＤＴＮサーバ２ａに送信する。ＤＴＮサーバ２ａは、要求メッセージをウェブプロキシサーバ２ｃに転送する。さらに、ウェブプロキシサーバ２ｃは、要求メッセージをウェブサーバ２ｄに転送する。
【０１８１】
ウェブサーバ２ｄは、要求メッセージに応じて応答メッセージを、ウェブプロキシサーバ２ｃを介してＤＴＮサーバ２ａに送信する。ＤＴＮサーバ２ａにおいて、応答メッセージは、送受信制御部２１４のソケットで受信される。プロキシ制御部２１１は、そのソケットのソケットチャネルＩＤからコネクション番号及び宛先ＥＩＤをコネクションリスト２１６から検索する。プロキシ制御部２１１は、検索結果に基づきプロキシメッセージを生成して、バンドル制御部２２０にバンドルの送信を要求する。バンドル制御部２２０は、バンドルプロトコルに基づきバンドルを端末１に送信する。
【０１８２】
端末１において、バンドル制御部１２０は、応答メッセージのバンドルを受信して、プロキシメッセージとしてプロキシ制御部１１１に出力する。プロキシ制御部１１１は、プロキシメッセージのコネクション番号を取得し、バンドル制御部１２０から取得された宛先ＥＩＤとともにコネクションリスト１１６の検索に使用する。これにより、プロキシ制御部１１１は、該当するソケットチャネルＩＤを検索し、そのソケットに応答メッセージを送信する。
【０１８３】
ウェブブラウザは、応答メッセージをソケットから取得する。この通信動作は、ウェブブラウザに、図２３の符号Ｇ１９に示される画面が表示されるまで継続される。なお、その途中、ウェブブラウザが新たなコネクションを要求した場合、プロキシ制御部１１１がコネクションリスト１１６に新たなコネクション番号を登録して、上記と同様の通信が行われる。
【０１８４】
このような通信動作により、ユーザは、通信環境が悪い場合でも、端末１においてウェブブラウザのリロード（再読み込み）を行うことなく、通信状態を継続し、ウェブブラウザにウェブページを表示させることができる。なお、バンドルプロトコルに基づく通信中にコネクションが切断された場合、ウェブページの表示における何れの段階であっても、コネクションの再接続時には通信を継続することが可能である。
【０１８５】
なお、上記の処理機能は、コンピュータによって実現することができる。その場合、処理装置が有すべき機能の処理内容を記述したプログラムが提供される。そのプログラムをコンピュータで実行することにより、上記処理機能がコンピュータ上で実現される。処理内容を記述したプログラムは、コンピュータで読み取り可能な記録媒体（ただし、搬送波は除く）に記録しておくことができる。
【０１８６】
プログラムを流通させる場合には、例えば、そのプログラムが記録されたＤＶＤ（Digital Versatile Disc）、ＣＤ−ＲＯＭ（Compact Disc Read Only Memory）などの可搬型記録媒体の形態で販売される。また、プログラムをサーバコンピュータの記憶装置に格納しておき、ネットワークを介して、サーバコンピュータから他のコンピュータにそのプログラムを転送することもできる。
【０１８７】
プログラムを実行するコンピュータは、例えば、可搬型記録媒体に記録されたプログラムもしくはサーバコンピュータから転送されたプログラムを、自己の記憶装置に格納する。そして、コンピュータは、自己の記憶装置からプログラムを読み取り、プログラムに従った処理を実行する。なお、コンピュータは、可搬型記録媒体から直接プログラムを読み取り、そのプログラムに従った処理を実行することもできる。また、コンピュータは、サーバコンピュータからプログラムが転送されるごとに、逐次、受け取ったプログラムに従った処理を実行することもできる。
【０１８８】
上述した実施形態は本発明の好適な実施の例である。但し、これに限定されるものではなく、本発明の要旨を逸脱しない範囲内において種々変形実施可能である。
【０１８９】
なお、以上の説明に関して更に以下の付記を開示する。
（付記１）  端末で動作するアプリケーションから通信先への通信を中継する通信プログラムであって、
前記通信先とのコネクションの状態に応じて、前記通信先との通信を第１のプロトコルによる通信から途絶耐性ネットワークのプロトコルによる通信に切り替え、
前記通信先への通信の完了を前記アプリケーションに通知済みであり、かつ、前記途絶耐性ネットワークのプロトコルによる通信が失敗した通信について、前記通信の失敗を前記端末に通知する、処理を、コンピュータに実行させることを特徴とする通信プログラム。
（付記２）  前記通信先との間の複数の通信回線の通信品質をそれぞれ測定し、
前記通信品質に基づき前記複数の通信回線から１以上の通信回線を選択し、
該選択した前記１以上の通信回線により前記途絶耐性ネットワークのプロトコルによる通信を行う、処理を前記コンピュータに実行させることを特徴とする付記１に記載の通信プログラム。
（付記３）  前記アプリケーションから前記通信先に送信されるデータの所定の先頭部分を複数のブロックに分割し、
前記複数のブロックを前記複数の通信回線のそれぞれを介して前記通信先に送信することにより、前記複数の通信回線の前記通信品質をそれぞれ測定し、
前記通信品質に基づき前記複数の通信回線から前記１以上の通信回線を選択し、
該選択した前記１以上の通信回線を介して前記データの他部分を前記通信先に送信する、処理を前記コンピュータに実行させることを特徴とする付記２に記載の通信プログラム。
（付記４）  端末で動作するアプリケーションから通信先への通信を中継する通信方法であって、
前記通信先とのコネクションの状態に応じて、前記通信先との通信を第１のプロトコルによる通信から途絶耐性ネットワークのプロトコルによる通信に切り替える工程と、
前記通信先への通信の完了を前記アプリケーションに通知済みであり、かつ、前記途絶耐性ネットワークのプロトコルによる通信が失敗した通信について、前記通信の失敗を前記端末に通知する工程とを、コンピュータが実行することを特徴とする通信方法。
（付記５）  前記通信先との間の複数の通信回線の通信品質をそれぞれ測定する工程と、
前記通信品質に基づき前記複数の通信回線から１以上の通信回線を選択する工程と、
該選択した前記１以上の通信回線により前記途絶耐性ネットワークのプロトコルによる通信を行う工程とを前記コンピュータが実行することを特徴とする付記４に記載の通信方法。
（付記６）  前記アプリケーションから前記通信先に送信されるデータの所定の先頭部分を複数のブロックに分割する工程と、
前記複数のブロックを前記複数の通信回線のそれぞれを介して前記通信先に送信することにより、前記複数の通信回線の前記通信品質をそれぞれ測定する工程と、
前記通信品質に基づき前記複数の通信回線から前記１以上の通信回線を選択する工程と、
該選択した前記１以上の通信回線を介して前記データの他部分を前記通信先に送信する工程とを前記コンピュータが実行することを特徴とする付記５に記載の通信方法。
（付記７）  端末で動作するアプリケーションから通信先への通信を中継する通信装置であって、
前記通信先とのコネクションの状態に応じて、前記通信先との通信を第１のプロトコルによる通信から途絶耐性ネットワークのプロトコルによる通信に切り替える切り替え処理部と、
前記通信先への通信の完了を前記アプリケーションに通知済みであり、かつ、前記途絶耐性ネットワークのプロトコルによる通信が失敗した通信について、前記通信の失敗を前記端末に通知する失敗通知部とを有することを特徴とする通信装置。
（付記８）  前記途絶耐性ネットワークのプロトコルにより前記通信先と通信する通信部を有し、
前記通信部は、
前記通信先との間の複数の通信回線の通信品質をそれぞれ測定し、
前記通信品質に基づき前記複数の通信回線から１以上の通信回線を選択し、
該選択した前記１以上の通信回線により前記途絶耐性ネットワークのプロトコルによる通信を行うことを特徴とする付記７に記載の通信装置。
（付記９）  前記通信部は、
前記アプリケーションから前記通信先に送信されるデータの所定の先頭部分を複数のブロックに分割し、
前記複数のブロックを前記複数の通信回線のそれぞれを介して前記通信先に送信することにより、前記複数の通信回線の前記通信品質をそれぞれ測定し、
前記通信品質に基づき前記複数の通信回線から前記１以上の通信回線を選択し、
該選択した前記１以上の通信回線を介して前記データの他部分を前記通信先に送信することを特徴とする付記８に記載の通信装置。
【符号の説明】
【０１９０】
１      端末
１ａ      アプリケーションクライアント
１ｂ      プロキシノード
２      サーバ
２ａ      ＤＴＮサーバ
２ｂ      アプリケーションサーバ
２ｃ      ウェブプロキシサーバ
２ｄ      ウェブサーバ
１０，２０     ＣＰＵ
１０１     クライアントアプリケーション
２０１     サーバアプリケーション
１１１，２１１    プロキシ制御部
１１２，２１２    コネクション監視部
１１５，２１５    応答制御部
１２０，２２０    バンドル制御部
１２１，２２１    状態通知部
【図１】
0006662152.tif 000002
【図２】
0006662152.tif 000003
【図３】
0006662152.tif 000004
【図４】
0006662152.tif 000005
【図５】
0006662152.tif 000006
【図６】
0006662152.tif 000007
【図７】
0006662152.tif 000008
【図８】
0006662152.tif 000009
【図９】
0006662152.tif 000010
【図１０】
0006662152.tif 000011
【図１１】
0006662152.tif 000012
【図１２】
0006662152.tif 000013
【図１３】
0006662152.tif 000014
【図１４】
0006662152.tif 000015
【図１５】
0006662152.tif 000016
【図１６】
0006662152.tif 000017
【図１７】
0006662152.tif 000018
【図１８】
0006662152.tif 000019
【図１９】
0006662152.tif 000020
【図２０】
0006662152.tif 000021
【図２１】
0006662152.tif 000022
【図２２】
0006662152.tif 000023
【図２３】
0006662152.tif 000024