図1は、端末の一例を示す構成図である。端末1としては、例えば、スマートフォンやパーソナルコンピュータなどの通信装置が挙げられるが、これに限定されない。
端末1は、CPU(Central Processing Unit)10、ROM(Read Only Memory)11、RAM(Random Access Memory)12、HDD(Hard Disk Drive)やメモリなどの記憶部13、無線LAN(Local Area Network)モジュール14、入力部15、及び表示部16を有する。CPU10は、互いに信号の入出力ができるように、ROM11、RAM12、記憶部13、無線LANモジュール14、入力部15、及び表示部16と、バス19を介して接続されている。
ROM11は、CPU10を駆動するプログラムが格納されている。ROM11内のプログラムには、実施例の通信方法を実行する通信プログラムが含まれる。
RAM12は、CPU10のワーキングメモリとして機能する。記憶部13には、プログラムの実行に用いられる各種の情報が記憶されている。無線LANモジュール14は、例えば、アクセス系ネットワークに接続されたAPとリンクアップすることによりインターネット上のサーバと通信する。無線LANモジュール14は、複数の通信回線によりAPとリンクアップすることが可能である。
入力部15は、端末1に情報を入力する手段である。入力部15としては、例えばキーボード、マウス、及びタッチパネルなどが挙げられる。入力部15は、入力された情報を、バス19を介しCPU10に出力する。
表示部16は、端末1の情報を出力する手段である。表示部16としては、例えばディスプレイ、タッチパネル、及びプリンタなどが挙げられる。表示部16は、CPU10からバス19を介して情報を取得して表示する。表示部16には、後述するように端末1のクライアントアプリケーションの通信の状況及び結果が表示される。
CPU10は、ROM11からプログラムを読み込むと、通信方法を実行するための各種の機能が形成される。CPU10は、プログラムを実行するコンピュータの一例である。なお、端末1の機能構成については後述する。
図2は、サーバ2の一例を示す構成図である。サーバ2は、例えばインターネットに接続され、端末1と通信することにより所定のサービスを提供する通信装置である。
サーバ2は、CPU20、ROM21、RAM22、HDD23、及び通信ポート24を有する。CPU20は、互いに信号の入出力ができるように、ROM21、RAM22、HDD23、及び通信ポート24と、バス29を介して接続されている。
ROM21は、CPU20を駆動するプログラムが格納されている。RAM22は、CPU20のワーキングメモリとして機能する。通信ポート24は、例えばNIC(Network Interface Card)であり、インターネットを介し端末1と通信する。
CPU20は、ROM21からプログラムを読み込むと、各種の機能が形成される。
図3は、端末1及びサーバ2の各機能構成の一例を示す構成図である。端末1及びサーバ2は、ネットワークNWを介して接続されている。
端末1は、アプリケーション機能部100と、プロキシプロトコル機能部110と、バンドル制御部120と、状態通知部121と、バンドルバッファ122と、経路テーブル(経路TBL)123とを有する。
アプリケーション機能部100は、クライアントアプリケーション(APLc)101と、TCP(Transmission Control Protocol)処理部102とを有する。プロキシプロトコル機能部110は、プロキシ制御部111と、コネクション監視部112と、アドレス変換部113と、送受信制御部114と、応答制御部115と、コネクションリスト116と、初期設定ファイル117と、フィルタテーブル(フィルタTBL)118とを有する。
クライアントアプリケーション101、TCP処理部102、プロキシ制御部111、コネクション監視部112、アドレス変換部113、送受信制御部114、応答制御部115、バンドル制御部120、及び状態通知部121は、端末1のCPU10に形成される機能である。また、コネクションリスト116と、初期設定ファイル117と、フィルタTBL118、バンドルバッファ122、及び経路TBL123は、記憶部13に記憶されている。
なお、図3に示された端末1の機能構成のうち、アプリケーション機能部100を除く部分は、実施例の通信装置及び通信プログラムとして機能し、クライアントアプリケーション101から通信先への通信を中継する。実施例の通信装置及び通信プログラムは、図3に示されるように端末1の内部に設けられてもよいが、端末1とは別の装置に設けられてもよい。
一方、サーバ2は、アプリケーション機能部200と、プロキシプロトコル機能部210と、バンドル制御部220と、状態通知部221と、バンドルバッファ222と、経路TBL223とを有する。
アプリケーション機能部200は、サーバアプリケーション(APLs)201と、TCP処理部202とを有する。プロキシプロトコル機能部210は、プロキシ制御部211と、コネクション監視部212と、アドレス変換部213と、送受信制御部214と、応答制御部215と、コネクションリスト216と、初期設定ファイル217と、フィルタTBL218とを有する。
サーバアプリケーション201、TCP処理部202、プロキシ制御部211、コネクション監視部212、アドレス変換部213、送受信制御部214、応答制御部215、バンドル制御部220、及び状態通知部221は、サーバ2のCPU20に形成される機能である。また、コネクションリスト216と、初期設定ファイル217と、フィルタTBL218、バンドルバッファ222、及び経路TBL223は、HDD23に記憶されている。
サーバアプリケーション201とクライアントアプリケーション101は、TCP処理部102,202により通信することにより連携して所定の機能を提供する。サーバアプリケーション201とクライアントアプリケーション101の機能としては、例えばファイル転送機能やウェブブラウザ機能などが挙げられるが限定はない。なお、クライアントアプリケーション101は、端末1で動作するアプリケーションの一例である。
TCP処理部102,202は、例えばOS(Operating System)のドライバなどにより提供されるTCP/IP(Internet Protocol)の通信機能を備える。端末1のTCP処理部102は、無線LANモジュール14を制御してパケットの送受信を行い、サーバ2のTCP処理部202は、通信ポート24を制御してパケットの送受信を行う。なお、TCP/IPは第1のプロトコルの一例である。
サーバアプリケーション201とクライアントアプリケーション101は、ネットワークNWを介し、直接的にTCP/IPに基づく通信を行う。しかし、通信が断続的となる環境においては、バンドル制御部120,220が、TCP/IPに基づく通信に代えて、DTNのバンドルプロトコルに基づく通信を行う。
バンドル制御部120は、クライアントアプリケーション101から通信先への通信を、その通信先とのコネクションの状態に応じて、TCP/IPに基づく通信からDTNのバンドルプロトコルに基づく通信に切り替えて行う。このとき、コネクション監視部112は、通信先とのコネクションを状態を監視し、コネクションの状態に応じてアドレス変換部113を制御する。
これにより、コネクション監視部112は、切り替え処理部の一例として、クライアントアプリケーション101の通信先との通信をTCP/IPによる通信からDTNのバンドルプロトコルによる通信に切り替える。したがって、クライアントアプリケーション101の通信が、TCP処理部102によるTCP/IPに基づく通信からバンドル制御部120によるバンドルプロトコルに基づく通信に切り替えられる。
また、バンドル制御部220は、サーバアプリケーション201から通信先への通信を、その通信先とのコネクションの状態に応じて、TCP/IPに基づく通信からDTNのバンドルプロトコルに基づく通信に切り替えて行う。このとき、コネクション監視部212は、通信先とのコネクションを状態を監視し、コネクションの状態に応じて、アドレス変換部213を制御する。
これにより、コネクション監視部212は、サーバアプリケーション201の通信先との通信をTCP/IPによる通信からDTNのバンドルプロトコルによる通信に切り替える。したがって、サーバアプリケーション201の通信が、TCP処理部202によるTCP/IPに基づく通信からバンドル制御部220によるバンドルプロトコルに基づく通信に切り替えられる。
バンドル制御部120,220は、例えば、RFC5050の規定に従い、バンドルプロトコルに基づく通信を行う。バンドル制御部120,220は、サーバアプリケーション201とクライアントアプリケーション101の送信対象データを、バンドルと呼ばれるデータメッセージのペイロード部分に収容して送信する。なお、バンドル制御部120は、バンドルプロトコルにより通信先と通信する通信部の一例である。
図4には、バンドルのフォーマットが示されている。バンドルは、プライマリバンドルブロック及びバンドルペイロードブロックを含む。プライマリバンドルブロックには、送信元や宛先に関する情報、及び、バンドルの削除までの時間を示すライフタイム(「Life time」)などが含まれる。バンドルペイロードブロックには、データを収容するペイロード(「Bundle Payload」)が含まれる。なお、バンドル内の各項目についてはRFC5050に規定されている。
バンドル制御部120,220は、バンドルを送信するとき、経路TBL123,223を参照して、バンドルプロトコルにおける宛先を示すEID(Endpoint ID)に対応するTCP/IP上の宛先IPアドレス及びTCPポート番号(以下、「ポート番号」と表記)を取得する。バンドル制御部120,220は、その宛先とのコネクション、つまり端末1とサーバ2の間のコネクションが切断されているとき、バンドルバッファ122,222にバンドルを格納しておき、コネクションが再接続されたとき、バンドルバッファ122,222からバンドルを読み出して送信する。これにより、DTNに基づく通信が行われる。なお、バンドルの送受信は、端末1の場合、バンドル制御部120が無線LANモジュール14を制御して行い、サーバ2の場合、バンドル制御部220が通信ポート24を制御して行う。
図5には、バンドルバッファ122,222の一例が示されている。バンドルバッファ122,222はバンドルの格納領域である。バンドルは、バンドルを識別するバンドルIDとともにバンドルバッファ122,222に格納される。なお、バンドル制御部120,220は、バンドルの送信時だけでなく、バンドルの受信時もバンドルをバンドルバッファ122,222に格納する。
再び図3を参照すると、プロキシプロトコル機能部110,210は、クライアントアプリケーション101及びサーバアプリケーション201の通信を、TCPのソケット通信からバンドルプロトコルの通信に変換する。このとき、プロキシプロトコル機能部110,210は、バンドル制御部120,220に対しバンドルAPI(Application Programing Interface)により設定及び制御を行うことにより、一般的なアプリケーションでもDTNを利用可能とする。以下にプロキシプロトコル機能部110,210の詳細を説明する。
アドレス変換部113,213は、クライアントアプリケーション101及びサーバアプリケーション201の通信の宛先を送受信制御部114,214の宛先に変換する。例えば端末1において、アドレス変換部113は、サーバ2を宛先とするパケットの宛先IPアドレス及びポート番号を、送受信部に設定されたTCPソケット(以下、「ソケット」と表記)の宛先IPアドレス及びポート番号に変換する。
このため、プロキシプロトコル機能部110,210は、クライアントアプリケーション101及びサーバアプリケーション201から通信先に送信されるパケットのデータを受信することができる。なお、アドレス変換部113,213は、例えば、OSとしてWindows(登録商標)が使用される場合、WFP(Windows Filtering Platform)により実現され、OSとしてLinux(登録商標)が使用される場合、「iptables」により実現される。
送受信制御部114,214は、クライアントアプリケーション101及びサーバアプリケーション201のTCPのソケット通信を終端する。送受信制御部114,214は、装置内のローカルなループバックコネクションを確立する。
例えば、端末1の送受信制御部114は、クライアントアプリケーション101からのソケットの接続を監視し、プロキシ制御部111からの指示に従い、サーバアプリケーション201に対するソケットの確立と、指示されたソケットへのデータの送信を行う。
送受信制御部114,214は、クライアントアプリケーション101及びサーバアプリケーション201からソケット経由で受信したパケットを、ユーザやオペレータが設定したポリシー(アルゴリズムや処理方針)に従い指定サイズで分割してプロキシ制御部111,211に出力する。分割のサイズは、例えば、ソケットのオープンからクローズまでに受信したデータサイズ、パケットの受信サイズ、または所定値とする。
プロキシ制御部111,211は、送受信制御部114,214で受信したパケットのデータを、プロキシメッセージのペイロードに収容して、バンドルAPIによりバンドル制御部120,220に出力する。これにより、プロキシ制御部111,211からバンドル制御部120,220に対してバンドルの送信が要求される。
プロキシ制御部111,211は、プロキシメッセージを、宛先に応じたコネクション番号により管理する。プロキシ制御部111,211は、送受信制御部114,214によりソケットがオープンされるたびに新規のコネクション番号をコネクションリスト116,216に登録する。
図5には、コネクションリスト116,216の一例が示されている。コネクションリスト116,216には、コネクション番号、ソケットチャネルID、及び宛先EIDが対応付けられて登録されている。ソケットチャネルIDは、送受信制御部114,214のソケットの識別子である。
プロキシ制御部111,211は、パケットの受信元のソケットのソケットチャネルIDに応じたコネクション番号をプロキシメッセージに付与してバンドル制御部120,220に出力する。また、プロキシ制御部111,211は、該当する宛先EIDへのバンドルの送信をバンドル制御部120,220に要求する。したがって、端末1のコネクションリスト116の宛先EIDには、サーバ2のEIDが登録され、サーバ2のコネクションリスト216の宛先EIDには、端末1のEIDが登録されている。なお、プロキシ制御部111,211は、初期設定ファイル117,217を読み出すことにより、自装置のEIDや通信先のEIDなどの通信に必要な情報を取得する。
また、プロキシ制御部111,211は、バンドル制御部120,220からプロキシメッセージを受信する。プロキシ制御部111,211は、受信したプロキシメッセージのコネクション番号がコネクションリスト116,216に未登録である場合、送受信制御部114,214に新規のソケットのオープンを指示し、そのソケットによる通信を開始する。
また、プロキシ制御部111,211は、受信したプロキシメッセージにデータが収容されていない場合、そのコネクション番号に対応するソケットチャネルIDをコネクションリスト116,216から検索する。プロキシ制御部111,211は、検索したソケットチャネルIDのソケットの削除を送受信制御部114,214に指示する。
このように、ソケットとEIDは、コネクションリスト116により対応付けられて管理される。このため、ソケットを用いるTCP/IPの通信をバンドルプロトコルに基づき行うことが可能となる。
また、バンドル制御部120,220は、プロキシ制御部111,211からのバンドルの送信要求に応じてバンドルを送信する。したがって、バンドル制御部120,220は、クライアントアプリケーション101及びサーバアプリケーション201から通信先への通信を途絶耐性ネットワークのプロトコルに基づいて行うことができる。
応答制御部115,215は、クライアントアプリケーション101及びサーバアプリケーション201からの通信が応答を要する場合、その応答を生成してクライアントアプリケーション101及びサーバアプリケーション201に出力する。このため、コネクションの切断により通信先との通信が途絶した場合でも、クライアントアプリケーション101及びサーバアプリケーション201は、通信の途絶を知ることなく動作を行う。したがって、コネクションの再接続後に通信のやり直しを必要としない。
例えば、端末1において、プロキシ制御部111がクライアントアプリケーション101の通信を行った場合、応答制御部115はその通信に対する応答をクライアントアプリケーション101に出力する。クライアントアプリケーション101からサーバアプリケーション201に対してファイルを分割して転送の場合、端末1の応答制御部115は、サーバアプリケーション201に代わり、応答として、クライアントアプリケーション101に対し次のファイルデータの送信を促す。
つまり、応答制御部115,215は、クライアントアプリケーション101及びサーバアプリケーション201に通信の完了を通知する。このため、クライアントアプリケーション101及びサーバアプリケーション201は、バンドル制御部120,220のバンドルプロトコルに基づく通信の結果を知らず、通信が成功したと認識する。
そこで、状態通知部121,221は、通信の状態及び結果に関する通信情報を、例えば画面へのポップアップ表示やログによりユーザに通知する。より具体的には、端末1の状態通知部121は表示部16に通信情報を出力し、または通信情報が記録されたログファイルを記憶部13に書き込む。また、サーバ2の状態通知部221は、通信情報が記録されたログファイルをHDD23に書き込む。
プロキシ制御部111,211は、通信の状態に応じた通知を状態通知部121,221に指示する。この通知としては、プロキシ制御部111,211からバンドルの送信の要求を受け付けたことを通知する受付通知や、通信先とのコネクションの切断のためにバンドルの送信が保留されていることを通知する保留通知が含まれる。
また、プロキシ制御部111,211は、バンドル制御部120,220からの各種のレポートに基づいた通知を状態通知部121,221に指示する。この通知としては、削除レポートに基づく転送失敗通知、配信レポートに基づく転送完了通知、及び回送レポートに基づく転送通知が含まれる。プロキシ制御部111,211は、各レポートにより、バンドルプロトコルに基づく通信の成否を判定する。
バンドル制御部120,220は、バンドルのライフタイム(図4参照)が満了した場合、またはバンドルを送信した場合、バンドルに削除レポートを収容して、バンドルの送信元に送信する。また、バンドル制御部120,220は、バンドルの受信が完了した場合、バンドルに配信レポートまたは回送レポートを収容して、バンドルの送信元に送信する。なお、レポートについては、例を挙げて後述する。
状態通知部121,221は、プロキシ制御部111,211が通信を失敗と判定した場合、ユーザに通信の失敗を通知する。状態通知部121は、応答制御部115により通信先への通信の完了がクライアントアプリケーション101に通知済みであり、かつ、プロキシ制御部111の判定の結果としてDTNのバンドルプロトコルによる通信が失敗した通信について、通信の失敗を端末1に通知する。このとき、通信の失敗は、後述するように端末1の表示部16のポップアップ表示または記憶部13に記憶されるログとしてユーザに通知される。また、状態通知部221も、状態通知部121と同様に、サーバアプリケーション201に通知済みであり、かつ、プロキシ制御部211の判定の結果としてDTNのバンドルプロトコルによる通信が失敗した通信について、通信の失敗を通知する。
このため、ユーザは、バンドルプロトコルに基づく通信が行われ、クライアントアプリケーション101及びサーバアプリケーション201上では通信が成功したように認識した場合でも、状態通知部121,221の通知により通信の失敗を知ることができる。したがって、ユーザは通信結果を容易に把握することができる。なお、状態通知部121は失敗通知部の一例である。
コネクション監視部112,212は、バンドル制御部120,220のコネクションの状態を監視する。コネクション監視部112,212は、コネクションが切断された状態ではコネクションの接続を行い、接続に成功した場合、コネクション監視部112,212にバンドルバッファ122,222内の送信対象のバンドルの送信を指示する。
また、コネクション監視部112,212は、コネクションの状態に応じて、アドレス変換部113,213に対し変換情報の設定及び削除を行う。コネクション監視部112,212は、フィルタTBL118,218に基づき変換情報を設定する。
図5には、フィルタTBL118,218の一例が示されている。フィルタTBL118,218には、パケットのフィルタ条件、変換情報、及び設定状態が対応付けられて登録されている。フィルタ条件には、アドレス変換の対象のパケットの送信元及び宛先のIPアドレスやポート番号などが指定されている。変換情報には、フィルタ条件に合致するパケットの書き換え対象の部分及び書き換え後の値を示す。設定状態は、フィルタ条件及び変換情報の設定の有効または無効を示す。
コネクション監視部112,212は、コネクションの状態に応じて、アドレス変換部113,213の変換情報の設定または削除を行う。このため、クライアントアプリケーション101及びサーバアプリケーション201の通信に自動的にバンドルプロトコルが適用される。
このように、コネクション監視部112,212は、通信先とのコネクションの状態を検出し、コネクションの状態に応じて、クライアントアプリケーション101及びサーバアプリケーション201の通信に対するバンドルプロトコルの適用の可否を決定する。このため、バンドルプロトコルは、コネクションの状態に応じてクライアントアプリケーション101及びサーバアプリケーション201の通信に使用される。
クライアントアプリケーション101及びサーバアプリケーション201は、通信が断続的となる場合、上記の構成によりTCP/IPをプロトコル変換することにより通信を行う。
図6にはプロトコル変換の一例が示されている。図6には、図3に示された構成のうち、端末1のクライアントアプリケーション101、プロキシ制御部111、及びバンドル制御部120と、サーバ2のサーバアプリケーション201、プロキシ制御部211、及びバンドル制御部220が示されている。
クライアントアプリケーション101及びサーバアプリケーション201の間では、IPアドレス及びポート番号によるTCP/IPの通信が行われる。クライアントアプリケーション101には任意のソケットSC1がオープンされ、サーバアプリケーション201には固定のソケットSC6がオープンされる。
プロキシ制御部111,211の間では、コネクション番号によるプロキシ間プロトコルによる通信が行われる。プロキシ制御部111には、送受信制御部114によりサーバアプリケーション201のソケットSC6に1対1で対応するソケットSC2がオープンされる。プロキシ制御部211には、送受信制御部214によりクライアントアプリケーション101のソケットSC1に1対1で対応するソケットSC5がオープンされる。
クライアントアプリケーション101とプロキシ制御部111の間ではソケットSC1,SC2による通信が行われ、サーバアプリケーション201とプロキシ制御部211の間ではソケットSC5,SC6による通信が行われる。このため、送受信制御部114,214は、クライアントアプリケーション101及びサーバアプリケーション201の各ソケットSC1,SC6に合わせてソケットSC2,SC5のオープン及びクローズを行いい、そのソケットSC2,SC5によるデータ送受信を行う。
バンドル制御部120,220の間では、EIDによるバンドルプロトコルの通信が行われる。バンドル制御部120,220には、ソケットSC3,SC4がそれぞれオープンされる。
クライアントアプリケーション101からサーバアプリケーション201への通信が行われる場合、端末1において、プロキシ制御部111は、初期設定ファイル117に基づきパケットのポート番号を宛先EIDに変換し、バンドル制御部120は、経路TBL123に基づき宛先EIDを宛先IPアドレス及びポート番号に変換する。
また、サーバ2において、バンドル制御部220は、宛先EIDを、後述する出力ポインタに変換し、プロキシ制御部211は、出力ポインタを宛先IPアドレス及びポート番号に変換する。このようにして、クライアントアプリケーション101からサーバアプリケーション201への通信は行われる。以下に通信において実行される処理について述べる。
図7は、クライアントアプリケーション101のデータ送信処理の一例を示すフローチャートである。端末1のプロキシ制御部111は、符号G1で示されるような初期設定ファイル117を読み出す(ステップSt1)。初期設定ファイル117には、「TCP_PROXY_CLIENT」として、端末1のEID「dtn://node1」と、通信先のサーバアプリケーション201宛てのパケットをTCPで受信するためのポート番号「8001」が書き込まれている。
次に、プロキシ制御部111は、クライアントアプリケーション101からサーバアプリケーション201宛のパケットを受信するためのソケットを送受信制御部114に生成する(ステップSt2)。ソケットには、上記のポート番号「8001」、またはループバックIPアドレス「127.0.0.1」が設定される。クライアントアプリケーション101は、サーバアプリケーション201のソケットに代えて、送受信制御部114が生成したソケットにパケットを送信する。このとき、パケットの宛先IPアドレス及びポート番号は、所定の設定またはアドレス変換部113により変換される。
次に、送受信制御部114は、ソケットでのパケットの受信の有無を判定する(ステップSt3)。送受信制御部114は、パケットが受信されていない場合(ステップSt3のNo)、再度、ステップSt3の判定処理を実行する。
プロキシ制御部111は、パケットが受信された場合(ステップSt3のYes)、パケットの送信元ポート番号が新規であるか否かを判定する(ステップSt4)。つまり、プロキシ制御部111は、クライアントアプリケーション101のポート番号が変更され、新たなチャネルが確立されたか否かを判定する。なお、送受信制御部114は、ソケットでパケットが受信されると、クライアントアプリケーション101からの通信の完了を検出し、受信したパケットのデータをメモリなどを介してプロキシ制御部111に出力する。
プロキシ制御部111は、送信元ポート番号が新規である場合(ステップSt4のYes)、コネクションリスト116に新たなコネクション番号と、そのコネクション番号に対応するソケットチャネルID及び宛先EIDを登録する(ステップSt9)。また、プロキシ制御部111は、送信元ポート番号が新規ではない場合(ステップSt4のNo)、ステップSt9の処理を実行しない。
次に、プロキシ制御部111は、符号G2で示されるようなプロキシメッセージを生成する(ステップSt5)。プロキシメッセージには、コネクション番号及びペイロードが含まれる。プロキシ制御部111は、ペイロードにパケットのデータを収容し、コネクションリスト116から検索したコネクション番号を付与することにより、プロキシメッセージを生成する。プロキシメッセージは、バンドルAPIによりバンドル制御部120に出力される。
次に、応答制御部115は、送信対象のパケットに対する応答の要否を判定する(ステップSt6)。応答制御部115は、TCPのACKではなく、アプリケーションレベルでの通信の継続に必要な応答の有無を判定する。
応答制御部115は、応答が必要である場合(ステップSt6のYes)、所定のアルゴリズムに基づき、サーバアプリケーション201の代わりに応答データを生成してクライアントアプリケーション101に送信する(ステップSt7)。つまり、応答制御部115,215は、クライアントアプリケーション101及びサーバアプリケーション201に通信の完了を通知する。このため、上述したように、クライアントアプリケーション101は、バンドルプロトコルの通信が失敗しても、通信が成功したと認識する。また、応答制御部115は、応答が不要である場合(ステップSt6のNo)、応答データを生成しない。
次に、プロキシ制御部111は、バンドルAPIによりバンドル制御部120にバンドルの送信を要求する(ステップSt8)。バンドル制御部120は、プロキシメッセージからバンドルを生成して送信する。これにより、バンドル制御部120,220は、クライアントアプリケーション101及びサーバアプリケーション201から通信先への通信を途絶耐性ネットワークのプロトコルに基づいて行う。このようにして、クライアントアプリケーション101のデータ送信処理は実行される。
図8は、バンドルの送信処理の一例を示すフローチャートである。バンドル制御部120は、プロキシ制御部111からバンドルの送信を要求されると、経路TBL123を読み出す(ステップSt11)。次に、バンドル制御部120は、経路TBL123に基づき、宛先IPアドレス及びポート番号に対応する宛先EIDのバンドルを生成する(ステップSt12)。
次に、バンドル制御部120は、宛先EIDに応じた通信先とのコネクションが確立状態であるか否かを判定する(ステップSt14)。バンドル制御部120は、コネクションが確立状態でない場合(ステップSt14のNo)、バンドルをバンドルバッファ122に格納し(ステップSt13)、再びステップSt14の処理を実行する。
バンドル制御部120は、コネクションが確立状態である場合(ステップSt14のYes)、バンドルを送信する(ステップSt15)。このようにして、バンドルの送信処理は実行される。
図9は、バンドルの受信処理の一例を示すフローチャートである。本処理は、サーバ2において実行される。
プロキシ制御部211は、符号G3で示されるような初期設定ファイル217を読み出す(ステップSt21)。初期設定ファイル217には、「COM_EID」として、サーバ2のEID「dtn://node1」が記録され、「TCP_PROXY_REGISTRATION」として、サーバ2の受信データの出力ポインタ「data/service」が記録され、「TCP_PROXY_SERVER」として、サーバ2のIPアドレス「192.168.1.1」及びポート番号「8001」が記録されている。
次に、プロキシ制御部211は、バンドル制御部220に対して端末1のクライアントアプリケーション101からバンドルを受信できるように、バンドルAPIによりEID及び出力ポインタを登録する(ステップSt22)。このとき、プロキシ制御部211は、初期設定ファイル217の「COM_EID」及び「TCP_PROXY_REGISTRATION」でそれぞれ指定されたEID及び出力ポインタを登録する。これにより、バンドル制御部220は、バンドルを受信したとき、出力ポインタ「data/receive」の指定ディレクトリにバンドルを出力する。
次に、バンドル制御部220は、バンドルの受信の有無を判定する(ステップSt23)。バンドル制御部220は、バンドルを受信していない場合(ステップSt23のNo)、再びステップSt23の処理を実行する。また、バンドル制御部220は、バンドルを受信した場合(ステップSt23のYes)、ステップSt22で登録済みのEIDとバンドルの宛先EIDが一致するか否かを判定する(ステップSt24)。
バンドル制御部220は、登録済みのEIDとバンドルの宛先EIDが不一致である場合(ステップSt24のNo)、自装置宛てのバンドルではないため、バンドルを廃棄して処理を終了する。バンドル制御部220は、登録済みのEIDとバンドルの宛先EIDが一致する場合(ステップSt24のYes)、バンドルのペイロードからパケットのデータを取得してプロキシメッセージを生成して、出力ポインタの指定ディレクトリに出力する(ステップSt25)。
次に、プロキシ制御部211は、出力ポインタの指定ディレクトリを参照して、プロキシメッセージを取得する(ステップSt26)。次に、プロキシ制御部211は、プロキシメッセージのコネクション番号がコネクションリスト216に登録済みであるか否かを判定する(ステップSt27)。
プロキシ制御部211は、コネクション番号が未登録である場合(ステップSt27のNo)、送受信制御部214に対し、初期設定ファイル217の「TCP_PROXY_SERVER」で指定されたIPアドレス及びポート番号のソケットのオープンを指示する(ステップSt28)。また、プロキシ制御部211は、コネクション番号が登録済みである場合(ステップSt27のYes)、プロキシメッセージのペイロードにパケットのデータが収容されているか否かを判定する(ステップSt30)。
プロキシ制御部211は、パケットのデータが収容されている場合(ステップSt30のYes)、該当するソケットにデータを送信する(ステップSt29)。また、プロキシ制御部211は、パケットのデータが収容されていない場合(ステップSt30のNo)、送受信制御部214に対し、該当するソケットのクローズを指示する(ステップSt31)。このようにして、バンドルの受信処理は実行される。
このように、クライアントアプリケーション101及びサーバアプリケーション201の間では、端末1とサーバ2の間のコネクションの有無とは無関係に、アプリケーションの動作に基づきプロキシプロトコル機能部110,210によりソケットのオープン及びクローズが再現される。このため、クライアントアプリケーション101及びサーバアプリケーション201の間では、コネクションが切断されている場合でも通信の継続が可能となる。
上述したように、コネクション監視部112,212は、コネクションの状態に応じて、アドレス変換部113,213の変換情報の設定または削除を行う。このため、クライアントアプリケーション101及びサーバアプリケーション201の通信に自動的にバンドルプロトコルが適用される。
図10は、バンドルプロトコルの適用の切り替え処理の一例を示すフローチャートである。コネクション監視部112,212は、通信先とのコネクションの接続の有無を検出する(ステップSt41)。
バンドル制御部120,220は、経路TBL123,223に設定された宛先IPアドレス及びポート番号に基づき、該当する通信先とのリンクのアップ・ダウンや、キープアライブ(keep alive)機能により通信の状態を検出する。コネクション監視部112,212は、バンドル制御部120,220の検出結果を取得し、またはバンドルAPIによる制御などによりコネクションの状態を検出する。
コネクション監視部112,212は、コネクションが接続されている場合(ステップSt41のYes)、バンドルバッファ122,222に送信待ちのバンドルが格納されているか否かを判定する(ステップSt42)。コネクション監視部112,212は、格納済みのバンドルがない場合(ステップSt42のNo)、再びステップSt41の処理を実行する。
また、コネクション監視部112,212は、格納済みのバンドルがある場合(ステップSt42のYes)、フィルタTBL118,218の設定状態を参照することによりアドレス変換部113,213に対する変換情報の設定の有無を判定する(ステップSt43)。コネクション監視部112,212は、変換情報の設定がない場合(ステップSt43のNo)、処理を終了する。また、コネクション監視部112,212は、変換情報の設定が有る場合(ステップSt43のYes)、変換情報を削除する(ステップSt44)。
これにより、TCP処理部102,202から送受信制御部114,214のソケットに対するパケットの転送が停止する。したがって、クライアントアプリケーション101及びサーバアプリケーション201の間の通信に対してバンドルプロトコルの適用が停止されるため、プロキシプロトコル機能部110,210を介さない直接的なTCP/IPの通信が行われる。
一方、コネクション監視部112,212は、コネクションが切断されている場合(ステップSt41のNo)、フィルタTBL118,218の設定状態を参照することによりアドレス変換部113,213に対する変換情報の設定の有無を判定する(ステップSt45)。コネクション監視部112,212は、変換情報の設定が有る場合(ステップSt45のYes)、処理を終了する。また、コネクション監視部112,212は、変換情報の設定がない場合(ステップSt45のNo)、変換情報を設定する(ステップSt46)。
これにより、TCP処理部102,202から送受信制御部114,214のソケットに対するパケットの転送が開始される。したがって、クライアントアプリケーション101及びサーバアプリケーション201の間の通信に対してバンドルプロトコルの適用が開始されるため、プロキシプロトコル機能部110,210を介した通信が行われる。
このように、コネクション監視部112,212は、通信先とのコネクションの状態を検出し、そのコネクションの状態に応じて、クライアントアプリケーション101及びサーバアプリケーション201の間の通信に対するバンドルプロトコルの適用の可否を決定する。このため、バンドルプロトコルの適用が自動的に行われる。
なお、バンドルプロトコルが適用されていないとき、通信中にコネクションが切断されると、通信の継続が不可能となる。このため、コネクション監視部112,212は、上記の判定処理とは異なる判定処理によりバンドルプロトコルの適用の可否を決定してもよい。
例えば、コネクション監視部112,212は、物理的な通信インターフェースの識別子や通信履歴を参照することにより通信インターフェースの通信可能期間を予測し、予測結果に基づき、通信可能期間が短い通信インターフェースのコネクションを用いる場合、常時、バンドルプロトコルを適用してもよい。また、コネクション監視部112,212は、長い通信時間を要する大容量のファイルの転送を行う場合、常時、バンドルプロトコルを適用してもよい。この場合、例えば、端末1を、短時間だけ接続が可能なWi−Fi(登録商標、以下同様)のAPに接続するときでも通信を継続することができる。
もっとも、バンドルプロトコルを適用した場合、バンドルのオーバーヘッド分のデータ量がパケットのデータに加わるため、バンドルプロトコルを適用しない場合よりネットワークNWの負荷が高くなる。したがって、図10に示される処理によりバンドルプロトコルの適用の可否を決定することにより、ネットワークNWの負荷を適切に低減することができる。
バンドル制御部120は、複数の通信回線が利用できる場合、各通信回線の通信品質を測定し、測定結果に基づき選択した通信回線を介してバンドルを送信することにより、バンドル通信を最適化してもよい。
図11には、複数の通信回線によるバンドル通信の比較例及び実施例が示されている。本例では、ノードNaの端末1とノードNbのサーバ2が、2つの通信回線L1,L2を介してバンドル通信すると仮定する。
比較例において、ノードNaは、バンドルのデータDTをブロック#1〜#n(n:正の整数)に分割し、各ブロック#1〜#nを2つの通信回線L1,L2により均等に送信する。ノードNbは、2つの通信回線L1,L2を介し各ブロック#1〜#nを受信し、元のバンドルのデータDTを復元する。
しかし、例えば一方の通信回線L1の通信品質が他方の通信回線L2より低い場合、その通信回線L1で送信されるブロック#1,#3,・・・,#n−1の遅延、エラー、または損失が生ずるため、ノードNbにおけるデータDTの復元時間が増加し、スループットが低下する。
これに対し、実施例では、符号G4で示されるように、ノードNaは、データDTの先頭部分(点線枠を参照)を複数のブロック#1,#2に分割し、ブロック#1を通信回線L1経由で送信し、ブロック#2を通信回線L2経由で送信する。これにより、ノードNaは、2つの通信回線L1,L2の通信品質を測定する。
より具体的には、ノードNaは、先頭部分のブロック#1,#2の送信所要時間を計測する。送信所要時間は、例えば、ブロック#1,#2の送信時刻と、ブロック#1,#2の受信後のノードNbからの応答の到着時刻とから算出される。ノードNaは、送信所要時間に基づき各通信回線L1,L2の速度を判定する。ノードNaは、判定結果に基づき通信回線L1,L2の一方を選択する。
ノードNaは、符号G5で示されるように、通信回線L1の速度が低く(「低速」参照)、通信回線L2の速度が高い(「高速」参照)場合、残りのブロック#3〜#nを、通信回線L2を介して送信する。このため、全データ#1〜#nの送信所要時間を短縮され、スループットを向上することができる。
図12は、バンドル通信の最適化処理の一例を示すフローチャートである。本処理は、端末1において実行される。
バンドル制御部120はバンドルのデータ量(サイズ)を閾値THと比較する(ステップSt51)。バンドル制御部120は、データ量≦THの場合(ステップSt51のNo)、バンドルを送信する(ステップSt58)。これは、バンドルのサイズが小さい場合、バンドルのデータの分割後のブロック数が少ないため、通信品質の測定時間によりかえってスループットが低下するおそれがあるためである。
バンドル制御部120は、データ量>THの場合(ステップSt51のYes)、例えば無線LANモジュール14の情報から複数の通信回線でリンク中であるか否かを判定する(ステップSt52)。バンドル制御部120は、リンク中の通信回線が1つだけである場合(ステップSt52のNo)、バンドルを送信する(ステップSt58)。これは、通信回線の選択の余地がないためである。
また、バンドル制御部120は、リンク中の複数の通信回線がある場合(ステップSt52のYes)、バンドルのデータの所定の先頭部分を複数のブロックに分割する(ステップSt53)。このとき、バンドル制御部120は、少なくとも通信回線数と同数のブロックを生成する。
次に、バンドル制御部120は、複数のブロックを、各通信回線を介して送信する(ステップSt54)。なお、各通信回線により送信されるブロック数は同じであっても異なっていてもよい。
次に、バンドル制御部120は、各通信回線のブロックの送信所要時間を測定する(ステップSt55)。なお、送信所要時間は通信品質の一例である。次に、バンドル制御部120は、送信所要時間に基づき1以上の通信回線を選択する(ステップSt56)。より具体的には、バンドル制御部120は、送信所要時間の短い通信回線を優先的に選択する。
次に、バンドル制御部120は、選択した通信回線を介して残りのデータを送信する(ステップSt57)。バンドル制御部120は、1つの通信回線だけを選択した場合、残りのデータをブロックに分割することなく、送信することができる。また、バンドル制御部120は、例えば所定の基準値を満たす複数の通信回線を選択した場合、その通信回線数に基づくサイズの複数のブロックに残りのデータを分割して送信することができる。
このため、残りのデータは、高速の通信回線により短時間で送信が完了する。このようにして、バンドル通信の最適化処理は実行される。なお、本例において、バンドル制御部120は、通信品質として、送信所要時間を測定したが、これに限定されず、例えばエラーレートを測定してもよい。
このように、バンドル制御部120は、通信先との間の複数の通信回線の通信品質をそれぞれ測定し、通信品質に基づき1以上の通信回線を選択し、その選択した通信回線によりバンドル通信を行う。このため、バンドル制御部120は、バンドル通信の通信品質を向上することができる。例えば、バンドル制御部120は、低速なWi−Fiの通信回線と高速なLTE(Long Term Evolution、登録商標、以下同様)の通信回線が利用可能である場合、各通信回線の通信速度を実際に測定し、その測定結果に基づきLTEを選択することができる。
さらに、バンドル制御部120は、データの所定の先頭部分を複数のブロックに分割し、複数のブロックを各通信回線のそれぞれを介して通信先に送信することにより、複数の通信回線の通信品質をそれぞれ測定する。バンドル制御部120は、通信品質に基づき通信回線を選択し、その選択した通信回線を介してデータの他部分を通信先に送信する。このため、バンドル制御部120は、通信品質の測定用の試験データを用意する必要がなく、送信対象のバンドルのデータの先頭部分のみを用いて簡単に各通信回線の通信品質を測定することができる。
次に、状態通知部121,221の機能を説明する。
図13は、通知処理の一例を示すフローチャートである。本例では、端末1の状態通知部121の通知処理を挙げるが、サーバ2の状態通知部221も同様の通知処理を実行することが可能である。
プロキシ制御部111は、バンドル制御部120に対しバンドルの送信を要求するとき、起動後の最初の送信要求であるか否かを判定する(ステップSt61)。プロキシ制御部111は、最初のバンドルの送信要求の場合(ステップSt61のYes)、状態通知部121にデータ送信の受付通知を指示する(ステップSt62)。状態通知部121は、受付通知を表示部16にポップアップ表示させ、あるいは記憶部13にログとして残す。また、プロキシ制御部111は、最初のバンドルの送信要求ではない場合(ステップSt61のNo)、受付通知が重複しないように受付通知の指示を行わない。
次に、プロキシ制御部111は、バンドル送信保留時間を計時するタイマに基づき、データ送信の保留通知を状態通知部121に指示する(ステップSt63)。保留通知は、例えばタイマ値も基づき一定時間経過することに行われる。状態通知部121は、保留通知を表示部16にポップアップ表示させ、あるいは記憶部13にログとして残す。
プロキシ制御部111は、通信結果に応じたレポートの要求フラグをバンドルAPI経由でバンドル制御部120に出力する。バンドル制御部120は、要求フラグに応じたレポートをバンドルに含めて送信することができる。レポートとしては、例えば、データが宛先に配信されたことを示す配信レポート、データが次ノードに回送されたことを示す回送レポート、及びバンドルの削除を示す削除レポートが挙げられる。削除レポートは、バンドルが送信されずにライフタイムが満了したとき、またはバンドルの送信によりバンドルバッファ122から削除されたときに発行される。以下の処理では、各レポートに応じた通知が行われる。
プロキシ制御部111は、配信レポートの受信の有無を判定する(ステップSt64)。プロキシ制御部111は、配信レポートを受信した場合(ステップSt64のYes)、配信完了通知を状態通知部121に指示する(ステップSt68)。状態通知部121は、配信完了通知を表示部16にポップアップ表示させ、あるいは記憶部13にログとして残す。
プロキシ制御部111は、配信レポートを受信していない場合(ステップSt64のNo)、回送レポートの受信の有無を判定する(ステップSt65)。プロキシ制御部111は、回送レポートを受信した場合(ステップSt65のYes)、転送通知を状態通知部121に指示する(ステップSt69)。状態通知部121は、転送通知を表示部16にポップアップ表示させ、あるいは記憶部13にログとして残す。
プロキシ制御部111は、回送レポートを受信していない場合(ステップSt65のNo)、削除レポートの受信の有無を判定する(ステップSt66)。つまり、プロキシ制御部111は、削除レポートに基づきバンドル通信の成否を判定する。
プロキシ制御部111は、削除レポートを受信していない場合(ステップSt66のNo)、処理を終了する。プロキシ制御部111は、削除レポートを受信した場合(ステップSt66のYes)、転送失敗通知を状態通知部121に指示する(ステップSt67)。状態通知部121は、転送失敗通知を表示部16にポップアップ表示させ、あるいは記憶部13にログとして残すことにより、端末1に転送失敗を通知する。
このように、状態通知部121は、プロキシ制御部111が削除レポートに基づき通信を失敗と判定した場合、ユーザに通信の失敗を通知する。このため、ユーザは、バンドルプロトコルに基づく通信が行われ、クライアントアプリケーション101及びサーバアプリケーション201上では通信が成功したように認識した場合でも、状態通知部121,221の通知により通信の失敗を知ることができる。
次に、クライアントアプリケーション101及びサーバアプリケーション201の間の通信の動作例を説明する。
(通信動作例1)
図14には通信動作例1の初期設定ファイル117,217及び経路TBL123,223が示され、図15〜図19には通信動作例1が時系列に示されている。本例では、図15に示されるように、アプリケーションクライアント(APLクライアント)である端末1からアプリケーションサーバ(APLサーバ)2bへのファイル転送を行う場合を仮定する。
APLサーバ2bは、図3のサーバ2のうち、アプリケーション機能部200を備えるものであり、DTNサーバ2aは、図3のサーバ2のうち、アプリケーション機能部200を除く他部分を備えるものである。DTNサーバ2a及びAPLサーバ2bは、図2と同様の構成を有し、インターネットNWbに接続されている。なお、APLサーバ2bは複数台であってもよい。
このように、サーバ2のアプリケーション機能部200は他装置に実装することにより、サーバ2のプロキシ制御部211などの他部分を、サーバアプリケーション201から独立した通信装置として構成することができる。
また、端末1は、点線で示される無線の通信回線を介してアクセスネットワークNWaに接続されている。アクセスネットワークNWaには、端末1がリンク可能なAP(例えばWi−Fiのホットスポット)が含まれている。
図14には、APLクライアント(端末1)の初期設定ファイル117及び経路TBL123と、APLサーバ2bの初期設定ファイル217及び経路TBL223が示されている。初期設定ファイル117,217及び経路TBL123,223は、アプリケーションの起動前にAPLクライアント及びAPLサーバ2bに格納済みである。
端末1は、初期設定ファイル117によりEIDが「dtn://node1」に設定され、クライアントアプリケーション101の通信先として、APLサーバ2bのIPアドレス「10.10.30.1」及びポート番号「40000」が設定される。また、端末1は、経路TBL123に基づき、DTNサーバ2aの宛先EID「dtn://dtnserver」、宛先IPアドレス「10.10.20.1」、及びポート番号「4556」が設定される。
また、DTNサーバ2aは、初期設定ファイル217によりEIDが「dtn://dtnserver」に設定され、APLサーバ2bのIPアドレス「10.10.30.1」及びポート番号「40000」が設定される。また、DTNサーバ2aは、経路TBL223に基づき、端末1の宛先EID「dtn://node1」、宛先IPアドレス「10.10.10.1」、及びポート番号「4556」が設定される。
図15には、端末1がアクセスネットワークNWaと接続している場合の通信の様子が示されている。この場合、端末1のコネクション監視部112は、コネクションが接続されていると判定するため、アドレス変換部113に変換情報を設定しない。このため、クライアントアプリケーション101は、TCP/IPによりAPLサーバ2bと直接的に通信を行う。符号G6は、端末1が送信するTCPのアプリケーションデータ(APLデータ)を示す。APLデータ(パケット)は、IPアドレス「10.10.30.1」及びポート番号「40000」を宛先とする。
図16には、端末1がアクセスネットワークNWaと接続していない場合の通信の様子が示されている。この場合、端末1のコネクション監視部112は、コネクションが切断されていると判定するため、アドレス変換部113に変換情報を設定する。これにより、クライアントアプリケーション101のAPLデータは、プロキシプロトコル機能部110で処理されるように、アドレス変換部113により変換されて送受信制御部114のソケットで受信される。
より具体的には、符号G7で示されるように、IPアドレス「10.10.30.1」及びポート番号「40000」を宛先とするAPLデータは、アドレス変換部113によりIPアドレス「10.10.10.1」及びポート番号「8001」を宛先とするAPLデータに変換される。プロキシ制御部111は、そのAPLデータを受信すると、APLデータの受付通知を状態通知部121に指示する。
状態通知部121は、符号G8に示されるように、受付通知を表示部16にポップアップ表示し、または記憶部13にログを出力する。受付通知には、受付の日付、時刻、及び通信先のIPアドレス及びポート番号などが含まれる。
プロキシ制御部111は、APLデータの送信をバンドル制御部120に要求する。このとき、プロキシ制御部111は、APLデータをプロキシメッセージのペイロードに収容してバンドル制御部120に出力する。バンドル制御部120は、要求に応じ、APLデータを、経路TBL123に基づきEID「dtn://dtnserver」宛てのバンドルに収容して送信を試みる。しかし、バンドル制御部120は、アクセスネットワークNWaとのコネクションが切断されているため、バンドルをバンドルバッファ122に格納する。
図17には、バンドル通信が保留された状態が示されている。プロキシ制御部111は、符号G9で示されるように、アクセスネットワークNWaとのコネクションが切断されている間、通知タイマによりバンドルの送信保留時間を計時する。プロキシ制御部111は、通知タイマが満了すると、保留通知を状態通知部121に指示する。
状態通知部121は、符号G10に示されるように、保留通知を表示部16にポップアップ表示し、または記憶部13にログを出力する。保留通知には、現在の日付、時刻、保留時間、及び通信先のIPアドレス及びポート番号などが含まれる。
図18には、ライフタイムの満了によりバンドルの送信が失敗した状態が示されている。バンドル制御部120は、符号G11に示されるように、タイマによりバンドルのライフタイムを管理し、ライフタイムが満了した場合、削除レポートをプロキシ制御部111に出力する。プロキシ制御部111は、削除レポートを受信すると、転送失敗通知を状態通知部121に指示する。
状態通知部121は、符号G12に示されるように、転送失敗通知を表示部16にポップアップ表示し、または記憶部13にログを出力する。転送失敗通知には、失敗の日付、時刻、及び通信先のIPアドレス及びポート番号などが含まれる。
図19は、ライフタイムの満了前に端末1がアクセスネットワークNWaと再接続したことによりバンドルが送信される様子を示す。バンドル制御部120は、符号G13に示されるように、アクセスネットワークNWaとのコネクションの確立を検出すると、バンドルをバンドルバッファ122から読み出して送信する。
バンドルは、符号G14で示されるように、TCP上のIPアドレス「10.10.20.1」及びポート番号「4556」に宛先に対応するEID「dtn://dtnserver」宛てに送信される。DTNサーバ2aにおいて、バンドル制御部220は、バンドルを受信すると、プロキシメッセージをプロキシ制御部211に送信する。プロキシ制御部211は、初期設定ファイル217により設定された出力ポインタの指定ディレクトリ「data/receive」からAPLデータを受信する。
プロキシ制御部211は、初期設定ファイル217で設定されたAPLサーバ2bのIPアドレス「10.10.30.1」及びポート番号「40000」とTCPでコネクションを確立し、符号G16に示されるように、その宛先のAPLデータを送信する。また、バンドル制御部220は、プロキシ制御部211へのAPLデータの出力が完了すると、転送が完了したと認識し、配信レポートを端末1に送信する。
端末1において、バンドル制御部120は、配信レポートを受信するとプロキシ制御部111に転送する。プロキシ制御部111は、配信レポートを受信すると、転送完了通知を状態通知部121に指示する。
状態通知部121は、符号G15に示されるように、転送完了通知を表示部16にポップアップ表示し、または記憶部13にログを出力する。転送完了通知には、転送完了の日付、時刻、及び通信先のIPアドレス及びポート番号などが含まれる。
また、本例とは異なり、バンドル通信機能を有する複数のノードを中継して通信を行う場合、回送通知により有効に通信状況を把握することが可能である。
図20には回送通知の利用例が示されている。本例の通信システムには、APLクライアント1a、プロキシノード(#1)1b、中継ノード(#2)7、DTNサーバ2a、及びAPLサーバ2bが含まれる。APLクライアント1a、プロキシノード(#1)1b、中継ノード(#2)7、DTNサーバ2a、及びAPLサーバ2bは、この順に接続されている。
APLクライアント1aは、図3の端末1のうち、アプリケーション機能部100を備えるものであり、プロキシノード1bは、図3の端末1のうち、アプリケーション機能部100以外の部分を備えるものである。APLクライアント1a及びプロキシノード1bは、図1と同様の構成を有する。
このように、端末1のアプリケーション機能部100は他装置に実装することにより、端末1のプロキシ制御部111などの他部分を、クライアントアプリケーション101から独立した通信装置として構成することができる。
APLクライアント1aは、IPアドレス「10.10.10.1」のプロキシノード1bにAPLデータを送信し、プロキシノード1bは、IPアドレス「10.10.40.1」の中継ノード7にAPLデータを送信する。中継ノード7は、RFC5050に準拠した中継機能を備えるものである。中継ノード7は、APLデータを、IPアドレス「10.10.20.1」のDTNサーバ2aに中継する。DTNサーバ2aは、APLデータを、IPアドレス「10.10.30.1」のAPLサーバ2bに送信する。
プロキシノード1bは、APLデータを中継ノード7に転送したとき、ノード#1からノード#2にAPLデータを回送した旨の回送レポートを中継ノード7に送信する。また、中継ノード7は、APLデータをDTNサーバ2aに中継したとき、プロキシノード1bの回送レポートとともに、ノード#2からDTNサーバ2aにAPLデータを回送した旨の回送レポートをDTNサーバ2aに送信する。
DTNサーバ2aは、このようにして収集した回送レポートを、符号G17に示されるように、ログ9上に回送通知として記録する。転送完了通知には、転送の日付、時刻、転送先のノード(node1,node2)、及び通信先のIPアドレス及びポート番号などが含まれる。
また、DTNサーバ2aに転送履歴管理アプリケーション(転送履歴管理APL)8を実装し、符号G18に示されるように、ログ9に基づき転送履歴を管理することができる。転送履歴には、一例として、送信元や宛先のIPアドレス、送信元の転送時刻、中継ノード7の転送時刻、DTNサーバ2aへの配信時刻などが記録される。
このような通信システムは、例えば、広範囲に設置された複数のセンサ装置から環境モニタリングのための情報を車両で巡回しつつ収集する場合に適用される。この場合、車両に搭載されたAPLクライアント1aが、各地のセンサ装置から測定データを収集してAPLサーバ2bに転送する。このとき、システム管理者は、DTNサーバ2aのログ9や転送履歴を参照することにより、データ中継の経緯を把握することが可能である。
(通信動作例2)
図21には、通信動作例2の初期設定ファイル117,217及び経路TBL123,223が示されている。また、図22には通信動作例2が示されている。なお、図22において、図15と共通する構成については同一の符号を付し、その説明を省略する。
インターネットNWbには、DTNサーバ2a、ウェブプロキシサーバ2c、及びウェブサーバ2dが接続されている。端末1は、ウェブブラウザのAPLクライアントとして機能し、ウェブプロキシサーバ2cによりウェブサーバ2dにアクセスする。
図21に示されるように、端末1は、初期設定ファイル117によりEIDが「dtn://node1/web」に設定され、クライアントアプリケーション101の通信先として、ウェブプロキシサーバ2cのIPアドレス「10.10.40.1」及びポート番号「8080」が設定される。また、端末1は、経路TBL123に基づき、DTNサーバ2aの宛先EID「dtn://dtnserver/web」、宛先IPアドレス「10.10.20.1」、及びポート番号「4556」が設定される。
また、DTNサーバ2aは、初期設定ファイル217によりEIDが「dtn://dtnserver/web」に設定され、ウェブプロキシサーバ2cのIPアドレス「10.10.40.1」及びポート番号「8080」が設定される。また、DTNサーバ2aは、経路TBL223に基づき、端末1の宛先EID「dtn://node1/web」、宛先IPアドレス「10.10.10.1」、及びポート番号「4556」が設定される。
まず、端末1とアクセスネットワークNWaのコネクションが確立している場合の通信動作について述べる。端末1のウェブブラウザにおいて、URL(Uniform resource Locator)「http://sample.abc.com」へのアクセスを要求すると、HTTP(Hyper Text Transfer Protocol)の要求メッセージがウェブプロキシサーバ2cに送信される。
ウェブプロキシサーバ2cは、要求メッセージを受信すると、上記URLのキャッシュデータを検索するウェブプロキシサーバ2cは、キャッシュデータがない場合、URLのFQDN(Fully Qualified Domain Name)である「sample.abc.com」をDNS(Domain Name System)で検索することにより、該当するウェブサーバ2dのIPアドレス「10.10.50.1」を特定する。ウェブプロキシサーバ2cは、TCPのポート番号「80」を設定したHTTPの要求メッセージをウェブサーバ2dに送信する。
ウェブサーバ2dは、要求メッセージへの応答メッセージとして、ウェブブラウザに表示される情報をウェブプロキシサーバ2cに送信する。ウェブプロキシサーバ2cは、応答メッセージを端末1に転送する。これにより、端末1のウェブブラウザには、例えば図23の符号G19に示されるような画面が表示される。
次に、端末1とアクセスネットワークNWaのコネクションが切断されている場合の通信動作について述べる。端末1は、コネクションが切断されているため、ウェブブラウザは上記URLのHTTPの要求メッセージを送信しても、要求メッセージはウェブプロキシサーバ2cで受信されない。このため、仮に、端末1のクライアントアプリケーション101の通信にバンドルプロトコルが適用されていない場合、ウェブブラウザには、例えば図23の符号G20に示されるように、接続不可能の旨のメッセージが表示される。
一方、端末1のクライアントアプリケーション101の通信にバンドルプロトコルが適用されている場合、要求メッセージはアドレス変換部113によりプロキシプロトコル機能部110で受信される。このため、ウェブブラウザには、例えば図23の符号G21に示されるように、通信要求中の状態が表示されたままとなる。
次に、端末1とアクセスネットワークNWaとのコネクションが再確立した場合の通信動作について述べる。アクセスネットワークNWaとのコネクションが再接続されると、バンドル制御部120は、要求メッセージを収容したバンドルをバンドルバッファ122から読み出して、DTNサーバ2aに送信する。DTNサーバ2aは、要求メッセージをウェブプロキシサーバ2cに転送する。さらに、ウェブプロキシサーバ2cは、要求メッセージをウェブサーバ2dに転送する。
ウェブサーバ2dは、要求メッセージに応じて応答メッセージを、ウェブプロキシサーバ2cを介してDTNサーバ2aに送信する。DTNサーバ2aにおいて、応答メッセージは、送受信制御部214のソケットで受信される。プロキシ制御部211は、そのソケットのソケットチャネルIDからコネクション番号及び宛先EIDをコネクションリスト216から検索する。プロキシ制御部211は、検索結果に基づきプロキシメッセージを生成して、バンドル制御部220にバンドルの送信を要求する。バンドル制御部220は、バンドルプロトコルに基づきバンドルを端末1に送信する。
端末1において、バンドル制御部120は、応答メッセージのバンドルを受信して、プロキシメッセージとしてプロキシ制御部111に出力する。プロキシ制御部111は、プロキシメッセージのコネクション番号を取得し、バンドル制御部120から取得された宛先EIDとともにコネクションリスト116の検索に使用する。これにより、プロキシ制御部111は、該当するソケットチャネルIDを検索し、そのソケットに応答メッセージを送信する。
ウェブブラウザは、応答メッセージをソケットから取得する。この通信動作は、ウェブブラウザに、図23の符号G19に示される画面が表示されるまで継続される。なお、その途中、ウェブブラウザが新たなコネクションを要求した場合、プロキシ制御部111がコネクションリスト116に新たなコネクション番号を登録して、上記と同様の通信が行われる。
このような通信動作により、ユーザは、通信環境が悪い場合でも、端末1においてウェブブラウザのリロード(再読み込み)を行うことなく、通信状態を継続し、ウェブブラウザにウェブページを表示させることができる。なお、バンドルプロトコルに基づく通信中にコネクションが切断された場合、ウェブページの表示における何れの段階であっても、コネクションの再接続時には通信を継続することが可能である。
なお、上記の処理機能は、コンピュータによって実現することができる。その場合、処理装置が有すべき機能の処理内容を記述したプログラムが提供される。そのプログラムをコンピュータで実行することにより、上記処理機能がコンピュータ上で実現される。処理内容を記述したプログラムは、コンピュータで読み取り可能な記録媒体(ただし、搬送波は除く)に記録しておくことができる。
プログラムを流通させる場合には、例えば、そのプログラムが記録されたDVD(Digital Versatile Disc)、CD−ROM(Compact Disc Read Only Memory)などの可搬型記録媒体の形態で販売される。また、プログラムをサーバコンピュータの記憶装置に格納しておき、ネットワークを介して、サーバコンピュータから他のコンピュータにそのプログラムを転送することもできる。
プログラムを実行するコンピュータは、例えば、可搬型記録媒体に記録されたプログラムもしくはサーバコンピュータから転送されたプログラムを、自己の記憶装置に格納する。そして、コンピュータは、自己の記憶装置からプログラムを読み取り、プログラムに従った処理を実行する。なお、コンピュータは、可搬型記録媒体から直接プログラムを読み取り、そのプログラムに従った処理を実行することもできる。また、コンピュータは、サーバコンピュータからプログラムが転送されるごとに、逐次、受け取ったプログラムに従った処理を実行することもできる。
上述した実施形態は本発明の好適な実施の例である。但し、これに限定されるものではなく、本発明の要旨を逸脱しない範囲内において種々変形実施可能である。
なお、以上の説明に関して更に以下の付記を開示する。
(付記1) 端末で動作するアプリケーションから通信先への通信を中継する通信プログラムであって、
前記通信先とのコネクションの状態に応じて、前記通信先との通信を第1のプロトコルによる通信から途絶耐性ネットワークのプロトコルによる通信に切り替え、
前記通信先への通信の完了を前記アプリケーションに通知済みであり、かつ、前記途絶耐性ネットワークのプロトコルによる通信が失敗した通信について、前記通信の失敗を前記端末に通知する、処理を、コンピュータに実行させることを特徴とする通信プログラム。
(付記2) 前記通信先との間の複数の通信回線の通信品質をそれぞれ測定し、
前記通信品質に基づき前記複数の通信回線から1以上の通信回線を選択し、
該選択した前記1以上の通信回線により前記途絶耐性ネットワークのプロトコルによる通信を行う、処理を前記コンピュータに実行させることを特徴とする付記1に記載の通信プログラム。
(付記3) 前記アプリケーションから前記通信先に送信されるデータの所定の先頭部分を複数のブロックに分割し、
前記複数のブロックを前記複数の通信回線のそれぞれを介して前記通信先に送信することにより、前記複数の通信回線の前記通信品質をそれぞれ測定し、
前記通信品質に基づき前記複数の通信回線から前記1以上の通信回線を選択し、
該選択した前記1以上の通信回線を介して前記データの他部分を前記通信先に送信する、処理を前記コンピュータに実行させることを特徴とする付記2に記載の通信プログラム。
(付記4) 端末で動作するアプリケーションから通信先への通信を中継する通信方法であって、
前記通信先とのコネクションの状態に応じて、前記通信先との通信を第1のプロトコルによる通信から途絶耐性ネットワークのプロトコルによる通信に切り替える工程と、
前記通信先への通信の完了を前記アプリケーションに通知済みであり、かつ、前記途絶耐性ネットワークのプロトコルによる通信が失敗した通信について、前記通信の失敗を前記端末に通知する工程とを、コンピュータが実行することを特徴とする通信方法。
(付記5) 前記通信先との間の複数の通信回線の通信品質をそれぞれ測定する工程と、
前記通信品質に基づき前記複数の通信回線から1以上の通信回線を選択する工程と、
該選択した前記1以上の通信回線により前記途絶耐性ネットワークのプロトコルによる通信を行う工程とを前記コンピュータが実行することを特徴とする付記4に記載の通信方法。
(付記6) 前記アプリケーションから前記通信先に送信されるデータの所定の先頭部分を複数のブロックに分割する工程と、
前記複数のブロックを前記複数の通信回線のそれぞれを介して前記通信先に送信することにより、前記複数の通信回線の前記通信品質をそれぞれ測定する工程と、
前記通信品質に基づき前記複数の通信回線から前記1以上の通信回線を選択する工程と、
該選択した前記1以上の通信回線を介して前記データの他部分を前記通信先に送信する工程とを前記コンピュータが実行することを特徴とする付記5に記載の通信方法。
(付記7) 端末で動作するアプリケーションから通信先への通信を中継する通信装置であって、
前記通信先とのコネクションの状態に応じて、前記通信先との通信を第1のプロトコルによる通信から途絶耐性ネットワークのプロトコルによる通信に切り替える切り替え処理部と、
前記通信先への通信の完了を前記アプリケーションに通知済みであり、かつ、前記途絶耐性ネットワークのプロトコルによる通信が失敗した通信について、前記通信の失敗を前記端末に通知する失敗通知部とを有することを特徴とする通信装置。
(付記8) 前記途絶耐性ネットワークのプロトコルにより前記通信先と通信する通信部を有し、
前記通信部は、
前記通信先との間の複数の通信回線の通信品質をそれぞれ測定し、
前記通信品質に基づき前記複数の通信回線から1以上の通信回線を選択し、
該選択した前記1以上の通信回線により前記途絶耐性ネットワークのプロトコルによる通信を行うことを特徴とする付記7に記載の通信装置。
(付記9) 前記通信部は、
前記アプリケーションから前記通信先に送信されるデータの所定の先頭部分を複数のブロックに分割し、
前記複数のブロックを前記複数の通信回線のそれぞれを介して前記通信先に送信することにより、前記複数の通信回線の前記通信品質をそれぞれ測定し、
前記通信品質に基づき前記複数の通信回線から前記1以上の通信回線を選択し、
該選択した前記1以上の通信回線を介して前記データの他部分を前記通信先に送信することを特徴とする付記8に記載の通信装置。