(57)【要約】【課題】異なる装置間をアクティブソケットが移動する方法を提供する。【解決手段】第１のホスト装置の第１層で動作する第１のアクティブソケットと第２のホスト装置の第１層で動作する第２のアクティブソケットとの間で通信プロトコルに従いネットワークを介して通信がおこなわれ、この通信を利用して第１のホスト装置の第２層で動作する第１のローミングソケットモジュールが第２のホスト装置の第２層で動作する第２のローミングソケットモジュールに関連付けられ、第１のローミングソケットモジュールが第３のホスト装置に移動し、関連付けられていた第１および第２のローミングソケットモジュールを用いて第３のホスト装置と第２のホスト装置との間の通信が成立する。【選択図】　　　図１
2004030558.tif 000002
【特許請求の範囲】
【請求項１】
アプリケーションと連携して動作する通信ソケットを移動する方法であって、
第１のホスト装置の第１層で動作する第１のアクティブソケットと、第２のホスト装置の第１層で動作する第２のアクティブソケットとの間を、通信プロトコルに従いネットワークを介して通信する通信ステップと、
前記第１および第２のアクティブソケットの間のネットワークを介した通信によって、第１のホスト装置の第２層で動作する第１のローミングソケットモジュールを第２のホスト装置の第２層で動作する第２のローミングソケットモジュールに関連付ける関連付けステップと、
前記第１のローミングソケットモジュールを第３のホスト装置に移動する移動ステップと、
前記関連付けに従って、前記第３のホスト装置と第２のホスト装置との間の通信を、前記第１および第２のローミングソケットモジュールを使用して成立させる通信成立ステップと
を有する方法。
【請求項２】
前記第１層がトランスポート層であり、前記第２層がセッション層、プレゼンテーション層およびアプリケーション層のいずれかであることを特徴とする請求項１に記載の方法。
【請求項３】
前記関連付けステップが、前記第１のホスト装置および第２のホスト装置の間でホストアドレスおよびポートアドレスを交換するステップを有することを特徴とする請求項１または２に記載の方法。
【請求項４】
前記通信成立ステップが、
前記第１のローミングソケットモジュールを用いて第３のアクティブソケットをオープンし、前記第２のローミングソケットモジュールを用いて第４のアクティブソケットをオープンするステップと、
前記第３および第４のアクティブソケットを用いて前記第１および第２のローミングソケットモジュールの間をネットワークを介して通信するステップと
を有することを特徴とする請求項１ないし３のいずれか一つに記載の方法。
【請求項５】
前記通信プロトコルが伝送制御プロトコルを含むことを特徴とする請求項１ないし４のいずれか一つに記載の方法。
【請求項６】
前記移動ステップが、
前記第１のアクティブソケットおよび第２のアクティブソケットからデータを読みこむステップと
前記第１のアクティブソケットから読み込んだデータを第１の同期バッファに保持し、前記第２のアクティブソケットから読み込んだデータを第２の同期バッファに保持するステップと、
前記第１の同期バッファを前記第３のホスト装置に移動するステップと
を有することを特徴とする請求項５に記載の方法。
【請求項７】
前記第１および第２の同期バッファからデータを読み込んだ後に、前記第３のホスト装置と前記第２のホスト装置との間の通信から得られるデータを処理するステップをさらに有することを特徴とする請求項６に記載の方法。
【請求項８】
前記通信プロトコルがユーザデータグラムプロトコルを含むことを特徴とする請求項１ないし３のいずれか一つに記載の方法。
【請求項９】
前記関連付けステップが、
前記第２のホスト装置のホストアドレスおよびポートアドレスを含み、前記第１のローミングソケットモジュールとともに動作する関連付けテーブルを生成するステップを有することを特徴とする請求項８に記載の方法。
【請求項１０】
前記移動ステップが、前記関連付けテーブルを前記第３のホスト装置に移動するステップを有することを特徴とする請求項９に記載の方法。
【請求項１１】
前記通信成立ステップが、前記関連付けテーブルに従って、再関連付け要求メッセージを前記第２のホスト装置に送信するステップを有することを特徴とする請求項１０に記載の方法。
【請求項１２】
第１のホスト装置および第２のホスト装置の間の接続の一端を形成し、前記第１のホスト装置で動作するアプリケーションの通信ソケットを移動する方法であって、
前記第１のホスト装置のアプリケーションおよび当該アプリケーションとともに動作するマイグレータブルソケットの間の入出力データの伝送を中断する伝送中断ステップと、
前記接続を介して前記マイグレータブルソケットにより受信された入力データストリームを保持するデータストリーム保持ステップと、
前記アプリケーション、前記保持された入力データストリームおよび前記マイグレータブルソケットを第３のホスト装置に移動する移動ステップと、
前記マイグレータブルソケットに応じて、前記第２のホスト装置と前記第３のホスト装置との間に接続を再び成立させる再成立ステップと
前記マイグレータブルソケットに応じて、前記保持されている入力データストリームを前記アプリケーションに与えるステップと
を有する方法。
【請求項１３】
前記接続が伝送制御プロトコルによる接続を含むことを特徴とする請求項１２に記載の方法。
【請求項１４】
前記マイグレータブルソケットを前記第２のホスト装置の別のアプリケーションとともに動作する別のマイグレータブルソケットに関連付けるステップを最初に有することを特徴とする請求項１２または１３に記載の方法。
【請求項１５】
前記マイグレータブルソケットに前記別のマイグレータブルソケットを関連付けるステップが、前記接続を介して前記第１および第２のホスト装置の各々を識別する情報を含んでいる各マイグレータブルソケットのオブジェクト参照を交換するステップを有することを特徴とする請求項１４に記載の方法。
【請求項１６】
前記伝送中断ステップが、前記第２のホスト装置で動作するマイグレータブルソケットにクローズメッセージを送信するステップを有することを特徴とする請求項１２ないし１５のいずれか一つに記載の方法。
【請求項１７】
前記第２のホスト装置の前記マイグレータブルソケットが前記伝送中断ステップおよび前記データストリーム保持ステップを実行することを特徴とする請求項１６に記載の方法。
【請求項１８】
前記マイグレータブルソケットがローミングソケットモジュールとアクティブソケットとを有し、
前記移動ステップが移動の前に前記アクティブソケットをクローズするステップを有する
ことを特徴とする請求項１２ないし１７のいずれか一つに記載の方法。
【請求項１９】
前記マイグレータブルソケットがローミングソケットモジュールとアクティブソケットとを有し、
前記移動ステップが
前記保持されている入力データストリームおよび前記ローミングソケットモジュールの動作状態を符号化するステップと、
前記保持および符号化された入力データストリームおよび前記符号化された動作状態を前記第３のホスト装置に送信するステップと
を有することを特徴とする請求項１２ないし１８のいずれか一つに記載の方法。
【請求項２０】
前記再成立ステップが、
前記マイグレータブルソケットを用いて前記第３のホスト装置のサーバソケットをオープンするステップと、
前記第２のホスト装置と前記第３のホスト装置との間でハンドシェークを開始するステップと、
当該ハンドシェーク中に前記第２および第３のホスト装置のアクティブソケットをオープンするステップと
を有することを特徴とする請求項１２ないし１９のいずれか一つに記載の方法。
【請求項２１】
ネットワークを介して別のホスト装置と通信することができ、ホスト装置で動作する通信ソケットとアプリケーションについて、アプリケーションの通信ソケットを移動する方法であって、
アプリケーション、マイグレータブルソケットおよび関連付けテーブルを各々有する複数のホスト装置の間を通信プロトコルに従って通信をおこなうホスト装置間通信ステップと、
前記複数のホスト装置の間で交換される識別情報を各ホスト装置の関連付けテーブルに記憶して関連付けリンクを形成するリンクステップと、
第１のホスト装置から、第１のアプリケーション、第１のマイグレータブルソケットおよび第１の関連付けテーブルを第２のホスト装置に移動する移動ステップと、
前記第１のマイグレータブルソケットに応じて、前記第２のホスト装置から再関連付けメッセージを前記第１の関連付けテーブルで同定されるホスト装置に送信する再関連付けステップと、
前記第１のマイグレータブルソケットを用いて、前記同定されたホスト装置から再関連付け確認メッセージを受信する確認ステップと
を有する方法。
【請求項２２】
前記通信プロトコルがユーザデータグラムプロトコルを含むことを特徴とする請求項２１に記載の方法。
【請求項２３】
前記識別情報がホストアドレスとポートアドレスとを有することを特徴とする請求項２１または２２に記載の方法。
【請求項２４】
前記再関連付けステップが、
前記第１のマイグレータブルソケットを使用してアクティブソケットをオープンするステップと、
前記通信プロトコルに従って、前記再関連付けメッセージを前記アクティブソケットを介して送信するステップと
を有することを特徴とする請求項２１ないし２３のいずれか一つに記載の方法。
【請求項２５】
前記再関連付けステップが、前記第２のホスト装置のホストアドレスおよびポートアドレスを前記再関連付けメッセージに含めるステップを有することを特徴とする請求項２１ないし２４のいずれか一つに記載の方法。
【請求項２６】
前記再関連付けステップが、
前記同定されたホスト装置で動作するマイグレータブルソケットを用いて前記再関連付けメッセージを受信するステップと、
前記再関連付けメッセージに応じて、前記同定されたホスト装置の関連付けテーブルを更新するステップと、
前記同定されたホスト装置の前記マイグレータブルソケットを用いて前記再関連付け確認メッセージを送信するステップと
を有することを特徴とする請求項２１ないし２５のいずれか一つに記載の方法。
【請求項２７】
前記第１のホスト装置から前記第２のホスト装置への移動を反映させるように、前記同定されたホスト装置のアドレス変換テーブルを更新するステップをさらに有し、
前記アドレス変換テーブルが前記第１のホスト装置への通信を、前記第２のホスト装置にリダイレクトする
ことを特徴とする請求項２６に記載の方法。
【請求項２８】
前記再関連付けステップが、
前記再関連付け確認メッセージを受信する前に前記同定されたホスト装置からデータパケットを受信する場合に、前記再関連付けメッセージを再送するステップを有することを特徴とする請求項２１ないし２７のいずれか一つに記載の方法。
【請求項２９】
第１のホスト装置と第２のホスト装置の間をネットワークを介して通信する、アプリケーションの通信ソケットを移動するソケットマイグレーションアーキテクチャであって、
前記第１および第２のホスト装置との間の接続の一端を形成し、前記第１のホスト装置で動作するマイグレータブルソケットと、
移動の間、前記第２のホスト装置から与えられる入力データストリームを記憶することができて、前記マイグレータブルソケットとともに前記第１のホスト装置で動作する同期バッファと
を有し、
前記第１のホスト装置から、当該同期バッファと当該マイグレータブルソケットが前記第３のホスト装置に移動し、
前記マイグレータブルソケットは、前記第２および第３のホスト装置の間の前記接続を再び成立させるために前記第３のホスト装置で動作し、
前記マイグレータブルソケットは、前記接続が再び成立すると、前記同期バッファから前記記憶された入力データストリームを引き出す
ことを特徴とするソケットマイグレーションアーキテクチャ。
【請求項３０】
前記接続が伝送制御プロトコルによる接続であることを特徴とする請求項２９に記載のソケットマイグレーションアーキテクチャ。
【請求項３１】
前記マイグレータブルソケットがローミングソケットモジュールとアクティブソケットとを有することを特徴とする請求項２９または３０に記載のソケットマイグレーションアーキテクチャ。
【請求項３２】
前記マイグレータブルソケットが、移動の前に、前記アクティブソケットをクローズすることを特徴とする請求項３１に記載のソケットマイグレーションアーキテクチャ。
【請求項３３】
前記マイグレータブルソケットが、前記接続を再び成立するためにアクティブソケットをオープンすることを特徴とする請求項３２に記載の　ソケットマイグレーションアーキテクチャ。
【請求項３４】
前記入力データストリームが前記第２のホスト装置からフラッシュされたデータを有することを特徴とする請求項２９ないし３３のいずれか一つに記載のソケットマイグレーションアーキテクチャ。
【請求項３５】
前記接続の第２端を形成する、前記第２のホスト装置で動作するマイグレータブルソケットと、
前記第１のホスト装置から移動の間に与えられる入力データストリームを記憶する、前記第２のホスト装置で動作する同期バッファと
をさらに有することを特徴とする請求項２９ないし３４のいずれか一つに記載のソケットマイグレーションアーキテクチャ。
【請求項３６】
前記マイグレータブルソケットとともに前記第１のホスト装置で動作する前記アプリケーションのデータの入出力が、移動の準備をする時に凍結される場合に、前記同期バッファが前記入力データストリームを記憶することを特徴とする請求項２９ないし３５のいずれか一つに記載のソケットマイグレーションアーキテクチャ。
【請求項３７】
前記マイグレータブルソケットが前記第２のホスト装置と関連付けリンクを形成することを特徴とする請求項２９ないし３６のいずれか一つに記載のソケットマイグレーションアーキテクチャ。
【請求項３８】
ネットワークを介して別のホスト装置と通信することができ、ホスト装置で動作する通信ソケットとアプリケーションについて、アプリケーションの通信ソケットを移動するソケットマイグレーションアーキテクチャであって、
少なくとも一つの別のホスト装置と通信プロトコルに従って通信し、第１のホスト装置で動作するマイグレータブルソケットと、
前記少なくとも一つの別のホスト装置から前記通信プロトコルに従って与えられた識別情報を記憶し、前記第１のホスト装置で動作する関連付けテーブルと
を有し、
前記第１のホスト装置から、当該マイグレータブルソケットと当該同期バッファが第２のホスト装置に移動し、
前記識別情報に応じて、前記第２のホスト装置で動作する前記マイグレータブルソケットが再関連付けメッセージを前記通信プロトコルに従って前記少なくとも一つの別のホスト装置に送信し、
前記マグレータブルソケットが、再関連付け確認メッセージを前記プロトコルに従って、前記少なくとも一つの別のホスト装置から受信する
ことを特徴とするソケットマイグレーションアーキテクチャ。
【請求項３９】
前記通信プロトコルがユーザデータグラムプロトコルを含むことを特徴とする請求項３８に記載のソケットマイグレーションアーキテクチャ。
【請求項４０】
前記マイグレータブルソケットがローミングソケットモジュールおよびアクティブソケットを有することを特徴とする請求項３８または３９に記載のソケットマイグレーションアーキテクチャ。
【請求項４１】
再関連付けメッセージが前記第２のホスト装置のホストアドレスおよびポートアドレスを有することを特徴とする請求項３８ないし４０のいずれか一つに記載のソケットマイグレーションアーキテクチャ。
【請求項４２】
前記少なくとも一つの別のホスト装置がマイグレータブルソケット、関連付けテーブルおよびアドレス変換テーブルを有することを特徴とする請求項３８ないし４１のいずれか一つに記載のソケットマイグレーションアーキテクチャ。
【請求項４３】
前記再関連付けメッセージが受信される場合に、前記アドレス変換テーブルが前記第１および第２のホスト装置の識別情報の間の相互参照を記憶することを特徴とする請求項４２に記載のソケットマイグレーションアーキテクチャ。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明はネットワーク上の装置間通信に関し、特に、通信ソケットを第１の装置から第２の装置にネットワークを介して移動する方法およびシステムに関する。
【０００２】
【従来の技術】
パーソナルコンピュータ、個人用携帯情報端末（ＰＤＡとも称す）、携帯電話、ポケットベルなどの個人用電子装置は近年広く利用されている。これらの装置は、データ通信、音声通信、映像通信に関する種々の機能を利用することにより、無線あるいは有線のネットワークを介して通信することができる。無線あるいは有線のネットワークを介して、これらの装置は、情報源と、あるいは他の同様な装置と相互に接続することができる。一般に、ネットワークにはインターネットを介した通信が含まれる。
【０００３】
装置は通信プロトコルに従ってネットワークを介して相互に通信をおこなう。通信プロトコルは、装置で動作するアプリケーションとネットワークとの間を仲介するように働く。代表的な通信プロトコルには、ユーザデータグラムプロトコル（ＵＤＰ）と伝送制御プロトコル（ＴＣＰ）とがあり、これらの通信プロトコルはアプリケーションが生成したメッセージをカプセル化する。また、ネットワーク上の装置を識別することができるように、これらの通信プロトコルはインターネットプロトコル（ＩＰ）等のネットワークプロトコルに従ってカプセル化される。
【０００４】
ネットワークプロトコルは、各装置のホストアドレスを識別表示（ＩＤ）として利用して、各装置の間でピアツーピア通信を成立させる。また、各装置のポートアドレスは通信プロトコルにより識別される。ポートアドレスとはポートの用途を示すポート番号を含むアドレスであり、たとえばポート８０は、通常ハイパーテキスト伝送プロトコル（ＨＴＴＰ）により使用される。
各装置で動作するアプリケーションは、各ポート毎に１または２以上のソケットをアクティブにすることができる。ソケットがアクティブソケット（ＴＣＰソケットあるいはＵＤＰソケット）であるとは、１装置で動作している１アプリケーションのソケット（ＴＣＰソケットあるいはＵＤＰソケット）が、ＴＣＰあるいはＵＤＰプロトコルに従って別の装置で動作している別アプリケーションのソケットと通信可能な状態で接続されている場合を意味する。ソケットが受動ソケットであるとは、当該ソケットが別の装置のソケットと接続していない場合を意味する。各ポートは、複数接続のそれぞれに対応する複数のアクティブソケットと接続待機中の受動ソケットを持つことができる。各装置のホストアドレスおよびポートアドレスに基づいて２台の装置のアクティブソケット（ＴＣＰソケットあるいはＵＤＰソケット）の間でピアツーピア通信が成立する。
【０００５】
ところで、これらの装置の多くは移動中に使用されることが普通であるから、装置で動作するアプリケーションを異なる装置間で移動（マイグレーション）させることが有用となる。アプリケーションの移動（マイグレーション）とは、アプリケーションが１装置（ソース装置）から別の装置（ターゲット装置）にアプリケーションの状態を維持したまま移動することである。たとえば、机上のパーソナルコンピュータから、サーバで動くカレンダーアプリケーションを使用して出張計画を立てているユーザは、席を離れる時に、自分のＰＤＡにこのアプリケーションを移動させることによって仕事を続けることができる。この場合、ネットワークを介してソース装置からターゲット装置にアプリケーションを転送してもかまわない。
【０００６】
【非特許文献１】
Ｃ．ウイテマ（Ｃ．　Ｈｕｉｔｅｍａ）著、「マルチホームドＴＣＰ（Ｍｕｌｔｉ−ｈｏｍｅｄ　ＴＣＰ）」、インターネットドラフト、１９９５年５月
【非特許文献２】
Ｈ．バラクリシュナン（Ｈ．　Ｂａｌａｋｒｉｓｈｎａｎ）、Ａ．Ｃ．スノラン（Ａ．　Ｃ．　Ｓｎｏｅｒｅｎ）著、「ＴＣＰ接続マイグレーション（ＴＣＰ　Ｃｏｎｎｅｃｔｉｏｎ　Ｍｉｇｒａｔｉｏｎ）」、インターネットドラフト、２０００年１１月
【０００７】
【発明が解決しようとする課題】
アプリケーションが移動する場合、ソース装置のアクティブソケットおよびソース装置と通信している別の装置のアクティブソケットは、アプリケーションが移動する前に、アプリケーションによりクローズされる。アクティブソケットがクローズされると、ネットワーク上の別の装置との間のピアツーピア通信は途絶える。アプリケーションが移動に成功すると、ターゲット装置のソケットおよび移動したアプリケーションが移動前に通信していた装置のソケットが再びオープンされ、さらに、ピアツーピア通信を再び成立させる（ピアツーピア通信を最初から再び成立させる）。この時アプリケーションの移動に伴って移動先のホストアドレスが変化するので、このホストアドレスの変化に対応させてピアツーピア通信を最初から再び成立させる必要がある。そこで、アプリケーションをこのように動作させるためには、移動したアプリケーションが移動後に、ソケットを再びオープンしてピアツーピア通信を再び成立させることができるように、特別にアプリケーションをプログラミングする必要があった。
【０００８】
これに対して従来は、ピアツーピア通信を最初から再び成立させることを避けて、そのかわりに通信プロトコルが修正されていた。すなわち、通信プロトコルが、アプリケーションに関連する情報を含むように修正されて移動先のホストアドレスとは無関係となり、移動後にピアツーピア通信を再び成立させることができるようになっている。したがって、アプリケーションが１装置から別の装置に移動する時は、ピアツーピア通信も移動する。
このような解決のためには、ＴＣＰあるいはＵＤＰなどの標準通信プロトコルを修正してアプリケーションに関連する付加情報を含めるように実装する必要がある。たとえば、Ｃ．ウイテマ著、「マルチホームドＴＣＰ」、インターネットドラフト、１９９５年５月およびＨ．バラクリシュナン、Ａ．Ｃ．スノラン著、「ＴＣＰ接続マイグレーション」、インターネットドラフト、２０００年１１月はこのような実装例である。
【０００９】
ところで、標準プロトコルを修正すると、プロトコルの置き換えが必要になるという重大な問題が生じる。なぜなら、ネットワーク上の全装置で動作している全アプリケーションは完全に同一のプロトコルに従って通信する必要があるからである。このように通信互換性を維持するためには、全装置について通信プロトコルを同様に修正しなければならない。さらに、標準通信プロトコルの変更により、修正を加えた通信プロトコルを利用できるように装置のオペレーティングシステムまで変更が必要になることもある。
【００１０】
プロトコルの置き換えの問題は別として、ほとんどの既存の標準通信プロトコルは、アプリケーションの間に統一がとれるように標準化委員会によって開発されてきた。たとえば、ＴＣＰプロトコルは規格書ＲＦＣ−７９３「伝送制御プロトコル、ＤＡＲＰＡインターネット計画、プロトコル仕様」（１９８１年９月）に規定され、ＵＤＰプロトコルは規格書ＲＦＣ−７６８「ユーザデータグラムプロトコル」（１９８０年８月２８日）に規定されている。この標準化委員会を説得して標準に対する修正を認めさせ、実装するように働きかけることは困難であることが予想される。標準に対する修正を実装することができない場合には、アプリケーション間の統一性の維持および広範囲における普及を達成することはできないであろう。
【００１１】
【課題を解決するための手段】
本発明のソケットマイグレーションアーキテクチャによれば、通信ソケットは異種装置間を移動することができる。ネットワーク上の装置間のピアツーピア通信は通信ソケットを介して成立し、標準通信プロトコルに従っている。標準通信プロトコルに従ってピアツーピア通信が成立しているから、装置間には関連付けリンクが成立している。この関連付けリンクを利用することによって、通信ソケットは、移動した後、再びピアツーピア通信を成立させることができる。すなわち、ソケットマイグレーションアーキテクチャによりピアツーピア通信を再び成立するときには関連付けリンクを利用することができるので、ピアツーピア通信を再び最初から成立させる必要はなく、したがって、難しい特殊なプログラミングを必要としない。さらに、標準通信プロトコルを使用しているので、通信プロトコルを修正する必要がなく、修正した通信プロトコルで既存の通信プロトコルを置き換える必要がない。
【００１２】
本発明の第１実施形態におけるソケットマイグレーションアーキテクチャが動作する通信システムは、ネットワークを介して通信できる少なくとも一つのソースホスト、少なくとも一つの応対ホストおよび少なくとも一つのターゲットホストを有する。ソケットマイグレーションアーキテクチャはアプリケーションとマイグレータブルソケットを有し、それらは通信システムの任意のホストで動作することができる。ソースホストで動作する第１のアプリケーションと応対ホストで動作する第２のアプリケーションとの間のネットワークを介したピアツーピア通信は、それぞれとともに動作する第１および第２のマイグレータブルソケットを介して成立する。第１および第２のマイグレータブルソケットは、通信プロトコルに従って識別情報を交換して関連付けリンクを生成する。この識別情報により、アプリケーションが現に動作しているホストを同定することができる。第１のアプリケーションがターゲットホストに移動する場合には、第１のマイグレータブルソケットもターゲットホストに移動する。このように第１のマイグレータブルソケットが移動するので、再び通信を成立させるために、第１および第２のマイグレータブルソケットの間の関連付けリンクを利用してピアツーピア通信を再び最初から成立させる必要はない。
【００１３】
本発明の第１実施形態において、第１のマイグレータブルソケットは第１のローミングソケットモジュールおよび第１のアクティブソケットを有し、第２のマイグレータブルソケットは第２のローミングソケットモジュールおよび第２のアクティブソケットを有する。第１および第２のローミングソケットモジュールは第１層で動作し、第１および第２のアクティブソケットは第２層で動作する。この実施形態における第１層は、よく知られているＯＳＩ階層モデルの第５、第６あるいは第７層のいずれかに相当し、この実施形態における第２層はＯＳＩ階層モデルの第４層に相当する。第１および第２のアクティブソケットが、通信プロトコルに従ってネットワークを介して通信をおこなうことにより、ピアツーピア通信がおこなわれる。ここで関連付けリンクが生成されると、第１のローミングソケットモジュールと第２のローミングソケットモジュールとが関連付けられる。
アプリケーションがソースホストからターゲットホストへ移動する場合、第１のローミングソケットモジュールがターゲットホストに移動する。移動後、関連付けリンクに応じた第１および第２のローミングソケットモジュールを使用して、応対ホストとターゲットホストの間に再びピアツーピア通信が成立する。すなわち、第２のローミングソケットモジュールが第３のアクティブソケットをオープンし、第１のローミングソケットモジュールが第４のアクティブソケットをオープンすることによって、ネットワークを介したピアツーピア通信が通信プロトコルに従って再び成立する。
【００１４】
また、ソケットマイグレーションアーキテクチャは、第１および第２のマイグレータブルソケットの各々とともに動作する同期バッファを有することが好ましい。移動中に、第１および第２のローミングソケットモジュールによってそれぞれネットワークから受信された入力データストリームはそれぞれの同期バッファに保持される。第１のマイグレータブルソケットおよび保持された入力データストリームはソースホストから応対ホストに移動する。第１および第２のローミングソケットモジュールを使用してピアツーピア通信が再び成立すると、保持された入力データストリームが第１および第２のローミングソケットモジュールによりそれぞれ読み取られる。
【００１５】
本発明の第２実施形態におけるソケットマイグレーションアーキテクチャは、さらに、各マイグレータブルソケットとともに動作する関連付けテーブルを有する。さらに応対ホストで動作するマイグレーションアーキテクチャは、第２のローミングソケットモジュールとともに動作するアドレス変換テーブルを有する。通信プロトコルに従うネットワークを介したピアツーピア通信中に関連付けリンクが生成されると、それぞれの関連付けテーブルに識別情報が記憶される。本実施形態では、連携動作する第１のマイグレータブルソケットと関連付けテーブルとの両方がホスト装置からターゲット装置へ移動する。第１のマイグレータブルソケットは関連付けテーブルを利用して、ターゲットホストと応対ホストとの間でピアツーピア通信を再び成立させる。アドレス変換テーブルはこのホスト装置からターゲット装置への移動をマッピングするように更新されるから、今後のピアツーピア通信のための相互参照として利用することができる。
【００１６】
また、本発明のソケットマイグレーションアーキテクチャによれば、連携動作するアプリケーションとマイグレータブルソケットとの間のデータの入出力を凍結することができる。データの入出力が移動の間凍結されることにより、移動を加速し、ホスト装置間の双方向通信を維持することができる。
【００１７】
また、本発明のソケットマイグレーションアーキテクチャによれば、関連付けテーブルを使用して複数のホスト装置の間に関連付けリンクを生成することができる。したがって、移動後に途切れることなく、複数のホスト装置の各々で動作する複数のアプリケーションの間でピアツーピア通信を再び成立させることができる。
【００１８】
また、本発明のソケットマイグレーションアーキテクチャによれば、移動中のピアツーピア通信の中断は移動に関わるアプリケーションからほとんど見えなくなり途切れることはない。このようにアプリケーション間の協調動作を移動した後も維持し、データの喪失を最小限にとどめることができる。
【００１９】
さらに、本発明の好適実施形態を明瞭に示している以下の記載および添付の図面への参照から本発明のさらなる目的と利点が明らかとなろう。
【００２０】
【発明の実施の形態】
本発明の好適実施形態におけるソケットマイグレーションアーキテクチャによれば、アプリケーションが異なる装置の間を移動する時に、アプリケーションと関連付けられた通信ソケットは移動することができる。また、このソケットマイグレーションアーキテクチャによれば、標準通信プロトコルの利用とソケットの移動を同時に実現することができる。
アプリケーションの開発者は、ソケットマイグレーションアーキテクチャを利用することにより、移動後に通信を再び最初から成立させるために必要となる余分なプログラミングを回避して、移動するアプリケーションおよびその移動するアプリケーションと通信するアプリケーションを開発することができる。また、本発明のソケットマイグレーションアーキテクチャによれば、移動中の通信の一時的中断は移動に関わるアプリケーションの動作からほとんど見えなくなっている。
【００２１】
＜第一実施形態＞
図１は、本発明の第一実施形態におけるソケットマイグレーションアーキテクチャ１０が動作する通信システム１２を説明するブロック図である。図に示されるように、通信システム１２はネットワーク１４、ならびにネットワーク１４と接続して動作することができる少なくとも一つの第１のホスト（ソースホスト１６）と少なくとも一つの第２のホスト（応対ホスト１８）および少なくとも一つの第３のホスト（ターゲットホスト２０）を有する。また、ソケットマイグレーションアーキテクチャ１０は、少なくとも一つのアプリケーション２２と少なくとも一つのマイグレータブルソケット２４を有する。ソケットマイグレーションアーキテクチャ１０は、ホスト１６、１８、２０のいずれにおいても動作することができる。詳細は以下で説明する。ここで使われているように、”結合”あるいは”接触”という用語は、電気的結合または光学的結合、あるいは、装置およびコンポーネントの間にインターフェースを提供する任意の形の結合を意味している。
【００２２】
ネットワーク１４には、インターネット、公開あるいは非公開のイントラネット、エクストラネット、データおよびコマンドを伝送することが可能な別の任意のネットワーク構成が含まれる。ネットワーク１４内の通信は有線系通信システムあるいは無線系通信システムを含む通信媒体を利用しておこなわれる。たとえば通信媒体は、通信チャネル、無線電波、マイクロ波、有線送信、光ファイバ送信あるいはデータ、音声、映像を送信することができる任意の通信媒体である。
【００２３】
ソースホスト１６、応対ホスト１８およびターゲットホスト２０は、ネットワーク１４を介して通信接続できる任意の形式のコンピュータ装置あるい同様のハードウェアである。たとえば、ソースホスト１６、応対ホスト１８およびターゲットホスト２０は、携帯電話や個人情報端末あるいはその他の装置などの無線通信ができるコードレス装置である。また、ソースホスト１６、応対ホスト１８およびターゲットホスト２０は、パーソナルコンピュータやサーバコンピュータあるいはその他の装置などのネットワークを介して有線通信ができる装置である。装置が有線通信および無線通信の両方を行うことができることもある。
図１では３台のホスト装置だけが図示されているが、ネットワーク１４上では、任意の数のホスト装置が通信および、ソケットマイグレーションアーキテクチャ１０を使用することができる。
【００２４】
図１のように本実施形態において、ソースホスト１６、応対ホスト１８およびターゲットホスト２０はそれぞれソケットマイグレーションアーキテクチャ１０を有する。ホスト１６、１８、２０によるネットワーク１４を介したデータ通信は、ホスト１６、１８および２０で動作するアプリケーション２２によって生成され、ホスト１６、１８、２０で動作するアプリケーション２２に向けられている。
【００２５】
アプリケーション２２は、ソフトウェア、ファームウェアあるいは別のコンピュータコード形式をとり、ホスト１６、１８および２０が実行することができるオペレーティングシステムおよび任意のアプリケーションを含む。ここで使われているように”アプリケーション”という用語は、実行可能プログラムおよび、実行可能プログラムとともに動作する任意の付随データファイルのことを意味する。
たとえば、ユーザは携帯電話などのホスト１６、１８、２０を起動する。携帯電話が起動されると、携帯電話で利用できるダイヤル呼出しや受話機能を提供するアプリケーション２２が起動する。また、双方向メッセージサービス、インターネットブラウザ、電子メールサービス、株式情報サービス、音楽サービスあるいはホスト１６、１８、２０で動作する別の機能を有するアプリケーションをユーザは起動することができる。
【００２６】
本好適実施形態のソケットマイグレーションアーキテクチャ―１０において、アプリケーション２２は移動可能である。アプリケーション２２の移動に伴い、動作しているアプリケーションのインスタンスがソース装置からターゲット装置に移動する。以下、「”ソース”ホスト１６」および「”ターゲット”ホスト２０」という”記述的”用語を用いてさらに移動の概念を説明する。また、「”応対”ホスト１８」という用語を、移動前にソースホスト１６と移動後にターゲットホスト２０とピアツーピア通信するホストを示す用語として用いる。
【００２７】
本好適実施形態によれば、各アプリケーション２２はマイグレータブルソケット２４を利用して、他のアプリケーション２２との間でネットワーク１４を介した通信を成立させる。マイグレータブルソケット２４はホスト１６、１８、２０内で動作し、アプリケーション２２とネットワーク１４との間にインターフェースを提供する。マイグレータブルソケット２４は、ホスト１６、１８、２０内の、ポート、ソケット、従来からある他の通信関連構成要素を利用して、ネットワーク１４を介して通信をおこなう。マイグレータブルソケット２４は、ホスト１６、１８、２０内で動作するアプリケーション２２の動作に基づいて、動作する。
【００２８】
アプリケーション２２はネットワーク１４を介して相互に通信し、ピアツーピア通信を生成させる。ピアツーピア通信は、”ピア”マイグレータブルソケット２４を使用して生成される。ここで使われているように、「”ピア”マイグレータブルソケット」２４という用語は、異なるホスト１６、１８、２０で動作するアプリケーション２２と関連付けられ、ピアツーピア通信を構成しているマイグレータブルソケット２４のことを意味する。
たとえばソースホスト１６は、アプリケーション２２（すなわち、電子メールアプリケーションなどのクライアントアプリケーション）を起動する。クライアントアプリケーションは、応対ホスト１８上のアプリケーション２２（すなわち、電子メールサーバアプリケーションなどのサーバアプリケーション）と通信を始める。
【００２９】
ピアマイグレータブルソケット２４は、アプリケーション２２の間に関連付けリンクを形成する。関連付けリンクは、マイグレータブルソケット２４の間で交換される識別情報に基づいている。ピアマイグレータブルソケット２４により関連付けられるアプリケーション２２の個数は２以上であり、アプリケーション２２および通信プロトコルによって異なる。この識別情報により、アプリケーション２２が現に動作しているホスト１６、１８、２０を示す識別表示が提供される。識別情報として、ホストネームとポートナンバーの組、あるいは、ホスト１６、１８、２０を識別可能な通信システム１２における装置またはリソースに特有の任意の情報を用いることができる。
【００３０】
本好適実施形態において、各マイグレータブルソケット２４は、ホスト１６、１８、２０でそれぞれ起動されたアプリケーション２２と連携動作する。実際には、マイグレータブルソケット２４は、アプリケーション２２とともに１ホスト装置から別の装置に移動する。ピアマイグレータブルソケット２４が移動しても、アプリケーション２２の間の関連付けリンクは消滅しない。そのかわりに、アプリケーション２２の間のピアツーピア通信が中断する。詳細は以下で説明する。移動が完了すると、ピアマイグレータブルソケット２４は、関連付けリンクに基づいて、移動前のピアツーピア通信をアプリケーション２２の間で再び成立させる。移動後においてもアプリケーション２２の間の関連付けリンクが維持されているので、移動したアプリケーション２２のインスタンスの動作の連続性の維持および、ピアツーピア通信の再開を加速することができる。
【００３１】
通信システム１２の動作中に、ソースホスト１６および応対ホスト１８でアプリケーション２２が起動する。これらのアプリケーション２２は、関連付けられたピアマイグレータブルソケット２４を利用して、相互の間に関連付けリンクを形成する。
たとえば、ソースホスト１６は卓上コンピュータであって、ビデオオンデマンドアプリケーションが起動している。応対ホスト１８はサーバコンピュータであって、ビデオストリーミングサーバアプリケーションが動作している。
【００３２】
ソースホスト１６で動作しているアプリケーション２２がターゲットホスト２０に移動すると、アプリケーション２２に関連付けられたマイグレータブルソケット２４も図１の矢印２６で示されるように移動する。
たとえば、ソースホストを介してビデオオンデマンドサービスを視聴しているユーザが別の場所に移動しなければならない時に、ユーザは、連携動作するビデオオンデマンドアプリケーションおよびマイグレータブルソケット２４をユーザのＰＤＡ（ターゲットホスト２０）に移動させることができる。マイグレータブルソケット２４の移動に伴い、ソースホスト１６および応対ホスト１８で動作するアプリケーション２２間の通信が中断され、移動後に応対ホスト１８およびターゲットホスト２０で動作する同じアプリケーション２２の間で通信が再開する。
【００３３】
ソケットマイグレーションアーキテクチャ１０によれば、アプリケーション２２間の通信は移動後に途切れることなく再び成立することができる。また、マイグレータブルソケット２４の移動は、移動するアプリケーション２２および応対ホスト１８で動作するアプリケーションの双方からほとんど見えなくなっている。このように、ソケットマイグレーションアーキテクチャ１０により、アプリケーション開発者は移動可能なアプリケーションを容易に実装でき、移動後にピアツーピア通信を新しく生成させることが必要となる複雑なプログラミングを避けることができる。
【００３４】
図２は、図１に示される通信システム１２およびソケットマイグレーションアーキテクチャ１０をより詳細に説明するブロック図である。既に述べたように、通信システム１２はネットワーク１４ならびに、少なくとも一つの第１のホスト（ソースホスト１６）と少なくとも一つの第２のホスト（応対ホスト１８）および少なくとも一つの第３のホスト（ターゲットホスト２０）を有する。また、ソケットマイグレーションアーキテクチャ１０は通信システム１２内で動作する。
【００３５】
ソケットマイグレーションアーキテクチャ１０は、アプリケーション２２およびマイグレータブルソケット２４を既に述べたように有し、さらに同期バッファ３０を有する。同期バッファ３０とは、連続受信したデータを記憶することができる任意の記憶媒体である。ソケットマイグレーションアーキテクチャ１０において、同期バッファ３０はピアマイグレータブルソケット２４と連携動作し、アプリケーション２２間でネットワーク１４を介して伝送されるデータを記憶する。詳細は以下で説明する。
【００３６】
図２の実施形態におけるソケットマイグレーションアーキテクチャ１０は、ソースホスト１６上で連携動作する第１のアプリケーション２２ａ、第１のマイグレータブルソケット２４ａおよび第１の同期バッファ３０ａを有し、応対ホスト１８上で連携動作する第２のアプリケーション２２ｂ、第２のマイグレータブルソケット２４ｂおよび第２の同期バッファ３０ｂを有する。第１および第２のアプリケーション２２ａ、２２ｂの間でピアツーピア通信が成立し、第１および第２のマイグレータブルソケット２４ａ、２４ｂの間に関連付けリンクが生成される。すなわち、第１および第２のマイグレータブルソケット２４ａ、２４ｂの間で識別情報がネットワーク１４を介して交換されて、この識別情報に基づいて関連付けリンクが生成される。
【００３７】
本実施形態において、第１および第２のマイグレータブルソケット２４ａ、２４ｂが伝送制御プロトコル（ＴＣＰ）接続を介して第１および第２のアプリケーション２２ａ、２２ｂの間に関連付けを形成する。ＴＣＰ接続は、ピアマイグレータブルソケット２４（第１および第２のマイグレータブルソケット２４ａ、２４ｂ）の間をネットワーク１４を介してつなげる仮想的なパイプライン（通信チャネル）として機能する。ＴＣＰ接続により通信チャネルが与えられると、通信チャネルを介して第１および第２のアプリケーション２２ａ、２２ｂはデータの送受信をすることができる。１つのＴＣＰ接続は２つのソケットピアを有し、それぞれを第１および第２のマイグレータブルソケット２４ａ、２４ｂと称す。なお、確実性とストリーム特性を備える任意の別通信プロトコルをピア間の接続に利用することもできる。
【００３８】
ＴＣＰは業界標準の通信プロトコルであり、各ＴＣＰソケットピアがホスト装置のポートと関連付けられるという特徴がある。ＴＣＰ通信プロトコルはハイパーテキスト伝送プロトコル（ＨＴＴＰ）などのメッセージプロトコルをカプセル化して、メッセージプロトコルにおける接続管理および確実な配信を可能にしている。さらに、メッセージプロトコルおよびＴＣＰ通信プロトコルがネットワークプロトコルによってカプセル化されているので、各ＴＣＰソケットピアが所在している装置が識別できる。代表的なネットワークプロトコルにはインターネットプロトコル（ＩＰ）がある。このように、ネットワークプロトコルがホストの識別表示を提供するので、ＴＣＰソケットピアが動作しているホストは識別可能である。たとえばＩＰネットワークプロトコルは、ＴＣＰプロトコルに対してホストＩＰアドレスを含むようにＴＣＰヘッダを合成する。
ところが、標準通信プロトコルＴＣＰは、２つのピア間にＴＣＰ接続が成立した後にＴＣＰソケットピアのホストＩＰアドレスおよびポートアドレスが変化する場合について規定していない。
ＴＣＰを含む標準通信プロトコルはＯＳＩ階層モデルのトランスポート層で動作し、ＩＰを含む標準ネットワークプロトコルは同モデルのネットワーク層で動作する。よく知られているように、ＯＳＩ階層モデルとは、７層を規定するネットワークの抽象モデルである。
【００３９】
本好適実施形態において、各マイグレータブルソケット２４はアクティブソケット３２およびローミングソケットモジュール３４を有する。アクティブソケット３２はＯＳＩ階層モデルの第４層で動作する従来のＴＣＰソケットピアと同じものである。アクティブソケット３２は、ピアマイグレータブルソケット２４間に形成されたＴＣＰ接続を介してデータストリームの送受信を行うことができる。ＴＣＰソケットピアはアプリケーション２２と連携動作するアプリケーションによって与えられるデータに基づいて、ネットワーク１４を介して出力データストリームを送信することができる。またＴＣＰソケットピアは連携動作するアプリケーションに向けられた入力データストリームをネットワーク１４から受信することができる。さらに、アクティブソケット３２のＴＣＰソケットピアとしての動作には、入出力データストリームの保持、スライディングウィンドウ・フロー制御、全二重動作、ラウンドトリップタイム評価、およびＴＣＰ通信プロトコルに特徴的な他の動作が含まれる。
【００４０】
アクティブソケット３２は、ピアＴＣＰソケットとの間で、アプリケーション２２が現に動作しているホスト１６、１８、２０のホストアドレスおよびポートアドレスを使う３ウェイハンドシェークを利用してＴＣＰ接続を成立させる。よく知られているように従来のＴＣＰ接続の成立時には、サーバソケットを介して、クライアントアプリケーションとサーバアプリケーションとの間で接触が始まる。クライアントアプリケーションあるいはサーバアプリケーションのいずれかは、接触を始めるためにサーバソケットをオープンする。サーバソケットを相手とする３ウェイハンドシェークが実行されると、接触が始まる。３ウェイハンドシェークは標準ＴＣＰ通信プロトコルの一部であり、クライアントアプリケーションおよびサーバアプリケーションの双方から見えなくなっている。サーバソケットを介して接触が始まると、ソケットがオープンされ、クライアントアプリケーションとサーバアプリケーションとの間でＴＣＰ接続が成立する。
ここで説明した実施形態においてアプリケーション２２は、サーバアプリケーションとしてソケット（アクティブソケット３２）とともに動作することもあれば、クライアントアプリケーションとして動作することもある。また、サーバアプリケーションとして動作するアプリケーション２２はサーバソケットを有する。
【００４１】
本実施形態におけるアクティブソケット３２は、ＪａｖａＴＣＰソケットアプリケーションインターフェース（ＡＰＩ）を使用してインスタンス化されたＪａｖａＴＣＰソケットである。Ｊａｖａ（登録商標）は、Ｊａｖａバーチャルマシンをサポートする任意の装置で動く公知のオブジェクト指向プログラミング言語である。よく知られているようにＪａｖａＡＰＩは、Ｊａｖａで記述されたアプリケーションに広範囲の機能を与える既成のソフトウェアコンポーネントの巨大な集まりである。本実施形態では、アクティブソケット３２はｊａｖａ．ｎｅｔ．ＳｅｒｖｅｒＳｏｃｋｅｔクラスによりインスタンス化されるＪａｖａＴＣＰソケットである。なお、アクティブソケット３２はＵＮＩＸ（登録商標）、Ｃ言語、あるいは別のプログラミング言語でインスタンス化されることもある。
【００４２】
各ローミングソケットモジュール３４がアクティブソケット３２に関連付けられると、各ローミングソケットモジュール３４は移動可能になる。本好適実施形態におけるローミングソケットモジュール３４によれば、２つのＴＣＰソケットピアのそれぞれがピアマイグレータブルソケット２４内のアクティブソケット３２である２つのＴＣＰソケットピア間に抽象ＴＣＰ接続を成立させることができる。したがって、ＴＣＰソケットピアと関連付けられた各ローミングソケットモジュール３４は、「”ピア”ローミングソケットモジュール」３４と記される。
【００４３】
関連付けリンクの成立に伴って抽象ＴＣＰ接続が成立する。関連付けリンクは、ピアローミングソケットモジュール３４間でオブジェクト参照が交換されることにより生成される。本実施形態では、識別情報が各ローミングソケットモジュール３４のオブジェクト参照として交換されるが、ピアローミングソケットモジュール３４の実行状態がＴＣＰ接続を介して交換されることもある。または、各ピアローミングソケットモジュール３４が動作しているホスト装置のホストアドレスとポートアドレスがＴＣＰ接続を介して交換されることもある。さらにネットワーク１４内のホスト１６、１８、２０で動作するアプリケーションの間の通信チャネルを識別できる別の情報がピアローミングソケットモジュール３４の間で交換されることもある。
【００４４】
抽象ＴＣＰ接続していることにより、ホスト１６、１８、２０の間でマイグレータブルソケット２４はピア間の抽象接続を維持したまま移動できる。言い換えると、ピアマイグレータブルソケット２４の一つが、別の装置でインスタンス化されているピアマイグレータブルソケット２４との抽象接続を維持したまま、動作するホストをホスト１６、１８、２０の中から（たとえば、ホストアドレス／ポートアドレスを変更することにより）変更することができる。したがって、関連付けられたＴＣＰ接続は、効率良くアプリケーション２２とともに移動できる。
【００４５】
ローミングソケットモジュール３４は、ＯＳＩ階層モデルの第５層（セッション層）と第６層（プレゼンテーション層）および第７層（アプリケーション層）にわたって動作することができる。また、関連付けられたアクティブソケット３２が利用するＴＣＰ通信プロトコルは、ＯＳＩ階層モデルの第４層で動作する。したがって、ローミングソケットモジュール３４がＴＣＰ通信プロトコルを変更することはない。そのかわり、ローミングソケットモジュール３４はアクティブソケット３２の上に構築され、カプセル化およびアクティブソケット３２の動作全般の制御をおこなう。
【００４６】
図２に示される実施形態において、第１のマイグレータブルソケット２４ａは、第１のアクティブソケット３２ａおよび第１のローミングソケットモジュール３４ａを有する。また、第２のマイグレータブルソケット２４ｂは、第２のアクティブソケット３２ｂおよび第２のローミングソケットモジュール３４ｂを有する。第１および第２のローミングソケットモジュール３４ａ、３４ｂは、第１および第２のアクティブソケット３２ａ、３２ｂのオープン／クローズをそれぞれ指示することができる。また、第１のローミングソケットモジュール３４ａは、第１のアクティブソケット３２ａと第１のローミングソケットモジュール３４ａとの間のデータの入出力を制御することができ、第２のローミングソケットモジュール３４ｂは、第２のアクティブソケット３２ｂと第２のローミングソケットモジュール３４ｂとの間のデータの入出力を制御することができる。さらに、第１および第２のローミングソケットモジュール３４ａ、３４ｂは、第１および第２のアクティブソケット３２ａ、３２ｂをそれぞれ使用してネットワークを介して通信することができる。
【００４７】
たとえば、図２に示される実施形態において、第１および第２のアプリケーション２２ａ、２２ｂは、第１および第２のローミングソケットモジュール３４ａ、３４ｂをそれぞれ使用して、第１および第２のアクティブソケット３２ａ、３２ｂをオープンする。第１および第２のアクティブソケット３２ａ、３２ｂは、その間にＴＣＰ接続が成立すると、それぞれＴＣＰソケットピアとなる。このＴＣＰソケットピア（第１および第２のアクティブソケット３２ａ、３２ｂ）の間に成立したＴＣＰ接続を使用して、第１および第２のローミングソケットモジュール３４ａ、３４ｂは関連付けリンクを生成する。この時、第１および第２のローミングソケットモジュール３４ａ、３４ｂの間で識別情報が交換され、この識別情報に基づいて関連付けリンクが生成される。以下、このＴＣＰ接続例について構成および動作を詳細に説明するが、通信システム１２内のホスト装置で動作する任意の別のアプリケーションともＴＣＰ接続を形成することができることを注意しておく。
【００４８】
ローミングソケットモジュール３４は、アプリケーション２２および関連付けられたＴＣＰ接続が移動中にデータの喪失（たとえば、パケットの喪失）を起こさないようにできる。すなわち、同期バッファ３０をマイグレータブルソケット２４およびマイグレータブルソケット２４とともに連携動作させることにより、移動中のデータの喪失を避けることができる。
たとえば第１のアプリケーション２２ａが移動を開始する場合、第１のローミングソケットモジュール３４は第１のアクティブソケット３２ａにクローズメッセージを送る。第１のアクティブソケット３２ａは、ＴＣＰ接続の標準的なクローズ過程にしたがってＴＣＰソケットピア（たとえば、第２のアクティブソケット３２ｂ）にクローズメッセ―ジを送り、第１のアクティブソケット３２ａ内に保持されていたデータをフラッシュし、ＴＣＰソケットピアから送られてくるファイル終了標識を待つ。ファイル終了標識を受信すると、第１のアクティブソケット３２およびＴＣＰソケットピアは、ＴＣＰ接続を解消し、それぞれをクローズする。
【００４９】
各ローミングソケットモジュール３４は、さらにアプリケーション２２との間のデータの入出力を凍結することができる。すなわち移動中において、凍結されたアプリケーション２２は、マイグレータブルソケット２４との間のデータの読み書きを停止する。本実施形態では入出力データのそれぞれに応じて、連携動作するアプリケーション２２およびマイグレータブルソケット２４の間でローミングソケットモジュール３４を介して読み書き要求が伝送される。アプリケーション２２が凍結されると、ローミングソケットモジュール３４は移動が完了するまで、入出力データの流れを遮断する。
【００５０】
本好適実施形態では、データの入出力を凍結させてからＴＣＰ接続のクローズ処理を完了するので、移動速度と移動効率を向上できる。したがって、移動のための準備をしている間に、ＴＣＰソケットピアからフラッシュされたデータを含む入力データストリームがネットワーク１４を介して送信される。また、ファイルメッセージの最後に到るまで待機する処理およびフラッシュされたデータの受領確認をネットワークを介して送信する処理にかかる遅延を避けることができる。
【００５１】
ソケットマイグレーションアーキテクチャ１０におけるアクティブソケット３２によるＴＣＰ通信プロトコルに従ったデータ伝送が、ＴＣＰ通信プロトコルの信頼性を損ねることはない。つまり、アクティブソケット３２は、フラッシュされたデータを含む入力データストリームを、ファイル終了標識まで受信する。また、ＴＣＰソケットピアをクローズする前に、標準ＴＣＰ通信プロトコルに従って受領確認を送信する。
【００５２】
本実施形態において、入出力データの流れを凍結してからアクティブソケット３２をクローズしているので、クローズ処理中にピアＴＣＰソケットから与えられる入力データストリームがアプリケーション２２に渡ることはない。そのかわりに、ローミングソケットモジュール３４は、入力データストリームを同期バッファ３０につなげる。したがって、アプリケーション２２が凍結している間にマイグレータブルソケット２４がＴＣＰ接続を介して受信した任意の入力データストリームは同期バッファ３０に確実に取り込まれる。このようにデータの取り込みが効率的になされるので、アプリケーション２２および移動したアプリケーション２２とネットワークを介して通信しているアプリケーション２２の双方から移動が見えないようにしておきながら、高速かつ高効率な移動が可能である。
【００５３】
アプリケーション２２のホスト１６、１８、２０の間の移動は、アプリケーション２２と連携動作するローミングソケットモジュール３４および同期バッファ３０の移動を伴う。たとえば、図２に示される実施形態では、第１のアプリケーション２２ａ、第１のローミングソケットモジュール３４ａおよび第１の同期バッファ３０ａは符号化され、ネットワーク１４を介してソースホスト１６からターゲットホスト２０に、図の矢印３８に示されるように移動する。また、この移動は、第１のアプリケーション２２ａ、第１のローミングソケットモジュール３４ａおよび第１の同期バッファ３０ａを表す破線で描かれたボックスがターゲットホスト２０にあることによっても示されている。移動後に、第１のアプリケーション２２ａ、第１のローミングソケットモジュール３４ａおよび第１の同期バッファ３０ａが復号化され、そしてサーバソケット３６がインスタンス化されると、再びＴＣＰ接続が成立する。
【００５４】
本実施形態ではアプリケーションとしてＪａｖａアプリケーションを使用する。第１のローミングソケットモジュール３４ａおよび第１の同期バッファ３０ａの稼動状態がシリアライズされ、転送され、かつデシリアイズされ、さらにサーバソケット３６がインスタンス化される。本実施形態のサーバソケット３６は、ｊａｖａ．ｎｅｔ．ＳｅｒｖｅｒＳｏｃｋｅｔクラスを使用してインスタンス化される標準的なＪａｖａＴＣＰサーバソケットである。ところで、よく知られているように、Ｊａｖａのソケットをシリアライズあるいはデシリアイズすることはできない。本実施形態では、第１のローミングソケットモジュール３４ａ（あるいは、別のローミングソケットモジュール３４）の実行状態をシリアライズ／デシリアライズするためのメソッドにより、ソケット特有のシリアライズおよびデシリアライズが可能である。ファイル圧縮手法、テーブルに基づく符号化／復号手法あるいは別のデータ操作・伝送方法が、符号化／復号あるいはネットワーク１４を介した伝送のために利用されることもある。
【００５５】
移動およびサーバソケット３６がインスタンス化されると、移動した第１のローミングソケットモジュール３４ａは抽象ＴＣＰ接続として動作し、サーバソケット３６は、ローミングソケットモジュール３４ａの指示に従って、ネットワーク１４を介して再び通信をおこなう。すなわち、サーバソケット３６は、別のホスト１６、１８、２０で動作するピアローミングソケットモジュール３４と再び通信をおこなう。図２に示される実施形態で挙げられている例では、ローミングソケットモジュール３４ｂが移動前からピアローミングソケットモジュール３４である。移動した第１のローミングソケットモジュール３４ｂは、関連付けリンクにより生成された関連付けを利用して、サーバソケット３６を介して通信を再成立させる。言い換えると、識別情報を利用して、サーバソケット３６は応対ホスト１８で動作する第２のローミングソケットモジュール３４ｂと接触することができる。
【００５６】
本実施形態では、第１のローミングソケットモジュール３４ａによってインスタンス化されるサーバソケット３６は、ｊａｖａ．ｎｅｔ．ＳｅｒｖｅｒＳｏｃｋｅｔを使用してインスタンス化されるＪａｖａサーバソケットである。Ｊａｖａサーバソケットは、ポートアドレスとホストアドレスを第２のローミングソケットモジュール３４ｂおよび関連付けられた第２のアプリケーション２２ｂが動作している応対ホスト１８に送信することによって通信を始めることができる。本実施形態において、この送信はＪａｖａリモートメソッドコール（ＲＭＩ）によって実行される。第２のローミングソケットモジュール３４ｂが動作している応対ホスト１８は、第２のローミングソケットモジュール３４ｂのオブジェクト参照によって同定される。このオブジェクト参照は、移動前に成立する関連付けリンクにより与えられる。応対ホスト１８の同定および通信の開始には、別の方法あるいは仕組みを利用することもできる。
【００５７】
応対ホスト１８とサーバソケット３６が接触すると、第３のアクティブソケット３２ｃが応対ホスト１８でオープンされる。第３のアクティブソケット３２ｃおよびサーバソケット３６は、第１のローミングソケットモジュール３４ａと第２のローミングソケットモジュール３４ｂとの間に通信チャネルを提供する。この通信チャネルにより、第１のローミングソケットモジュール３４ａが第２のローミングソケットモジュール３４ｂに識別情報を送信することができる。第２のローミングソケットモジュール３４ｂは、この識別情報を第３のアクティブソケット３２ｃに与える。第３のアクティブソケット３２ｃは、この識別情報を利用してサーバソケット３６と通信し、ＴＣＰで標準となっている３ウェイハンドシェ―クを使用してＴＣＰ接続を再び成立させる。ハンドシェ―ク中に、第４のアクティブソケット３２ｄがターゲットホスト２０でオープンされ、ターゲットホスト２０と応対ホスト１８との間で、従来のＴＣＰ通信プロトコルと同様に、ＴＣＰ接続が再び成立する。ＴＣＰ接続が再び成立すると、ピアローミングソケットモジュール３４の間で現在の識別情報を交換することによって、関連付けリンクも再び成立する。
【００５８】
関連付けリンクが再び成立すると、第１および第２の同期バッファ３０ａ、３０ｂのそれぞれに記憶されていたフラッシュされたデータがアプリケーション２２ａ、２２ｂのそれぞれに提供され、つづいて、再び成立したＴＣＰ接続から第１および第２のアプリケーション２２ａ、２２ｂに入力データが提供される。フラッシュされたデータは、第１および第２のローミングソケットモジュール３４ａ、３４ｂのそれぞれによって引き出され、第１および第２のアプリケーション２２ａ、２２ｂのそれぞれに提供される。したがって、デ―タの喪失を伴うことなく、伝送された順番にしたがって第１および第２のアプリケーション２２ａ、２２ｂにデータが提供される。
【００５９】
通信システム１２が動作中に、ホスト１６、１８、２０でアプリケーションが起動すると、ローミングソケットモジュール３４がアクティブソケット３２を生成する。本実施形態では、ローミングソケットモジュールはＪａｖａアプリケーションであり、アクティブソケットはＪａｖａ　ＴＣＰソケットである。ローミングソケットモジュール３４のアプリケーションインターフェース（ＡＰＩ）は、アクティブソケット３２で動作するｊａｖａ．ｎｅｔ．ｓｏｃｋｅｔクラスを拡張するラッパークラスを有する。また、ローミングソケットモジュール３４は、サーバソケット３６が移動した後にインスタンス化されるようにｊａｖａ．ｎｅｔ．ＳｅｒｖｅｒＳｏｃｋｅｔクラスを拡張するラッパークラスを有する。本実施形態におけるラッパークラスは、ラップされる対象となるクラスと同様のメソッドインターフェースを有するから、アプリケーション開発者は容易にラッパークラスを実装することができる。
【００６０】
図３は、図２に示されるソケットマイグレーションアーキテクチャ１０における移動動作を説明する流れ図である。以下、第１のアプリケーション２２ａがソースホスト１６からターゲットホスト２０に移動する場合を例に動作を説明する。ここでは、第１のマイグレータブルソケット２４ａが移動することにより、ＴＣＰ接続は抽象的に移動する。
【００６１】
まず、第１のアプリケーション２２ａは、ソースホスト１６からターゲットホスト２０に移動を開始する（ステップ１００）。ソースホスト１６の上で第１のアプリケーション２２ａの入出力データフローが凍結される（ステップ１０２）。第１のローミングソケットモジュール３４ａが第１のアクティブソケット３２ａのクローズ処理を開始する（ステップ１０４）。第１のアクティブソケット３２ａは、応対ホスト１８で動作するピアアクティブソケット３２（第２のアクティブソケット）にクローズメッセージを送る（ステップ１０６）。第１のアクティブソケット３２ａからデータがフラッシュされる（ステップ１０８）。また、応対ホスト１８で動作するピアローミングソケットモジュール３４（第２のローミングソケットモジュール３４ｂ）は、応対ホスト１８で動作するアプリケーション２２（第２のアプリケーション２２ｂ）の入出力データフローを、クローズメッセージに基づいて凍結する（ステップ１１０）。応対ホスト１８上で、クローズメッセージに基づいてピアアクティブソケット（第２のアクティブソケット３２ｂ）からデータがフラッシュされる（ステップ１１２）。
【００６２】
ソースホスト１６および応対ホスト１８上で、ピアアクティブソケット３２（それぞれ第１および第２のアクティブソケット３２ａ、３２ｂ）はフラッシュされたデータを含むそれぞれへの入力データストリームを受信する（ステップ１１４）。フラッシュされたデータはソースホスト１６および応対ホスト１８上でピアアクティブソケット３２（それぞれ第１および第２のアクティブソケット３２ａ、３２ｂ）によって読み取られる（ステップ１１６）。フラッシュされたデータは、ソースホスト１６および応対ホスト１８のそれぞれにある同期バッファ３０（それぞれ第１および第２の同期バッファ３０ａ、３０ｂ）に記憶される（ステップ１１８）。
【００６３】
ソースホスト１６および応対ホスト１８上で、ピアアクティブソケット３２（それぞれ、第１および第２のアクティブソケット３２ａ、３２ｂと称す）はＴＣＰ接続をクローズして解消する（ステップ１２０）。ソースホスト１６で動作する第１のアプリケーション２２ａと第１のローミングソケットモジュール３４ａおよび第１の同期バッファ３０ａは、図２に矢印３８で示されるように、ターゲットホスト２０に移動する（ステップ１２２）。第１のアプリケーション２２ａと第１のローミングソケットモジュール３４ａおよび第１の同期バッファ３０ａは、ターゲットホスト２０でインスタンス化される（ステップ１２４）。
【００６４】
続いて図４を参照する。第１のローミングソケットモジュール３４ａは、ターゲットホスト２０上で、通信システムにより割当てられたポートアドレスにサーバソケット３６を生成する（ステップ１２８）。サーバソケット３６は、第１のローミングソケットモジュール３４ａの指示に従って、ネットワーク１４を介して通信開始メッセージを送信する（ステップ１３０）。第１のローミングソケットモジュール３４ａによって与えられる識別情報に基づいて、通信開始メッセージが応対ホスト１８により受信される（ステップ１３２）。
【００６５】
応対ホスト１８上でアクティブソケット３２（図２における第３のアクティブソケット３２ｃ）が、第２のローミングソケットモジュールによってオープンされる（ステップ１３４）。第３のアクティブソケット３２ｃはターゲットホスト２０上のサーバソケット３６と３ウェイハンドシェ−クを開始する（ステップ１３６）。ターゲットホスト２０上でアクティブソケット３２（図２における第４のアクティブソケット）がオープンされる（ステップ１３８）。ターゲットホスト２０上の第４のアクティブソケットと応対ホスト１８上の第３のアクティブソケットとの間に接続が成立する（ステップ１４０）。ターゲットホスト２０および応対ホスト１８で動作する第１および第２のローミングソケットモジュール３４ａ、３４ｂの間で識別情報を交換することにより関連付けリンクが更新される（ステップ１４２）。
【００６６】
＜第２実施形態＞
図５は、本発明の第２実施形態におけるソケットマイグレーションアーキテクチャ１０を有する通信システム１２を説明するブロック図である。通信システム１２は、既に述べた第１実施形態のように、少なくとも一つの第１のホスト装置（ホスト装置１６）と少なくとも一つの第２のホスト装置（応対ホスト１８）および少なくとも一つの第３のホスト装置（ターゲットホスト２０）を有し、各ホスト装置はネットワーク１４と接続して動作することができる。ソケットマイグレーションアーキテクチャ１０はアプリケーション２２およびマイグレータブルソケット２４を有する。各マイグレータブルソケット２４は、既に述べた第１実施形態のように、アクティブソケット３２およびローミングソケットモジュール３４を有する。さらに、本実施形態におけるソケットマイグレーションアーキテクチャ１０は、各マイグレータブルソケット２４と連携動作する関連付けテーブル４０も有する。なお、図５にはホスト１６、１８、２０の３ホストのみが記載されているが、通信システム１２は任意の数のホスト装置から構成されていても良い。このことは第１実施形態でも同様である。
【００６７】
図示されている実施形態では、ソースホスト１６内で動作しているソケットマイグレーションアーキテクチャ１０は、応対ホスト１８との関連付けリンクを形成する。この実施形態において、ソースホスト１６は第１のアプリケーション２２ａと第１の関連付けテーブル４０ａおよび第１のマイグレータブルソケット２４ａを有する。第１のマイグレータブルソケット２４ａは第１のアクティブソケット３２ａおよび第１のローミングソケットモジュール３４ａを有する。また、応対ホスト１８は第２のアプリケーション２２ｂと第２の関連付けテーブル４０ｂおよび第２のマイグレータブルソケット２４ｂを有する。第２のマイグレータブルソケット２４ｂも同様に、第２のアクティブソケット３２ｂおよび第２のローミングソケットモジュール３４ｂを有する。
【００６８】
第１のマイグレータブルソケット２４ａに、通信プロトコルに従ったネットワーク１４を介したピアツーピア通信によって、第２のマイグレータブルソケット２４ｂを関連付けることにより、関連付けリンクを形成することができる。本実施形態では通信プロトコルとしてユーザデータグラムプロトコル（ＵＤＰ）を使用し、第１および第２のアクティブソケット３２ａ、３２ｂは、ＵＤＰに従って、ネットワーク１４を介して通信をおこなう。ＵＤＰはＴＣＰ同様に業界標準のＯＳＩ階層モデルの第４層（トランスポート層）で働く通信プロトコルであり、アクティブソケット３２とともに動作する。第１および第２のアクティブソケット３２ａ、３２ｂはＵＤＰソケットピアとして動作し、ＩＰによってカプセル化されたＵＤＰを使用して、ＵＤＰソケットピアが動作しているホスト装置１６、１８、２０のホストアドレスおよびポートアドレスを識別する。
ＵＤＰの代表的な利用例は、音声あるいはマルチメディア情報の通信である。しかしＵＤＰは、ネットワーク１４を介するデータパケットの伝送であればいずれにおいても利用できる。
【００６９】
ＴＣＰとは異なりＵＤＰはコネクションレスである。すなわちＵＤＰソケットは、ＴＣＰとは異なり、接続が明白に成立することなく、別のＵＤＰソケットとの間でデータパケット（データグラムとも称す）を送受信できる。このようにＵＤＰソケットが別のＵＤＰソケットとの接続の設定を必要としないので、ＵＤＰソケットは各出力データパケットについてピアＵＤＰソケットのアドレスを、ホストアドレスとポートアドレスとの組の形で指定する。
代表的なＵＤＰソケットには、ＪａｖａＵＤＰクラスｊａｖａ．ｎｅｔ．ＤａｔａｇｒａｍＳｏｃｋｅｔのｃｏｎｎｅｃｔ（）メソッドでインスタンス化されたＪａｖａＵＤＰソケット、および、ＢＳＤ　ＵＮＩＸのｃｏｎｎｅｃｔ（）システムコールによりインスタンス化されたＵＮＩＸ　ＵＤＰソケットがある。
【００７０】
ＵＤＰがコネクションレスであるから、マイグレータブルソケット２４は関連付けられたアプリケーションとともに移動することが好ましい。マイグレータブルソケット２４が移動することにより、アプリケーションの開発者からアプリケーションの移動が見えなくなり、アプリケーション２２そのものからもアプリケーションの移動が見えなくなる。
第２実施形態においてローミングソケットモジュール３４は、アクティブソケット３２の上位、ＯＳＩ階層モデルの第５、第６あるいは第７層（すなわち、セッション層、プレゼンテーション層、あるいはアプリケーション層）で動作する。この点はＴＣＰが関係する既に述べた第１実施形態と同様である。このように、第２実施形態においても、ＵＤＰ通信プロトコルの変更およびホスト装置のオペレーティングシステムの変更を回避することができている。
【００７１】
ローミングソケットモジュール３４は、Ｊａｖａアプリケーションを使用してインスタンス化してもよい。この場合、ローミングソケットモジュール３４に対するＪａｖａアプリケーションのメソッドはｊａｖａ．ｎｅｔ．ＤａｔａｇｒａｍＳｏｃｋｅｔクラスを拡張するラッパークラスである。あるいは、ラッパークラスに同様なメソッドインターフェースをｊａｖａ．ｎｅｔ．ＤａｔａｇｒａｍＳｏｃｋｅｔクラスに持たせるように設計しても良い。このように、アプリケーション開発者は、開発中のアプリケーションに移動性を実装する場合に、容易にラッパークラスを適用できる。
【００７２】
ローミングソケットモジュール３４は、ピアアクティブソケット３２を利用して、ピアローミングソケットモジュール３４とピアツーピア通信をおこなう。またローミングソケットモジュール３４により、ＵＤＰソケットピア（第１および第２のアクティブソケット３２ａ、３２ｂ）間にソケット層レベルでの関連付けが提供される。
【００７３】
第２実施形態において、複数の関連付けについてＵＤＰソケットピア間の関連付けリンクが提供される。ＴＣＰ類似の接続におけるハンドシェ−クなどとは異なり、関連付けリンクと現実に接続が成立することとは関係がない。むしろ、本実施形態において関連付けリンクとは、ＵＤＰソケットが関連付けられたＵＤＰソケットピアとの間でパケットの送受信ができることを単に意味する。このような抽象的なＵＤＰ関連付けが、関連付けられたＵＤＰソケットピア（アクティブソケット３２）間にローミングソケットモジュール３４によって生成される。したがって任意のソケットピアは、任意の数のＵＤＰソケットピアとの抽象的ＵＤＰ関連付けを維持しながら、ホストアドレスおよびポートアドレスの組などを交換することができる。なお抽象的関連付けは、既に述べた第１実施形態と同様に、識別情報を使用してアプリケーション２２の間に生成される。
【００７４】
この抽象的関連付けにより仮想接続ができるようになる。この仮想接続はいかなる接続も明示的に設定することなく生成される。その代わりに、ピアローミングソケットモジュール３４間でメッセージが交換されることによって関連付けリンクが設定される。
【００７５】
メッセージが交換されることにより識別情報が提供され、移動後に利用することができる。
関連付けリンクを形成するために提供された識別情報は関連付けテーブル４０に記憶されることが好ましい。各関連付けテーブル４０は、ホスト装置１６、１８、２０の上で、ローミングソケットモジュール３４と連携動作する。関連付けテーブル４０に記憶された識別情報には、移動前に関連付けられていたローミングソケットモジュール３４が現に動作しているホスト装置１６、１８、２０のネットワーク１４における位置を識別することができるアドレスを含めることができる。たとえば、第１および第２のローミングソケットモジュール３４ａ、３４ｂが移動前に関連付けられていた場合、第１および第２の関連付けテーブル４０ａ、４０ｂは応対ホスト１８とソースホスト１６のホストアドレスをそれぞれ含んでいる。
【００７６】
第２実施形態において、ローミングソケットモジュール３４は関連付けリンクを要求することを希望し、要求先のローミングソケットモジュール３４からデータパケット（データグラム）が送られてくるのを待ち受ける。要求元のローミングソケットモジュール３４は、このデータパケットを受信すると、関連付け要求メッセージを送信する。要求先のローミングソケットモジュール３４は、関連付け要求メッセージを受信すると、この要求を受理するか／拒絶するかを判断する。たとえばこの判断は、アプリケーション２２または、アプリケーション２２を動作させているユーザ、あるいはその他の要因に基づいておこなわれる。要求の受理／拒絶を含む関連付け確認メッセージが要求を出したローミングソケットモジュール３４に送信される。要求が受理された場合、識別情報を含んだメッセージが交換され、関連付けリンクが形成される。
【００７７】
ところで、ＵＤＰは信頼性を保証しない通信プロトコルであるから、要求メッセージおよび要求確認メッセージはネットワーク１４で取りこぼされる可能性がある。また、ローミングソケットモジュール３４間の関連付けをできる限り非同期でおこなえるようにするために、要求の再送信についてタイムアウト手順を利用しないことが好ましい。その代わりに本実施形態においては、関連付け確認メッセージを待ち受け中に別のデータパケットを受信すると、要求が再送信される。なお、タイムアウト手順を含む別のエラーチェック方法を利用しても良い。
【００７８】
図示されている実施形態では、第１のローミングソケットモジュール３４ａと第２のローミングソケットモジュール３４ｂとの間に関連付けリンクが形成されているが、ＵＤＰソケットとして動作している別のマイグレータブルソケット２４と関連付けリンクがさらに形成されることもある。このようにマイグレータブルソケット２４により、Ｊａｖａ（登録商標）およびＢＳＤ　ＵＮＩＸなどで規定されるＵＤＰソケット間のソケットピアの関連付けについての従来の定義を変更することができるようになる。この変更により、ひとつのＵＤＰソケットは２以上のＵＤＰソケットピアと関連付けられることができる。したがってマイグレータブルソケット２４によって、いわゆるチャットルームソフトなどの、ひとつのＵＤＰソケットが複数のＵＤＰソケットピアと関連付けることができるアプリケーションが移動可能になる。
また、第２の実施形態におけるソケットマイグレーションアーキテクチャ１０によれば、アプリケーション２２とアプリケーション２２および連携動作するマイグレータブルソケット２４がホスト装置からホスト装置へと移動する場合に、移動を追跡して通信システム１２内におけるアプリケーション２２およびマイグレータブルソケット２４の現在位置を更新することができる。
【００７９】
図６は、図５に示される通信システム１２のソケットマイグレーションアーキテクチャ１０における、マイグレータブルソケット２４の関連付け動作を説明する流れ図である。以下、応対ホスト１８で動作する第２のアプリケーション２２ｂおよび第２のマイグレータブルソケット２４ｂが、ソースホスト１６で動作する第１のアプリケーション２２ａおよび第１のマイグレータブルソケット２４ａとネットワーク１４を介して通信を始める場合を例に動作を説明する。ここで、ネットワーク１４上のソースホスト１６を識別するために応対ホスト１８で動作するソケットマイグレーションアーキテクチャ１０にホストアドレスあるいは他の識別情報が与えられる。
なお、別の動作例として、任意のホスト装置で動作する任意のアプリケーション２２が、他のホスト装置で動作する任意の数の他のアプリケーションと関連付けられることも考えられる。
【００８０】
図５および図６を参照して、マイグレータブルソケット２４の関連付け動作を説明する。
まず、データパケットが、第２のローミングソケットモジュール３４ｂからネットワーク１４を介して第１のローミングソケットモジュール３４ａに第２および第１のアクティブソケット３２ｂ、３２ａをそれぞれ使用して送信される（ステップ２００）。このデータパケットに応じて、第１のローミングソケットモジュール３４ａは、関連付け要求メッセージを第２のローミングソケットモジュール３４ｂに送信する（ステップ２０２）。関連付け要求メッセージを受信すると、第２のローミングソケットモジュール３４ｂは、関連付けが好ましいかどうかを判断する（ステップ２０４）。関連付けが好ましくない場合、要求を拒絶する関連付け要求確認メッセージが第１のローミングソケットモジュール３４ａに送信され（ステップ２０６）、関連付け動作が終了する（ステップ２０８）。
【００８１】
関連付けが好ましい場合、第２のローミングソケットモジュール３４ｂが第１のローミングソケットモジュール３４ａに要求確認メッセージを送信し、第１のローミングソケットモジュール３４ａが要求確認メッセージを受領する（ステップ２１０）。第１のローミングソケットモジュール３４ａは、第２のローミングソケットモジュールから受領した要求確認メッセージが要求確認メッセージそのものではなく、別のデータパケットの受信であるかどうかを判断する（ステップ２１２）。別のデータパケットを受信した場合、ステップ２０２に戻り、第１のローミングソケットモジュール３４ａは、もう一度関連付け要求メッセージを送信する。要求確認メッセージそのものである場合、第１および第２のローミングソケットモジュール３４ａ、３４ｂは識別情報を含むメッセージを交換して、関連付けリンクを設定する（ステップ２１４）。
【００８２】
再度、図５を参照して、アプリケーション２２とともに動作するローミングソケットモジュール３４および関連付けテーブル４０が、アプリケーション２２が移動する時に、移動する動作を説明する。
よく知られているように、ＵＤＰプロトコルは通信の信頼性を保証しない。したがって、ＵＤＰソケットマイグレーションの間にデータパケットが失われることもある。ローミングソケットモジュール３４に通信の信頼性が実装されていないこともある。また、ＵＤＰプロトコルでは、アクティブソケット３２の凍結およびフラッシングは必要ではなく、この点はＴＣＰ通信プロトコルを利用する既に述べた第１実施形態と違っている。
【００８３】
ＵＤＰ通信プロトコルを使用する実施形態において、ローミングソケットモジュール３４の稼動状態は、移動の間符号化され、連携動作するアプリケーション２２とともに移動する。また、ローミングソケットモジュール３４と連携動作する関連付けテーブル４０も符号化されともに移動する。この符号化には、ｊａｖａ．ｉｏ．ｓｅｒｉａｌｉｚａｂｌｅインターフェースを使用して実行できるシリアライゼーションが含まれることもあれば、別の符号化方法が使用される場合もある。
【００８４】
移動後、移動したローミングソケットモジュール３４は、ネットワーク１４を介した通信のためにアクティブソケット３２を生成する。また、移動したローミングソケットモジュール３４は、移動した関連付けテーブル４０の識別情報に従って、移動前に関連付けられていたピアローミングソケットモジュール３４と再び通信を成立させる。移動したローミングソケットモジュール３４は再関連付けメッセージを送信し、その応答として送信されてくる再関連付け確認メッセージを受信する。この再関連付けメッセージには、たとえば、ローミングソケットモジュールが現に動作しているホスト装置のホストアドレスおよびポートアドレスなどの識別情報が含まれる。再関連付けメッセージおよび再関連付け確認メッセージに従って、関連付けリンクが移動を反映させるように更新される。
【００８５】
関連付けテーブル４０の更新に加えて、各ピアローミングソケットモジュールと連携動作するアドレス変換テーブル４２も更新される。アドレス変換テーブル４２とは、移動前にアプリケーション２２と関連付けられている識別情報と移動後にアプリケーション２２と関連付けられている識別情報との間の変換のためのテーブルである。このアドレス変換テーブル４２が移動したローミングソケットモジュール３４のホストアドレスとポートアドレスの相互参照として提供される場合がある。
このようにして、移動前のホスト装置に送られた任意のデータパケットは、アドレス変換テーブル４２に従って変換されて、ネットワーク１４の正しいホスト装置に送信される。
【００８６】
この通信の再成立過程は、関連付けテーブル４０とアドレス変換テーブル４２の利用により、移動したアプリケーションからはほとんど見えない。このようにＵＤＰ通信にソケットマイグレーションアーキテクチャ１０を実装することにより、移動可能なアプリケーションを設計するアプリケーション開発者は、移動したアプリケーション２２および移動したアプリケーション２２と移動前に通信していたアプリケーション２２の双方で必要となる難しいプログラミングを回避することができる。また、アドレス変換テーブル４２により、アプリケーション２２が移動をトラッキングする必要がなくなる。したがって、アプリケーション開発者によるアプリケーションの設計が容易になり、アプリケーション２２の動作が簡略化できる。
【００８７】
既に関連付け動作の説明で述べたように、ＵＤＰ通信プロトコルは、再関連付けメッセージおよび再関連付け確認メッセージを取りこぼすことがある。本実施形態では、他のどのデータパケットよりも前に再関連付け確認メッセージが受信されるかどうかを監視して確認することにより、タイムアウト手順の利用を関連付け動作のときと同様に回避している。再関連付け確認メッセージより先にデータパケットを受信した場合、移動したローミングソケットモジュール３４は再関連付けメッセージを送信する。あるいは、別の送信確認方式を利用してもよい。また、関連付けテーブル４０により、任意の数のアプリケーション２２との間に関連付けリンクを形成して、移動後に、ピアツーピア通信を再び成立させることもできる。
【００８８】
図７は、図５に示される通信システム１２のソケットマイグレーションアーキテクチャ１０における、アプリケーション２２の移動およびピアツーピア通信の再成立の動作を説明する流れ図です。この動作例では、既に図６を参照して述べたように、既に第１のアプリケーション２２ａと第２のアプリケーション２２ｂの間に、ピアツーピア通信と関連付けリンクが成立している。また、ソースホスト１６で動作する第１のアプリケーション２２ａは、既に、ターゲットホスト２０に移動するように指示を受けている。
なお、異なるホストで動作する任意の数のアプリケーションの間にピアツーピア通信と関連付けリンクが成立している場合もありうる。
【００８９】
図５および図７を参照して、アプリケーション２２の移動およびピアツーピア通信の再成立の動作を説明する。
まず、第１のアプリケーション２２ａは、第１のローミングソケットモジュール３４ａおよび第１の関連付けテーブル４０ａとともに符号化され、図５の矢印４６に示されるように、ソースホスト１６からターゲットホスト２０に移動する（ステップ３００）。第１のアプリケーション２２ａと第１のローミングソケットモジュール３４ａおよび第１の関連付けテーブル４０ａは符号化され、ターゲットホスト２０でインスタンス化される（ステップ３０２）。第１のローミングソケットモジュール３４ａは、通信システムにより割当てられたポートに、アクティブソケット３２（図５におけるの第３のアクティブソケット３２ｅ）をオープンする（ステップ３０４）。第１のローミングソケットモジュール３４ａは第１の関連付けテーブル４０ａにアクセスして、移動前に第１のローミングソケットモジュール３４ａと関連付けられていたピアローミングソケットモジュール３４（第２のローミングソケットモジュール３４ｂ）の識別情報を得る（ステップ３０６）。
【００９０】
第１のローミングソケットモジュール３４ａは、第１の関連付けテーブル４０ａから同定されるピアローミングソケットモジュール３４（第２のローミングソケットモジュール３４ｂ）の一つに再関連付けメッセージを送る（ステップ３０８）。第１のローミングソケットモジュール３４ａは、第３のアクティブソケット３２ｅを利用して、ネットワーク１４を介した通信からの応答を監視する（ステップ３１０）。また、第１のローミングソケットモジュール３４ａは第１の関連付けテーブル４０ａをチェックして、再関連付けメッセージを送っていないピアローミングソケットモジュールがあるかかどうかを判断する（ステップ３１２）。該当するピアローミングソケットモジュールがある場合、ステップ３０６に戻る。該当するピアローミングソケットモジュールがない場合、ステップ３１０で監視を続ける。
【００９１】
ピアローミングソケットモジュール３４（第２のローミングソケットモジュール３４ｂ）の一つが、再関連付けメッセージを受信すると（ステップ３１４）、第２のローミングソケットモジュールと連携動作する関連付けテーブル４０（第２の関連付けテーブル４０ｂ）が再関連付けメッセージに基づいて更新される（ステップ３１６）。この関連付けテーブル４０は、第１のローミングソケットモジュール３４ａが現にターゲットホスト２０で動作していることを反映するように、識別情報（ホストアドレスとポートアドレスの組など）を使用して更新される（ステップ３１６）。また、アドレス変換テーブル４２は、第１のローミングソケットモジュール３４ａがソースホスト１６からターゲットホスト２０に移動したことを表すマッピングを提供するように更新される（ステップ３１８）。第２のローミングソケットモジュール３４ｂは、再関連付け確認メッセージを第１のローミングソケットモジュール３４ａに送信する（ステップ３２０）。
【００９２】
ターゲットホスト２０において第１のローミングソケットモジュール３４ａは、第２のローミングソケットモジュール３４ｂから送られた再関連付け確認メッセージを受信する（ステップ３２２）。第１のローミングソケットモジュール３４ａは、受信したメッセージが第２のローミングソケットから送られた再関連付け確認メッセージかどうかを判断する（ステップ３２４）。再関連付け確認メッセージとは異なる場合、ステップ３０８に戻り、もう一度再関連付けメッセージが送信される。再関連付け確認メッセージを受信した場合は、第１および第２のローミングソケットモジュール３４ａ、３４ｂはメッセージを交換する（ステップ３０６）。
【００９３】
【発明の効果】
以上説明したように本発明のソケットマイグレーションアーキテクチャ１０によれば、異なる種類のホスト装置間を移動することができるアプリケーション２２と連携動作する通信ソケットは移動することができる。本発明のソケットマイグレーションアーキテクチャ１０によれば、アプリケーション２２の間の抽象的な関連付けリンクが可能となり、移動前に成立していたピアツーピア通信を継続することが可能となる。本発明のソケットマイグレーションアーキテクチャ１０によれば、移動時のピアツーピア通信の一時的な中断は移動に関わるアプリケーションからはほとんど見えなくすることが可能となる。このように、アプリケーション２２の間の通信中の中断が最小となり、ピアツーピア通信に関わるアプリケーション２２の連携動作は途切れることなく維持される。
【００９４】
ソケットマイグレーションアーキテクチャ１０は、プロトコルやプロトコルをサポートするオペレーティングシステムを修正することなく、既存の通信プロトコルを利用している。したがって、ソケットマイグレーションアーキテクチャ１０は、比較的容易に既存のアーキテクチャと置き換えることが出来る。また、ソケットマイグレーションアーキテクチャ１０には通信プロトコルの動作特性を維持し、あるいはさらに向上させる性質がある。したがって、アプリケーション開発者はソケットマイグレーションアーキテクチャ１０を実装することによって、そうでなければ必要となる移動可能なアプリケーションについての難しいプログラミングを避けることができる。
【００９５】
以上の説明は、本発明の好ましい実施形態である。前述の説明は一例であり、本来限定するものではない。本発明の新規性と有利な特徴を保ちながら、かつその精神から逸脱しない範囲において、様々な変更および追加が可能であることは、当業者も理解できよう。したがって、本発明の範囲は正しく解釈された特記請求の範囲によってのみ定義される。
【図面の簡単な説明】
【図１】本発明の第１実施形態におけるソケットマイグレーションアーキテクチャを有する通信システムを説明するブロック図である。
【図２】図１に示される通信システムおよびソケットマイグレーションアーキテクチャをより詳細に説明するブロック図である。
【図３】図２に示される通信システムにおけるソケットマイグレーションアーキテクチャの動作を説明する流れ図である。
【図４】図３に示される動作の続きを説明する流れ図である。
【図５】本発明の第２実施形態におけるソケットマイグレーションアーキテクチャを有する通信システムを説明するブロック図である。
【図６】図５の通信システムにおけるソケットマイグレーションアーキテクチャの設定動作を説明する流れ図である。
【図７】図５の通信システムにおけるソケットマイグレーションアーキテクチャによる移動を説明する流れ図である。
【符号の説明】
１０…ソケットマイグレーションアーキテクチャ、１２…通信システム、１４…ネットワーク、１６…ソースホスト、１８…応対ホスト、２０…ターゲットホスト、２２、２２ａ、２２ｂ…アプリケーション、２４、２４ａ、２４ｂ…マイグレータブルソケット、３０ａ、３０ｂ…同期バッファ、３２ａ、３２ｂ、３２ｃ、３２ｄ、３２ｅ…アクティブソケット、３４ａ、３４ｂ…ローミングソケットモジュール、３６…サーバソケット、４０ａ、４０ｂ…関連付けテーブル、４２…アドレス変換テーブル。
【図１】
2004030558.tif 000003
【図２】
2004030558.tif 000004
【図３】
2004030558.tif 000005
【図４】
2004030558.tif 000006
【図５】
2004030558.tif 000007
【図６】
2004030558.tif 000008
【図７】
2004030558.tif 000009