(57)【特許請求の範囲】
【請求項１】
クライアントとサーバーとの間でセッションを開始するためにコンピューターにより実行される方法であって、
アプリケーションから、前記クライアントと前記サーバーとの間のサーバーメッセージブロック（ＳＭＢ）セッションを開始するための第１の要求を受信するステップと、
前記クライアントと前記サーバーとの間でコマンドを送信するための第１のトランスポートを選択するステップと、
前記第１のトランスポートを介して、前記クライアントと前記サーバーとの間の第１のコネクションを開始するステップと、
前記第１のコネクションを利用して、少なくとも１つの追加的な利用可能なトランスポートを決定するステップと、
前記クライアントと前記サーバーとの間で第２のコネクションを開始するために、前記少なくとも１つの追加的な利用可能なトランスポートの中から第２のトランスポートを選択するステップであって、前記第２のトランスポートは前記サーバーに関連する１つ以上の特性に少なくとも部分的に基づいて、前記少なくとも１つの追加的な利用可能なトランスポートの中から選択され、前記第２のコネクションを開始することは前記第２のコネクションを設定するための第２の要求を送信することを含み、前記第２の要求は、前記第２のコネクションが前記ＳＭＢセッションに付加されることを示すバインディングフラグを含む、ステップと、
を有する方法。
【請求項２】
前記要求を受信するステップは、サーバーメッセージブロック(ＳＭＢ)プロトコルを使用して、前記サーバー上にリモートに格納されたファイルにアクセスするアプリケーションからの要求を受信するステップを備えることを特徴とする請求項１に記載の方法。
【請求項３】
前記要求を受信するステップは、セッションを設定するステップと、一つまたは複数のパケットを前記サーバーに送信して、前記クライアントと前記サーバーとの間で通信するために使用されるネットワークプロトコルの利用可能なダイアレクトとネゴシエートするステップとを備えることを特徴とする請求項１に記載の方法。
【請求項４】
前記要求を受信するステップは、前記サーバーが複数コネクションのセッションをサポートするか否かを決定するために前記サーバーへ問合せをするステップを備えることを特徴とする請求項１に記載の方法。
【請求項５】
利用可能なトランスポートを決定するステップは、前記サーバーの一つまたは複数のアドレスを特定するためにドメインネームシステム(ＤＮＳ)サーバーへ問合せをするステップを備えることを特徴とする請求項１に記載の方法。
【請求項６】
利用可能なトランスポートを決定するステップは、利用可能なネットワークインターフェースを特定するためにクライアントのオペレーティングシステムへ問合せをするステップを備えることを特徴とする請求項１に記載の方法。
【請求項７】
利用可能なトランスポートを決定するステップは、前記サーバー上の利用可能なネットワークインターフェースを特定するために前記サーバーに対して機能要求を送信する問合せをするステップを備えることを特徴とする請求項１に記載の方法。
【請求項８】
前記第１又は第２のトランスポートを選択することは、前記アプリケーションのコネクション環境設定を確立するアプリケーション指定の基準に基づいて選択することを含むことを特徴とする請求項１に記載の方法。
【請求項９】
前記第１又は第２のコネクションを開始することは、サーバーメッセージブロック(ＳＭＢ)コネクションを設定する前記選択されたトランスポートを経由してネゴシエートメッセージを送信することを含むことを特徴とする請求項１に記載の方法。
【請求項１０】
前記第１又は第２のコネクションをバインディングすることは、前記クライアントから前記サーバーへコマンドを送信するために前記セッションにより使用する前記コネクションを準備することを含むことを特徴とする請求項１に記載の方法。
【請求項１１】
前記第１又は第２のコネクションをバインディングすることは、前記セッションおよび／またはコネクションをクリーンアップするための情報を蓄積することを含むことを特徴とする請求項１に記載の方法。
【請求項１２】
前記コマンドを送信することは、現在のコマンドを処理するのに適した一つまたは複数のコネクションを選ぶために複数のバインディングされたコネクションの中から選択することを含むことを特徴とする請求項１に記載の方法。
【請求項１３】
ファイルシステムセッションにおいてマルチチャネルコネクションを提供するためのコンピューターシステムであって、
以下のコンポーネント内で具現化されるソフトウェア命令を実行するように構成されたプロセッサおよびメモリと、
一つまたは複数のリソースを共有するためにクライアントとサーバーとの間のセッションを開始する要求を受信するセッション開始コンポーネントと、
前記クライアントと前記サーバーとの間の通信のために利用可能な一つまたは複数のコネクショントランスポートを決定するチャネル発見コンポーネントと、
前記クライアントと前記サーバーとの間の前記セッションに対して結合するために、前記決定された利用可能なコネクショントランスポートから、一つまたは複数のコネクショントランスポートを選択するチャネル選択コンポーネントと、
前記選択されたコネクショントランスポートを前記セッションと関連付けるバインディングコンポーネントと、
前記クライアントと前記サーバーとの間のセッションに関連した一つまたは複数のコマンドを受信するコマンド受信コンポーネントと、
特定のコマンドを送信するセッションにバインディングされたコネクショントランスポートを選択するコマンドルーティングコンポーネントとを備え、
前記チャネル発見コンポーネントは、各々のコネクショントランスポートがリモートダイレクトメモリアクセス（ＲＤＭＡ）および／またはレシーブスケーリングサポート（ＲＳＳ）をサポートするか否かを決定するようにさらに構成されることを特徴とするシステム。
【請求項１４】
前記セッション開始コンポーネントは、アプリケーションがファイルまたは他のリソースにアクセスするために接続したいサーバーを特定するクライアントで稼動する前記アプリケーションからの要求を受信するように構成されることを特徴とする請求項１３に記載のシステム。
【請求項１５】
請求項１ないし１２のうちの何れか１項に記載の方法をコンピューターに実行させるコンピュータプログラム。
【発明の詳細な説明】
【背景技術】
【０００１】
ネットワーク上の２つのコンピューター間でファイル、プリンタおよび他のリソースを共有するための様々な技法が存在する。例えば、リソース共有のためのアプリケーションレイヤーネットワークプロトコルの１つにＳＭＢ(Server Message Block)がある。ＳＭＢはMICROSOFT（登録商標） WINDOWS（登録商標）および他のオペレーティングシステムによって使用され、２つのコンピューターまたは他のリソースは、通信し、リソースへのアクセスを要求し、リソースの意図されたアクセスを指定し（例えば、読み取り、書き込み等）、リソースをロックすること等が可能となる。MICROSOFT（登録商標） WINDOWS（登録商標） VistaはＳＭＢ２．０を導入し、そのＳＭＢ２．０はＳＭＢ１．０のコマンドセットを簡素化し、多くの他の改良点を加えている。MICROSOFT（登録商標） WINDOWS（登録商標） ７およびサーバー２００８Ｒ２はＳＭＢ２．１を導入した。そのＳＭＢ２．１はオポチュニスティックロック(opportunistic locking (oplocks))および他の改良点を加えている。
【０００２】
リソースのリモート共有のための大抵のプロトコルは、コネクションとセッションとの間の一対一の関係であると考えられている。セッションは、リソースにアクセスするための任意の単一要求、およびコネクションが終了するまでの上記リソースへの順次アクセスの存続期間を表す。セッションはまた、特定のセキュリティプリンシパルと関連付けられ、当該セッションの間に認証される動作を決定するセキュリティ証明を有効化することができる。コネクションは、ＴＣＰ(Transmission Control Protocol)、またはＳＭＢのような上位プロトコルがコマンドを実行するように通信する他の形式のコネクションを含むことができる。典型的には、ＳＭＢセッションは、要求ソースと要求ターゲットとの間のＴＣＰコネクションを開き、一つまたは複数のＳＭＢコマンドを送信してターゲットリソースにアクセスし、次いでセッションを閉じることを含む。
【０００３】
多くのコンピューターは今日、コンピューター間で複数の利用可能なコネクションがあるような方法で接続されている。例えば、データーセンターサーバーは、一方が故障した場合にネットワークトラフィックがもう一方を経由して送信されることができるように、二以上のＮＩＣ(Network Interface Cards)と共に構築されることが多い。クライアントコンピューターは、ワイヤレスネットワークコネクション(Wi-Fi)、ブルートゥースコネクション(Bluetooth（登録商標） Connection)、有線イーサネット（登録商標）（例えば、ＬＡＮ(Local Area Network)）等を含むことができる。サーバーコンピューターは、ＳＡＮ(Storage Area Network)、ファイバーチャネルを介したコネクション、有線イーサネット等を含むことができる。これらのコネクションの一部または全ては、同じリソースの一部または全てに対する接続性を提供することができる。
【０００４】
残念ながら、利用可能なコネクション情報は一般的に、ネットワークを使用するアプリケーション、またはアプリケーションレイヤープロトコルには利用できない。サーバーに対してコネクションを要求するアプリケーションは典型的に、下位のネットワークレイヤーへのコネクションを作成する装置／プロトコルを選択する全ての責任を引き受け、ネットワークレイヤーは、単一のコネクションを作成してアプリケーションのコマンドを実行することになる。コネクションが失敗した場合、アプリケーションまたはネットワークレイヤーは、セッションを再び設定することにより別のコネクションを試行することができるし、あるいは、手作業を伴ってそのようにすることができる。単一のコネクションの使用により、何らかの理由でコネクションが失敗する場合に終了し、かつ、複数のネットワークによって提供される帯域の集合を利用することができない脆弱なコネクションを導く。ＮＦＳ(Network File System)のような一部のプロトコルは、パラレルエクステンション(parallelization extensions)(例えば、ｐＮＦＳ）を含んでいて、このパラレルエクステンションにより、データへの冗長性のあるパスの使用が可能になり、スループットを改善することができる。しかし、これらは、当該コネクションを管理するために用いることができる上位レベルに対するいかなる情報を提供しない。別の例は、実験的なＭＰＴＣＰ(Multipath TCP)プロトコルであり、ＭＰＴＣＰは、上位互換性のために上位レイヤーに検知されないままでいる特定の目的を有する。これらのプロトコルの機能は、上位レイヤーの制御から完全に外れ、ネットワークレイヤーは、自動的に最も速いコネクションを独自に選択することができないし、あるいは、フェイルオーバー、スループット、または他の目的のために、最も効率的なコネクションの使用を提供することができない。
【発明の概要】
【０００５】
本明細書で詳述されているマルチコネクション情報システムは、ＳＭＢアプリケーションレイヤープロトコルなどの、トランスポートレイヤーより上位のプロトコルから制御可能な方法で、単一のファイルシステムセッションにおいてリソースへ接続する複数のコネクションを用いる。また、システムにより、単一コネクションは、複数のセッションと共有することもできる。チャネルの概念は、特定のコネクションに対する特定のセッションをバインディングすることを表すために導入される。セッションは、複数のトランスポートを通じた通信を可能とする複数のコネクションに結合することができる。セッションの初期ネゴシエーションの間、クライアントおよびサーバーは、複数のコネクションがセッション内でクライアントとサーバーとの間でサポートされるかを決定することができる。初期コネクションが確立した後で、追加コネクションが確立されて既存のセッションに結合される。複数のコネクションは、フェイルオーバーおよび／または負荷分散のために使用することができる。マルチコネクションの情報システムは、セッション内における複数のチャネルを確立する機能を検知するためのプロトコルを提供する。プロトコルは、二つの特定のリソース間の利用可能なコネクションに関する情報、および、コネクションのサーバー側とクライアント側がセッション内における複数のチャネルをサポートするかの情報を提供する。このように、マルチコネクションの情報システムは、トランスポートレイヤーより上位のレイヤーにおける、単一セッションへの複数のコネクションをインテリジェントに選択して使用する方法を提供する。
【０００６】
この概要は、発明の詳細な説明において以下でより詳細に説明される簡略化した態様での概念の選んだものを紹介するために提供してある。この概要は、請求された保護対象の主要な特徴または本質的な特徴を特定することを意図するものではないし、この概要は請求された保護対象の範囲を制限するために使用されるものでもない。
【図面の簡単な説明】
【０００７】
【図１】一実施形態における、マルチコネクションの情報システムのコンポーネントを示すブロック図である。
【図２】一実施形態における、セッションを開始してトランスポート情報を受信するマルチコネクションの情報システムの処理を示すフローチャートである。
【図３】一実施形態における、以前に確立されたセッションへ追加コネクションを付加するマルチコネクションの情報システムの処理を示すフローチャートである。
【図４】一実施形態における、マルチコネクションの情報システムを使用した複数のコネクションの設定を示すネットワークパケット図である。
【図５】一実施形態における、マルチチャネル情報システムを使用したセッションとコネクションとの間の潜在的な多対多の関係を示すブロック図である。
【発明を実施するための形態】
【０００８】
本明細書で説明されるマルチコネクションの情報システムは、ＳＭＢアプリケーションレイヤープロトコルなどのＯＳＩ(Open Systems Interconnection)モデルにおけるトランスポートレイヤーより上位のプロトコルから制御可能な方法で、単一のファイルシステムセッションにおいてリソースへ接続するために複数コネクションを用いる。また、このシステムにより、単一コネクションは、複数のセッションによって共有することが可能となる。チャネルの概念は、特定のコネクションに対する特定のセッションをバインディングすることを表すために導入される。セッションは、複数のトランスポートを経由した通信を可能とするために複数のコネクションにバインディングすることができる。セッションの初期ネゴシエーションの間、クライアントおよびサーバーは、セッション内でクライアントとサーバーとの間の複数のコネクションがサポートされるか否かを決定することができる。初期コネクションが確立した後で、追加コネクションが確立されそして既存のセッションにバインディングされる。複数のコネクションは、フェイルオーバーおよび／または負荷分散のために使用することができる。マルチコネクションの情報システムは、セッション内における複数チャネルを確立する機能を検知するためのプロトコルを提供する。プロトコルは、二つの特定のリソース間の利用可能なコネクションに関する情報およびコネクションのサーバー側とクライアント側がセッション内における複数チャネルをサポートするかの情報を提供する。
【０００９】
クライアントとサーバー（例えば、ＳＭＢクライアントとサーバー）との間の初期セッションが確立する間、クライアントおよびサーバーの双方がセッション内で複数のコネクションをサポートすることを示すためにネゴシエーションが発生する。これは、複数のコネクションのためのサポートを提供するプロトコルバージョンをネゴシエーションすることを含む。クライアントは、ＦＳＣＴＬ(File System Control Message)、または他のＡＰＩ(Application Programming Interface)を呼び出して、サーバートランスポートインターフェースのリストを得ることができる。代替的な実施形態において、クライアントは、サーバーネットワークインターフェイスおよび性能についてのより多くの情報を得るためにＤＮＳサービスの問合せを行うことができる。また、クライアントは、各々のサーバーＩＰアドレスに関連したローカルインターフェースを見つけ、形式と速度を含む、ローカルインターフェースについての追加の情報を集めることができる。次いで、クライアントは、初期コネクションを確立するためのインターフェースを選択することができる。ある実施形態において、クライアントは最初に初期コネクションを確立し、他の利用可能なトランスポートについて、サーバーと情報のネゴシエーションするために上記コネクションを使用する。追加のチャネルの確立のため、クライアントは、複数のインターフェースを形式および速度によりソートして最上位のインターフェースを決定し、最上位のインターフェースを使用する追加チャネルを確立する。クライアントが複数のチャネルを確立した後に、最上位のインターフェースではない一部のチャネルを任意に廃棄することができ（または単純に使用しない）、形式と速度に基づいて上位にランクされたチャネルを使用することを選択する。このように、マルチコネクションの情報システムは、トランスポートレイヤーより上位のレイヤーにおいて、単一セッションへの複数のコネクションをインテリジェントに選択して使用する方法を提供する。
【００１０】
図１は一実施形態における、マルチコネクションの情報システムのコンポーネントを説明するブロック図である。システム１００は、セッション開始コンポーネント１１０、チャネル発見コンポーネント１２０、チャネル選択コンポーネント１３０、バインディングコンポーネント１４０、コマンド受信コンポーネント１５０、コマンドルーティングコンポーネント１６０、およびフェイルオーバー処理コンポーネント１７０を含む。これらのコンポーネントの各々については、本明細書においてさらに詳細に説明する。
【００１１】
セッション開始コンポーネント１１０は、一つまたは複数のリソースを共有するために、クライアントとサーバーとの間のセッションを開始するための要求を受信する。例えば、コンポーネント１１０は、アプリケーションがファイルまたは他のリソースにアクセスするために接続したいサーバーを特定するクライアントで稼動する当該アプリケーションからの要求を受信することができる。クライアントで稼動するアプリケーションから要求を受信することができるが、クライアントは、アプリケーションがファイルまたは他のリソースにアクセスするために接続したいサーバーを特定する。セッション開始コンポーネント１１０は、クライアントとサーバーとの間で通信を開始する「ネゴシエート」メッセージなどのＳＭＢ初期要求を受信することができる。セッション開始コンポーネント１１０は、アプリケーション要求に応答してセッションを作成する。そして、セッション開始コンポーネント１１０は、ユーザの認証情報のようなセキュリティ情報を提供し、その結果サーバーは制限されたリソースに対するネットワークアクセス何れにも遵守することができる。
【００１２】
チャネル発見コンポーネント１２０は、クライアントとサーバーとの間の通信に利用可能な一つまたは複数のコネクショントランスポートを決定する。クライアントおよびサーバーは、イーサネット(ethernet)およびWi-Fi、並びに二つのイーサネットＮＩＣｓ(Network Interface Cards)のような同じトランスポートの冗長構成のコネクションなどの様々なトランスポートによって接続することができる。さらに、一部のコネクショントランスポートは、別のコネクショントランスポートを経由した一コネクショントランスポートの速度に影響を及ぼす、ＲＤＭＡ(Remote Direct Memory Access)などの機能をサポートすることができる。チャネル発見コンポーネント１２０は、この形式の情報を集め、クライアントが適切なトランスポートを選択する際に使用するための情報を収集する。コンポーネント１２０は、サーバートランスポートインターフェースを特定するためにサーバーへの初期コネクションを使用してコネクションのための複数のチャネルのネゴシエートをすることができる。また、コンポーネント１２０は、サーバーに対する利用可能なコネクション形式についての情報を求めるＤＮＳサーバーへの問合せなどの、クライアントとサーバーの外部の情報を集めることができる。
【００１３】
チャネル選択コンポーネント１３０は、決定された利用可能なコネクショントランスポートの中から一つまたは複数のコネクショントランスポートを選択し、クライアントとサーバーとの間のセッションをバインディングする。ある場合において、クライアントは、サーバーへの最初のコネクションを確立し、次いで、ある条件が存在するのを発見すると、クライアントは、最初のコネクションを経由して発見された情報を使用して、その後、サーバーへの追加のコネクションを確立するであろう。例えば、条件は、クライアントが大容量のデータをサーバーに対して送信していること、および、初期コネクションにより長時間かかるであろうことを探知することを含むことができる。また、条件は、冗長構成のコネクションがフェイルオーバーに有益となり得るよう、クライアントがクライアントとサーバーとの間のセッションへの信頼性についての高い期待を有することを決定することを含み得る。チャネル選択コンポーネント１３０は、アプリケーション、または、システム１００の特定の実行によって修正されもしくは構成され得、特定の実行に対して重要な目的および優先順位に基づいてコネクションを選択する。例えば、ある実行は、最も速いトランスポートコネクションを最初に経由するコネクションを確立することを優先し、一方で、他の実行は、ネットワークトラフィックのある形式のために高速のコネクションを確保して、他の形式のトラフィックのために低速のまたは低い優先順位のコネクションを使用することができる。
【００１４】
バインディングコンポーネント１４０は、選択されたコネクショントランスポートをセッションと関連付ける。セッションは、クライアントとサーバーとの間の特定の一連の通信と関連付けられた、セキュリティプリンシパル(security principal)についての情報を取得する。また、セッションは、特定の一連の通信に利用可能な機能またはコマンドを定義する、その他メタデータを包含することができる。選択されたコネクショントランスポートをセッションにバインディングすることは、上記セッションのために、コネクショントランスポートを利用可能にし、そして何れのセキュリティ証明書またはその他サーバーとのやりとりをネゴシエートすることができ、セッションの使用のためコネクションを準備する。単一のセッションが複数のコネクションにバインディングすることができるように、複数のセッションもまた特定のコネクションにバインディングすることができることに注意されたい。コネクションは、通信がクライアントとサーバーとの間で伝達するコンジット(conduit)を提供し、その一方で、セッションは、アプリケーションレイヤーが達成しようとすること、または、実行を許可されていることのコンテキストにおけるセマンティックな意味を各通信に与える。
【００１５】
コマンド受信コンポーネント１５０は、クライアントとサーバーとの間のセッションに関連した一つまたは複数のコマンドを受信する。クライアントとサーバーとの間で通信が可能であることの目的は、クライアントがリソースにアクセスするコマンドを送信することである。例えば、クライアントは、ファイルを開くためにファイルに対して「開く」要求またはクライアントがファイルを修正する間に他者からのアクセスを防ぐために「ロックする」要求を送信することができる。コマンド受信コンポーネント１５０は、これらコマンドを受信する。そしてコマンドルーティングコンポーネント１６０を呼び出し、どの経路でコマンドを送信するかの一つまたは複数のトランスポートを決定する。ある実施形態において、システム１００は、対応する要求が送信された経由と同じトランスポートコネクションを経由して、応答が送信されるであろうことを保証する。このように、特定のトランスポートコネクションに対する特定のコマンドをルーティングすることによって、クライアントはまた、どのように要求に関連したデータがクライアントに対して返されるであろうかを選択することができる。大容量データおよびコネクション速度が変化するため、適切に選択することは、動作全体の存続期間に劇的に影響し得る。
【００１６】
コマンドルーティングコンポーネント１６０は、特定のコマンドを送信するセッションにバインディングされたコネクショントランスポートを選択する。コマンドルーティングコンポーネント１６０は、大容量のファイルを取り出すため、または大容量のファイルを送信するためなど、コマンドを分割しそしてコマンドを実行するために複数のトランスポートを使用する。また、コンポーネント１６０は、幾つかのコマンドには高速コネクショントランスポートを選択することができる一方で、低い優先順位のコマンドには、低速または頻繁に利用されないコネクショントランスポートを選択することができる。また、コマンドルーティングコンポーネント１６０は、既存のバインディングされたコネクション経由では低速すぎるであろう、大容量のファイルを送信するための要求の受信の際のように、追加の利用可能なトランスポートコネクションはセッションにバインディングされるべきであることを決定することができる。さらに、コマンドルーティングコンポーネント１６０は、差し迫ったコネクションの維持管理または停電を検知することができ、そしておよび信頼性を保証するために追加コネクションを作成する。
フェイルオーバー処理コンポーネント１７０は、セッション中の特定のトランスポートコネクションの切断を処理する。例えば、ネットワークケーブルが切断され、ＮＩＣが動作しなくなり、または他の条件により以前は切断されていたコネクションが動作する可能性がある。フェイルオーバー処理コンポーネント１７０は、他のコネクションは利用可能か否か決定する。そして、追加のチャネルを選択するチャネル発見コンポーネント１２０および切断されていないコネクションに対してコマンドをルートするコマンドルーティングコンポーネント１６０のような、他のコンポーネントを呼び出すことができる。また、フェイルオーバー処理コンポーネント１７０は、切断されたコネクショントランスポートにキュー(queue)されたコマンド、および別のトランスポートコネクションを経由するサーバーの応答待ちコマンドの何れへの応答を処理することができる。その結果、故障にかかわらず確実にコマンドは実行される。このように、システム１００はより高い信頼性を供給する。
【００１７】
マルチコネクションの情報システムが実行されるコンピューティング装置は、ＣＰＵ(Central Processing Unit)、メモリ、入力装置（例として、キーボードおよびポインティング装置）、出力装置（例として、ディスプレイ装置）、およびストレージ装置（例、ディスクドライブまたはその他不揮発性ストレージ媒体）を含むことができる。メモリおよびストレージ装置は、システムを実行または作動させるコンピューターが実行可能な命令（例として、ソフトウェア)としてエンコード可能な、コンピューターが読み取り可能なストレージ媒体である。さらに、データ構造およびメッセージ構造は、通信リンクの信号のようにデータ送信媒体を経由して格納されまたは送信され得る。通信リンクは、インターネット、ローカルエリアネットワーク、ワイドエリアネットワーク、ポイントトゥーポイントダイアルアップコネクション、携帯電話ネットワーク等のように様々な通信リンクを使用することができる。
【００１８】
システムの実施形態は、様々な動作環境において実施することができ、その動作環境は、パーソナルコンピューター、サーバーコンピューター、ハンドヘルドもしくはラップトップ装置、マルチプロセッサシステム、マイクロプロセッサーベースのシステム、プログラム可能な家電、デジタルカメラ、ネットワークＰＣ、マイクロコンピューター、メインフレームコンピューター、上記のシステムまたは装置のいずれかを含む分散コンピューティング環境、セットトップボックス、ＳＯＣ(System On Chips)等を含む。コンピューターシステムは、携帯電話、ＰＤＡ，スマートフォン、パーソナルコンピューター、プログラム可能な家電、デジタルカメラなどを含むことができる。
【００１９】
システムは、一つもしくは複数のコンピューター、または、他の装置によって実行されるプログラムモジュールなどのコンピューターが実行可能な命令の一般的なコンテキストで説明することができる。一般的に、プログラムモジュールは、ルーチン、プログラム、オブジェクト、コンポーネント、データ構造、特定のタスクを実行するもの、または、特定の抽象的なデータ形式を実行するものなどを含む。典型的に、プログラムモジュールの機能は、様々な実施形態において所望の態様で集約または分散することができる。
【００２０】
図２は、一実施形態における、マルチコネクションの情報システムがセッションを開始しそしてトランスポート情報を受信する処理を図示したフローチャートである。まずブロック２１０において、システムはアプリケーションからクライアントとサーバーとの間のセッションを開始するための要求を受信する。アプリケーションは、オペレーティングシステムコンポーネントまたは他のサービスレベルアプリケーション、並びに典型的なクライアントアプリケーションを含む。アプリケーションの多くの形式およびサービスは、ファイル、プリンタ、または他のリソースを共有するためにサーバーに接続する。要求を受信すると、システムはセッションの設定を始め、一つまたは複数のパケットをサーバーに送信して利用可能なネットワークプロトコルのダイアレクト(dialect)をネゴシエートすることができる。利用可能なネットワークプロトコルのダイアレクトは、クライアントとサーバーとの間の通信、および、互換性を保証するためにクライアントとサーバーの他の機能を検出するために使用される。この処理の間、サーバーは、複数のコネクションのセッションをサポートすることを示すことができ、そのため、クライアントは、スループットを増加し、フェイルオーバーを改善する等のために、本明細書で説明にされた技法を利用することができる。
【００２１】
続いてブロック２２０において、システムは、クライアントとサーバーとの間のコマンド送信のための初期トランスポートを選択する。システムは、最初のＮＩＣ上のイーサネットコネクションのように、最初のコネクションのためのトランスポートの所定形式を実行しないとするか、またはアプリケーションが指定する基準に基づいて選択することができる。基準は、最も高速なコネクション、最も高い帯域を伴うコネクション、最も堅牢なコネクションを選択すること、またはアプリケーションに対してその他何れの有用な基準を示すことができる。続いてブロック２２５において、クライアントはサーバーに対して初期コネクションを確立する。クライアントとサーバーは、利用可能なトランスポートに関する情報を共有するので、クライアントは、何れの特定のセッションのための適切なコネクションを選ぶことができる。
【００２２】
続いてブロック２３０において、システムは、クライアントとサーバーとの間の二番目のコネクションを確立するための、一つまたは複数の利用可能なトランスポートを決定する。システムは、利用可能なトランスポートを決定する内部および外部の両方の方法を有する。外部の方法は、独立したＤＮＳサーバーへの問合せ、データーセンターメタデータ、または他の情報のように、クライアント／サーバーコネクションの外側での方法である。内部の方法は、機能要求の送信または利用可能な装置およびトランスポートを特定するための問合せのように、クライアントとサーバーとの間のコネクションの内部での方法である。クライアントは、クライアントオペレーティングシステムへの問合せによってまたは初期コネクションを経由したサーバーへの問合せによって、ローカルトランスポートを特定することができる。マルチチャネルの情報システムは、利用可能なトランスポートのリストおよび如何なる条件下で各々のトランスポートを使用するべきかを決定する際に助けとなる、トランスポートについて発見された何れのメタデータの編纂をする。
【００２３】
次にブロック２４０において、システムは、選択されたトランスポートを介して二番目のコネクションを確立する。例えば、プロトコルがＳＭＢの場合、次いで、クライアントはＳＭＢコネクションを設定する、選択されたトランスポートを経由してネゴシエートメッセージを送信することができる。個々のコネクションは、今日それらがシステムで動作するように、バインディングするステップを伴い単一のコネクションを単一のセッションへ集約するように表される。コネクションを確立することは、クライアントとサーバーとの間で行き来する幾つかのパケットを含み、何れのコネクション設定を実行することおよびコネクションに使用するのに必要な何れのメタデータを集めることを含むことができる。
【００２４】
次にブロック２５０において、システムは、確立された二番目のコネクションを初期コネクションのセッションにバインディングする。バインディングすることは、システムに対して、セッションはコネクションに組み込まれていることおよびシステムはコマンドを送信するためにコネクションを使用できることを通知する。システムは、どのコネクションがどのセッションにバインディングされたか追跡することができ、セッションが閉じたまたはコネクションが切断すると、システムは適切にクリーンアップすることができる。コネクションを使用する全てのセッションが終了した後で、システムはコネクションを閉じることができる。同様に、セッションに統合された全てのコネクションが切断した後で、システムはセッションをクリーンアップすることができる。
【００２５】
次にブロック２６０において、システムはアプリケーションから受信されたコマンドを、セッションにバインディングされたいずれかの確立されたコネクションを介して送信する。システムは、現在のコマンドに適したコネクションを選ぶために、複数のこのようなコネクションの間から選択をすることができる。システムは、帯域、レイテンシ、現在のキューの深さ(queue depth)、バッテリー電源（例として、モバイル装置のための）、優先順位、またはコマンド処理のためコネクションを選択するための他任意の要因を考慮することができる。また、システムは、コマンドを分割し、複数のコネクションを同時に使用して処理速度を向上することができる。次にブロック２７０において、システムは、コマンドを送信するのに使用した同じトランスポートを介して、送信したコマンドへの応答を受信する。受信した応答は、コマンドが適切に送信されたか否かを示すことができ、要求されたデータ、または特定の要求のために定義されたその他何れの応答を含むことができる。
【００２６】
次に、判断ブロック２８０において、まだほかにコマンドがあるかまたはセッションが閉じられていない場合、次いでシステムはブロック２６０にループしてまだほかにあるコマンドを送信するか、そうでなければシステムを完了する。システムはこのように、利用可能なコネクションを経由して、セッションに関連付けられたコマンドを送信しながら継続する。何れかの段階で、システムが、コマンドを実行するために追加のコネクションが有益であろうと決定した場合、次いでシステムは、コマンドが使用するセッションに対する追加のコネクションを確立およびバインディングすることができる。ブロック２８０の後、これらステップは完結する。
【００２７】
図３は、一実施形態における、マルチコネクションの情報システムが、以前に確立されたセッションに追加のコネクションを加える処理を図示したフローチャートである。図３のステップは、図２のステップの後に、特定の条件が検知されたか、または単一のコネクションから複数のコネクションへセッションを拡張するための閾値が届いた後に発生することができる。例えば、システムは複数のコネクションを経由してより高速に完了するであろう大容量のファイル転送を検知することができる。
【００２８】
まず、ブロック３１０において、システムは以前に確立されたセッションのための追加のコネクションを確立するための条件を検知する。そして、確立されたセッションは、クライアントとサーバーとの間での少なくとも一つのバインディングされたコネクションをすでに有する。条件は、既存のコネクションの帯域を上回ること、既存のコネクション上でレイテンシが高すぎること、大容量データを要求または送信する次に控えたコマンドのために追加の帯域を必要とすること等を含むことができる。条件を検知すると、システムはセッションに追加のコネクションを付加するために、以下のステップを実行する。
【００２９】
次にブロック３２０において、システムは以前に発見されたトランスポートのリストから追加のトランスポートを選択する。システムは、サーバーに要求する機能を通じ、ＤＮＳ情報を問合わせることにより、または、クライアントとサーバーとを接続するための方法を発見する他の任意の機構により、トランスポートを発見することができる。システムは、利用可能なトランスポートをソートし、および／または発見する間に受信した特性に基づいてトランスポートを選択することができる。例えば、システムは高帯域でのコネクション、高可用でのコネクション、現在はアイドル状態のコネクション等を選ぶことができる。
【００３０】
次に、ブロック３３０において、システムは選択されたトランスポートを介してコネクションを確立する。コネクションを確立することは、セッションプロトコルネゴシエーション並びにＴＣＰ／ＩＰを介して等、ＳＭＢネゴシエートシーケンス等、トランスポートレイヤーコネクションを確立することを含むことができる。システムはまた、確立されたコネクションを経由してメタデータを交換することができ、コネクション形式を確認し、およびコネクションを使用するための何れかの設定情報を受信する（例えば、コネクションが選択的再送（ＳＡＣＫ：selective acknowledgement）のようなある特定の機能をサポートするか否か、等）。
【００３１】
次にブロック３４０において、システムは新しく確立されたコネクションを既存のセッションにバインディングし、その結果セッションはコマンドを送信するときに選択可能な複数の利用可能なコネクションを有する。バインディングすることは、すでに別のセッションに関連付けられたコネクションを、現在のセッションに関連付けることができ、そのため双方のセッションはコネクションを利用することができる。バインディングすることはまた、セッションが閉じた場合に、セッション管理ロジックが適切なクリーンアップステップを実行してコネクションを結合解除および／または閉じることができるよう、セッションに対してコネクションについて通知する。
【００３２】
次にブロック３５０において、システムは現状複数のコネクションがあるサーバーに方向付けられたアプリケーションレベルのコマンドを受信する。アプリケーションはファイルを開くことを要求することができ、共有プリンタに対してプリントすることを要求することができ、または共通共用の、リモートのリソースの使用を実行することができる。オペレーティングシステムまたは他のサービスコードは、アプリケーションがサーバーに対してコマンドを送信するためのシステムを呼び出し得ることを通じて、一つまたは複数のＡＰＩｓ(Application Programming Interfaces)を提供することができる。
【００３３】
次にブロック３６０において、システムは、新しく確立されたコネクションの中から一つまたは複数のトランスポートおよび一つまたは複数の受信されたコマンドが送信された以前のコネクションを選択する。システムは、大容量のデータのための要求のような、一つまたは複数の閾値基準を満たさなければコマンドをデフォルト設定のコネクションにルートすることができる。より大きな要求を受信すると、システムはより高い帯域コネクションまたはコマンドを分割し、複数のコネクションを使用し、コマンドによって指定される動作をより速く完了する。別例として、システムはコネクションが切断された時に検知することができ、およびアプリケーションに対して透過的な円滑なフェイルオーバーの方法として、代替のコネクションを使用することができる。ブロック３６０の後で、これらのステップは完結する。
【００３４】
ある実施形態において、マルチコネクションの情報システムは、クライアントアプリケーションまたはサービスがリモートサーバーの利用可能なネットワークインターフェースについての情報を要求することができるオペレーティングシステム内のファイルシステムＡＰＩを提供する。例えば、MICROSOFT（登録商標） WINDOWS（登録商標）は、一つまたは複数のファイルシステムと対話するためにファイルシステムコントロールメッセージ(FSCTLs)を使用する。リモートサーバーの動作中のネットワークインターフェースを要求するためのコマンドであるFSCTL_LMR_QUERY_TRANSPORT_INFOを付加することができる。サーバーがこのコマンドに応答して提供することができる一つの構成は、下記においてさらに詳細に説明される次の要素を含む。すなわち、Next(4bytes)、Iflndex(4bytes)、Capability(4bytes)、RssQueueCount(4bytes)、LinkSpeed(8bytes)、SockAddr_Storage(128bytes)。
【００３５】
Next要素は、現在の構造の始めから後続の８バイト整列ネットワークインターフェースの始めまでのオフセットを提供する。Next要素は、それ以上ネットワークインターフェースが続かない時、ヌルターミネータ(null terminator)としてゼロにセットされる。Iflndex要素は、現在のネットワークインターフェースのために数に関するインデックスを提供する。Capability要素は、インターフェースがＲＤＭＡまたはＲＳＳ(Recieve Scaling Support)要件を満たすか否かのような、現在のネットワークインターフェースの機能を示すフラグを包含する。RssQueueCount要素は、ＲＳＳ要件を満たすインターフェースのためにＲＳＳキューカウントを示す。ある場合において、システムは特定のＮＩＣを使用してどれくらい多くのコネクションを作成するかのヒントとしてＲＳＳキューの深さ(queue depth)を使用する。LinkSpeed要素は、ビット／秒のインターフェースの速度を示す。SockAddr_Storage要素は、インターフェースを使用してコネクションを確立するために
ネットワークインターフェースアドレスを示す。このフィールドは、よく知られたソケット構造であるSOCKADDR_STORAGEを使用することができる。
【００３６】
図４は一実施形態にかかる、マルチコネクションの情報システムを使用して複数コネクションの設定を図示する、ネットワークパケットの状態遷移図である。この例で、クライアント４０５は、次に続くパケット（または複数パケットメッセージ）を送信することによって、サーバー４９５との複数のコネクションを確立する。クライアント４０５は、最初のネゴシエート要求４１０をサーバー４９５へ送信する。サーバー４９５は、ネゴシエート応答４２０をクライアント４０５へ応答する。クライアント４０５は次いで、最初のセッション設定要求４３０をサーバー４９５へ送信する。サーバー４９５は、セッション設定応答４４０をクライアント４０５へ応答する。セッション設定は、クライアントとサーバーとの間の複数の往復を作成することができる。この時点で、セッションのための最初のチャネルが確立され、そしてクライアントはセッションを使用してサーバーに対してコマンド送信を開始することができる。その後（ただちにまたはしばらくした後）、クライアント４０５は、サーバー４９５に対する二番目のコネクションを同じセッションで確立することを決定する。クライアント４０５は、二番目のネゴシエート要求４５０を新しいトランスポートを経由してサーバー４９５に送信する。サーバー４９５は、ネゴシエート応答４６０をクライアント４０５へ応答する。クライアント４０５は次いで、二番目のセッション設定要求４７０をサーバー４９５へ送信する。最初のセッション設定要求４３０とは異なり、この要求４７０は以前のセッションに新しいコネクションを付加することを示すバインディングフラグを含むことができる。サーバー４９５は、セッション設定応答４８０をクライアント４０５へ応答する。このセッション設定はまた、クライアントとサーバーとの間の複数の往復を作成することができる。この時点で、双方のコネクションはコマンドをサーバーに送信するクライアントに対して利用可能となる。
【００３７】
図５は一実施形態にかかる、マルチチャネル情報システムを使用してセッションおよびコネクションの間の潜在的な多対多の関係を示すブロック図である。ブロック図は、最初のセッション５１０および二番目のセッション５２０を含む。ブロック図はまた、最初のコネクション５３０および二番目のコネクション５４０を含む。伝統的には、各セッションは、最初のセッション５１０が最初のコネクション５３０を使用する唯一のセッションであり、二番目のセッション５２０が二番目のコネクション５４０を使用する唯一のセッションであったように、コネクションと一対一の関係を有した。本明細書で説明される技術を使用して、チャネルの概念が導入され、これにより各々のセッションは複数のコネクションを使用することができ、かつ他のセッションとコネクションを共有することさえできる。このように、示された通り、最初のセッション５１０は最初のチャネル５５０を通じて最初のコネクション５３０にバインディングされる。最初のセッション５１０はまた、二番目のチャネル５６０を通じて二番目のコネクション５４０にバインディングされる。同様に、二番目のセッション５２０は、三番目のチャネル５７０を通じて最初のコネクション５３０にバインディングされ、および二番目のセッション５２０は、四番目のチャネル５８０を通じて二番目のコネクション５４０にバインディングされる。このように、いずれかのセッションは、アプリケーションまたは実行指定の環境設定によって規定される通りにいずれかのコネクションを使用することができる。
【００３８】
ある実施形態において、マルチコネクションの情報システムはアプリケーションに利用可能なコネクションを通知しない。本明細書で記載したように、システムはアプリケーションとトランスポートレイヤーとの間のレイヤー（例、ＴＣＰ）において実行されることができる。 例えば、MICROSOFT（登録商標） WINDOWS（登録商標）はアプリケーションが使用できるＳＭＢ実行を提供する。システムは本明細書で説明された技術を実行することができ、利用可能な時に複数のトランスポートを自動的に使用し、およびアプリケーションにより高い信頼性とスループットをアプリケーションによる入力なしに自動的に提供する。システムは、アプリケーションが機能を有効にするか否か構成することを可能とし得る。機能がオンの場合、システムはコネクションを確立して経由するトランスポートおよびアプリケーションからの様々なコマンドに使用するトランスポートを自動的に選ぶことができる。他の実施形態において、システムはアプリケーションに対してより多くのコントロールを提供することができ、その結果、アプリケーションが各々のコネクションを選択するための基準を確立することができ、または選択自体をすることができる。
【００３９】
前述より、マルチコネクションの情報システムの特定の実施形態は、図示の目的のために本明細書に記載されたものであるが、本発明の技術思想および技術的範囲から逸脱することなく様々な修正がなされることは理解されるであろう。従って、本発明は添付された特許請求の範囲によって以外は限定されない。
【図１】
0005882353.tif 000002
【図２】
0005882353.tif 000003
【図３】
0005882353.tif 000004
【図４】
0005882353.tif 000005
【図５】
0005882353.tif 000006