(57)【要約】      （修正有）【課題】アプリケーション間の通信の安定性を向上することができる通信装置、通信プログラム、及び通信方法を提供する。【解決手段】通信装置は、第１アプリケーションから第２アプリケーションに送信されたデータのうち、第１アプリケーションのソケットがオープンしてからクローズするまでの間に送信されたデータを複数のデータ片に分割して複数のデータ片の各々に共通の識別番号を付与するデータ処理部と、複数のデータ片を第２アプリケーションに送信する送信部とを有する。【選択図】図１６
2020028074.tif 000002
【特許請求の範囲】
【請求項１】
第１アプリケーションから第２アプリケーションに送信されたデータのうち、前記第１アプリケーションのソケットがオープンしてからクローズするまでの間に送信されたデータを複数のデータ片に分割して前記複数のデータ片の各々に共通の識別番号を付与するデータ処理部と、
前記複数のデータ片を前記第２アプリケーションに送信する送信部とを有することを特徴とする通信装置。
【請求項２】
前記データ処理部は、前記複数のデータ片のうち、前記ソケットがオープンしてからクローズするまでの間に送信されたデータの最後尾のデータ片に、前記最後尾を示す情報を付与することを特徴とする請求項１に記載の通信装置。
【請求項３】
前記データ処理部は、前記第１アプリケーションから送信されたデータをバッファに格納し、前記バッファのサイズに従って前記複数のデータ片に分割することを特徴とする請求項１または２に記載の通信装置。
【請求項４】
前記データ処理部は、前記複数のデータ片の各々に、前記ソケットがオープンしてからクローズするまでの間に送信されたデータ内の位置に応じた位置情報を付与することを特徴とする請求項１乃至３の何れかに記載の通信装置。
【請求項５】
第１アプリケーションから第２アプリケーションに送信された複数のデータ片を受信する受信部と、
前記複数のデータ片のうち、共通の識別番号が付与された各データ片から前記第１アプリケーションのデータを生成して前記第２アプリケーションに送信するデータ処理部とを有することを特徴とする通信装置。
【請求項６】
前記データ処理部は、前記複数のデータ片のうち、前記データの最後尾のデータ片を、前記最後尾のデータ片に付与された情報に基づいて検出し、検出後に前記データを生成して前記第２アプリケーションに送信することを特徴とする請求項５に記載の通信装置。
【請求項７】
第１アプリケーションから第２アプリケーションに送信されたデータのうち、前記第１アプリケーションのソケットがオープンしてからクローズするまでの間に送信されたデータを複数のデータ片に分割して前記複数のデータ片の各々に共通の識別番号を付与し、
前記複数のデータ片を前記第２アプリケーションに送信する、処理を、コンピュータに実行させることを特徴とする通信プログラム。
【請求項８】
第１アプリケーションから第２アプリケーションに送信された複数のデータ片を受信し、
前記複数のデータ片のうち、共通の識別番号が付与された各データ片から前記第１アプリケーションのデータを生成して前記第２アプリケーションに送信する、処理を、コンピュータに実行させることを特徴とする通信プログラム。
【請求項９】
第１アプリケーションから第２アプリケーションに送信されたデータのうち、前記第１アプリケーションのソケットがオープンしてからクローズするまでの間に送信されたデータを複数のデータ片に分割して前記複数のデータ片の各々に共通の識別番号を付与する工程と、
前記複数のデータ片を前記第２アプリケーションに送信する工程とを、コンピュータが実行することを特徴とする通信方法。
【請求項１０】
第１アプリケーションから第２アプリケーションに送信された複数のデータ片を受信する工程と、
前記複数のデータ片のうち、共通の識別番号が付与された各データ片から前記第１アプリケーションのデータを生成して前記第２アプリケーションに送信する工程とを、コンピュータが実行することを特徴とする通信方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本件は、通信装置、通信プログラム、及び通信方法に関する。
【背景技術】
【０００２】
近年、無線アクセスポイント（以下、「ＡＰ」と表記）が普及した結果、スマートフォンなどの端末は、ＡＰと通信キャリアの広域無線接続を切り替えながら通信を行うスタイルが広まっている。このような環境において、通信状態は、端末の接続数や周囲の電波状況に影響されるため、通信品質が場所や時間によりばらついて、通信が断続的となる。
【０００３】
例えば、ユーザが移動中、リンク対象のＡＰを切り替えながらインターネット上のサーバと通信を行う場合、通信のデータ量が多く、ＡＰのリンク可能範囲内の滞在時間が短いと、通信が途中で切断されるため、他のＡＰとの再リンク後に通信のやり直しが必要となる。
【０００４】
これに対し、端末及びサーバに実装された各アプリケーションに、その通信の遅延や途絶に対する耐性を持たせることが検討されている。例えば、通信が断続的となる環境でも円滑な通信を可能にする技術として、途絶耐性ネットワーク（DTN：Delay, Disruption Tolerant Networking）が知られている（例えば特許文献１及び２参照）。この技術は、ＩＥＴＦ（The Internet Engineering Task Force）により標準化が進められ、例えばＲＦＣ（Request For Comments）５０５０には、ＤＴＮに適用するバンドルプロトコルが規定されている。
【０００５】
ＤＴＮによると、例えば端末とサーバの間のコネクションの切断時、端末のアプリケーションから送信されたデータを、バンドルプロトコルに従って、バンドルと呼ばれる単位で分割して一時的に蓄積し、コネクションの再接続時にサーバに送信することが可能となる。サーバではバンドルから端末のアプリケーションのデータが復元されて、サーバのアプリケーションに渡される。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】国際公開第２０１５／１３３０５５号
【特許文献２】特開２０１４−６０５３３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
しかし、端末のアプリケーションのデータは、送信単位のパケットごとにバンドル化されるため、サーバではデータがバンドルからパケットごとに復元されてアプリケーションに渡される。このため、アプリケーションのデータは、パケット単位で分断された状態でサーバのアプリケーションに渡される。
【０００８】
例えば端末とサーバの間のコネクションの切断時間が長引いた場合、一部のパケットが遅延してサーバに到着するおそれがある。このとき、サーバに先行して到着したパケットはサーバのアプリケーションにすでに渡されているため、サーバのアプリケーションでは、不完全なデータの受信により通信時間がタイムアウトしてエラーが検出されるおそれがある。
【０００９】
そこで本件は、アプリケーション間の通信の安定性を向上することができる通信装置、通信プログラム、及び通信方法を提供することを目的とする。
【課題を解決するための手段】
【００１０】
１つの態様では、通信装置は、第１アプリケーションから第２アプリケーションに送信されたデータのうち、前記第１アプリケーションのソケットがオープンしてからクローズするまでの間に送信されたデータを複数のデータ片に分割して前記複数のデータ片の各々に共通の識別番号を付与するデータ処理部と、前記複数のデータ片を前記第２アプリケーションに送信する送信部とを有する。
【００１１】
他の態様では、通信装置は、第１アプリケーションから第２アプリケーションに送信された複数のデータ片を受信する受信部と、前記複数のデータ片のうち、共通の識別番号が付与された各データ片から前記第１アプリケーションのデータを生成して前記第２アプリケーションに送信するデータ処理部とを有する。
【００１２】
１つの態様では、通信プログラムは、第１アプリケーションから第２アプリケーションに送信されたデータのうち、前記第１アプリケーションのソケットがオープンしてからクローズするまでの間に送信されたデータを複数のデータ片に分割して前記複数のデータ片の各々に共通の識別番号を付与し、前記複数のデータ片を前記第２アプリケーションに送信する、処理を、コンピュータに実行させる。
【００１３】
他の態様では、通信プログラムは、第１アプリケーションから第２アプリケーションに送信された複数のデータ片を受信し、前記複数のデータ片のうち、共通の識別番号が付与された各データ片から前記第１アプリケーションのデータを生成して前記第２アプリケーションに送信する、処理を、コンピュータに実行させる。
【００１４】
１つの態様では、通信方法は、第１アプリケーションから第２アプリケーションに送信されたデータのうち、前記第１アプリケーションのソケットがオープンしてからクローズするまでの間に送信されたデータを複数のデータ片に分割して前記複数のデータ片の各々に共通の識別番号を付与する工程と、前記複数のデータ片を前記第２アプリケーションに送信する工程とを、コンピュータが実行する方法である。
【００１５】
他の態様では、通信方法は、第１アプリケーションから第２アプリケーションに送信された複数のデータ片を受信する工程と、前記複数のデータ片のうち、共通の識別番号が付与された各データ片から前記第１アプリケーションのデータを生成して前記第２アプリケーションに送信する工程とを、コンピュータが実行する方法である。
【発明の効果】
【００１６】
１つの側面として、アプリケーション間の通信の安定性を向上することができる。
【図面の簡単な説明】
【００１７】
【図１】ＤＴＮアプリケーションを介したアプリケーション間通信の比較例を示す図である。
【図２】端末の一例を示す構成図である。
【図３】サーバの一例を示す構成図である。
【図４】端末及びサーバの各機能構成の一例を示す構成図である。
【図５】バンドルのフォーマットが示す図である。
【図６】コネクションリスト、フィルタテーブル、及びバンドルバッファの一例を示す図である。
【図７】プロトコル変換の一例が示す図である。
【図８】クライアントアプリケーションのデータ送信処理の一例を示すフローチャートである。
【図９】バンドルの送信処理の一例を示すフローチャートである。
【図１０】バンドルの受信処理の一例を示すフローチャートである。
【図１１】バンドルプロトコルの適用の切り替え処理の一例を示すフローチャートである。
【図１２】ストリーム出力処理の一例を示すフローチャートである。
【図１３】アプリケーションデータをフラグメントに分割する処理の一例を示す図である。
【図１４】ストリーム入力処理の一例を示すフローチャートである。
【図１５】アプリケーションデータの復元処理の一例を示す図である。
【図１６】ＤＴＮアプリケーションを介したアプリケーション間通信の実施例を示す図である。
【発明を実施するための形態】
【００１８】
図１は、ＤＴＮアプリケーション１ｂ，２ｂを介したアプリケーション間通信の比較例を示す図である。端末１及びサーバ２は無線ネットワーク９を介して互いに通信する。端末１としては、例えば、スマートフォンやパーソナルコンピュータなどの通信装置が挙げられるが、これに限定されない。
【００１９】
端末１にはクライアントアプリケーション１ａ及びＤＴＮアプリケーション１ｂが実装されている。サーバ２にはサーバアプリケーション２ａ及びＤＴＮアプリケーション２ｂが実装されている。クライアントアプリケーション１ａ及びサーバアプリケーション２ａは互いに通信することにより、端末１のユーザに各種のサービスを提供する。
【００２０】
クライアントアプリケーション１ａ及びサーバアプリケーション２ａは、端末１とサーバ２の間のリンクが接続されている場合、ＤＴＮアプリケーション１ｂ，２ｂを介さずに互いに通信する。しかし、クライアントアプリケーション１ａ及びサーバアプリケーション２ａは、リンクが切断されると、ＤＴＮアプリケーション１ｂ，２ｂを介して互いに通信する。
【００２１】
ＤＴＮアプリケーション１ｂ，２ｂは、ＤＴＮのバンドルプロトコルに従ってクライアントアプリケーション１ａ及びサーバアプリケーション２ａの間の通信のプロキシとして通信を中継する。以下に、リンクが切断された場合のクライアントアプリケーション１ａからサーバアプリケーション２ａへの通信について述べる。
【００２２】
クライアントアプリケーション１ａは、アプリケーションデータ（ＡＰＬデータ）＃１，＃２をＤＴＮアプリケーション１ｂに送信する。ＡＰＬデータ＃１，＃２は、それぞれ、サーバアプリケーション２ａの処理に必要となる一塊のデータである。例えば、ある処理はＡＰＬデータ＃１の全てが揃わなければ実行することができず、他の処理はＡＰＬデータ＃２の全てが揃わなければ実行することができない。つまり、サーバアプリケーション２ａは、ＡＰＬデータ＃１，＃２の一部だけでは処理を実行することができない。
【００２３】
クライアントアプリケーション１ａは、一例として、ＡＰＬデータ＃１をパケット（ＰＫＴ）＃１，＃２に分割して送信し、ＡＰＬデータ＃２をＰＫＴ＃３，＃４に分割して送信する。ＰＫＴ＃１〜＃４としては例えばＩＰ（Internet Protocol）が挙げられる。
【００２４】
ＤＴＮアプリケーション１ｂは、一例として、ＰＫＴ＃１をバンドル＃１，＃２に分割して収容し、ＰＫＴ＃２をバンドル＃３，＃４に分割して収容する。また、ＤＴＮアプリケーション１ｂは、一例として、ＰＫＴ＃３をバンドル＃５，＃６に分割して収容し、ＰＫＴ＃４をバンドル＃７に収容する。
【００２５】
バンドル＃１，＃２は、リンクが再接続されたときにサーバ２に送信される。ＤＴＮアプリケーション２ｂは、バンドル＃１，＃２からＰＫＴ＃１を復元してサーバアプリケーション２ａに送信する。サーバアプリケーション２ａは、ＡＰＬデータ＃１の一部のＡＰＬデータ＃１ＡとしてＰＫＴ＃１を受信する。
【００２６】
その後、リンクが再び切断すると、バンドル＃１，＃２の後続のバンドル＃３，＃４は遅延してサーバ２に到着する。ＤＴＮアプリケーション２ｂは、バンドル＃３，＃４からＰＫＴ＃２を再生してサーバアプリケーション２ａに送信する。サーバアプリケーション２ａは、ＡＰＬデータ＃１の残りのＡＰＬデータ＃１ＢとしてＰＫＴ＃２を受信する。
【００２７】
しかし、サーバアプリケーション２ａでは、ＡＰＬデータ＃１Ｂに先立って不完全なＡＰＬデータ＃１Ａを受信したことにより通信時間がタイムアウトしてエラーが検出される。このため、サーバアプリケーション２ａは、ＡＰＬデータ＃１Ａ，＃１Ｂを廃棄し、ＡＰＬデータ＃１による処理を実行することができない。
【００２８】
また、ＡＰＬデータ＃２のバンドル＃５〜７は、送信中にリンクが切断されることなく、サーバ２に到着する。このため、ＤＴＮアプリケーション２ｂは、バンドル＃５〜＃７からＰＫＴ＃３，＃４を再生してサーバアプリケーション２ａに送信する。サーバアプリケーション２ａは、ＰＫＴ＃３，＃４からＡＰＬデータ＃２を再生して処理を実行する。
【００２９】
このように、サーバアプリケーション２ａは、パケット単位で分断されたＡＰＬデータ＃１Ａ，＃１ＢをＤＴＮアプリケーション２ｂから受信する。このため、後続のＡＰＬデータ＃１Ｂの受信が遅延すると、不完全なデータの受信により通信時間がタイムアウトしてエラーが検出される。
【００３０】
そこで、端末１のＤＴＮアプリケーション１ｂは、サーバアプリケーション２ａの処理ごとのＡＰＬデータ＃１，＃２が区別できるように、クライアントアプリケーション１ａがソケットのオープンからクローズまでに送信されたデータを複数のフラグメントに分割して各フラグメントに共通の識別番号を付与する。また、サーバ２のＤＴＮアプリケーション２ｂは、共通の識別番号が付与された各フラグメントからＰＫＴ＃１，＃２を生成してサーバアプリケーション２ａに転送する。以下に端末１及びサーバ２の構成を述べる。
【００３１】
図２は、端末１の一例を示す構成図である。端末１は、ＣＰＵ（Central Processing Unit）１０、ＲＯＭ（Read Only Memory）１１、ＲＡＭ（Random Access Memory）１２、ＨＤＤ（Hard Disk Drive）やメモリなどの記憶部１３、無線ＬＡＮ（Local Area Network）モジュール１４、入力部１５、及び表示部１６を有する。ＣＰＵ１０は、互いに信号の入出力ができるように、ＲＯＭ１１、ＲＡＭ１２、記憶部１３、無線ＬＡＮモジュール１４、入力部１５、及び表示部１６と、バス１９を介して接続されている。
【００３２】
ＲＯＭ１１は、ＣＰＵ１０を駆動するプログラムが格納されている。ＲＯＭ１１内のプログラムには、実施例の通信方法を実行する通信プログラムが含まれる。
【００３３】
ＲＡＭ１２は、ＣＰＵ１０のワーキングメモリとして機能する。記憶部１３には、プログラムの実行に用いられる各種の情報が記憶されている。無線ＬＡＮモジュール１４は、例えば、アクセス系ネットワークに接続されたＡＰとリンクアップすることによりインターネット上のサーバと通信する。
【００３４】
入力部１５は、端末１に情報を入力する手段である。入力部１５としては、例えばキーボード、マウス、及びタッチパネルなどが挙げられる。入力部１５は、入力された情報を、バス１９を介しＣＰＵ１０に出力する。
【００３５】
表示部１６は、端末１の情報を出力する手段である。表示部１６としては、例えばディスプレイ、タッチパネル、及びプリンタなどが挙げられる。表示部１６は、ＣＰＵ１０からバス１９を介して情報を取得して表示する。表示部１６には、後述するように端末１のクライアントアプリケーションの通信の状況及び結果が表示される。
【００３６】
ＣＰＵ１０は、ＲＯＭ１１からプログラムを読み込むと、通信方法を実行するための各種の機能が形成される。ＣＰＵ１０は、通信プログラムを実行するコンピュータの一例である。なお、端末１の機能構成については後述する。
【００３７】
図３は、サーバ２の一例を示す構成図である。サーバ２は、例えばインターネットに接続され、端末１と通信することにより所定のサービスを提供する通信装置である。
【００３８】
サーバ２は、ＣＰＵ２０、ＲＯＭ２１、ＲＡＭ２２、ＨＤＤ２３、及び通信ポート２４を有する。ＣＰＵ２０は、互いに信号の入出力ができるように、ＲＯＭ２１、ＲＡＭ２２、ＨＤＤ２３、及び通信ポート２４と、バス２９を介して接続されている。
【００３９】
ＲＯＭ２１は、ＣＰＵ２０を駆動するプログラムが格納されている。ＲＯＭ２１内のプログラムには、実施例の通信方法を実行する通信プログラムが含まれる。ＲＡＭ２２は、ＣＰＵ２０のワーキングメモリとして機能する。通信ポート２４は、例えばＮＩＣ（Network Interface Card）であり、インターネットを介し端末１と通信する。
【００４０】
ＣＰＵ２０は、ＲＯＭ２１からプログラムを読み込むと、各種の機能が形成される。ＣＰＵ２０は、通信プログラムを実行するコンピュータの一例である。
【００４１】
図４は、端末１及びサーバ２の各機能構成の一例を示す構成図である。端末１及びサーバ２は、通信システムの一例であり、無線ネットワーク９を介して接続されている。なお、以下の説明では、端末１からサーバ２にＡＰＬデータを送信する場合の動作を挙げるが、サーバ２から端末１にＡＰＬデータを送信する場合も、端末１及びサーバ２間で送信処理と受信処理が逆転する以外は上記の場合と同様である。
【００４２】
端末１は、アプリケーション機能部１００と、プロキシプロトコル機能部１１０と、バンドル制御部１２０と、バンドルバッファ１２２と、経路テーブル（経路ＴＢＬ）１２３とを有する。
【００４３】
アプリケーション機能部１００は、クライアントアプリケーション（ＡＰＬｃ）１ａと、ＴＣＰ（Transmission Control Protocol）処理部１０２とを有する。プロキシプロトコル機能部１１０は、プロキシ制御部１１１と、コネクション監視部１１２と、アドレス変換部１１３と、送受信制御部１１４と、応答制御部１１５と、コネクションリスト１１６と、初期設定ファイル１１７と、フィルタテーブル（フィルタＴＢＬ）１１８と、ストリーム管理部１１９とを有する。ストリーム管理部１１９は、複数のバッファを備えるバッファ部（ＢＵＦ）１１９ａを有する。
【００４４】
クライアントアプリケーション１ａ、ＴＣＰ処理部１０２、プロキシ制御部１１１、コネクション監視部１１２、アドレス変換部１１３、送受信制御部１１４、応答制御部１１５、ストリーム管理部１１９、及びバンドル制御部１２０は、端末１のＣＰＵ１０に形成される機能である。また、コネクションリスト１１６と、初期設定ファイル１１７と、フィルタＴＢＬ１１８、バンドルバッファ１２２、及び経路ＴＢＬ１２３は、記憶部１３に記憶されている。
【００４５】
なお、図４に示された端末１の機能構成のうち、アプリケーション機能部１００を除く部分は、実施例の通信装置及び通信プログラムとして機能し、クライアントアプリケーション１ａからサーバアプリケーション２ａへの通信を中継するＤＴＮアプリケーション１ｂである。実施例の通信装置及び通信プログラムは、本例のように端末１の内部に設けられてもよいが、端末１とは別の装置に設けられてもよい。
【００４６】
一方、サーバ２は、アプリケーション機能部２００と、プロキシプロトコル機能部２１０と、バンドル制御部２２０と、バンドルバッファ２２２と、経路ＴＢＬ２２３とを有する。
【００４７】
アプリケーション機能部２００は、サーバアプリケーション（ＡＰＬｓ）２ａと、ＴＣＰ処理部２０２とを有する。プロキシプロトコル機能部２１０は、プロキシ制御部２１１と、コネクション監視部２１２と、アドレス変換部２１３と、送受信制御部２１４と、応答制御部２１５と、コネクションリスト２１６と、初期設定ファイル２１７と、フィルタＴＢＬ２１８と、ストリーム管理部２１９とを有する。ストリーム管理部２１９は、複数のバッファを備えるバッファ部（ＢＵＦ）２１９ａを有する。
【００４８】
サーバアプリケーション２ａ、ＴＣＰ処理部２０２、プロキシ制御部２１１、コネクション監視部２１２、アドレス変換部２１３、送受信制御部２１４、応答制御部２１５、ストリーム管理部２１９、及びバンドル制御部２２０は、サーバ２のＣＰＵ２０に形成される機能である。また、コネクションリスト２１６と、初期設定ファイル２１７と、フィルタＴＢＬ２１８、バンドルバッファ２２２、及び経路ＴＢＬ２２３は、ＨＤＤ２３に記憶されている。
【００４９】
なお、図４に示されたサーバ２の機能構成のうち、アプリケーション機能部２００を除く部分は、実施例の通信装置及び通信プログラムとして機能し、クライアントアプリケーション１ａからサーバアプリケーション２ａへの通信を中継するＤＴＮアプリケーション２ｂである。実施例の通信装置及び通信プログラムは、本例のようにサーバ２の内部に設けられてもよいが、端末１とは別の装置に設けられてもよい。
【００５０】
サーバアプリケーション２ａとクライアントアプリケーション１ａは、ＴＣＰ処理部１０２，２０２により通信することにより連携して所定の機能を提供する。サーバアプリケーション２ａとクライアントアプリケーション１ａの機能としては、例えばファイル転送機能やウェブブラウザ機能などが挙げられるが限定はない。
【００５１】
ＴＣＰ処理部１０２，２０２は、例えばＯＳ（Operating System）のドライバなどにより提供されるＴＣＰ／ＩＰの通信機能を備える。端末１のＴＣＰ処理部１０２は、無線ＬＡＮモジュール１４を制御してパケットの送受信を行い、サーバ２のＴＣＰ処理部２０２は、通信ポート２４を制御してパケットの送受信を行う。
【００５２】
サーバアプリケーション２ａとクライアントアプリケーション１ａは、端末１とサーバ２の間のリンクが確立されているとき、直接的にＴＣＰ／ＩＰに基づく通信を行う。しかし、リンクが安定せず、通信が断続的となる環境においては、バンドル制御部１２０，２２０が、ＴＣＰ／ＩＰに基づく通信に代えて、ＤＴＮのバンドルプロトコルに基づく通信を行う。
【００５３】
バンドル制御部１２０は、クライアントアプリケーション１ａからサーバアプリケーション２ａへの通信を、そのサーバアプリケーション２ａとのコネクションの状態に応じて、ＴＣＰ／ＩＰに基づく通信からＤＴＮのバンドルプロトコルに基づく通信に切り替えて行う。このとき、コネクション監視部１１２は、サーバアプリケーション２ａとのコネクションを状態を監視し、コネクションの状態に応じてアドレス変換部１１３を制御する。
【００５４】
これにより、コネクション監視部１１２は、クライアントアプリケーション１ａの通信をＴＣＰ／ＩＰによる通信からＤＴＮのバンドルプロトコルによる通信に切り替える。したがって、クライアントアプリケーション１ａの通信が、ＴＣＰ処理部１０２による通信からバンドル制御部１２０による通信に切り替えられる。
【００５５】
また、バンドル制御部２２０は、サーバアプリケーション２ａからクライアントアプリケーション１ａへの通信を、そのクライアントアプリケーション１ａとのコネクションの状態に応じて、ＴＣＰ／ＩＰに基づく通信からＤＴＮのバンドルプロトコルに基づく通信に切り替えて行う。このとき、コネクション監視部２１２は、クライアントアプリケーション１ａとのコネクションを状態を監視し、コネクションの状態に応じて、アドレス変換部２１３を制御する。
【００５６】
これにより、コネクション監視部２１２は、サーバアプリケーション２ａの通信をＴＣＰ／ＩＰによる通信からＤＴＮのバンドルプロトコルによる通信に切り替える。したがって、サーバアプリケーション２ａの通信が、ＴＣＰ処理部２０２による通信からバンドル制御部２２０による通信に切り替えられる。
【００５７】
バンドル制御部１２０，２２０は、例えば、ＲＦＣ５０５０の規定に従い、バンドルプロトコルに基づく通信を行う。バンドル制御部１２０，２２０は、サーバアプリケーション２ａとクライアントアプリケーション１ａの送信対象データを、バンドルと呼ばれるデータメッセージのペイロード部分に収容して送信する。
【００５８】
図５には、バンドルのフォーマットが示されている。バンドルは、プライマリバンドルブロック及びバンドルペイロードブロックを含む。プライマリバンドルブロックには、送信元や宛先に関する情報、及び、バンドルの削除までの時間を示すライフタイム（「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）機能により通信の状態を検出する。コネクション監視部１１２，２１２は、バンドル制御部１２０，２２０の検出結果を取得し、またはバンドルＡＰＩによる制御などによりコネクションの状態を検出する。
【０１２１】
コネクション監視部１１２，２１２は、コネクションが接続されている場合（ステップＳｔ４１のＹｅｓ）、バンドルバッファ１２２，２２２に送信待ちのバンドルが格納されているか否かを判定する（ステップＳｔ４２）。コネクション監視部１１２，２１２は、格納済みのバンドルがない場合（ステップＳｔ４２のＮｏ）、再びステップＳｔ４１の処理を実行する。
【０１２２】
また、コネクション監視部１１２，２１２は、格納済みのバンドルがある場合（ステップＳｔ４２のＹｅｓ）、フィルタＴＢＬ１１８，２１８の設定状態を参照することによりアドレス変換部１１３，２１３に対する変換情報の設定の有無を判定する（ステップＳｔ４３）。コネクション監視部１１２，２１２は、変換情報の設定がない場合（ステップＳｔ４３のＮｏ）、処理を終了する。また、コネクション監視部１１２，２１２は、変換情報の設定が有る場合（ステップＳｔ４３のＹｅｓ）、変換情報を削除する（ステップＳｔ４４）。
【０１２３】
これにより、ＴＣＰ処理部１０２，２０２から送受信制御部１１４，２１４のソケットに対するパケットの転送が停止する。したがって、クライアントアプリケーション１ａ及びサーバアプリケーション２ａの間の通信に対してバンドルプロトコルの適用が停止されるため、プロキシプロトコル機能部１１０，２１０を介さない直接的なＴＣＰ／ＩＰの通信が行われる。
【０１２４】
一方、コネクション監視部１１２，２１２は、コネクションが切断されている場合（ステップＳｔ４１のＮｏ）、フィルタＴＢＬ１１８，２１８の設定状態を参照することによりアドレス変換部１１３，２１３に対する変換情報の設定の有無を判定する（ステップＳｔ４５）。コネクション監視部１１２，２１２は、変換情報の設定が有る場合（ステップＳｔ４５のＹｅｓ）、処理を終了する。また、コネクション監視部１１２，２１２は、変換情報の設定がない場合（ステップＳｔ４５のＮｏ）、変換情報を設定する（ステップＳｔ４６）。
【０１２５】
これにより、ＴＣＰ処理部１０２，２０２から送受信制御部１１４，２１４のソケットに対するパケットの転送が開始される。したがって、クライアントアプリケーション１ａ及びサーバアプリケーション２ａの間の通信に対してバンドルプロトコルの適用が開始されるため、プロキシプロトコル機能部１１０，２１０を介した通信が行われる。
【０１２６】
このように、コネクション監視部１１２，２１２は、通信先とのコネクションの状態を検出し、そのコネクションの状態に応じて、クライアントアプリケーション１ａ及びサーバアプリケーション２ａの間の通信に対するバンドルプロトコルの適用の可否を決定する。このため、バンドルプロトコルの適用が自動的に行われる。
【０１２７】
図１２は、ストリーム出力処理の一例を示すフローチャートである。ストリーム出力処理は、ステップＳｔ３ａにおいて実行される。なお、本例では、端末１のストリーム管理部１１９の処理を挙げるが、サーバ２のストリーム管理部２１９もストリーム管理部１１９と同様の処理を実行する。
【０１２８】
ストリーム管理部１１９は、クライアントアプリケーション１ａのソケットＳＣ１がオープンしているか否かを判定する（ステップＳｔ５１）。ストリーム管理部１１９は、ソケットＳＣ１がクローズしている場合（ステップＳｔ５１のＮｏ）、処理を終了する。
【０１２９】
また、ストリーム管理部１１９は、ソケットＳＣ１がオープンしている場合（ステップＳｔ５１のＹｅｓ）、ＳＮに１を加算し、フラグメント番号（以下、「ＦＮ」と表記）を１に設定する（ステップＳｔ５２）。ＦＮは、ＳＮが共通である複数のフラグメントの各々のＡＰＬデータ内の位置に応じた位置情報であり、フラグメントからパケットを再生するときのフラグメントの配置に用いられる。なお、端末１の起動時、ＳＮの初期値として例えば１が設定される。
【０１３０】
次にストリーム管理部１１９は、クライアントアプリケーション１ａがソケットＳＣ１から送信したパケットのデータ、つまりＡＰＬデータをバッファ部１１９ａのバッファに格納する（ステップＳｔ５３）。次にストリーム管理部１１９は、バッファが満タンであるか否かを判定する（ステップＳｔ５４）。ストリーム管理部１１９は、バッファが満タンではない場合（ステップＳｔ５４のＮｏ）、以下のステップＳｔ５７の処理を実行する。
【０１３１】
また、ストリーム管理部１１９は、バッファが満タンである場合（ステップＳｔ５４のＹｅｓ）、バッファ内のデータ、つまりフラグメントにＦＮを付与する（ステップＳｔ５５）。このため、サーバ２は、端末１から受信した各フラグメントのＡＰＬデータ内の位置を識別して容易にパケットを復元することができる。次にストリーム管理部１１９は、データの格納先のバッファを他のバッファに切り替える（ステップＳｔ５６）。
【０１３２】
次にストリーム管理部１１９は、クライアントアプリケーション１ａのソケットＳＣ１がクローズしたか否かを判定する（ステップＳｔ５７）。ストリーム管理部１１９は、ソケットＳＣ１がクローズしていない場合（ステップＳｔ５７のＮｏ）、タイマにより一定時間パケットが未受信であるか否かを判定する（ステップＳｔ５８）。ストリーム管理部１１９は、一定時間パケットが未受信ではない場合（ステップＳｔ５８のＮｏ）、ステップＳｔ５３以降の各処理を再び実行する。
【０１３３】
ストリーム管理部１１９は、ソケットＳＣ１がクローズしている場合（ステップＳｔ５７のＹｅｓ）、または一定時間パケットが未受信である場合（ステップＳｔ５８のＹｅｓ）、各バッファからフラグメントを読み出す（ステップＳｔ５９）。次にストリーム管理部１１９は、各フラグメントに共通のＳＮを付与する（ステップＳｔ６０）。
【０１３４】
このため、各フラグメントは分割元のＡＰＬデータに応じたＳＮが付与される。したがって、サーバ２のストリーム管理部２１９は、フラグメントからアプリケーション間の通信プロトコルを解析することなく、端末１から受信した各フラグメントの分割元のＡＰＬデータを識別することができる。そして、ストリーム管理部２１９は、共通のＡＰＬデータから分割された全てのパケットを復元した後、サーバアプリケーション２ａに送信することができる。これにより、サーバアプリケーション２ａに不完全なデータが渡されることが抑制されるため、アプリケーション間の通信の安定性が向上する。
【０１３５】
次にストリーム管理部１１９は、各フラグメントに終了フラグを付与する（ステップＳｔ６１）。終了フラグは、付与されたフラグメントがＡＰＬデータの最後尾に位置するか否かを示す。終了フラグ「１」は、フラグメントが最後尾であることを示し、終了フラグ「０」は、フラグメントが最後尾ではないことを示す。
【０１３６】
このように、ストリーム管理部１１９は、ＡＰＬデータの最後尾のフラグメントに、最後尾を示す情報として終了フラグ「１」を付与する。このため、サーバ２のストリーム管理部１１９は、終了フラグ「１」を検出することによりフラグメントからＡＰＬデータを完了してサーバアプリケーション２ａにパケットを送信することができる。
【０１３７】
次にストリーム管理部１１９は、各フラグメントをプロキシ制御部１１１に出力する（ステップＳｔ６２）。これにより、各フラグメントは、バンドル制御部１２０によりバンドルに収容されてサーバアプリケーション２ａに送信される。なお、プロキシ制御部１１１，２１１は送信部の一例である。このようにしてストリーム出力処理は実行される。
【０１３８】
図１３は、ＡＰＬデータをフラグメントに分割する処理の一例を示す。図１３において、紙面右方向を時刻の進む方向とする。なお、本例では、端末１のストリーム管理部１１９の処理を挙げるが、サーバ２のストリーム管理部２１９もストリーム管理部１１９と同様にＡＰＬデータを分割する。
【０１３９】
クライアントアプリケーション１ａは、ソケットＳＣ１のオープンからクローズまでの間にＡＰＬデータ＃１を送信する。クライアントアプリケーション１ａは、その後のソケットＳＣ１のオープンからクローズまでの間にＡＰＬデータ＃２を送信する。
【０１４０】
ストリーム管理部１１９は、ＡＰＬデータ＃１をバッファのサイズＬごとにｎ個（ｎ：正の整数）のフラグメントに分割して、各フラグメントに共通のＳＮ＃１を付与し、また、ＦＮ＃１〜＃ｎを先頭のフラグメントから順に付与する。さらにストリーム管理部１１９は、ＡＰＬデータ＃１の最後尾のＦＮ＃ｎのフラグメントに終了フラグ「１」を付与し、他のフラグメントに終了フラグ「０」を付与する。
【０１４１】
ストリーム管理部１１９は、ＡＰＬデータ＃２をバッファのサイズＬごとにｍ個（ｍ：正の整数）のフラグメントに分割して、各フラグメントに共通のＳＮ＃２を付与し、また、ＦＮ＃１〜＃ｍを先頭のフラグメントから順に付与する。さらにストリーム管理部１１９は、ＡＰＬデータ＃２の最後尾のＦＮ＃ｍのフラグメントに終了フラグ「１」を付与し、他のフラグメントに終了フラグ「０」を付与する。
【０１４２】
このように、各フラグメントには、ＳＮ、ＦＮ、及び終了フラグが付与される。このため、サーバ２のストリーム管理部２１９は、ＳＮに基づき各フラグメントの分割元のＡＰＬデータ＃１，＃２を識別子、ＦＮに基づき各フラグメントのＡＰＬデータ＃１，＃２内の位置を識別することができる。また、ストリーム管理部２１９は、終了フラグ「１」を検出することにより、ＡＰＬデータから分割された全てのフラグメントの受信を確認することができる。
【０１４３】
図１４は、ストリーム入力処理の一例を示すフローチャートである。ストリーム入力処理は、ステップＳｔ２９において実行される。なお、本例では、サーバ２のストリーム管理部２１９の処理を挙げるが、端末１のストリーム管理部１１９もストリーム管理部２１９と同様の処理を実行する。
【０１４４】
ストリーム管理部２１９は、プロキシメッセージからフラグメントを取得する（ステップＳｔ７０）。フラグメントはバッファ部２１９ａのバッファに格納される。
【０１４５】
次にストリーム管理部２１９は、フラグメントに付与されたＳＮの正常性をチェックする（ステップＳｔ７１）。例えばストリーム管理部２１９は、ＳＮに連続性がない場合、または、終了フラグ「１」が付与されたフラグメントが未受信であるのにＳＮが変化した場合、ＳＮの異常を検出する。
【０１４６】
ストリーム管理部２１９は、ＳＮが異常である場合（ステップＳｔ７２のＮｏ）、フラグメントを廃棄する（ステップＳｔ７７）。その後、ステップＳｔ７６の処理が実行される。
【０１４７】
また、ストリーム管理部２１９は、ＳＮが正常である場合（ステップＳｔ７２のＹｅｓ）、フラグメントに付与された終了フラグが「１」であるか否かを判定する（ステップＳｔ７３）。ストリーム管理部２１９は、終了フラグが「０」である場合（ステップＳｔ７３のＮｏ）、ステップＳｔ７０以降の各処理を再び実行する。
【０１４８】
また、ストリーム管理部２１９は、終了フラグが「１」である場合（ステップＳｔ７３のＹｅｓ）、共通のＡＰＬデータから分割されたパケットを復元する（ステップＳｔ７４）。このとき、ストリーム管理部２１９は、共通のＳＮが付与された各フラグメントをＦＮに従って配置することによりパケットを復元する。このため、ストリーム管理部２１９は、各フラグメントからアプリケーション間の通信プロトコルを解析する必要がない。
【０１４９】
次にストリーム管理部２１９は、送受信制御部２１４からサーバアプリケーション２ａのソケットＳＣ６にパケットを送信する（ステップＳｔ７５）。次に、ストリーム管理部２１９は、プロキシメッセージから取得していないフラグメントの有無を判定する（ステップＳｔ７６）。
【０１５０】
ストリーム管理部２１９は、未取得のフラグメントが有る場合（ステップＳｔ７６のＹｅｓ）、ステップＳｔ７０以降の各処理を再び実行する。このとき、新たに取得されるフラグメントのＳＮは、前回のＳＮから１つ増加する。
【０１５１】
また、ストリーム管理部２１９は、未取得のフラグメントが無い場合（ステップＳｔ７６のＮｏ）、処理を終了する。このようにして、ストリーム入力処理は実行される。
【０１５２】
図１５は、ＡＰＬデータの復元処理の一例を示す図である。符号Ｇａは、ストリーム管理部２１９がＡＰＬデータ＃１のフラグメントの一部のみを取得したときの動作を示し、符号Ｇｂは、ストリーム管理部２１９がＡＰＬデータ＃１の全てのフラグメントを取得したときの動作を示す。
【０１５３】
ストリーム管理部２１９は、ＡＰＬデータ＃１から分割されたＳＮ＃１の各フラグメントのうち、ＦＮ＃１〜＃３のフラグメントだけを取得しても、サーバアプリケーション２ａに送信せずに待機する。このため、サーバアプリケーション２ａは、図１の例のように不完全なＡＰＬデータ＃１を受け取ることがない。
【０１５４】
また、ストリーム管理部２１９は、ＡＰＬデータ＃１の全てのフラグメント（ＦＮ＃１〜＃ｎ）を取得すると、ＡＰＬデータ＃１の全パケットを復元してサーバアプリケーション２ａに送信する。このため、サーバアプリケーション２は、完全なＡＰＬデータ＃１を受け取ることができ、エラーの発生が抑制される。
【０１５５】
このように、ストリーム管理部２１９は、クライアントアプリケーション１ａから受信された各フラグメントのうち、共通のＳＮが付与された各フラグメントからＡＰＬデータを生成してサーバアプリケーション２ａに送信する。このため、ストリーム管理部２１９は、フラグメントからアプリケーション間の通信プロトコルを解析することなく、ＡＰＬデータを復元してサーバアプリケーション２ａに渡すことができる。
【０１５６】
したがって、サーバアプリケーション２ａにＡＰＬデータの一部が他の部分から遅延して渡されることが抑制されるため、エラーの発生を抑制することができる。よって、アプリケーション間の通信の安定性が向上する。
【０１５７】
また、ストリーム管理部２１９は、ＡＰＬデータの最後尾のフラグメントを、そのフラグメントに付与された終了フラグ「１」に基づいて検出し、検出後にＡＰＬデータを生成してサーバアプリケーション２ａに送信する。このため、ストリーム管理部２１９は、終了フラグ「１」を検出することにより、ＡＰＬデータから分割された全てのフラグメントの受信を確認することができる。
【０１５８】
図１６は、ＤＴＮアプリケーション１ａ，１ｂを介したアプリケーション間通信の実施例を示す図である。図１６において、図１と共通する構成には同一の符号を付し、その説明は省略する。なお、ＤＴＮアプリケーション１ａは、図４に示された端末１の機能のうち、アプリケーション機能部１００以外の機能を含み、ＤＴＮアプリケーション１ｂは、図４に示されたサーバ２の機能のうち、アプリケーション機能部２００以外の機能を含む。
【０１５９】
端末１のＤＴＮアプリケーション１ｂは、ＡＰＬデータ＃１から分割されたＰＫＴ＃１，＃２をＦＮ＃１〜＃６のフラグメントに分割する。ＦＮ＃１〜＃６のフラグメントには、ＡＰＬデータ＃１に応じた共通のＳＮ＃１が付与される。
【０１６０】
ＤＴＮアプリケーション１ｂは、ＦＮ＃１〜＃６のフラグメントをバンドル＃１〜＃６にそれぞれ収容してサーバ２に送信する。なお、本例では、一例として、１つのフラグメントが１つのバンドルに収容されるが、１つのバンドルに収容されるフラグメントの個数はバンドル及びフラグメントの各サイズに応じて決定されるため、これに限定されない。
【０１６１】
また、ＤＴＮアプリケーション１ｂは、後続のＡＰＬデータ＃２をＳＮ＃２のフラグメント（ＦＮ＃１〜＃４）に分割してバンドル＃７〜＃１０に収容してサーバ２に送信する。
【０１６２】
サーバ２のＤＴＮアプリケーション２ｂは、バンドル＃１〜＃３を受信した後にリンクが切断され、その再接続後にバンドル＃４〜＃１０を受信する。このため、ＳＮ＃１の各フラグメントのうち、ＦＮ＃４〜＃６のフラグメントは、ＦＮ＃１〜＃３のフラグメントに対してサーバ２への到着が遅延する。
【０１６３】
しかし、ＤＴＮアプリケーション２ｂは、先行のＦＮ＃１〜＃３のフラグメントだけを取得しても、ＰＫＴ＃１を復元してサーバアプリケーション２ａに送信することはない。ＤＴＮアプリケーション２ｂは、残りのＦＮ＃４〜＃６のフラグメントを取得したことを契機として、ＡＰＬデータ＃１のＰＫＴ＃１，＃２を復元しサーバアプリケーション２ａに送信する。
【０１６４】
このため、本実施例によると、完全なＡＰＬデータ＃１がサーバアプリケーション２ａに渡されるため、不完全なＡＰＬデータ＃１の受信によりタイムアウトが発生してエラーが検出されることが抑制される。また、本例では、クライアントアプリケーション１ａからサーバアプリケーション２ａへＡＰＬデータ＃１，＃２を送信する場合を挙げたが、サーバアプリケーション２ａからクライアントアプリケーション１ａへＡＰＬデータを送信する場合、ＤＴＮアプリケーション１ｂ，２ｂの処理が逆転するだけで、その内容は上記と同様である。
【０１６５】
なお、上記の処理機能は、コンピュータによって実現することができる。その場合、処理装置が有すべき機能の処理内容を記述したプログラムが提供される。そのプログラムをコンピュータで実行することにより、上記処理機能がコンピュータ上で実現される。処理内容を記述したプログラムは、コンピュータで読み取り可能な記録媒体（ただし、搬送波は除く）に記録しておくことができる。
【０１６６】
プログラムを流通させる場合には、例えば、そのプログラムが記録されたＤＶＤ（Digital Versatile Disc）、ＣＤ−ＲＯＭ（Compact Disc Read Only Memory）などの可搬型記録媒体の形態で販売される。また、プログラムをサーバコンピュータの記憶装置に格納しておき、ネットワークを介して、サーバコンピュータから他のコンピュータにそのプログラムを転送することもできる。
【０１６７】
プログラムを実行するコンピュータは、例えば、可搬型記録媒体に記録されたプログラムもしくはサーバコンピュータから転送されたプログラムを、自己の記憶装置に格納する。そして、コンピュータは、自己の記憶装置からプログラムを読み取り、プログラムに従った処理を実行する。なお、コンピュータは、可搬型記録媒体から直接プログラムを読み取り、そのプログラムに従った処理を実行することもできる。また、コンピュータは、サーバコンピュータからプログラムが転送されるごとに、逐次、受け取ったプログラムに従った処理を実行することもできる。
【０１６８】
上述した実施形態は本発明の好適な実施の例である。但し、これに限定されるものではなく、本発明の要旨を逸脱しない範囲内において種々変形して実施可能である。
【０１６９】
なお、以上の説明に関して更に以下の付記を開示する。
（付記１）  第１アプリケーションから第２アプリケーションに送信されたデータのうち、前記第１アプリケーションのソケットがオープンしてからクローズするまでの間に送信されたデータを複数のデータ片に分割して前記複数のデータ片の各々に共通の識別番号を付与するデータ処理部と、
前記複数のデータ片を前記第２アプリケーションに送信する送信部とを有することを特徴とする通信装置。
（付記２）  前記データ処理部は、前記複数のデータ片のうち、前記ソケットがオープンしてからクローズするまでの間に送信されたデータの最後尾のデータ片に、前記最後尾を示す情報を付与することを特徴とする付記１に記載の通信装置。
（付記３）  前記データ処理部は、前記第１アプリケーションから送信されたデータをバッファに格納し、前記バッファのサイズに従って前記複数のデータ片に分割することを特徴とする付記１または２に記載の通信装置。
（付記４）  前記データ処理部は、前記複数のデータ片の各々に、前記ソケットがオープンしてからクローズするまでの間に送信されたデータ内の位置に応じた位置情報を付与することを特徴とする付記１乃至３の何れかに記載の通信装置。
（付記５）  第１アプリケーションから第２アプリケーションに送信された複数のデータ片を受信する受信部と、
前記複数のデータ片のうち、共通の識別番号が付与された各データ片から前記第１アプリケーションのデータを生成して前記第２アプリケーションに送信するデータ処理部とを有することを特徴とする通信装置。
（付記６）  前記データ処理部は、前記複数のデータ片のうち、前記データの最後尾のデータ片を、前記最後尾のデータ片に付与された情報に基づいて検出し、検出後に前記データを生成して前記第２アプリケーションに送信することを特徴とする付記５に記載の通信装置。
（付記７）  第１アプリケーションから第２アプリケーションに送信されたデータのうち、前記第１アプリケーションのソケットがオープンしてからクローズするまでの間に送信されたデータを複数のデータ片に分割して前記複数のデータ片の各々に共通の識別番号を付与し、
前記複数のデータ片を前記第２アプリケーションに送信する、処理を、コンピュータに実行させることを特徴とする通信プログラム。
（付記８）  前記複数のデータ片のうち、前記ソケットがオープンしてからクローズするまでの間に送信されたデータの最後尾のデータ片に、前記最後尾を示す情報を付与する処理を、前記コンピュータに実行させることを特徴とする付記７に記載の通信プログラム。
（付記９）  前記複数のデータ片に分割する処理は、前記第１アプリケーションから送信されたデータをバッファに格納し、前記バッファのサイズに従って前記複数のデータ片に分割することを特徴とする付記７または８に記載の通信プログラム。
（付記１０）  前記複数のデータ片の各々に、前記ソケットがオープンしてからクローズするまでの間に送信されたデータ内の位置に応じた位置情報を付与する処理を、前記コンピュータに実行させることを特徴とする付記７乃至９の何れかに記載の通信プログラム。
（付記１１）  第１アプリケーションから第２アプリケーションに送信された複数のデータ片を受信し、
前記複数のデータ片のうち、共通の識別番号が付与された各データ片から前記第１アプリケーションのデータを生成して前記第２アプリケーションに送信する、処理を、コンピュータに実行させることを特徴とする通信プログラム。
（付記１２）  前記第１アプリケーションのデータを送信する処理は、前記複数のデータ片のうち、前記データの最後尾のデータ片を、前記最後尾のデータ片に付与された情報に基づいて検出し、検出後に前記データを生成して前記第２アプリケーションに送信することを特徴とする付記１１に記載の通信プログラム。
（付記１３）  第１アプリケーションから第２アプリケーションに送信されたデータのうち、前記第１アプリケーションのソケットがオープンしてからクローズするまでの間に送信されたデータを複数のデータ片に分割して前記複数のデータ片の各々に共通の識別番号を付与する工程と、
前記複数のデータ片を前記第２アプリケーションに送信する工程とを、コンピュータが実行することを特徴とする通信方法。
（付記１４）  前記複数のデータ片のうち、前記ソケットがオープンしてからクローズするまでの間に送信されたデータの最後尾のデータ片に、前記最後尾を示す情報を付与する工程を、前記コンピュータが実行することを特徴とする付記１３に記載の通信方法。
（付記１５）  前記第１アプリケーションから送信されたデータをバッファに格納し、前記バッファのサイズに従って前記複数のデータ片に分割することを特徴とする付記１４または１４に記載の通信方法。
（付記１６）  前記複数のデータ片の各々に、前記ソケットがオープンしてからクローズするまでの間に送信されたデータ内の位置に応じた位置情報を付与する工程を、前記コンピュータが実行することを特徴とする付記１３乃至１５の何れかに記載の通信方法。
（付記１７）  第１アプリケーションから第２アプリケーションに送信された複数のデータ片を受信する工程と、
前記複数のデータ片のうち、共通の識別番号が付与された各データ片から前記第１アプリケーションのデータを生成して前記第２アプリケーションに送信する工程とを、コンピュータが実行することを特徴とする通信方法。
（付記１８）  前記第１アプリケーションのデータを送信する工程は、前記複数のデータ片のうち、前記データの最後尾のデータ片を、前記最後尾のデータ片に付与された情報に基づいて検出し、検出後に前記データを生成して前記第２アプリケーションに送信することを特徴とする付記１７に記載の通信方法。
（付記１９）  第１通信装置と第２通信装置を含み、
前記第１通信装置は、
第１アプリケーションから第２アプリケーションに送信されたデータのうち、前記第１アプリケーションのソケットがオープンしてからクローズするまでの間に送信されたデータを複数のデータ片に分割して前記複数のデータ片の各々に共通の識別番号を付与する第１データ処理部と、
前記複数のデータ片を前記第２通信装置に送信する送信部とを有し、
前記第２通信装置は、
前記複数のデータ片を前記第１通信装置から受信する受信部と、
前記複数のデータ片のうち、前記共通の識別番号が付与された各データ片から前記第１アプリケーションのデータを生成して前記第２アプリケーションに送信する第２データ処理部とを有することを特徴とする通信システム。
【符号の説明】
【０１７０】
１      端末
１ａ      クライアントアプリケーション
２      サーバ
２ａ      サーバアプリケーション
１１１，２１１    プロキシ制御部
１１９，２１９    ストリーム管理部
ＳＣ１〜ＳＣ６    ソケット
【図１】
2020028074.tif 000003
【図２】
2020028074.tif 000004
【図３】
2020028074.tif 000005
【図４】
2020028074.tif 000006
【図５】
2020028074.tif 000007
【図６】
2020028074.tif 000008
【図７】
2020028074.tif 000009
【図８】
2020028074.tif 000010
【図９】
2020028074.tif 000011
【図１０】
2020028074.tif 000012
【図１１】
2020028074.tif 000013
【図１２】
2020028074.tif 000014
【図１３】
2020028074.tif 000015
【図１４】
2020028074.tif 000016
【図１５】
2020028074.tif 000017
【図１６】
2020028074.tif 000018