(57)【要約】【課題】交換台接続およびピアツーピアの双方の欠点を補う通信方法を提供する。【解決手段】例示的な方法は、サーバを介した第１の接続によって主セッションを作成し、第１の接続を介した仮想チャネルを作成する。仮想チャネルは、特徴セッションを伝達するように動作可能とする。また、サーバを迂回する直接接続を確立して特徴セッションの通信を直接接続に切り換え可能とする。【選択図】図３
2011054178.tif 000002
【特許請求の範囲】
【請求項１】
ネットワーク通信のためのシステムであって、
各移送ブリッジがアクティブネットワーク装置構成に対応する複数の移送ブリッジと、
前記移送ブリッジの１つを選択して、前記アクティブネットワーク装置構成に基づいて２つの計算装置の間の接続を形成するように動作可能な切換えモジュールと
を備えることを特徴とするシステム。
【請求項２】
前記アクティブネットワーク装置構成は、第１の計算装置と第２の計算装置の間に少なくとも１つのファイアウォールを備えることを特徴とする請求項１に記載のシステム。
【請求項３】
前記アクティブネットワーク装置構成は、第１の計算装置と第２の計算装置の間に少なくとも１つのネットワークアドレス変換器を備えることを特徴とする請求項１に記載のシステム。
【請求項４】
前記複数のブリッジは、  高信頼ユーザデータグラムプロトコルブリッジと、
伝送制御プロトコル／インターネットプロトコル（ＴＣＰ／ＩＰ）ブリッジと、
交換台ブリッジと
の少なくとも１つを備えることを特徴とする請求項１に記載のシステム。
【請求項５】
特徴と、
前記特徴に関連づけられた特徴セッションを作成するように動作可能な主セッションと
をさらに備えることを特徴とする請求項１に記載のシステム。
【請求項６】
特徴データおよび主セッションデータに渡って多重化を行い、前記多重化したデータを、前記選択した移送ブリッジを介して伝達するように動作可能な移送層をさらに備えることを特徴とする請求項５に記載のシステム。
【請求項７】
転送手段が、各ブリッジモジュールがアクティブネットワーク装置構成に対応する複数のブリッジモジュール、切り替え手段および情報処理手段を有し、該転送手段を有するコンピュータにおけるインスタントメッセージ通信方法であって、
転送すべきデータを前記情報処理手段により作成するステップと、
前記アクティブネットワーク装置構成に基づいて、前記ブリッジモジュールの１つを動的に選択するように前記切り替え手段により切り替えるステップであって、その結果、作成された前記データが前記転送手段により転送されるステップと
を備えることを特徴とする方法。
【請求項８】
前記転送手段は、前記アクティブネットワーク装置構成を検出するように動作可能な検出モジュールをさらに備えることを特徴とする請求項７に記載の方法。
【請求項９】
前記検出モジュールは、エコーサーバを備えることを特徴とする請求項８に記載の方法。
【請求項１０】
前記転送手段は、前記ブリッジモジュールの前記選択された１つを介して、複数のセッションからのデータを多重化することを特徴とする請求項７に記載の方法。
【請求項１１】
前記データは、前記インスタントメッセージアプリケーションの特徴に対応する１つまたは複数の特徴セッションを作成するように動作可能な主セッションをさらに備えることを特徴とする請求項７に記載の方法。
【請求項１２】
第１のクライアントコンピュータにより実行されるプログラムを記録したコンピュータ可読媒体であって、前記プログラムは、前記第１のクライアントコンピュータに、
交換台サーバを介して、前記第１のクライアントコンピュータと第２のクライアントコンピュータの間にインスタントメッセージセッションを確立する手段と、
自動的にピアツーピア接続を確立する手段と、
前記交換台サーバを介して、前記インスタントメッセージセッションに関連づけられた第１のデータを伝送する手段と、
前記ピアツーピア接続を介して、前記インスタントメッセージセッションに関連づけられた第２のデータを伝送する手段と、
前記第１のデータのｂｌｏｂの第１部分を前記交換台サーバを介して伝送する手段と、
前記第１のデータのｂｌｏｂの第１部分の後続部分を前記ピアツーピア接続を介して伝送する手段と
して機能させることを特徴とするコンピュータ可読媒体。
【請求項１３】
前記プログラムは前記第１のクライアントコンピュータに、  前記第１のクライアントコンピュータおよび前記第２のクライアントコンピュータに関連づけられたアクティブネットワーク装置構成を決定する手段と、
前記アクティブネットワーク構成に対応するピアツーピアブリッジを選択する手段と
してさらに機能させることを特徴とする請求項１２に記載のコンピュータ可読媒体。
【請求項１４】
前記ピアツーピアブリッジは、ＲＵＤＰブリッジを含むことを特徴とする請求項１３に記載のコンピュータ可読媒体。
【請求項１５】
前記ピアツーピアブリッジは、ＴＣＰ／ＩＰブリッジを含むことを特徴とする請求項１３に記載のコンピュータ可読媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本明細書で説明する対象は、コンピュータ通信に関する。より詳細には、本対象は、インスタントメッセージのための移送システムに関する。
【背景技術】
【０００２】
インスタントメッセージは、コンピュータ装置のユーザに非常に人気のある通信ツールになりつつある。インスタントメッセージ（ＩＭ）アプリケーション（例えば、マイクロソフトコーポレーション（ワシントン州Ｒｅｄｍｏｎｄ）のウィンドウズ（登録商標）メッセンジャーシステム、Ｙａｈｏｏ！メッセンジャー、ＡＯＬインスタントメッセンジャー（ＡＩＭ）など）は、ユーザが、ユーザの個人的な交信先のリストにおいて識別される１つまたは複数の交信先とのリアルタイムの会話に携わることを可能にする。通常、個人的なリストはサーバ上に格納され、会話は、着信メッセージを適切な受信者に向ける交換台または中継サーバを介して確立される。
【０００３】
交換台を介したリアルタイムのメッセージの経路指定は、メッセージが交換台を介さず、会話の参加者の間で直接渡されるピアツーピアな配置におけるインスタントメッセージより遅く、（サーバ資源の点で）コストがかかる場合がある。したがって、交換台サーバを用いて会話が確立された後、一般的なインスタントメッセージシステムは、会話をピアツーピアな構成に変換することを試みることができる。ピアツーピアへの変換は、メッセージをピアに直接送信するためのＩＰ（インターネットプロトコル）アドレスおよび／またはポート番号によってピアを識別することを一般に含むいくつかの方法で行うことができる。
【０００４】
しかし、ピアツーピアな会話の作成は、アクティブネットワーク装置、例えばファイアウォールやネットワークアドレス変換器（ＮＡＴ）を含む状況において不可能ではないとしても、困難な場合がある。このような装置は、システムの安全性のために使われるが、一般に、このような装置の後方にあるコンピュータへの直接アクセスを防止するために設計される。例えば、ＮＡＴはそれ自体のＩＰアドレスをもち、ＮＡＴの後方のコンピュータはそれ自体のＩＰアドレスをもち、こうしたＩＰアドレスは非公開である。すなわち、ＮＡＴの外部にある他のコンピュータは、ＮＡＴの後方にあるコンピュータのＩＰアドレスを判別することができない。ＮＡＴが受信するメッセージのＩＰアドレスはＮＡＴ後方の受信者コンピュータのＩＰアドレスに変換される。アクティブネットワーク装置を介するトンネルを通し、またはその装置をトラバースして直接接続を形成するために、様々な技術を適用することができる。
【発明の概要】
【発明が解決しようとする課題】
【０００５】
インスタントメッセージシステムは、向上するのに従って、会話をより経験豊かにさせる、テキスト以外のより多くの特徴を一般に提供する。例えば、インスタントメッセージシステムは、ユーザに一義的に関連づけられた音声、映像、またはカスタムユーザタイル（表示画像とも呼ばれる）をユーザが伝送することを可能にすることができる。このような特徴は一般に、会話に含まれるテキストより多くの資源、例えば伝送帯域幅を必要とする。
【０００６】
したがって、ピアツーピアは通常、交換台サーバを介した接続より高い性能を提供するので、インスタントメッセージの会話を持続する場合は、ピアツーピア接続が望ましい。
【課題を解決するための手段】
【０００７】
本明細書において説明し権利請求する実施形態は、上述した問題、および他の問題を解決する。
【０００８】
例示的な方法は、サーバを介した第１の接続によって主セッションを作成すること、および第１の接続を介した仮想チャネルを作成することであって、仮想チャネルは、特徴セッションを伝達するように動作可能であることを含む。この方法は、サーバを迂回する直接接続を確立すること、および特徴セッションの通信を直接接続に切り換えることを含むことができる。
【０００９】
ネットワーク通信のためのシステムは、各移送ブリッジがアクティブネットワーク装置構成に対応する複数の移送ブリッジと、移送ブリッジの１つを選択して、アクティブネットワーク装置構成に基づいて２つの計算装置の間の接続を形成するように動作可能な切換えモジュールとを含む。
【図面の簡単な説明】
【００１０】
【図１】例示的なインスタントメッセージシステム内の構成要素を示すブロック図である。
【図２】インスタントメッセージのシナリオにおけるデータ通信を管理する例示的な層を含む移送システムを示す図である。
【図３】好ましい移送ブリッジを選択するように動作可能な、例示的なブリッジ選択モジュールを示すブロック図である。
【図４】２つのピア装置の間の物理接続に渡る仮想チャネルを示すブロック図である。
【図５】主セッション中に特徴セッションを確立し、可能な場合には直接接続を生成する例示的な動作を有する動作フローを示す図である。
【図６】好ましい移送ブリッジを決定し、好ましい移送ブリッジを用いて直接接続を生成する例示的な動作を有する動作フローを示す図である。
【図７】バイナリラージオブジェクト（ＢＬＯＢ）を順に移送する例示的な動作を有する動作フローを示す図である。
【図８】好ましい移送ブリッジを透過的に選択し、インスタントメッセージのシナリオにおいて特徴データを伝達するのに適した動作環境を提供する例示的なシステムを示す図である。
【発明を実施するための形態】
【００１１】
図面に移ると、同じ参照番号は同じ要素を指し、様々な方法が、適切な計算機環境において実施される方法として例示される。そうすることが必要なわけではないが、様々な例示的な方法は、パーソナルコンピュータおよび／または他の計算装置によって実行される、プログラムモジュールなどのコンピュータ実行可能命令という一般的な状況において説明される。概して、プログラムモジュールは、特定のタスクを実行しまたは特定の抽象データタイプを実装するルーチン、プログラム、オブジェクト、構成要素、データ構造などを含む。
【００１２】
さらに、様々な例示的な方法は、携帯型装置、マルチプロセッサシステム、マイクロプロセッサベースの家電製品またはプログラム可能な家電製品、ネットワークＰＣ、ミニコンピュータ、メインフレームコンピュータなど他のコンピュータシステム構成に適用できることが、当業者には理解されよう。様々な例示的な方法は、通信ネットワークを介してリンクされるリモート処理装置によってタスクが実行される分散型計算機環境でも適用することができる。分散型計算機環境では、プログラムモジュールは、ローカルおよびリモートメモリ記憶装置両方に置くことができる。
【００１３】
本明細書のいくつかの図面において、様々なアルゴリズムに関する動作は、個別の「ブロック」にまとめられる。このようなブロックは、処理の進行に従って行われまたは実行される特定の動作または判断を記述する。マイクロコントローラ（または等価物）が利用される場合、本明細書において提示するフロー図は、このようなマイクロコントローラ（または等価物）によって所望の制御を達成するのに使うことができる「制御プログラム」またはソフトウェア／ファームウェアのための基盤を提供する。このような基盤として、処理は、プロセッサによって実行されると、ブロックとして示される様々な動作を実行する、メモリ中に格納可能なマシン可読命令として実装される。
【００１４】
当業者であれば、本明細書において提示されるフロー図および他の説明に基づいて、このような制御プログラムをすぐに書くことができる。本明細書において説明する本対象は、プログラミングされると以下で説明する動作を実行する装置および／またはシステムだけでなく、マイクロコントローラをプログラミングするように構成されるソフトウェア、さらに、このようなソフトウェアを具体化することができるあらゆるコンピュータ可読媒体も含むことを理解されたい。このようなコンピュータ可読媒体の例は、フロッピー（登録商標）ディスク、ハードディスク、ＣＤ、ＲＡＭ、ＲＯＭ、フラッシュメモリなどを含むが、これに限定されない。
【００１５】
インスタントメッセージのための例示的なネットワーク環境  図１は、インスタントメッセージによる会話のための例示的なネットワーク環境１００を示す。概して、２つのクライアント１０２および１０４は、ネットワーク１０６を介して互いに通信することができる。アクティブネットワーク装置１０８および１１０は、ネットワーク環境１００に存在してもしなくてもよい。エコーサーバ１１２および交換台サーバ１１４は、ネットワーク１０６を介して、クライアント１０２と１０４の間の通信を実行するように接続することができる。
【００１６】
インスタントメッセージ（ＩＭ）プラットフォーム１１６は、クライアント（１）１０２およびクライアント（２）１０４がインスタントメッセージによる会話に携わることを可能にする。ＩＭプラットフォーム１１６のユーザは、ユーザインターフェース（図示せず）を介してＩＭプラットフォーム１１６と対話して、クライアント（２）１０４との間でメッセージを送受信する。ＩＭプラットフォーム１１６は、クライアント（１）１０２とクライアント（２）１０４の間のデータ通信を実行する特徴（ｆｅａｔｕｒｅｓ）１１８（エンドユーザ特徴（ＥＵＦ）とも呼ばれる）およびトランスポートプロトコルスタック１２２を含む。
【００１７】
より具体的には、トランスポートプロトコルスタック１２２は、ネットワーク環境１００の特性に基づいて、インスタントメッセージセッションを透過的に確立する。概して、確立されたセッションは、交換台（ＳＢ）サーバ１１４を介しても、代わりに、データがＳＢサーバ１１４を介して経路指定されないように、ピアツーピア接続１２４を介してもよい。
【００１８】
クライアント１０２および１０４は、インターネットサービスプロバイダ（図示せず）を介して、または他の方法で、ネットワーク１０６にアクセスすることができる。一実施形態では、クライアント１０２および１０４はそれぞれ、クライアント１０２と１０４の間で通信を確立するための一義的なネットワークアドレス、ポート、および／または識別子をもつ。例えば、ＳＢサーバ１１４は、クライアントコンピュータ（２）１０４のネットワークアドレス、ポート、および／または識別子を用いて、クライアントコンピュータ（２）１０４にデータを経路指定することができる。ピアツーピア接続１２４を介することによって、クライアントコンピュータ（１）１０２は、クライアントコンピュータ（２）１０４のネットワークアドレス、ポート、および／または識別子を用いて、クライアントコンピュータ（２）１０４にデータを直接送信することができる。
【００１９】
上述したように、アクティブネットワーク装置（１）１０８およびアクティブネットワーク装置（２）１１０は、存在してもしなくてもよい。アクティブネットワーク装置の例は、そのそれぞれのクライアント装置にシステムの安全性を提供するファイアウォールおよびネットワークアドレス変換器である。したがって、アクティブネットワーク装置（２）１１０は、クライアントコンピュータ（２）１０４に安全性を提供することができ、アクティブネットワーク装置（１）１０８は、クライアントコンピュータ（１）１０２に安全性を提供することができる。
【００２０】
したがって、様々なネットワーク構成が可能である。あるネットワーク構成では、アクティブネットワーク装置（１）１０８は存在するが、アクティブネットワーク装置（２）１１０は存在しない。別のネットワーク構成では、アクティブネットワーク装置（２）１１０は存在するが、アクティブネットワーク装置（１）１０８は存在しない。別のネットワーク構成では、アクティブネットワーク装置（１）１０８もアクティブネットワーク装置（２）１１０も存在しない。第４のネットワーク構成では、アクティブネットワーク装置（１）１０８およびアクティブネットワーク装置（２）１１０両方が存在する。
【００２１】
アクティブネットワーク装置１０８および１１０は、一義的なネットワークアドレス、例えばＩＰ（インターネットプロトコル）アドレスを有し、こうしたアドレスによって、アクティブネットワーク装置１０８および１１０は、それぞれのクライアント１０２および１０４に向けられたデータを受信する。アクティブネットワーク装置１０８または１１０は、それぞれのネットワークアドレスにおいてデータを受信し、ネットワークアドレスをそれぞれのクライアント１０２および１０４に関連づけられたネットワークアドレスに変換する。
【００２２】
クライアント（１）１０２は、エコーサーバ１１２を使って、アクティブネットワーク装置（１）１０８に関連づけられたネットワークアドレスを取得することができる。クライアント（１）は、エコーサーバ１１２にメッセージを送信することができる。エコーサーバ１１２がクライアント（１）１０２からメッセージを受信する場合、メッセージは、アクティブネットワーク装置１０８のネットワークアドレスを含む。これに応答して、エコーサーバ１１２は、アクティブネットワーク装置１０８のネットワークアドレスをクライアント１０２に返信する。クライアント（２）１０４は、アクティブネットワーク装置（２）１１０のネットワークアドレスを同様に取得することができる。アクティブネットワーク装置１０８および１１０のネットワークアドレスを用いて、クライアント１０２および１０４は、ピアツーピア接続１２４を確立することができる。
【００２３】
図１の例示的な環境１００では、会話においてただ２つのクライアント１０２および１０４を示すが、２つより多くのクライアントを会話に含めることができることを理解されたい。２つ以上のクライアントは、多地点方式で通信することができ、この方式では、各クライアントは、他のすべてのクライアントに対してピアツーピア接続を有することができる。代替として、２つ以上のクライアントは、交換台サーバ１１４を介して会話に携わることができる。さらに、ピアツーピア接続、および交換台を介した接続のどの組合せも、会話において実装することができる。ネットワーク環境１００において利用することができる例示的な動作およびシステムのより詳細な説明を、以下で行う。
【００２４】
クライアント間においてインスタントメッセージを移送する例示的なシステム  図２は、インスタントメッセージのシナリオにおいてデータ通信を管理する例示的な層を含む移送システム２００を示す。概して、こうした層はそれぞれ、層に関連づけられた様々なタスクを実行する機能および／またはデータを提供する。層に関するトランスポートプロトコルおよびシステムの説明が、当業者には理解されよう。
【００２５】
移送システム２００は、特徴２０２を含む。特徴２０２は、特徴に関連づけられたデータを提示するための、メッセンジャーアプリケーション（例えば、図１のインスタントメッセージプラットフォーム１１６）によってまたはその内部でホストされまたは実行される関数である。特徴は、特徴が提示するデータのタイプ、データを提示する方法、特徴がデータに対して実行できる動作、および／またはユーザがデータと対話するために特徴が提供する対話選択肢によって特徴づけることができる。例えば、カスタムユーザタイル特徴は、ユーザインターフェースにおける表示面タイル中の画像データを提示し、ファイル転送特徴は、ユーザがファイルを選択すると共にそのファイルをインスタントメッセージの交信先に送信することを可能にする。限定ではなく例として、特徴層２０２は、顔文字、インク、埋込み画像、およびその他を含むことができる。
【００２６】
特徴２０２は、トランスポートプロトコルスタック２０６中の層を用いて、インスタントメッセージのシナリオにおいてデータを伝達する。トランスポートプロトコルスタック２０６は、会話においてクライアントとの間のデータの送受信の詳細を透過的に管理する。トランスポートプロトコルスタック２０６は、移送アプリケーションプログラムインターフェース（ＡＰＩ）２０８を特徴２０２に提供し、このＡＰＩによって、特徴２０２は、データを送受信することができる。トランスポートプロトコルスタック２０６の下位層は、ネットワーク構成データ、および特徴２０２にあるデータについての情報を用いて、インスタントメッセージセッションを確立する。したがって、トランスポートプロトコルスタック２０６は、特徴２０２に透過なデータの伝達に関するより低レベルな詳細を作成する。
【００２７】
「ＢＬＯＢ」（バイナリラージオブジェクト）および「チャンク」という用語は、本明細書において、データのタイプにもサイズにも関わらず、ネットワーク環境において送信および／または受信することができるデータの部分を指すのに使われる。例えば、デジタル画像は、データからなる１つまたは複数のＢＬＯＢから構成することができる。ＢＬＯＢは、データからなる１つまたは複数のチャンクから構成される。
【００２８】
上述したように、例示的な移送ＡＰＩ２０８は、トランスポートプロトコルスタックの機能を特徴２０２に露出する方法または関数を提供する。ＡＰＩ２０８のある特定の実施形態は、以下の方法を含む。
【００２９】
【表１】
2011054178.tif 000003
【００３０】
例示的なＡＰＩ２０８を説明する。特徴層２０２中の特徴は、ＣｒｅａｔｅＤａｔａＣｈａｎｎｅｌ（）関数を用いて、セッションを作成することができる。特徴は、勧誘が特徴に対して受信されると、レジスタＲｅｇｉｓｔｅｒＦｅａｔｕｒｅＨａｎｄｌｅｒ（）を呼び出して、呼び出されたハンドラを登録することができる。特徴は、チャネルイベントが起こると、ＲｅｇｉｓｔｅｒＤａｔａＣｈａｎｎｅｌＣａｌｌＢａｃｋｓ（）を呼び出して、呼び出されたハンドラを登録することができる。特徴は、ＳｅｎｄＤａｔａ（）を呼び出して、クライアントにデータを送信することができる。関数ＯｎＤａｔａＲｅｃｅｉｖｅｄ（）は、データが特徴に対して受信されると、別のトランスポートプロトコル層、例えばセッション層２１０によって呼び出される。
【００３１】
例示的なセッション層２１０は、特徴２０２にセッションサービスを提供する論理を含む。インスタントメッセージによる会話は、会話を実行するインスタントメッセージセッションと呼ばれる、少なくとも１つのセッションを含む。ＳＬＰの実施形態は、特徴セッションと呼ばれる、特徴に対する他のセッションを確立する制御論理を有する主セッションも含む。セッション層２１０は、セッションを初期化するためのプロトコルである。一実施形態では、セッション層２１０は、ピアのそれぞれの性能に基づいて、２つのピアの間のセッションの確立を交渉することによって、セッションを開始する。
【００３２】
セッション層２１０のある特定の実施形態では、セッション開始プロトコル（ＳＩＰ）の部分集合が利用される。この実施形態において、メッセージは、人間が読むことのできる形式（例えば、ＸＭＬ（拡張マークアップ言語）、ＣＳＶ（コンマ区切り書式）など）で送信することができる。例示的なセッション管理メッセージは、「ＩＮＶＩＴＥ」、「ＢＹＥ」、「ＣＡＮＣＥＬ」、および「ＡＣＫ」である。
【００３３】
例示的な移送層２１２は、ＯＳＩ（開放型システム相互接続）標準の移送層プロトコルを処理する論理を含む。ＴＬＰは、ネットワークチャネルを介して任意のサイズのＢＬＯＢ（バイナリラージオブジェクト）を送受信するバイナリプロトコルである。移送層２１２は、様々なデータ管理タスクを実行する。例えば、後でさらに詳しく説明するように、移送層２１２は、ネットワーク接続を介してデータを多重化し、そうすることによって、単一のネットワーク接続において仮想チャネルを作成するように動作可能である。後でさらに詳しく説明するように、移送層２１２は、移送ブリッジ層２１４に常駐する１つまたは複数の移送ブリッジ、例えばＴＣＰブリッジやＳＢブリッジとインターフェースをとる。移送層２１２は、ブリッジ層２１４中のブリッジを介して移送される、特徴２０２にあるデータをスケジュールするスケジューラおよびキューを含むことができる。
【００３４】
ある特定の実施形態では、移送層２１２は、移送される各ＢＬＯＢの各チャンクにＴＬＰヘッダを付加する。このヘッダは、ＢＬＯＢおよびチャンクについての情報を提供する。チャンクを受信すると、必要な場合には、移送層２１２は、ヘッダを解析して、どのようにしてチャンクを再アセンブルすべきか、また、どのようにしてＢＬＯＢを並べ替えるべきか決定することができる。例示的な一実施形態では、ＴＬＰヘッダは以下のようになる。
【００３５】
【表２】
2011054178.tif 000004
【００３６】
フィールド「ＳｅｓｓＩｄ」は、送信または受信中のデータのチャンクに関連づけられたセッションを識別する。「ＳｅｓｓＩｄ」フィールドは、移送層２１２によって、データのチャンクをある特定のセッションに関連づけるのに使われ、そうすることによって、そのデータチャンクの多重化および／または逆多重化を行う。トランスポートプロトコルスタック２０６によって利用されるデータの多重化は、後でさらに詳しく説明する。
【００３７】
フィールド「ＢｌｏｂＩｄ」は、送信または受信中のデータに対応するＢＬＯＢ（バイナリラージオブジェクト）を識別する。フィールド「ＢｌｏｂＩｄ」は、トランスポートプロトコルスタック２０６によって、チャンクを対応するＢＬＯＢにアセンブルしまたは再アセンブルするのに使うことができる。「Ｏｆｆｓｅｔ」フィールドは、チャンクが、対応するＢＬＯＢのどこに配置されているか表す。ＢｌｏｂＩｄは、配信の前に、または受信の後で、ＢＬＯＢを正しい順序で配置するのに使うこともできる。「ＢｌｏｂＳｉｚｅ」フィールドは、ＢＬＯＢのサイズを表す。「ＣｈｕｎｋＳｉｚｅ」フィールドは、ヘッダを含まないデータチャンクのサイズを表す。
【００３８】
「Ｆｌａｇｓ」フィールドは、移送層２１２によって、クライアントの間でデータを送受信する処理を管理するのに使われる、いくつかのフラグを提供する。例示的な「Ｆｌａｇｓ」を、以下に示し説明する。
【００３９】
【表３】
2011054178.tif 000005
【００４０】
移送ブリッジ層２１４は、ネットワークを介してデータを移送する論理を含む。例えば、移送ブリッジ層２１４は、データの符号化および／または復号化を実行することができる。一実施形態では、移送ブリッジ層２１４は、ネットワーク構成に対応する機能およびネットワーク上で通信するためのデータ特性をそれぞれが有する１つまたは複数の移送ブリッジを含む。例示的な移送ブリッジ、ならびにブリッジを選択するシステムおよび動作は、後で詳しく説明する。
【００４１】
一実施形態では、移送層２１２は、移送ブリッジ層２１４を用いて、セッション中に２つのタイプのブリッジの間を遷移することができる。したがって、セッションは、交換台（ＳＢ）ブリッジを介して開始することができ、そうすることによってセッションデータは交換台サーバを介して伝達されるが、その後、セッションは、直接接続またはピアツーピア接続に切り換わることができる。さらに、ピアツーピア接続が遮断されると、移送層２１２は、それに応答して、ＳＢブリッジ、またはブリッジ層２１４中の他の利用可能な何らかのブリッジに切換え復帰することができる。移送層２１２は、トランスポートプロトコルスタック２０６の上位層に透過なやり方で、異なる接続タイプへの切換えを処理する。
【００４２】
移送層２１２は、ブリッジ層２１４と協働して、確実にＢＬＯＢが正しい順序で配信および／または受信されるようにする。接続のタイプはセッション中に比較的遅い接続から比較的速い接続に変わり得るので、移送層２１２が正しい順序を保証するためのステップを踏まない限り、比較的遅い接続を介して伝送されたＢＬＯＢは、比較的速い接続を介して伝送されるＢＬＯＢの後に宛先に到達する場合がある。配信の正しい順序を確実に維持するための例示的な動作は、後で説明する。
【００４３】
ネットワーク層２１８は、標準ネットワーク通信関数を実行する、より低レベルの通信機能を表す。ネットワーク層２１８は、ＴＣＰ／ＩＰ（伝送制御プロトコル／インターネットプロトコル）機能、ＵＤＰ（汎用データグラムプロトコル）機能、ＨＴＴＰ（ハイパーテキストトランスポートプロトコル）機能、ＳＯＡＰ（シンプルオブジェクトアクセスプロトコル）を含むことができるが、それに限定されない。ブリッジ層２１４は、ネットワーク層２１８の機能を利用して、ネットワークを介してデータを伝達することができる。
【００４４】
本明細書で説明するように、いくつかの移送ブリッジは、異なるネットワーク構成、ならびにデータタイプ、形式、および／またはサイズを処理するために提供される。テーブル１は、例示的な移送ブリッジ、および、そうしたブリッジを利用することができる関連するネットワーク構成を示す。
【００４５】
【表４】
2011054178.tif 000006
【００４６】
テーブル１中の行と列が交差する箇所のチェックマーク（○）は、交差する行のブリッジが、交差する列のネットワーク構成において使用できることを示す。
【００４７】
ＳＢブリッジは、交換台サーバ（例えば、図１の交換台サーバ１１４）を介してトラフィックを送信する。一実施形態では、インスタントメッセージセッションが初めに確立される場合、ＳＢブリッジが、インスタントメッセージセッションデータを移送するのに使われるブリッジである。その後、ＳＢブリッジは、直接（ピアツーピア）接続を確立することができない場合のみ、使われ続ける。
【００４８】
ツイスター移送制御プロトコル（ＴＣＰ）（ＩＰｖ６（インターネットプロトコルのバージョン５）ＴＣＰとも呼ばれる）ブリッジは、ＩＰｖ４（インターネットプロトコルのバージョン４）のＮＡＴをトラバースするのに使うことができる。一実施形態では、ＩＰｖ６ブリッジは、テレドトンネリング技術を使用して、ピアツーピア接続を確立する。ＩＰｖ６／ＩＰｖ４ホストが１つまたは複数のＩＰｖ４ＮＡＴの後方に配置されている場合、テレドは、ユニキャストＩＰｖ６接続性のための、アドレス割当ておよびホスト間自動トンネリングを提供するＩＰｖ６／ＩＰｖ４遷移技術である。ＩＰｖ４ＮＡＴをトラバースするために、ＩＰｖ６パケットが、ＩＰｖ４ベースのＵＤＰ（ユーザデータグラムプロトコル）メッセージとして送信される。
【００４９】
ツイスターＴＣＰブリッジは、ネットワークアドレス変換器（ＮＡＴ）がネットワーク上で構成される場合でも、ピアツーピアなＴＣＰ／ＩＰ接続を確立するように動作可能である。例えば、第１のクライアントがＮＡＴの後方にあり、第２のクライアントがＮＡＴまたはファイアウォールの後方にない場合、第１のクライアントのツイスターＴＣＰブリッジは、第２のクライアントとの発信ＴＣＰ接続を開始する。第１のクライアントは、エコーサーバ（例えば、図１のエコーサーバ１１２）を使って、第１のクライアントがＮＡＴの後方にあることを検出し、したがって、接続を形成する方向を決定することができる。すなわち、第１のクライアントは、ＴＣＰ接続を開始する。クライアントの１つがＵＰｎＰ（ユニバーサルプラグアンドプレイ）ＮＡＴの後方にある場合も、類似の技術を適用することができる。
【００５０】
高信頼汎用データグラムプロトコル（ＲＵＤＰ）ブリッジは、ＵＤＰを介してデータを伝達し、「パケット」はＴＣＰの下で確認応答されるが、ＲＵＤＰブリッジは、データ伝送の受信を確認応答することによって、ＴＣＰ接続をエミュレートする。このようにして、データがドロップされ（すなわち、受信されず）再送信されるべきときをプロトコルが検出することができるので、ＲＵＤＰブリッジは、従来のＵＤＰ接続より信頼できる接続を提供する。ＲＵＤＰブリッジは、エコーサーバを使って、ＮＡＴネットワークアドレスを取得することができ、その結果、ＮＡＴをトラバースすることができる。
【００５１】
ＲＵＤＰブリッジは、伝送されるデータにヘッダを付加する。例示的なヘッダを以下に示す。
【００５２】
【表５】
2011054178.tif 000007
【００５３】
例示的なＲＵＤＰブリッジプロトコルは、リッスン側ＲＵＤＰブリッジに「ＳＹＮ」メッセージを送信すること、「ＳＹＮ  ＡＣＫ」で応答すること、「ＳＹＮ  ＡＣＫ」メッセージに「ＡＣＫ」で応答することを含む。その後、再伝送タイマは、伝送された（または再伝送された）データセットに対して、応答側ＲＵＤＰブリッジからＡＣＫが受信されるまで、データの１つまたは複数の組を再伝送し続ける。
【００５４】
図３は、１組の移送ブリッジ３０４の中から好ましい移送ブリッジを選択するように動作可能な、例示的な選択モジュール３０２を示すブロック図である。インスタントメッセージアプリケーションは、複数の特徴３０８を有することができ、各特徴３０８は、主セッション３０６およびセッションレジストラ３１０と通信して、関連づけられた特徴セッション３１２をセットアップする。特徴データを含むインスタントメッセージデータは、選択されたブリッジを介して移送される。
【００５５】
主セッション３０６は、トランスポートプロトコルスタック２０６（図２）中のセッション層２１０（図２）において実行される。主セッション３０６は、インスタントメッセージアプリケーションにおいて会話が始まると作成される。主セッション３０６は、会話ウィンドウに関連づけられ、特徴３０８がスレーブ、すなわち特徴セッション３１２を要求するためのオブジェクトである。主セッション３０６は、特徴３０８が会話ウィンドウのコンテキストの外で主セッションを開始することを可能にする静的メソッドを露出することもでき、そうすることによって、インスタントメッセージによる会話が作成される。
【００５６】
特徴３０８は、セッションレジストラ３１０に登録を行い、このレジストラは、会話中に実行される特徴に関する情報を維持する。セッションレジストラ３１０は、「自動スタート」特徴に関する情報を維持することもできる。自動スタート特徴は、デフォルトで存在すべき特徴であり、その勧誘ハンドラは、基底の交換台接続が確立されると、予め定義された呼のＩＤおよびセッションＩＤを用いて、会話における両方のクライアントの所で呼び出される。
【００５７】
特徴３０８は、セッションレジストラ３１０に登録を行うと、特徴３０８に関連づけられた勧誘ハンドラ関数およびＧＵＩＤ（グローバル固有識別子）を提供する。主セッション３０６は、特徴レジストラ情報を有する特徴セッション３１２を確立することができ、このセッションを介して、特徴３０８は、ピア特徴を有するセッションを実行することができる。
【００５８】
例えば、ピアからの勧誘は、主セッション３０６によって受信することができ、特徴３０８に対してセッションに加わるよう勧誘する。勧誘は、特徴３０８に関連づけられたＧＵＩＤを指定する。主セッション３０６は、セッションレジストラ３１０中でＧＵＩＤをルックアップして、特徴３０８に関連づけられた勧誘ハンドラ関数を見つける。勧誘が特徴３０８によって受諾されると、主セッション３０６は、新規特徴セッション３１２を作成する。
【００５９】
特徴３０８は、ピア特徴に対して、セッションに加わるよう勧誘することができる。そうするために、特徴３０８は、（例えば、図２の移送ＡＰＩ２０８にあるＣｒｅａｔｅＤａｔａＣｈａｎｎｅｌ（）を呼び出すことによって）主セッション３０６に対して新規セッションを要求する。特徴３０８に対する新規セッションの要求は、接続のタイプ（例えば、直接、非直接）に関する要求を含むことができる。主セッション３０６は、要求された直接接続、データのサイズ、および／またはネットワーク構成などの情報を用いて、ブリッジセレクタ３０２を呼び出す。ブリッジセレクタ３０２は、こうした情報を用いて、要求された特徴セッション用に使うのに好ましい移送ブリッジを識別する。
【００６０】
一実施形態では、ブリッジセレクタ３０２は、移送層２１２（図２）で実行され、好ましいブリッジを選択するための移送ブリッジ選択規則を適用する。一実施形態では、設計目標は、直接ピアツーピアで可能な限り多くのトラフィックを送信し、そうすることによって交換台サーバに関連し得る遅延およびコストを避けることである。この実施形態では、移送ブリッジを選択するために以下の要素が分析される。すなわち、要求される直接接続、移送ブリッジによってサポートされる帯域幅、送信されるデータのサイズ、移送ブリッジのあらゆる限定、ある特定の移送ブリッジに関連づけられたコスト（例えば、中継コスト）、および／またはプライバシーの規定（例えば、ＩＰアドレスを明らかにするかどうか）である。
【００６１】
各移送ブリッジは、上記の要素に基づいてスコアを計算する。各移送ブリッジは、そのスコアをブリッジセレクタ３０２に与え、ブリッジセレクタは、スコアに基づいて好ましい移送ブリッジを選択する。未加工のスコアを分析する前に、ブリッジセレクタ３０２は、指定された要求を考慮する。例えば、特徴３０８が直接接続を要求する場合、ブリッジセレクタ３０２は、すべての非直接ブリッジを候補ブリッジの組から排除することができる。ある特定のネットワーク構成において動作しないブリッジも、候補ブリッジの組から排除される。例えば、ネットワーク構成が２つの対称型レガシーＮＡＴを含む場合、ツイスターＴＣＰブリッジは考慮されない。会話の初期化中にエコーサーバのテストから取得される情報は、どのブリッジが動作することができないか決定するのに使うことができる。
【００６２】
したがって、ブリッジセレクタ３０２の一実施形態は、以下の移送ブリッジ選択規則を使用する。
【００６３】
１．エコーテスト結果に基づいて、動作することができないブリッジを排除する。
２．発呼者による特定の要求を満たさないブリッジを排除する。
３．スコアが最も高い、残っているブリッジを使う。
４．前のブリッジが失敗した場合、２番目にスコアが高い、残っているブリッジを使う。
５．前のブリッジが失敗した場合、次にスコアが高い、残っているブリッジを使う（以下同様）
【００６４】
ブリッジセレクタ３０２は、規則に基づいて、好ましいブリッジを主セッション３０６に通知する。これに応答して、主セッション３０６は、特徴セッション３１２を作成し、使われる好ましいブリッジをインスタンス化する。特徴セッション３１２は、作成された後、特徴３０８が他のピア特徴と通信するためのセッションとなる。特徴セッション３１２は、データの送信、ならびにセッション制御コール、例えばＡｃｃｅｐｔＳｅｓｓｉｏｎおよびＡｃｃｅｐｔＤｉｒｅｃｔを処理する。
【００６５】
図４は、第１のクライアント装置４０６と第２のクライアント装置４０８の間の物理接続４０４に渡る仮想チャネル４０２を示すブロック図である。接続４０４およびチャネル４０２は、クライアント装置４０６および４０８によって、インスタントメッセージによる会話に携わるのに使われ、この会話において、様々なタイプのデータが伝達される。装置４０６および４０８は「クライアント装置」と呼ばれるが、装置４０６と４０８の間の接続４０４はサーバを介さなくてよく、直接、またはピアツーピア接続でもよいことを理解されたい。
【００６６】
図に示すように、データチャネル０は、会話中のテキストメッセージを伝達するのに使われ、データチャネル１は、クライアント装置４０６と４０８の間でファイルを転送するのに使われ、データチャネル２は、装置４０６と４０８の間で埋込み画像を転送するのに使われ、データチャネル３は、ユーザが現在メッセージを装置４０６または４０８の一方でタイプ入力しているか示すタイプ入力指示子情報を伝達するのに使われる。
【００６７】
仮想チャネル番号は、セッション識別子に対応する。上述したように、ヘッダ（上記のＴＬＰヘッダを参照されたい）が、接続４０４を介して伝達されるデータに付加される。このヘッダは、どのセッションおよびどのチャネル（例えば、特徴または主）にデータが対応するか示す「ＳｅｓｓＩｄ」を含む。ＳｅｓｓＩｄを用いて、複数のセッションからのデータを、接続４０４を介して多重化することができる。したがって、チャネル４０２は、「仮想」チャネルとみなされる。ＳｅｓｓＩｄは、クライアント装置４０６および４０８の所で受信されたデータをはぎ取られ、データは、ＳｅｓｓＩｄに関連づけられた適切なセッションに経路指定される。
【００６８】
別の実施形態では、クライアント装置４０６とクライアント装置４０８の間で複数の接続が確立され、こうした接続はそれぞれ、複数の仮想チャネルを含むことができる。例えば、会話が最初にクライアント装置４０６とクライアント装置４０８の間で作成されると、交換台サーバを介した接続によって主セッションが作成される。その後、ピアツーピア接続を、クライアント装置４０６と４０８の間で確立することができる。この状況において、装置４０６および４０８上の特徴は、交換台接続またはピアツーピア接続のどちらかの上で仮想チャネルを確立することができる。
【００６９】
トランスポートプロトコルスタックを利用する例示的な動作  図５は、主セッション中に特徴セッションを確立し、可能な場合には直接接続を生成する例示的な動作を有する動作フロー５００を示す。動作フロー５００は、別のクライアント装置とのインスタントメッセージによる会話に携わるために、クライアント装置、例えば図１に示すクライアントコンピュータ（１）１０２によって実行することができる。
【００７０】
確立動作５０２は、主セッションを確立する。主セッションは、ユーザが最初にメッセンジャーアプリケーションを起動し、別のユーザとの交信を試みると、確立される。主セッションを確立することは、別のクライアントに対して会話に加わるよう勧誘することを含む。この別のクライアントが勧誘を受諾した後、主セッションが、勧誘側クライアントおよび受諾側クライアント両方において作成される。主セッションは、交換台ブリッジを介して、ＳＢ接続によって確立される。主セッションは、特徴セッションを確立するために後で使うことができる。
【００７１】
エコーサーバテストが確立動作５０２に先立って行われなかった場合、確立動作５０２は、エコーサーバテストを行って、存在し得るファイアウォール、ＮＡＴ、または他のアクティブネットワーク装置を検出することができる。エコーサーバテストは、エコーサーバ（例えば、図１のエコーサーバ１１２）にテストメッセージを送信すること、およびエコーサーバが、構成可能などのアクティブネットワーク装置にも対応するネットワークアドレス情報を伴って応答することを含む。
【００７２】
ユーザは、テキストデータに加えて特徴データの伝達を望む場合がある。このような特徴データは、ファイル、画像、カスタム顔文字、カスタムユーザタイルなどを含むが、それに限定されない。さらに、メッセンジャーアプリケーションは、特徴セッションを作成して、特徴データを転送することができる。したがって、別の確立動作５０４において、特徴セッションが確立される。確立動作５０４は、主セッションが勧誘側クライアントの所で特徴セッションを作成すること、および特徴勧誘を受信側クライアントに送信することを含む。特徴勧誘が受信側クライアントに届くと、勧誘は、受諾または拒否される。
【００７３】
確立動作５０４の説明を続けると、特徴勧誘が受諾された場合、受信側クライアントにおける主セッションは、受信側クライアントにおいて特徴セッションを作成する。受信側クライアントにおける特徴セッションは、勧誘側特徴に対応するＧＵＩＤを有する。受信側クライアントにおける主セッションは、そのＧＵＩＤ用に登録される勧誘ハンドラ関数も呼び出す。特徴勧誘が受諾されると、関連する特徴は、特徴セッションを記憶し、その結果、特徴セッションは、そのセッション用の移送ＡＰＩと対話するのに使うことができる。特徴が受諾すると、コールバックメッセージが勧誘側特徴および受諾側特徴両方に送信され、セッションがデータを送受信するのに使う準備ができたことを知らせる。特徴勧誘が拒否されると、主セッションは、作成された特徴セッションを削除する。
【００７４】
確立動作５０４は、既存の接続、例えば確立されているＳＢ接続を介して、特徴セッションを確立する。より具体的には、特徴セッションデータは、図４に示すように、主セッションデータを有して多重化され、特徴セッションおよび主セッションを同時に実行する。交換台を介した接続はピアツーピア接続より遅い場合があるので、作成動作５０６は、特徴セッションを行うための直接（ピアツーピア）接続の作成を試みる。作成動作５０６の例示的な実施形態を図６に示し、以下で説明する。直接接続を作成することができる場合、特徴セッションは、直接接続を用いて実行される。動作フロー５００は、終了動作５０８で終わる。
【００７５】
図６は、直接接続を生成する例示的な動作を有する動作フローを示す。ユーザは、開始側クライアントの所で特徴に対して、ユーザが特徴セッションを交換台（ＳＢ）サーバではなく直接接続に変えたいと指示すると仮定する。ユーザは、メッセージサイズの制限に制限されることを避けたいので、またはＳＢサーバによって許可されるより多くのメッセージを送信したいので、またはおそらく自分のメッセージを自分が属している共同ファイアウォール内に留めることを望むので、直接接続を好む場合がある。
【００７６】
直接接続に移るようにとの指示を特徴が受信すると、要求動作６０２が実行され、特徴は、特徴のスレーブセッションにあるメソッドを呼び出す。要求動作６０２は、直接接続を要求する。スレーブセッションは、この要求を主セッションに渡す。これに応答して、主セッションは、直接接続を要求する受信側クライアント上のピア特徴に「ｒｅＩＮＶＩＴＥ」メッセージを送信する。
【００７７】
要求動作６０２の説明を続けると、「ｒｅＩＮＶＩＴＥ」メッセージは、勧誘側クライアントによってサポートされるすべての移送ブリッジタイプを識別する情報を含む。受信側クライアントにおける特徴セッションは、特徴に関連づけられた勧誘ハンドラ関数を呼び出す。「ｒｅＩＮＶＩＴＥ」は、いくつものやり方で受諾することができる。一実施形態では、特徴は、特徴の勧誘ハンドラにおいて自動受諾設定を設定している場合もある。自動受諾設定は、直接接続に対するすべての要求が自動的に受諾されるべきであることを示す。別の実施形態では、自動拒否設定は、勧誘ハンドラにおいて設定することができ、このことは、直接接続要求が自動的に拒否されることを示す。
【００７８】
自動受諾設定も自動拒否設定も設定されていない場合、移送は、グローバルなデフォルト値に関心を向ける。グローバルなデフォルト値が、受諾または拒否するように設定されている場合、「ｒｅＩＮＶＩＴＥ」に対して適切な返答が行われる。グローバルなデフォルト値が設定されていない場合、勧誘を受けた特徴は、例えば、「ｒｅＩＮＶＩＴＥ」を受諾するか拒否するかに関して、ユーザに入力を要求することによって、勧誘に応答することができる。「ｒｅＩＮＶＩＴＥ」が受諾されると仮定すると、選択動作６０６において好ましい移送ブリッジが識別される。
【００７９】
選択動作６０６は、図３に関連して上述した優先要素を用いて、好ましい移送ブリッジを選択する。受諾動作６０８は、受諾メッセージを勧誘側クライアントに返送する。受諾メッセージは、好ましいブリッジを含む。受諾は、クライアントが受諾側クライアントの内部および外部のＩＰｖ４アドレスならびにＩＰｖ６グローバルアドレスももっている場合、それも含む。
【００８０】
他方の端末における移送は、受諾メッセージ中に列挙される好ましいブリッジを用いて、受信したＩＰアドレスおよびポートへの接続を試みる。勧誘側クライアントが接続された後、移送は、「ＲＡＫ」を送信し、受諾側クライアントは、「ＡＣＫ」で返答する。接続が失敗すると、勧誘側クライアントは、「ＲＡＫ」を送信した後でタイムアウトする。一実施形態では、勧誘側主セッションは次いで、別の「ｒｅＩＮＶＩＴＥ」を送信し、今回は、失敗した移送ブリッジタイプを除外する。動作フローは、終了動作６１０で終わる。
【００８１】
図７は、バイナリラージオブジェクト（ＢＬＯＢ）を順に移送する例示的な動作を有する動作フロー７００を示す。概して、ＢＬＯＢの最後のチャンクが新規の直接接続を介して伝送される前に、移送は、非直接接続を介して先に伝送されたＢＬＯＢのチャンクに関連づけられたすべての「ＡＣＫ」を受信するのを待つ。このやり方で「ＡＣＫ」を待つのは、どのタイプの移送ブリッジまたは接続（すなわち、ＵＤＰ、ＴＣＰ、または他の方法）が使われているかに関係なく行われる。
【００８２】
伝送動作７０２は、最初に、非直接接続を用いてＢＬＯＢを伝送する。クエリ動作７０４は、移送ブリッジタイプが直接接続に切り換えられたか判定する。移送ブリッジタイプが切り換えられていない場合、クエリ動作７０４は、「ＮＯ」に分岐して伝送動作７０６へ進む。伝送動作７０６は、非直接接続を介してＢＬＯＢのチャンクを伝送する。
【００８３】
伝送動作７０６においてチャンクが伝送された後、クエリ動作７０４は再度、移送ブリッジタイプが変わっているか判定する。移送ブリッジタイプが変わっている場合、クエリ動作７０４は、「ＹＥＳ」に分岐して、別のクエリ動作７０８に進む。クエリ動作７０８は、現在のＢＬＯＢ識別子（ＩＤ）が最後のＢＬＯＢ  ＩＤより大きいか判定する。現在のＢＬＯＢ  ＩＤが最後のＢＬＯＢ  ＩＤより大きくない場合、クエリ動作７０８は「ＮＯ」に分岐して伝送動作７０６に進み、ここで現在のＢＬＯＢのチャンクを伝送する。
【００８４】
現在のＢＬＯＢ  ＩＤが最後のＢＬＯＢ  ＩＤより大きいとクエリ動作７０８が判定した場合、クエリ動作７０８は、「ＹＥＳ」に分岐して別のクエリ動作７１０に進む。クエリ動作７１０は、伝送される現在のチャンクがＢＬＯＢ中の最後のチャンクであるか判定する。現在のチャンクがＢＬＯＢ中の最後のチャンクでない場合、クエリ動作７１０は、「ＮＯ」に分岐して伝送動作７０６に進み、ここで現在のチャンクを伝送する。現在のチャンクがＢＬＯＢ中の最後のチャンクであるとクエリ動作７１０が判定した場合、クエリ動作７１０は、待機動作７１２に分岐する。待機動作７１２は、元の非直接接続を介して伝送されたすべてのＡＣＫがＢＬＯＢに対して受信されるまで待つ。
【００８５】
インスタントメッセージのためのネットワーク環境において使用することができる例示的なコンピュータシステム  図８およびそれに対応する説明では、コンピュータデータを移送する、説明した配置および手順を実装することができる適切な計算機環境の、概略的な説明を提供することを意図している。例示的な計算機環境８２０は、適切な計算機環境の一例に過ぎず、本対象の使用または機能の範囲に関するどのような制限を示唆することも意図していない。また、計算機環境８２０は、例示的な計算機環境８２０に示される構成要素のどの１つまたはその組合せに関するどのような依存も要件も有していると解釈されるべきではない。
【００８６】
相互接続された装置の間でコンピュータデータを移送するための例示的な配置および手順は、多数の他の汎用または専用計算機システム環境とも構成とも動作可能である。本対象と共に使用するのに適切であり得る公知の計算システム、環境、および／または構成の例には、パーソナルコンピュータ、サーバコンピュータ、小型軽量クライアント、大型クライアント、携帯型またはラップトップ装置、マルチプロセッサシステム、マイクロプロセッサベースのシステム、メインフレームコンピュータ、上記のシステムまたは装置のいずれをも含む分散型計算機環境、例えばサーバファームおよび企業イントラネットなどがあるが、それに限定されない。
【００８７】
計算機環境８２０は、汎用計算装置を、コンピュータ８３０の形で含む。コンピュータ８３０は図１〜７を参照して上で説明したインスタントメッセージ用移送システムの例示的な実施形態を含み、かつ／またはその実施形態として働くことができる。コンピュータ８３０の構成要素は、１つまたは複数のプロセッサまたは処理装置８３２と、システムメモリ８３４と、システムメモリ８３４など様々なシステム構成要素をプロセッサ８３２に結合するバス８３６とを含むことができるが、これに限定されない。
【００８８】
バス８３６は、様々なバスアーキテクチャのどれをも使用するメモリバスまたはメモリコントローラ、周辺バス、グラフィック専用高速バス、およびプロセッサまたはローカルバスなどいくつかのタイプのバス構造のいずれかの１つまたは複数を表す。限定ではなく例として、このようなアーキテクチャは、ＩＳＡ（業界標準アーキテクチャ）バス、ＭＣＡ（マイクロチャネルアーキテクチャ）バス、ＥＩＳＡ（拡張ＩＳＡ）バス、ＶＥＳＡ（米国ビデオ電子装置規格化協会）ローカルバス、およびメザニン（Ｍｅｚｚａｎｉｎｅ）バスとしても知られるＰＣＩ（周辺装置相互接続）バスを含む。
【００８９】
コンピュータ８３０は通常、様々なコンピュータ可読媒体を含む。このような媒体は、コンピュータ８３０によってアクセス可能であると共に揮発性媒体および不揮発性媒体両方、取外し可能媒体および固定型媒体を含む、利用可能などの媒体でもよい。
【００９０】
システムメモリは、コンピュータ可読媒体を、ランダムアクセスメモリ（ＲＡＭ）８４０など、揮発性メモリの形、および／または読出し専用メモリ（ＲＯＭ）８３８など、不揮発性メモリの形で含む。基本入出力システム（ＢＩＯＳ）８４２は、例えば起動中にコンピュータ８３０内部の要素間の情報の伝達を助ける基本ルーチンを含み、ＲＯＭ８３８に格納される。ＲＡＭ８４０は一般に、プロセッサ８３２に対してただちにアクセス可能な、かつ／またはプロセッサ８３２によって現在操作されているデータおよび／またはプログラムモジュールを含む。
【００９１】
コンピュータ８３０は、他の取外し可能／固定型、揮発性／不揮発性コンピュータ記憶媒体をさらに含むこともできる。例示のみのために、図８では、固定型の不揮発性磁気媒体（図示しないが、一般に「ハードドライブ」と呼ばれる）からの読出しまたはそこへの書込みをするハードディスクドライブ８４４、取外し可能な不揮発性磁気ディスク８４８（例えば「フロッピー（登録商標）ディスク」）からの読出しまたはそこへの書込みをする磁気ディスクドライブ８４６、および、ＣＤ−ＲＯＭ、ＤＶＤ−ＲＯＭ、または他の光学媒体など取外し可能な不揮発性光ディスク８５２からの読出しまたはそこへの書込みを行う光ディスクドライブ８５０を示す。ハードディスクドライブ８４４、磁気ディスクドライブ８４６、および光ディスクドライブ８５０はそれぞれ、１つまたは複数のインターフェース８５４によって、バス８３６に接続される。
【００９２】
ドライブおよびそれに関連するコンピュータ可読媒体は、コンピュータ可読命令、データ構造、プログラムモジュール、およびコンピュータ８３０のための他のデータの不揮発性記憶を実現する。本明細書で説明する例示的な環境では、ハードディスク、取外し可能磁気ディスク８４８、および取外し可能光ディスク８５２を使用しているが、コンピュータによるアクセスが可能なデータを格納することができる他のタイプのコンピュータ可読媒体、例えば磁気カセット、フラッシュメモリカード、デジタルビデオディスク、ランダムアクセスメモリ（ＲＡＭ）、読出し専用メモリ（ＲＯＭ）なども例示的な動作環境において使うことができることが、当業者には理解されよう。
【００９３】
限定ではなく例示として、オペレーティングシステム８５８、１つまたは複数のアプリケーションプログラム８６０、他のプログラムモジュール８６２、およびプログラムデータ８６４など、いくつかのプログラムモジュールを、ハードディスク、磁気ディスク８４８、光ディスク８５２、ＲＯＭ８３８、またはＲＡＭ８４０に格納することができる。アプリケーションプログラム８６０は、本明細書で説明した特徴およびトランスポートプロトコルスタックを使用するインスタントメッセージアプリケーションを含むことができる。
【００９４】
ユーザは、キーボード８６６および指示装置８６８（例えば「マウス」）などの任意選択の入力装置を介して、コマンドおよび情報をコンピュータ８３０に入力することができる。他の入力装置（図示せず）には、マイクロホン、ジョイスティック、ゲーム用パッド、衛星パラボラアンテナ、シリアルポート、スキャナなどがあり得る。こうしたおよび他の入力装置は、バス８３６に結合されるユーザ入力インターフェース８７０を介して処理装置８３２に接続されるが、他のインターフェースおよびバス構造、例えば並列ポート、ゲームポートまたはユニバーサルシリアルバス（ＵＳＢ）によって接続することもできる。
【００９５】
任意選択のモニタ８７２または他のタイプの表示装置が、映像アダプタ８７４などのインターフェースを介してバス８３６に接続される。モニタに加えて、パーソナルコンピュータは通常、他の周辺出力装置（図示せず）、例えばスピーカおよびプリンタを含み、こうした周辺出力装置は、出力周辺インターフェース８７５を介して接続することができる。
【００９６】
コンピュータ８３０は、リモートコンピュータ８８２など、１つまたは複数のリモートコンピュータへの論理接続を使用してネットワーク接続された環境において動作することができる。リモートコンピュータ８８２は、コンピュータ８３０に関連して本明細書で説明した要素および特徴の多くまたはすべてを含むことができる。図８に示す論理接続は、ローカルエリアネットワーク（ＬＡＮ）８７７および一般的なワイドエリアネットワーク（ＷＡＮ）８７９である。ＬＡＮ８７７および／またはＷＡＮ８７９は、有線ネットワーク、無線ネットワーク、または有線ネットワークもしくは無線ネットワークのどの組合せでもよい。このようなネットワーク環境は、会社、企業規模のコンピュータネットワーク、イントラネットおよびインターネットにおいてよく見られる。
【００９７】
ＬＡＮネットワーク環境において使われる場合、コンピュータ８３０は、ネットワークインターフェースまたはアダプタ８８６を介してＬＡＮ８７７に接続される。ＷＡＮネットワーク環境において使われる場合、コンピュータ８３０は通常、モデム８７８、または、ＷＡＮ８７９を介した通信を確立する他の手段を含む。モデム８７８は、内部にあっても外部にあってもよく、ユーザ入力インターフェース８７０または他の適切な機構を介してシステムバス８３６に接続することができる。図８には、インターネットによるＷＡＮの具体的な実施形態を示してある。コンピュータ８３０は一般に、モデム８７８またはインターネット８８０を介した通信を確立する他の手段を含む。モデム８７８は、インターフェース８７０を介して、バス８３６に接続される。
【００９８】
ネットワーク接続された環境では、パーソナルコンピュータ８３０に関連して図示したプログラムモジュールまたはその一部は、リモートメモリ記憶装置に格納することができる。限定ではなく例として、図８では、リモートアプリケーションプログラム８８９を、リモートコンピュータ８８２のメモリ装置に常駐するものとして示した。図示し説明したネットワーク接続は例示的なものであり、コンピュータ間の通信リンクを確立する他の手段も使うことができることが理解されよう。
【００９９】
結論
以上、配置および手順を、構造的な特徴および／またはメソッドにおける動作に特有の言葉で説明したが、添付の特許請求の範囲において定義される本対象は、説明した特定の特徴にも動作にも必ずしも限定されないことを理解されたい。そうではなく、こうした特定の特徴および動作は、権利請求する本対象を実施する好ましい形態として開示するものである。
【図１】
2011054178.tif 000008
【図２】
2011054178.tif 000009
【図３】
2011054178.tif 000010
【図４】
2011054178.tif 000011
【図５】
2011054178.tif 000012
【図６】
2011054178.tif 000013
【図７】
2011054178.tif 000014
【図８】
2011054178.tif 000015