(57)【要約】  コミュニティ中継ノードが、アクセス保護されたクライアントに操作可能に結合され、アクセス保護されたクライアントと要求側クライアントとの間の通信を容易にするように適合される、ネットワークコミュニティ内のコミュニティ中継ノードを自動検出する方法は、コミュニティ中継ノードに対する要求に関連する要求側クライアントからの要求メッセージを受信するステップと、要求メッセージをサーバレスネームリゾリューションプロトコルネームに関連付けるステップと、サーバレスネームリゾリューションプロトコルネームに基づいてコミュニティ中継ノードのリストからコミュニティ中継ノードを選択するステップであって、コミュニティ中継ノードのリストはコミュニティ中継ノードに関連付けられている少なくとも１つのインターネットプロトコルアドレスを備えるステップと、選択されたコミュニティ中継ノードのインターネットプロトコルアドレスを要求側クライアントに返すステップとを含む。
2008538630.tif 000002
【特許請求の範囲】
【請求項１】
ネットワークコミュニティ内のコミュニティ中継ノードを自動検出する方法であって、前記コミュニティ中継ノードは、アクセス保護されたクライアントに結合され、前記アクセス保護されたクライアントと要求側クライアントとの間の通信を容易にするように適合されている方法において、
コミュニティ中継ノードに対する要求に関連する要求側クライアントからの要求メッセージを受信するステップと、
前記要求メッセージをサーバレスネームリゾリューションプロトコルネームに関連付けるステップと、
前記サーバレスネームリゾリューションプロトコルネームに基づいて、コミュニティ中継ノードのリストからコミュニティ中継ノードを選択するステップであって、コミュニティ中継ノードの前記リストはコミュニティ中継ノードに関連付けられている少なくとも１つのインターネットプロトコルアドレスを備えるステップと、
前記選択されたコミュニティ中継ノードのインターネットプロトコルアドレスを前記要求側クライアントに返すステップと、
を備える方法。
【請求項２】
前記要求メッセージは要求された通信プロトコルタイプを備え、
前記要求メッセージをサーバレスネームリゾリューションプロトコルネームに関連付けるステップは、前記要求メッセージを前記要求された通信プロトコルタイプに対するサーバネームリゾリューションプロトコルネームに関連付けるステップを備え、
前記サーバレスネームリゾリューションプロトコルネームに基づいてコミュニティ中継ノードのリストからコミュニティ中継ノードを選択するステップは、前記通信プロトコルタイプをサポートするコミュニティ中継ノードのリストからコミュニティ中継ノードを選択するステップを備え、
コミュニティ中継ノードのインターネットプロトコルアドレスを返す前記ステップは、前記要求された通信プロトコルタイプをサポートするコミュニティ中継ノードのインターネットプロトコルアドレスを返すステップを備える、
請求項１に記載の方法。
【請求項３】
前記通信プロトコルタイプは、セキュア・ソケット・レイヤ（ＳＳＬ）プロトコルとユーザ・データグラム・プロトコルとからなる群の中の１つに関連する、請求項２に記載の方法。
【請求項４】
ドメインネームシステムネームを前記サーバレスネームリゾリューションプロトコルネームにマッピングするステップを更に備え、
前記要求メッセージは前記ドメインネームシステムネームを備え、
前記要求メッセージをサーバレスネームリゾリューションプロトコルネームに関連付けるステップは、前記ドメインネームシステムネームをサーバレスネームリゾリューションプロトコルネームに突き合わせするステップを備える、
請求項１に記載の方法。
【請求項５】
要求タイプは、ドメインネームサービスネームと、前記ドメインネームサービスネームにエンコードされたサーバレスネームリゾリューションプロトコルネームを備え、
ドメインネームシステムアドレスネームから前記サーバレスネームリゾリューションプロトコルネームをデコードするステップと、
前記サーバレスネームリゾリューションプロトコルネームをコミュニティ中継ノードのインターネットプロトコルアドレスに変換するステップと
を更に備える、請求項１に記載の方法。
【請求項６】
前記サーバレスネームリゾリューションプロトコルネームに基づいてコミュニティ中継ノードのリストからコミュニティ中継ノードを選択するステップは、負荷バランシング、サービス品質、及び前記要求側クライアントとの前記コミュニティ中継ノードの近さからなる１つ又は複数の群に基づいてコミュニティ中継ノードのリストからコミュニティ中継ノードを選択するステップを備える、請求項１に記載の方法。
【請求項７】
コミュニティ中継ノードから登録メッセージを受信するステップであって、前記登録メッセージはサーバレスネームリゾリューションプロトコルネーム及びコミュニティ中継ノードのインターネットプロトコルアドレスを備えるステップと、
前記登録されたコミュニティ中継ノードのサーバレスネームリゾリューションプロトコルクエリを行うステップと、
前記コミュニティ中継ノードからクエリ応答を受信するステップと、
前記登録されたコミュニティ中継ノードのピアネームリゾリューションプロトコルアドレス及びインターネットプロトコルアドレスをコミュニティ中継ノードの前記リストに格納するステップと
を更に備える、請求項１に記載の方法。
【請求項８】
コミュニティ中継ノードと要求側クライアントとの間の通信をブートストラップする方法のステップを実行するコンピュータ実行可能命令を有するコンピュータ可読媒体であって、
要求側クライアントからドメインネームを受信するためのコンピュータ実行可能命令と、
前記ドメインネームをピアネームに関連付けるためのコンピュータ実行可能命令と、
前記ピアネームを１つ又は複数のインターネットプロトコルアドレスに変換するためのコンピュータ実行可能命令であって、各インターネットプロトコルアドレスはコミュニティ中継に関連するコンピュータ実行可能命令と、
前記１つ又は複数の変換されたインターネットプロトコルアドレスからコミュニティ中継ノードを選択するためのコンピュータ実行可能命令と、
前記選択されたコミュニティ中継ノードのインターネットプロトコルアドレスを前記要求側クライアントに返すためのコンピュータ実行可能命令と
を含むコンピュータ可読媒体。
【請求項９】
前記ドメインネームはクエリネーム及びクエリタイプを備え、
前記ドメインネームを前記クエリネーム及び前記クエリタイプに解析するためのコンピュータ実行可能命令と、
前記クエリタイプに従って前記クエリネームをピアネームに関連付けるためのコンピュータ実行可能命令と、
前記クエリタイプに従ってコミュニティ中継ノードを選択するためのコンピュータ実行可能命令と
を更に備える、請求項８に記載のコンピュータ可読媒体。
【請求項１０】
前記クエリタイプはセキュア・ソケット・レイヤ（ＳＳＬ）プロトコル及びユーザ・データグラム・プロトコルからなる群のうちの１つを備える、請求項９に記載のコンピュータ可読媒体。
【請求項１１】
前記ドメインネームをピアネームに関連付けるためのコンピュータ実行可能命令は、ドメインネーム及びピアネームのあらかじめ定められたマップに基づいて前記ドメインネームを前記ピアネームと突き合わせるためのコンピュータ実行可能命令を備える、請求項８に記載のコンピュータ可読媒体。
【請求項１２】
前記ドメインネームをピアネームに関連付けるための前記コンピュータ実行可能命令は、前記ドメインネームから前記ピアネームをデコードするための前記コンピュータ実行可能命令を備える、請求項８に記載のコンピュータ可読媒体。
【請求項１３】
前記１つ又は複数の変換されたインターネットプロトコルアドレスからコミュニティ中継ノードを選択するための前記コンピュータ実行可能命令は、負荷バランシング、サービス品質、及び前記要求側クライアントとの前記コミュニティ中継ノードの近さからなる１つ又は複数の群に基づいてコミュニティ中継ノードを選択するためのコンピュータ実行可能命令を備える、請求項８に記載のコンピュータ可読媒体。
【請求項１４】
プロセッサと該プロセッサに操作可能に結合されたメモリとを備える処理装置と、
ネットワーク及び前記処理装置に操作可能に結合されたドメインネームシステムネットワークインターフェイスと、
少なくとも１つのコミュニティ中継と前記ドメインネームシステムネットワークインターフェイスと前記処理装置とに操作可能に結合されたピアネームリゾリューションプロトコルネットワークインターフェイスと、
第１のピアネームリゾリューションプロトコルネームに関連付けられ、第１の複数のコミュニティ中継ノードのインターネットプロトコルアドレスを格納するように適合された第１のキャッシュであって、前記ピアネームリゾリューションプロトコルネットワークインターフェイスに操作可能に結合された第１のキャッシュと、
第２のピアネームリゾリューションプロトコルネームに関連付けられ、第２の複数のコミュニティ中継ノードのインターネットプロトコルアドレスを格納するように適合された第２のキャッシュであって、前記ピアネームリゾリューションプロトコルネットワークインターフェイスに操作可能に結合された第２のキャッシュと
を具備し、
前記処理装置が、コミュニティ中継ノードに対する要求に関連するクライアントからの要求メッセージを受信するようにプログラムされ、
前記処理装置が、前記要求メッセージを前記第１のピアネームリゾリューションプロトコルネーム又は前記第２のピアネームリゾリューションプロトコルネームに変換するようにプログラムされ、
前記処理装置が、前記要求メッセージが前記第１のピアネームリゾリューションプロトコルネームに変換される場合、前記第１のキャッシュからコミュニティ中継ノードを選択するようにプログラムされ、
前記処理装置が、前記要求メッセージが前記第２のピアネームリゾリューションプロトコルネームに変換される場合、前記第２のキャッシュからコミュニティ中継ノードを選択するようにプログラムされ、
前記処理装置が、前記選択されたコミュニティ中継ノードの前記インターネットプロトコルアドレスを前記クライアントに送信するようにプログラムされる
コンピュータ装置。
【請求項１５】
前記第１のピアネームリゾリューションプロトコルネームは第１の通信プロトコルタイプに関連し、前記第２のピアネームリゾリューションプロトコルネームは第２の通信プロトコルタイプに関連する、請求項１４に記載のコンピュータ装置。
【請求項１６】
前記第１の通信プロトコルタイプはセキュア・ソケット・レイヤ（ＳＳＬ）プロトコルを備え、前記第２の通信プロトコルタイプはユーザ・データグラム・プロトコルを備える、請求項１５に記載のコンピュータ装置。
【請求項１７】
前記要求メッセージは前記コンピュータ装置のドメインネームシステムネームを備え、
前記処理装置は、前記第１のピアネームリゾリューションプロトコルネーム又は前記第２のピアネームリゾリューションプロトコルネームのうちの１つに前記ドメインネームシステムネームを変換するようにプログラムされる、請求項１４に記載のコンピュータ装置。
【請求項１８】
前記処理装置は、負荷バランシング、サービス品質、及び前記クライアントとの前記コミュニティ中継ノードの近さからなる１つ又は複数の群に基づいて前記第１のキャッシュ又は前記第２のキャッシュからコミュニティ中継ノードを選択するようにプログラムされる、請求項１４に記載のコンピュータ装置。
【請求項１９】
前記プログラミング装置は、複数のコミュニティ中継ノードにクエリを行うようにプログラムされ、
前記プログラミング装置は、前記複数のコミュニティ中継ノードのうちの１つ又は複数からの応答に関連するデータを受信するようにプログラムされ、
前記プログラミング装置は、前記１つ又は複数の応答のあったコミュニティ中継ノードで前記第１のキャッシュ又は前記第２のキャッシュを更新するようにプログラムされる、
請求項１４に記載のコンピュータ装置。
【請求項２０】
前記プログラミング装置は、前記複数のコミュニティ中継ノードのピアネーム変換を行うようにプログラムされる、請求項１９に記載のコンピュータ装置。
【発明の詳細な説明】
【背景技術】
【０００１】
ネットワーク通信技術により、共通の関心を持つユーザは、共同で作業し、ファイルを共有し、相互にチャットし、プレゼンテーションやグループ会議用にオーディオ及びビデオをマルチキャストし、多人数参加ゲームに加わることができるようになる。多くのネットワーク通信及びネットワーク形成は、サーバ中心の環境又はピアツーピア環境において行われる。サーバ中心の環境において、あらゆる通信は、個人が接続してグループに加入及び参加することのできる大規模中央サーバの方向に、又はこれを経由して流れる。ピアツーピア技術は、ユーザがサーバレスの環境で相互に連絡をとることができるようにする。しかし、多くの場合、クライアントは、着信接続を開始するときに問題を生じる（例えば、個人、ネットワーク、又は企業の）ファイアウォールの背後でアクセス保護されている。ファイアウォールは、１つのクライアントのみがアクセス保護される場合は、はるかに容易にトラバースされ得るが、２つのアクセス保護されたクライアント間のファイアウォールのトラバースは、たとえ管理者の制御の下であっても困難である。しかし、この問題は、スーパーノードとも呼ばれるコミュニティ中継ノードを使用することにより解決されうる。
【０００２】
コミュニティ中継ノードは、アクセス保護されていないコンピュータ又はサーバであってもよく、送信側クライアントからの着信通信を容易に受け入れて、通信を受信側クライアントにルーティングすることができる。したがって、コミュニティ中継ノードは、２つのアクセス保護されたクライアント間の通信を中継することができる。コミュニティ中継ノードは、アクセス保護されたクライアント間の通信を中継するのに十分なリソース（例えばサービス品質）を備える任意のコンピュータ又はサーバであってよい。他のクライアントと通信することを望むクライアントは、通信を補助するようコミュニティ中継ノードに要求することができる。しかし、要求側のクライアントは、どのコンピュータ／サーバがコミュニティ中継ノードであるかを常時認識しているわけではない。既知のコミュニティ中継ノードは使用不可能になることもあるが、それは要求側のクライアントには知らされない可能性もある。そのように、要求側のクライアントは、コミュニティ中継ノードを見出す際に問題に遭遇することもある。更に、要求側クライアントによって要求されるコミュニティ中継ノードは、要求されている通信プロトコルのタイプ（例えば、セキュア・ソケッツ・レイヤ、ユーザ・データグラム・プロトコルなど）に依存することがあり、そのため適切なコミュニティ中継ノードを検出する際に更に困難を生じる。
【０００３】
概要
ネットワークコミュニティ内のコミュニティ中継ノードを自動検出する方法が開示され、コミュニティ中継ノードは、アクセス保護されたクライアントに操作可能に結合され、アクセス保護されたクライアントと要求側クライアントとの間の通信を容易にするように適合される。方法は、コミュニティ中継ノードに対する要求に関連する要求側クライアントから要求メッセージを受信するステップと、要求メッセージをサーバレスネームリゾリューションプロトコルネームに関連付けるステップと、サーバレスネームリゾリューションプロトコルネームに基づいてコミュニティ中継ノードのリストからコミュニティ中継ノードを選択するステップであって、コミュニティ中継ノードのリストはコミュニティ中継ノードに関連付けられている少なくとも１つのインターネットプロトコルアドレスを備えるステップと、選択されたコミュニティ中継ノードのインターネットプロトコルアドレスを要求側クライアントに返すステップとを含む。
【０００４】
コミュニティ中継ノードと要求側クライアントとの間の通信をブートストラップする方法のステップを実行するコンピュータ実行可能命令を有するコンピュータ可読媒体が開示される。コンピュータ可読媒体は、要求側クライアントからドメインネームを受信するためのコンピュータ実行可能命令と、ドメインネームをピアネームに関連付けるためのコンピュータ実行可能命令と、ピアネームを１つ又は複数のインターネットプロトコルアドレスに変換するためのコンピュータ実行可能命令であって、各インターネットプロトコルアドレスはコミュニティ中継に関連するコンピュータ実行可能命令と、１つ又は複数の変換されたインターネットプロトコルアドレスからコミュニティ中継ノードを選択するためのコンピュータ実行可能命令と、選択されたコミュニティ中継ノードのインターネットプロトコルアドレスを要求側クライアントに返すためのコンピュータ実行可能命令とを含む。
【０００５】
コンピュータシステムが開示される。コンピュータシステムは、処理装置と、処理装置に操作可能に結合されたドメインネームシステムネットワークインターフェイスと、ドメインネームシステムネットワークインターフェイス及び処理装置に操作可能に結合されたピアネームリゾリューションプロトコルネットワークインターフェイスとを含む。ドメインネームシステムネットワークインターフェイスはネットワークに操作可能に結合され、ピアネームリゾリューションプロトコルネットワークインターフェイスはコミュニティ中継に操作可能に結合される。コンピュータシステムは更に、ピアネームリゾリューションプロトコルネットワークインターフェイスに操作可能に結合された第１及び第２のキャッシュを含む。第１のキャッシュは第１のピアネームリゾリューションプロトコルネームに関連付けられ、第１の複数のコミュニティ中継ノードのインターネットプロトコルアドレスを格納するように適合される。第２のキャッシュは第２のピアネームリゾリューションプロトコルネームに関連付けられ、第２の複数のコミュニティ中継ノードのインターネットプロトコルアドレスを格納するように適合される。処理装置は、プロセッサと、プロセッサに操作可能に結合されたメモリとを含む。処理装置は、コミュニティ中継ノードへの要求に関連するクライアントから要求メッセージを受信するようにプログラムされ、要求メッセージを第１のピアネームリゾリューションプロトコルネーム又は第２のピアネームリゾリューションプロトコルネームに変換するようプログラムされ、要求メッセージが第１のピアネームリゾリューションプロトコルネームに変換される場合に第１のキャッシュからコミュニティ中継ノードを選択するようプログラムされ、要求メッセージが第２のピアネームリゾリューションプロトコルネームに変換される場合に第２のキャッシュからコミュニティ中継ノードを選択するようプログラムされ、選択されたコミュニティ中継ノードのインターネットプロトコルアドレスをクライアントに送信するようにプログラムされる。
【０００６】
説明
以下の文では、多くの様々な実施の形態の詳細な説明を示すが、本説明の法的な範囲は、本特許出願に添付の特許請求の範囲の文言によって定義されることを理解されたい。詳細な説明は、模範的なものとしてのみ解釈されるべきであり、あらゆる可能な実施の形態を説明することは、不可能ではないとしても実際的ではないため、あらゆる可能な実施の形態を説明するものではない。多くの代替の実施の形態は、現在の技術や本特許請求の範囲に含まれることになる本特許の出願日以降に開発された技術を使用して実施することも可能である。
【０００７】
更に、「本明細書において使用される用語「＿＿」は．．．を意味するように定義される」という文章又は同様の文章を使用して本特許に明示的に定義されている場合を除き、当該用語の意味を、明示的又は黙示的に、その明白又は通常の意味を超えて限定する意図はなく、そのような用語は、（特許請求の範囲の表現以外の）本特許のあらゆる項で示される記述に基づいて範囲が限定されるように解釈されるべきではないこと理解されたい。本特許明細書に添付の特許請求の範囲に示されるあらゆる用語が、単一の意味と一致する方法で本特許明細書に参照され、読者を混乱させることがないよう明確を記すためにのみ行われる限りにおいて、そのような特許請求の範囲の表現が、含蓄その他によりその単一の意味に限定されることは意図されない。最後に、請求項の要素が「手段」という語及び構造の説明文言を伴わない機能を列挙することにより定義される場合を除いて、特許請求の要素の範囲が米国特許法１１２条第６項の適用に基づいて解釈されることは意図されていない。
【０００８】
図１は、特許請求の範囲に記載の方法のステップ及び装置のためのシステムが実施され得る適切なコンピュータシステム環境１００の実施例を示す。コンピュータシステム環境１００は適切なコンピューティング環境の一例に過ぎず、請求の範囲に記載の装置及び方法の使用又は機能の範囲に関していかなる制限を提案することも意図するものではない。更に、コンピューティング環境１００は、模範的なオペレーティング環境１００に示されるコンポーネントのいずれか１つ又はその組合せに関して、いかなる依存性又は要件も有するものと解釈されるべきではない。
【０００９】
請求の範囲に記載の方法のステップ及び装置は、数多くの他の一般的用途又は特殊用途のコンピュータシステム環境又は構成で動作可能である。請求の範囲に記載の方法又は装置と共に使用するために適切であり得る既知のコンピュータシステム、環境、及び／又は構成の例としては、パーソナルコンピュータ、サーバコンピュータ、ハンドヘルド又はラップトップ装置、マルチプロセッサシステム、マイクロプロセッサベースのシステム、セットトップボックス、プログラマブル家庭用電化製品、ネットワークＰＣ、ミニコンピュータ、メインフレームコンピュータ、上記のシステム又は装置のいずれかを含む分散コンピューティング環境などがあげられるが、これらに限定されるものではない。
【００１０】
請求の範囲に記載の方法のステップ及び装置は、コンピュータによって実行されるプログラムモジュールなど、コンピュータ実行可能命令の一般的なコンテキストに即して説明することができる。一般に、プログラムモジュールには、特定のタスクを実行するか又は特定の抽象データタイプを実装するルーチン、プログラム、オブジェクト、コンポーネント、データ構造などが含まれる。方法及び装置は更に、タスクが通信ネットワークを通じてリンクされたリモート処理装置によって実行される分散コンピューティング環境においても実施することができる。分散コンピューティング環境において、プログラムモジュールは、メモリ記憶装置を含むローカル及びリモートのコンピュータ記憶媒体に配置され得る。
【００１１】
図１を参照すると、請求の範囲に記載の方法のステップ及び装置を実施するための模範的なシステムは、コンピュータ１１０の形態の汎用コンピュータ装置を含む。コンピュータ１１０のコンポーネントは、処理装置１２０、システムメモリ１３０、及びシステムメモリを含む様々なシステムコンポーネントを処理装置１２０に接続するシステムバス１２１を含むことができるが、これらに限定されるものではない。システムバス１２１は、メモリバス又はメモリコントローラ、周辺バス、及び様々なバスアーキテクチャのいずれかを使用するローカルバスを含む、任意のタイプのバス構造であってもよい。限定的ではなく例示的に、そのようなアーキテクチャは、Ｉｎｄｕｓｔｒｙ  Ｓｔａｎｄａｒｄ  Ａｒｃｈｉｔｅｃｔｕｒｅ（ＩＳＡ）バス、Ｍｉｃｒｏ  Ｃｈａｎｎｅｌ  Ａｒｃｈｉｔｅｃｔｕｒｅ（ＭＣＡ）バス、Ｅｎｈａｎｃｅｄ  ＩＳＡ（ＥＩＳＡ）バス、Ｖｉｄｅｏ  Ｅｌｅｃｔｒｏｎｉｃｓ  Ｓｔａｎｄａｒｄｓ  Ａｓｓｏｃｉａｔｉｏｎ（ＶＥＳＡ）ローカルバス、及びメザニンバスとも呼ばれるＰｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔ（ＰＣＩ）バスを含む。
【００１２】
コンピュータ１１０は通常、各種のコンピュータ可読媒体を含む。コンピュータ可読媒体は、コンピュータ１１０がアクセスでき、揮発性及び不揮発性媒体、取外し可能及び取外し不可能な媒体を含む任意の使用可能な媒体であってもよい。一例として、コンピュータ可読媒体は、コンピュータ記憶媒体及び通信媒体を備えることができるが、これらに限定されるものではない。コンピュータ記憶媒体は、コンピュータ可読命令、データ構造、プログラムモジュール又はその他のデータなどの情報のストレージのための任意の方法又は技術において実装された揮発性及び不揮発性の、取外し可能な及び取外し不可能な媒体を含む。コンピュータ記憶媒体は、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、フラッシュメモリ又はその他のメモリ技術、ＣＤ−ＲＯＭ、ＤＶＤ（デジタル多用途ディスク）又はその他の光ストレージ、磁気カセット、磁気テープ、磁気ディスクストレージ又はその他の磁気記憶装置、或いは望ましい情報を格納するために使用することができ、コンピュータ１１０によってアクセスすることができる任意の他の媒体を含むが、これらに限定されるものではない。通信媒体は通常、コンピュータ可読命令、データ構造、プログラムモジュール、又はその他のデータを搬送波などの搬送メカニズムのような変調データ信号に組み入れ、任意の情報伝達媒体を含む。「変調データ信号」という用語は、信号の情報を符号化するような方法でその特性の１つ又は複数が設定又は変更された信号を意味する。例えば、通信媒体は、有線ネットワーク又は直接配線接続のような有線媒体、及び音響、ＲＦ、赤外線などの無線媒体を含むが、これらに限定されるものではない。上記の任意の組合せも、コンピュータ可読媒体の範囲に含まれるものとする。
【００１３】
システムメモリ１３０は、読み取り専用メモリ（ＲＯＭ）１３１及びランダムアクセスメモリ（ＲＡＭ）１３２のような揮発性メモリ及び／又は不揮発性メモリの形態でのコンピュータ記憶媒体を含む。起動時などにコンピュータ１１０内の構成要素間の情報の転送を助ける基本ルーチンを含む基本入出力システム１３３（ＢＩＯＳ）は通常、ＲＯＭ１３１に格納される。ＲＡＭ１３２は通常、処理装置１２０によって即時アクセス可能及び／又は現在操作中のデータ及び／又はプログラムモジュールを含む。限定的ではなく例示的に、図１では、オペレーティングシステム１３４、アプリケーションプログラム１３５、その他のプログラムモジュール１３６及びプログラムデータ１３７を示す。
【００１４】
コンピュータ１１０は、他の取外し可能な／取外し不可能な揮発性／不揮発性のコンピュータ記憶媒体を含むこともできる。ほんの一例として、図１では、取外し不可能な不揮発性磁気媒体との間の読み取り又は書き込みを行うハードディスクドライブ１４０、取外し可能な不揮発性磁気ディスク１５２との間の読み取り又は書き込みを行う磁気ディスクドライブ１５１、及びＣＤ−ＲＯＭその他の光媒体などの取外し可能な不揮発性光ディスク１５６との間の読み取り又は書き込みを行う光ディスクドライブ１５５を示す。模範的なオペレーティング環境において使用することができる他の取外し可能な／取外し不可能な揮発性／不揮発性コンピュータ記憶媒体は、磁気テープカセット、フラッシュメモリカード、ＤＶＤ（デジタル多用途ディスク）、デジタルビデオテープ、ソリッドステートＲＡＭ、ソリッドステートＲＯＭなどを含むが、これらに限定されるものではない。ハードディスクドライブ１４１は通常、インターフェイス１４０などの取外し不可能メモリインターフェイスを通じてシステムバス１２１に接続され、磁気ディスクドライブ１５１及び光ディスクドライブ１５５は通常、インターフェイス１５０などの取外し可能メモリインターフェイスによってシステムバス１２１に接続される。
【００１５】
図１に示される前述のドライブ及びその関連するコンピュータ記憶媒体は、コンピュータ１１０のコンピュータ可読命令、データ構造、プログラムモジュール、及びその他のデータのストレージを提供する。例えば、図１において、ハードディスクドライブ１４１は、オペレーティングシステム１４４、アプリケーションプログラム１４５、その他のプログラムモジュール１４６、及びプログラムデータ１４７を格納するように示される。これらのコンポーネントは、オペレーティングシステム１３４、アプリケーションプログラム１３５、その他のプログラムモジュール１３６及びプログラムデータ１３７と同じであっても、又は異なっていてもよいことに留意されたい。オペレーティングシステム１４４、アプリケーションプログラム１４５、その他のプログラムモジュール１４６及びプログラムデータ１４７は、少なくともそれらが異なるコピーであることを示すために本明細書において異なる番号を付けてある。ユーザは、キーボード１６２及び一般にマウス、トラックボール又はタッチパッドと呼ばれるポインティングデバイス１６１などの入力装置を介してコンピュータ２０にコマンド及び情報を入力することができる。他の入力装置（図示せず）としては、マイクロフォン、ジョイスティック、ゲームパッド、衛星放送用パラボラアンテナ、スキャナなどを含むことができる。上記及びその他の入力装置は、システムバスに接続されているユーザ入力インターフェイス１６０を介して処理装置１２０に接続されることが多いが、パラレルポート、ゲームポート、又はユニバーサルシリアルバス（ＵＳＢ）など他のインターフェイス及びバス構造によって接続することもできる。モニタ１９１又はその他の種類の表示装置も、ビデオインターフェイス１９０などのインターフェイスを介してシステムバス１２１に接続される。モニタに加えて、コンピュータは、出力周辺インターフェイス１９０を介して接続できるスピーカ１９７及びプリンタ１９６などの他の周辺出力装置を含むこともできる。
【００１６】
コンピュータ１１０は、リモートコンピュータ１８０など、１つ又は複数のリモートコンピュータへの論理接続を使用するネットワーク化された環境において動作することができる。リモートコンピュータ１８０は、パーソナルコンピュータ、サーバ、ルーター、ネットワークＰＣ、ピアデバイス又はその他の共通ネットワークノードであってよく、通常は上記でコンピュータ１１０に関連して説明されている要素の多く又はすべてを含むが、図１においては記憶装置１８１のみが示されている。図１に示されている論理接続は、ローカルエリアネットワーク（ＬＡＮ）１７１及びワイドエリアネットワーク（ＷＡＮ）１７３を含むが、他のネットワークを含むこともできる。そのようなネットワーク環境は、オフィス、企業規模のコンピュータネットワーク、イントラネット及びインターネットにおいて通常のものである。
【００１７】
ＬＡＮネットワーク環境に使用される場合、コンピュータ１１０はネットワークインターフェイス又はアダプタ１７０を介してＬＡＮ１７１に接続される。ＷＡＮネットワーク環境に使用される場合、コンピュータ１１０は通常、モデム１７２、又はインターネットなどのＷＡＮ１７３にわたる通信を確立するための他の手段を含む。モデム１７２は、内蔵又は外付けであってもよく、ユーザ入力インターフェイス１６０又は他の適切なメカニズムを介してシステムバス１２１に接続することができる。ネットワーク化された環境において、コンピュータ１１０に関連して示されるプログラムモジュール、又はその部分は、リモート記憶装置に格納され得る。限定的ではなく例示的に、図１では、リモートアプリケーションプログラム１８５を記憶装置１８１に常駐するものとして示している。示されているネットワーク接続が模範的なものであり、コンピュータ間の通信リンクを確立する他の手段も使用できることを理解されたい。
【００１８】
図２は、ネットワークシステム２００の例を示す図である。図２を参照すると、ネットワークシステム２００は、プロモータ２１０、プロモータ２１０に操作可能に結合された第１のクライアント２２０、及び、スーパーノードとも呼ばれ、プロモータ２１０に操作可能に結合されたコミュニティ中継ノード２４０を含むことができる。ネットワークシステム２００はまた、コミュニティ中継ノード２４０に操作可能に結合された第２のクライアント２３０を含むことができる。各クライアント２２０、２４０は、ネットワークファイアウォール又はパーソナルファイアウォールなどのセキュリティシステムの背後でアクセス保護される。コミュニティ中継ノード２４０は、第１のクライアント２２０と第２のクライアント２３０との間の通信を容易にしてルーティングするために使用される。以下で更に説明されるように、第１のクライアント２２０は、最終的に、プロモータ２１０の助けによりコミュニティ中継ノード２４０に操作可能に結合される。
【００１９】
第１のクライアント２２０、第２のクライアント２３０、コミュニティ中継ノード２４０及びプロモータ２１０は様々な地理的位置に提供され、ネットワークを介して相互に操作可能に結合される。例えば、第１のクライアント２２０は、インターネットを介してプロモータ２１０に操作可能に結合され、ＩＰｖ４又はＩＰｖ６などのインターネット通信プロトコルを介してプロモータ２１０と通信することができる。同様の方法で、第２のクライアント２３０は、インターネットを介してコミュニティ中継ノード２４０に操作可能に結合され、インターネット通信プロトコルを介して通信することができる。プロモータ２１０はまた、ピアツーピアネットワークによってコミュニティ中継２４０に操作可能に結合され、ピアネームリゾリューションプロトコル（ＰＮＲＰ）などのサーバレスリゾリューションプロトコルを介して通信することができる。ピアネームリゾリューションプロトコルの例は、参照により内容を本願に援用する２００１年８月２９日に出願した米国特許出願公開第２００２／０１４３９８９号明細書及び２００３年６月１３日に出願した米国特許出願公開第２００５／０００４９１６号明細書に開示される。
【００２０】
プロモータ２１０は、１つのサーバコンピュータ又は複数のサーバコンピュータであってよく、ドメインネーム要求を中継及び／又は変換するためにドメインネームサービスの一部として使用されうる。以下で更に説明されるように、プロモータ２１０はまた、コミュニティ中継ノード２４０にクエリを行い、クライアント２２０とコミュニティ中継ノード２４０との間の通信をブートストラップするためにピアネーム解析に使用される。例えば、プロモータ２１０は、様々なクライアントから継続的にドメインネームサービス要求を受け取ることができる。プロモータ２１０は、要求に応答してドメインネームサービス要求を変換し、インターネットプロトコル（ＩＰ）アドレスを返すことができる。
【００２１】
コミュニティ中継ノード２４０は、パーソナルコンピュータ、サーバコンピュータ、又はコミュニティ中継ノードとして選択的或いは自発的に機能することができるコンピュータのグループであってよい。１つの例において、コミュニティ中継ノード２４０は、クライアント又はクライアントのグループであってよい。一般に、コミュニティ中継ノード２４０は、十分な速度、帯域幅などの信頼できるサービス品質（ＱＯＳ）を提供し、セキュア・ソケット・レイヤ（ＳＳＬ）プロトコル又はユーザ・データグラム・プロトコル（ＵＤＰ）など特定の通信プロトコルを提供することができる。コミュニティ中継ノード２４０は、他のクライアント（アクセス保護される）と通信するアクセス保護されたクライアント（例えば、ファイアウォール付きクライアント）を支援するために使用され得る。例えば、クライアント２２０、２３０は、各々着信接続を防ぐファイアウォールによってアクセス保護される。コミュニティノード２４０は一般に、ファイアウォールによってアクセス保護されていないので、クライアントから着信接続を受信することができる。コミュニティ中継ノード２４０は、クライアント２２０、２３０がファイアウォール経由でコミュニティ中継ノード２４０から着信接続を受け入れるように、クライアント２２０、２３０に関して認証される。認証は、第三者機関の認証によるか、又はコミュニティ中継ノード２４０とクライアント間の直接認証により確立され得る。クライアント２２０は、別のクライアント２３０との通信を補助するようコミュニティ中継ノード２４０に要求することができる。２つのクライアント２２０、２３０の間の接続を確立すると、その後、コミュニティ中継ノード２４０は、第１及び第２のクライアント２２０、２３０間の通信を中継することができる。コミュニティ中継ノードはファイアウォールによってアクセス保護されないので、コミュニティ中継ノード２４０は送信側クライアントから着信通信を容易に受け入れることができ、コミュニティ中継ノード２４０は認証されるので、通信を受信側クライアントに容易にルーティングすることができる。クライアント２２０、２３０間の接続をルーティングするために１つのコミュニティ中継ノードしか使用されないが、通信は複数のコミュニティ中継ノードの間でルーティングされ得ることを理解されたい。更に、コミュニティ中継ノードは、いくつかの異なるクライアント間でいくつかの異なる通信を中継することができることも理解されたい。
【００２２】
ネットワークシステム２００は、１つのプロモータ２１０、１つのコミュニティ中継ノード２４０及び２つのクライアント２２０、２３０を含むように図示されているが、様々な数のプロモータ、コミュニティ中継ノード及びクライアントが使用され得ることを理解されたい。例えば、クライアント２２０、２３０はそれぞれ、更に大規模なネットワーク又はクライアントのグループの一部であってよい。ネットワークシステム２００はまた、プロモータ２１０に操作可能に結合された複数のコミュニティ中継ノード２４０を含み、各コミュニティ中継ノード２４０は、クライアント間の通信を容易にしてルーティングするように、多くの様々なクライアントに操作可能に結合され得る。一部のコミュニティ中継ノードはＳＳＬ又はＵＤＰなどの特定の通信プロトコルに対して使用され得る。
【００２３】
図３は、プロモータ２１０の例を示すブロック図である。一般に、プロモータはハイパーテキスト・トランスファ・プロトコル（ＨＴＴＰ）通信チャネルなどのインターネットベース通信用のドメインネームサービス（ＤＮＳ）フロントエンド３００、及びピアツーピアベース通信用のサーバレスリゾリューションプロトコル（例えばＰＮＲＰ）バックエンド３１０を含む。１つの例において、プロモータ２１０のＤＮＳフロントエンド３００は標準ＤＮＳサービスの一部として機能し、コミュニティ中継ノードの要求以外のドメインネームリゾリューション要求を変換することができる。ＤＮＳフロントエンドはＨＴＴＰを介してクライアントと通信して、クライアントからコミュニティ中継ノードのドメインネームリゾリューション要求を受け取り、コミュニティ中継ノードのインターネットプロトコル（ＩＰ）アドレス（及び必要ならばポート番号）を要求側クライアントに返すことができる。ＰＮＲＰバックエンド３１０はコミュニティ中継ノードのＰＮＲＰリゾリューションクエリを行い、クエリに応答してコミュニティ中継ノードに関する情報を格納することができる。ＰＮＲＰバックエンド３１０は更に、ＤＮＳフロントエンドからのコミュニティ中継ノードの要求を変換し、コミュニティ中継ノードのＩＰアドレスをＤＮＳフロントエンド３００に返すことができる。単一のブロックで示されているが、プロモータ２１０は、前述のように、複数の相互接続されたコンピュータを含むことができる。
【００２４】
図３に示すように、ＤＮＳフロントエンド３００は、ＤＮＳネットワークインターフェイス３２０と、ＤＮＳインターフェイス３２０に操作可能に結合されたＤＮＳプラグイン３３０とを含む。ＤＮＳインターフェイス３２０はインターネットに操作可能に結合され、コミュニティ中継ノードへのＤＮＳネームリゾリューション要求を含む、クライアント２２０とのＨＴＴＰ通信を可能にすることができる。ＤＮＳインターフェイス３２０は、クライアント２２０からのドメインネームリゾリューション要求をクエリネーム及びクエリタイプに解析するＤＮＳデコーダを含むことができる。クエリネームは、プロモータ２１０を識別するために使用されるＤＮＳネームに関連し、クエリタイプはクライアント２２０に要求された通信プロトコルタイプ（例えば、ＳＳＬ、ＵＤＰ）に関連することができる。ＤＮＳインターフェイス３２０は更に、要求に応じてコミュニティ中継ノードのＩＰアドレスでクライアント２２０に応答するＤＮＳエンコーダを含むことができる。ＤＮＳインターフェイスは更に、コミュニティ中継ノードへの要求のＤＮＳネームを、事前構成されたマップを介して、関連するＰＮＲＰネームと付き合わせすることによりＤＮＳネームリゾリューション要求を変換することができる。代替として、更に以下で説明されるように、デコーダは、ＤＮＳネームをデコードするために使用され、ＤＮＳネーム内でエンコードされたＰＮＲＰネームを変換することができる。
【００２５】
ＤＮＳプラグイン３３０は、ＰＮＲＰバックエンド３１０に操作可能に結合されて、コミュニティ中継ノードへの要求をＰＮＲＰバックエンド３１０に渡し、コミュニティ中継ノードへの要求以外の要求及びサポートされないクエリタイプへの要求など、サポートされない要求に対してエラーを返すことができる。ＤＮＳプラグイン３３０は、コミュニティ中継ノードへのクライアントの要求に応答するため、ＰＮＲＰバックエンドによって変換されたコミュニティ中継ノードのＩＰアドレスをＤＮＳインターフェイス３２０に返すことができる。ＤＮＳプラグイン３３０は更に、プロモータ２１０の層を初期化及び初期化解除するために使用され得る。層を初期化するサンプルのコンピュータコードの実施態様は、以下のようになる。
【００２６】
【表１】
2008538630.tif 000003
層を初期化解除するサンプルのコンピュータコードの実施態様は、以下のようになる。
【００２７】
【表２】
2008538630.tif 000004
ＰＮＲＰバックエンド３１０は、ＰＮＲＰマネージャ３４０と、ＰＮＲＰマネージャ３４０に操作可能に結合されたＰＮＲＰネットワークインターフェイス３５０を含むことができる。ＰＮＲＰマネージャ３４０は、ＤＮＳプラグイン３３０に操作可能に結合され、ＤＮＳフロントエンド３００によって変換されたコミュニティ中継ノードへのリゾリューション要求に関連するＰＮＲＰネームを受け取ることができる。ＰＮＲＰマネージャは、ＤＮＳフロントエンド３００からのＰＮＲＰリゾリューション要求を管理し、コミュニティ中継ノードのＰＮＲＰネームを変換して管理し、コミュニティ中継ノードの要求に応答してコミュニティ中継ノードのＩＰアドレスを返すことができる。ＰＮＲＰインターフェイス３５０は、いくつかのコミュニティ中継ノードに操作可能に結合され、ＰＮＲＰリゾリューションクエリをコミュニティ中継ノードに送信してコミュニティ中継ノードから応答を受信することを含む、コミュニティ中継ノードとのピアツーピア通信を行うことができる。ＰＮＲＰインターフェイス３５０は、ＰＮＲＰリゾリューションクエリ中にプロモータ２１０のＰＮＲＰサービスへのリモートプロシージャコール（ＲＰＣ）を行うＰＮＲＰアプリケーションプログラムインターフェイスとして提供される。しかし、もう１つの例において、ＰＮＲＰインターフェイス３５０の性能は、ＰＮＲＰデータリンク層（ＤＬＬ）を使用して、プロモータ２１０からＰＮＲＰサービスを削除し、それによりＲＰＣプロセスを除去することで改善され得る。
【００２８】
若干のキャッシュ３６０、３７０、３８０、３９０は、ＰＮＲＰマネージャ３４０に操作可能に結合される。キャッシュは、異なるキャッシュ部分に区分される単一のメモリ又はデータベースとして提供され、又は各々ＰＮＲＰマネージャに操作可能に結合される異なるメモリ又はデータベースとして提供され得る。キャッシュは、リゾリューションキャッシュ３６０、３７０、要求キャッシュ３８０及びＰＮＲＰキャッシュ３９０を含むことができる。
【００２９】
リゾリューションキャッシュ３６０、３７０は、要求側クライアントに使用可能な以前変換されたコミュニティ中継ノードに関する情報をキューに入れ、格納するために提供される。別々のキャッシュ３６０、３７０は、使用可能なＳＳＬコミュニティ中継ノードのリストが１つのキャッシュ３６０で保持され、使用可能なＵＤＰコミュニティ中継ノードのリストがもう１つのキャッシュ３７０で保持されるように、異なる通信プロトコルタイプに対して提供される。リゾリューションキャッシュ３６０、３７０は各々、キャッシュに格納されている各コミュニティ中継ノードのサービス品質、負荷、位置、ＩＰアドレス及びＰＮＲＰネームに関する情報を含むことができる。ＤＮＳプラグインからの要求に応答して、ＰＮＲＰマネージャ３４０は、適切なリゾリューションキャッシュ３６０、３７０から１つ又は複数のコミュニティ中継ノードを選択し、要求側クライアントへのその後の応答のために、コミュニティ中継ノードのＩＰアドレスをＤＮＳプラグイン３３０に返すことができる。以下で更に説明されるように、ＰＮＲＰマネージャ３４０は、サービス品質、要求側クライアントとの近さ、負荷バランシングなど、コミュニティ中継ノードを選択する際の様々な要因に対して責任を持つ。
【００３０】
要求キャッシュ３８０は、ＤＮＳプラグイン３３０から受信されたコミュニティ中継ノードに対する要求をキューに入れるために提供される。要求は、要求されている通信プロトコルタイプに従って、要求キャッシュ３８０に格納される。ＰＮＲＰマネージャ３４０は、要求キャッシュ３８０のＤＮＳプラグイン３３０から受信された要求を格納し、要求がキューに入れられる順序で要求に応答することができる。
【００３１】
ＰＮＲＰキャッシュ３９０は、以前に変換されたコミュニティ中継ノードのＰＮＲＰネームを含む既知のコミュニティ中継ノードのリストを保持するために提供される。各ＰＮＲＰネームは、複数のコミュニティ中継ノードに対応することができる。例えば、すべての既知のＳＳＬコミュニティ中継ノードはＰＮＲＰネームに対応することができるが、すべての既知のＵＤＰコミュニティ中継ノードはもう１つのＰＮＲＰネームに対応することができる。ＰＮＲＰキャッシュ３９０は、通信プロトコルタイプに従って、既知のコミュニティ中継ノードの別個のリストを保持することができる。例えば、既知のＳＳＬコミュニティ中継ノードは１つのリストで提供され、対応するＰＮＲＰネームに関連付けられるが、既知のＵＤＰコミュニティ中継ノードはもう１つのリストとして提供され、対応するＰＮＲＰネームに関連付けられる。同じＰＮＲＰネームはまた、リゾリューションキャッシュ３６０、３７０に格納されている使用可能なコミュニティ中継ノードのリストに対応するために使用されてもよい。それにより、ＰＮＲＰマネージャ３４０は、ＤＮＳフロントエンド３００からの要求に応答するときに、ＰＮＲＰネームを使用して適切なリゾリューションキャッシュ３６０、３７０を識別することができる。コミュニティ中継ノードは、自らをプロモータ２１０に登録及び登録抹消して自らを認識させることができ、その結果はＰＮＲＰキャッシュ３９０に保持される。コミュニティ中継ノードは、対応するＰＮＲＰネーム（例えば、ＳＳＬ又はＵＤＰ）で登録することができ、そのＩＰアドレス、通信タイプ及びサービス品質をプロモータ２１０に知らせることができる。ＰＮＲＰマネージャ３４０はまた、以下で更に説明されるように、リゾリューションキャッシュ３６０、３７０を維持することの一環としてコミュニティ中継ノードのＰＮＲＰクエリを行うように、ＰＮＲＰネームを使用することができる。
【００３２】
図４は、クライアント２２０とコミュニティ中継ノード２４０との間の通信をブートストラップする方法４００の例を示す流れ図である。クライアント２１０がアクセス保護されたクライアント２２０と通信したいが、クライアント２２０、２３０間の通信をルーティングするコミュニティ中継ノード２４０を認識していない場合、プロモータ２１０は方法４００を使用して、クライアント２２０とコミュニティ中継ノード２４０との間の通信をブートストラップし、そのプロセスから自らを削除することができる。プロモータ２１０は、クライアント２１０からコミュニティ中継ノードへの要求を受信し、コミュニティ中継ノード２４０のＩＰアドレスをクライアント２２０に返すことができる。コミュニティ中継ノード２４０のＩＰアドレスを受信すると、クライアント２２０は、ＨＴＴＰを介してコミュニティ中継ノードと通信することができ、その結果、アクセス保護されたクライアント２３０と通信することができる。
【００３３】
図４を参照すると、プロモータ２１０のＤＮＳインターフェイス３２０は、ブロック４０５において要求側クライアント２２０からの要求メッセージを受信して読み取ることができる。プロモータ２１０は、クライアント２２０のユーザに認識されている周知のＤＮＳネームに関連付けられる。クライアント２２０は、コミュニティ中継ノードに対する要求に関連するものとしてプロモータ２１０によって認識されるように要求メッセージを構成することができる。標準ドメインネームサービスと同様に、クライアント要求は、プロモータ２１０に到達する前に、複数の異なるＤＮＳサーバを経由してルーティングされる。プロモータ２１０のＤＮＳネーム及びコミュニティ中継ノードに対する要求は、以下のフォーマットに基づくことができる。
【００３４】
ｘｘｘｘｘｘｘｘ．ｔｕｎｎｅｌ．ｖｅｒｓｉｏｎ．ｓｕｆｆｉｘ
ここで、
ｓｕｆｆｉｘ＝プロモータ２１０を定義する構成可能パラメータ（例えば、ｐｒｏｍｏｔｅｒ．ｍｉｃｒｏｓｏｆｔ．ｃｏｍ）
ｖｅｒｓｉｏｎ＝クライアントのバージョンを表し、ネームの残りの部分を理解するためにプロモータ２１０によって使用される定数（例えば、ｖｌ）
ｔｕｎｎｅｌ＝要求されるトンネルタイプ（例えば、ＳＳＬ、ＵＤＰ）
ｘｘｘｘｘｘｘｘ＝標準ドメインネームサービスキャッシングを防ぐためのランダム英数字プレフィックス。
【００３５】
プロモータ２１０のＤＮＳネームの例は、以下のものを含むことができる。
【００３６】
【表３】
2008538630.tif 000005
前述のように、プロモータ２１０は標準ドメインネームサービスのためのネームサーバとして機能することができ、キャッシュ結果のデータベースを保持することができる。そのようにして、ＤＮＳインターフェイス３２０は、標準ＤＮＳ要求を受信して、そのデータベースにキャッシュされる結果を返す。ブロック４０５においてＤＮＳネームを読み取ると、ＤＮＳインターフェイス３２０はブロック４１０において、標準ドメインネームサービスに従って、結果がＤＮＳネームに対してキャッシュされているかどうかを決定するためにそのデータベースを検査することができる。キャッシュされている場合、ＤＮＳインターフェイスは、標準ＤＮＳ変換に従ってキャッシュ結果を返すことができる。しかし、プレフィックス（ｗｆｎｏａｙｃｌ又はｋｒｇｄｊｆｔｏ）はランダムに生成されるので、ＤＮＳネームは一意であり、ＤＮＳインターフェイス３２０のデータベースに検出されない。そのため、標準ＤＮＳサービスを迂回して、ドメインネームサービスが時期尚早に結果を要求側クライアント２２０に返すことのないようにする。ブロック４０５において読み取られたドメインネーム（ｐｒｏｍｏｔｅｒ．ｍｉｃｒｏｓｏｆｔ．ｃｏｍ）のサフィックスは受信者がプロモータ２１０であることを示すので、ＤＮＳインターフェイス３２０はＤＮＳネームを解析して、その結果をＤＮＳプラグイン３３０に渡すことができる。同様の方法で、ＤＮＳネームの構造は、他のＤＮＳサーバが時期尚早に要求側クライアント２２０に応答することのないようにするが、ＤＮＳネームをプロモータ２１０にルーティングする。更に、ＤＮＳネームの存続時間（ＴＴＬ）は、ＤＮＳネームのキャッシングを避けるためにゼロに設定され得る。
【００３７】
ブロック４１５において、ＤＮＳインターフェイス３２０のデコーダはクエリネーム及びクエリタイプでＤＮＳネームを解析する。クエリネームは元のＤＮＳネーム（例えば、ｓｓｌ．ｖｌ．ｐｒｏｍｏｔｅｒ．ｍｉｃｒｏｓｏｆｔ．ｃｏｍ又はｕｄｐ．ｖｌ．ｐｒｏｍｏｔｅｒ．ｍｉｃｒｏｓｏｆｔ．ｃｏｍ）に関連し、クエリタイプはトンネルタイプ（例えば、ＳＳＬ又はＵＤＰ）に関連する。プレフィックスは一般に無視される。その後、クエリネーム及びクエリタイプはＤＮＳプラグイン３３０に渡される。
【００３８】
ブロック４２０において、ＤＮＳインターフェイス３２０は、要求されたプロトコルタイプを読み取る。ブロック４２５において、ＤＮＳインターフェイス３２０は、プロトコルタイプに基づいて、ＤＮＳネームを変換し、又は、ＤＮＳネームを関連するＰＮＲＰネームに関連付けて、コミュニティ中継ノードの関連リストのＰＮＲＰネームを検索する。コミュニティ中継ノードのＰＮＲＰネームは、以下のフォーマットに基づくことができる。
【００３９】
０．ＱＯＳ．ｔｕｎｎｅｌ．ｖｅｒｓｉｏｎ．ｓｕｆｆｉｘ
ここで、
ｓｕｆｆｉｘ＝コミュニティ中継ノードのリストを定義する構成可能パラメータ（例えば、ｐｒｏｍｏｔｅｒ．ｍｉｃｒｏｓｏｆｔ．ｃｏｍ）
ｖｅｒｓｉｏｎ＝コミュニティ中継ノードのバージョンを表し、クライアントのバージョンとコミュニティ中継ノードのバージョンとを付き合わせするためにプロモータ２１０によって使用される定数（例えば、ｖｌ）
ｔｕｎｎｅｌ＝要求されるトンネルタイプ（例えば、ＳＳＬ、ＵＤＰ）
ＱＯＳ＝コミュニティ中継ノードのサービス品質（例えば、０−高、１−中、２−低）。
【００４０】
コミュニティ中継ノードのリストに対するＰＮＲＰネームの例は、以下のものを含むことができる。
【００４１】
【表４】
2008538630.tif 000006
コミュニティ中継ノードの関連リストへのＤＮＳネームのマッピングは、ＰＮＲＰネームをＤＮＳネームのサフィックスと比較することにより実行される。例えば、ＤＮＳネームのサフィックスが「ｕｄｐ．ｖｌ．ｐｒｏｍｏｔｅｒ．ｍｉｃｒｏｓｏｆｔ．ｃｏｍ」である場合、ＤＮＳインターフェイスは、ＤＮＳネームを、ＵＤＰキャッシュ３７０で保持されるＵＤＰコミュニティ中継ノードのリストに対応する「０．ｕｄｐ．ｖｌ．ｐｒｏｍｏｔｅｒ．ｍｉｃｒｏｓｏｆｔ．ｃｏｍ」のＰＮＲＰネームに関連付ける。サフィックスが「ｓｓｌ．ｖｌ．ｐｒｏｍｏｔｅｒ．ｍｉｃｒｏｓｏｆｔ．ｃｏｍ」である場合、ＤＮＳネームは、ＳＳＬコミュニティ中継ノードのＳＳＬキャッシュ３６０で保持されるＳＳＬコミュニティ中継ノードのリストに対応する「０．ｓｓｌ．ｖｌ．ｐｒｏｍｏｔｅｒ．ｍｉｃｒｏｓｏｆｔ．ｃｏｍ」のＰＮＲＰネームに関連付けられる。１つの例において、ＤＮＳインターフェイス３２０は、ＤＮＳネーム及びＰＮＲＰネームのマップを保持することができる。ＤＮＳネームがマップにある場合、ＤＮＳインターフェイスは、ＤＮＳネームのサフィックスをＰＮＲＰネームと比較することにより、対応するＰＮＲＰネームを検索することができる。それ以外の場合、要求は廃棄される。代替として、ＰＮＲＰネームはＤＮＳネーム内でエンコードされるが、これはデコードされ、ＰＮＲＰマネージャ３４０に渡される。ＤＮＳネーム内でＰＮＲＰネームをエンコードする例は、参照により内容を本願に明示的に援用する２００５年４月２２日に出願した「ＤＮＳコンパチブルＰＮＲＰピアネームエンコディング」と題する米国特許出願明細書（代理人整理番号３０８３５／１９３６２１）に説明される。
【００４２】
ブロック４３０において、ＤＮＳプラグイン３３０は、クエリネーム及びクエリタイプに基づいてＤＮＳネームが有効であるかどうかを決定する。クエリタイプがサポートされない（つまり、クエリタイプがＵＤＰ又はＳＳＬに関連しない）場合、ＤＮＳプラグイン３３０はエラーをＤＮＳインターフェイス３２０に返して、ブロック４３５において要求が廃棄されるようにする。クエリタイプがサポートされる場合、ＤＮＳプラグイン３３０は、ブロック４４０において、ＰＮＲＰネームをＰＮＲＰマネージャ３４０に渡す。ＰＮＲＰバックエンド３１０は、リゾルバルーチン４４５を行い、コミュニティ中継ノードを選択してコミュニティ中継ノードのＩＰアドレスをＤＮＳフロントエンド３００に返す。ＤＮＳインターフェイス３２０が自身のデータベースに応答がないＤＮＳネームを受信するたびにＤＮＳプラグインによって呼び出される、サンプルのコンピュータコードの実施は以下のようになる。
【００４３】
【表５】
2008538630.tif 000007
ブロック４５０において、ＤＮＳフロントエンド３００は、選択されたコミュニティ中継ノードのＩＰアドレスをＰＮＲＰバックエンド３１０から受信する。選択されたコミュニティ中継ノード及び関連付けられたＩＰアドレスは、クライアント２２０によって要求された通信プロトコルタイプに関連する。ＳＳＬ要求の場合、ＰＮＲＰバックエンド３１０はＳＳＬコミュニティ中継ノードのＩＰｖ４アドレスを返す。ＵＤＰ要求の場合、ＰＮＲＰバックエンド３１０はＵＤＰコミュニティ中継ノードのＩＰｖ６アドレスを返す。ＩＰｖ６アドレスは、コミュニティ中継ノードに接続するポート番号を含むことができる。更にもう１つの例において、ＰＮＲＰバックエンド３１０は、ネットワークアドレス変換器（ＮＡＴ）全検索のためのコミュニティ中継ノードのＩＰアドレスを返すことができる。ＮＡＴ全検索のためのＩＰアドレスは、コミュニティ中継ノードの外部ＩＰｖ４アドレスをカプセル化するＩＰｖ６アドレス、ＵＰＤポート番号、ＮＡＴタイプ及びＮＡＴ全検索サーバの公開ＩＰｖ４アドレスであってもよい。ＮＡＴ全検索のＩＰアドレスは、コミュニティ中継ノード２４０と要求側クライアント２２０との間のその後の通信に使用され、ＩＰｖ４クライアントがネットワークアドレス変換器の背後にあるときＩＰｖ６ネットワークを介して通信できるようにすることができるが、その例は、参照により内容を本願に明示的に援用する、２００３年３月２７日に出願した「低減されたワークロードのネットワークアドレス変換器後にＩＰｖ４クライアントにＩＰｖ６ネットワークを介しての通信を許容する」という名称の米国特許出願第１０／４０１，０８３号明細書に開示されている。
【００４４】
ＩＰアドレスは、ブロック４５５において、初期要求に応答して要求側クライアント２１０に送信される。その後、クライアント２１０はＩＰアドレスを使用してＨＴＴＰ通信によりコミュニティ中継ノードとコンタクトし、コミュニティ中継ノードによって容易になったルーティング手続きにより、アクセス保護されたクライアント２２０と通信することができる。要求側クライアント２２０は、将来の使用に備えてコミュニティ中継ノード２４０のＩＰアドレスをキャッシュに入れ、それによりプロモータ２１０の負荷を低減させることができる。クライアント２２０がそのキャッシュされたＩＰアドレスに基づいて応答を受信しない場合、クライアント２２０は、別のコミュニティ中継ノードのＩＰアドレスを求める新しい要求をプロモータ２１０に対して開始する。もう１つの例において、クライアント２２０は、１つ又は複数のコミュニティ中継ノードのＰＮＲＰアドレスを提供され、ＰＮＲＰクエリを行い、それによりプロモータ２１０の負荷を更に低減させることができる。ＰＮＲＰクエリが応答を返さない場合、クライアント２２０はプロモータ２１０に要求を発行する。
【００４５】
図５は、ＤＮＳフロントエンド３００から受信されたＰＮＲＰアドレスをコミュニティ中継ノードのＩＰアドレスへ変換する方法４４５の例を示す流れ図である。ＤＮＳフロントエンド３００からＰＮＲＰネームを受信したのに応答して、ＰＮＲＰバックエンド３１０はコミュニティ中継ノードを選択し、ＩＰアドレスをＤＮＳフロントエンド３００に返す。
【００４６】
図５を参照すると、ＰＮＲＰマネージャ３４０は、ブロック５００において、ＤＮＳプラグイン３３０からＰＮＲＰネームを受信する。必要に応じて、ＰＮＲＰネームは要求キャッシュ３８０において待ち行列に入れられる。ＰＮＲＰマネージャ３４０は、ＰＮＲＰネームが待ち行列に入れられた順序で要求に応答することができる。ＰＮＲＰマネージャ３４０は、同時要求の数及び変換速度にあらかじめ定められた閾値を確立し、要求キャッシュ３８０の待ち行列に入れられたＰＮＲＰネームの数と要求の変換に要する平均時間を監視する。要求キャッシュ３８０のあらかじめ定められた存続時間を越えるＰＮＲＰネームは自動的に廃棄される。同時要求の数及び変換速度が閾値よりも減少するまで、追加の要求は拒否される。
【００４７】
要求に応答する準備が整うと、ＰＮＲＰマネージャ３４０は、変換されるＰＮＲＰネームがブロック５０５においてプロモータ２１０の管理者により許可されたＰＮＲＰネームのリストの中にあることを検査する。つまり、ＰＮＲＰマネージャ３４０は、ＰＮＲＰネームに関連付けられているコミュニティ中継ノードのリストがプロモータ２１０によって保持されているかどうか決定する。ＰＮＲＰネームは、対応するキャッシュが空である場合、又はすべてのコミュニティ中継が最大容量まで使用されている場合、サポートされない。ＰＮＲＰマネージャ３４０は、各要求への応答後にサポートされるＰＮＲＰネームのリストを保持して更新する。ＰＮＲＰネームがサポートされるＰＮＲＰネームのリストの中に見出されない場合、ＰＮＲＰマネージャ３４０は、ブロック５１０において要求を廃棄し、又はＤＮＳフロントエンドにエラーを伝える。また、ＰＮＲＰマネージャ３４０は、要求キャッシュ３８０の監視に基づいて要求数又は変換速度の閾値にプロモータ２１０が到達した場合、要求をサポートすることを拒否する。
【００４８】
ＰＮＲＰネームがサポートされる場合、ブロック５１５において、ＰＮＲＰマネージャ３４０は、コミュニティ中継ノードを選択するコミュニティ中継ノードの関連リストを決定する。特定の通信プロトコルタイプのコミュニティ中継ノードは、関連リゾリューションキャッシュ３６０、３７０を識別するために使用され得る単一のＰＮＲＰネームの下にリストとして格納されるので、ＰＮＲＰマネージャ３４０は、要求側クライアント２１０に提供されるコミュニティ中継ノードのＩＰアドレスを含む関連キャッシュ又はリストを容易に決定することができる。例えば、ＤＮＳフロントエンドから受信されたＰＮＲＰネームが「０．ｓｓｌ．ｖｌ．ｐｒｏｍｏｔｅｒ．ｍｉｃｒｏｓｏｆｔ．ｃｏｍ」である場合、ＰＮＲＰマネージャ３４０はＳＳＬキャッシュ３７０で保持されるＳＳＬコミュニティ中継ノードのリストにアクセスすることができるが、ＰＮＲＰネームが「０．ｕｄｐ．ｖｌ．ｐｒｏｍｏｔｅｒ．ｍｉｃｒｏｓｏｆｔ．ｃｏｍ」である場合、ＰＮＲＰマネージャ３４０はＵＤＰキャッシュ３６０で保持されるＵＤＰコミュニティ中継ノードのリストにアクセスすることができる。
【００４９】
ブロック５１５における決定が、ＳＳＬコミュニティ中継ノードに関連付けられているＰＮＲＰネームという結果になる場合、ＰＮＲＰマネージャ３４０は、ブロック５２０において、ＳＳＬキャッシュ３６０にアクセスする。各クライアント要求が受信されると、プロモータ２１０はコミュニティ中継ノードのＰＮＲＰクエリを行うことができるけれども、そのようなプロセスは遅い。したがって、プロモータ２１０は、使用可能なコミュニティ中継ノードのＩＰアドレスを事前に取り出して、結果をキャッシュ３６０、３７０に格納する。キャッシュ３６０が低又は空である場合、ＰＮＲＰマネージャ３４０は、要求に応答することを拒否してＤＮＳフロントエンド３００に知らせる。すると、ＤＮＳフロントエンド３００はブロック５６０においてクライアント２１０に知らせる。キャッシュは、使用可能なコミュニティ中継ノードの不足によって低又は空の状態になり得るが、その不足は負荷容量の最大化、コミュニティ中継ノードのオフライン、以前にコミットされたコミュニティ中継ノードなどの結果を生じ得る。ＰＮＲＰマネージャ３４０は、以下で更に説明されるように、ブロック５６５においてキャッシュを更新する。
【００５０】
ＳＳＬキャッシュ３６０が使用可能なコミュニティ中継ノードを有する場合、ブロック５２５において決定されたように、ＰＮＲＰマネージャ３４０はブロック５３０においてコミュニティ中継ノードを選択する。前述のように、コミュニティ中継ノードのＩＰアドレスは、サービス品質、負荷及び位置などの追加の詳細と共に格納される。これらの詳細は、コミュニティ中継ノードを選択する際に、ＰＮＲＰマネージャ３４０によって考慮される。例えば、ＰＮＲＰマネージャ３４０は、使用済み及び未使用のコミュニティ中継ノードのリストと共に、使用可能なコミュニティ中継ノードのスタックを保持することができる。使用可能なコミュニティ中継ノードは、以下で更に説明されるＰＮＲＰ変換に基づいて決定される。最も新しいコミュニティ中継ノードは最上位にスタックされるが、これは使用やサービス品質に従ってスタックされ、サービス品質の高いほど上位にスタックされる。使用されてはいるが低負荷であるコミュニティ中継ノードは、未使用のコミュニティ中継ノードの第１のグループの下にスタックされ、サービス品質に従って配列される。それ以降のコミュニティ中継ノードは、これに応じて適宜スタックされる。
【００５１】
コミュニティ中継ノードを選択する際、ＰＮＲＰマネージャ３４０はスタックの最上部から開始し、リストにおいて最新かつ未使用で高いＱＯＳのコミュニティ中継ノードを返す。複数のコミュニティ中継ノードが選択された場合、ＰＮＲＰマネージャ３４０は、要求側クライアント２２０に最も近いコミュニティ中継ノードを選択する。しかし、未使用のコミュニティ中継ノードが存在しない場合、ＰＮＲＰマネージャ３４０は、最低負荷の（つまり最も少なく使用されている）コミュニティ中継ノードを選択する。したがって、ＰＮＲＰマネージャ３４０は、たとえすべてのコミュニティ中継ノードが使用中であったとしても、使用可能なコミュニティ中継ノードの間で負荷のバランスを取ることができる。すべてのコミュニティ中継ノードの間の負荷が同程度である場合、ＰＮＲＰマネージャ３４０は、サービス品質の最も高いコミュニティ中継ノードを選択する。ＰＮＲＰマネージャ３４０がスタック全体を検索して結果としてコミュニティ中継ノードに至らない場合は、ＰＮＲＰマネージャ３４０は、スタック内の最初のコミュニティ中継ノードを単に選択する。一方、複数のコミュニティ中継ノードが選択された場合、ＰＮＲＰマネージャ３４０は、要求側クライアント２２０に最も近いコミュニティ中継ノードを選択する。ＰＮＲＰマネージャが適切なコミュニティ中継ノードを見出すと、ＳＳＬキャッシュ３６０からＩＰアドレスが選択される。その結果、ＰＮＲＰマネージャは潜在的に、サービス品質が最も高く、最も新しく且つ未使用のコミュニティ中継ノードを選択することができる。新しい未使用のコミュニティ中継ノードが使用可能ではない場合、ＰＮＲＰマネージャ３４０は、２番目に最適なコミュニティ中継ノードを選択し、それにより、使用可能な中継ノード間の負荷のバランスを取りながら、要求側クライアント２２０に最善の使用可能なコミュニティ中継ノードを提供する。理解されるように、コミュニティ中継ノードがスタックされ選択が考慮される順序は、開示されているものとは異なることもあり、本明細書において開示される基準を含む様々な基準に従って順序付けられ得る。
【００５２】
ＳＳＬコミュニティ中継ノードを選択すると、ＰＮＲＰマネージャ３４０は、ブロック５３５において、ＩＰアドレスをＤＮＳフロントエンド３００に返すが、図４を参照して説明したように、ＤＮＳフロントエンド３００はＩＰアドレスを要求側クライアント２２０に返すことができる。ＳＳＬコミュニティ中継ノードのＩＰアドレスはＩＰｖ４アドレス（例えば、２００．１．２．３）であってよい。
【００５３】
ブロック５１５における決定が、ＵＤＰコミュニティ中継ノードに関連付けられているＰＮＲＰネームという結果に至る場合、同様のプロセスが実行される。ブロック５４０において、ＰＮＲＰマネージャ３４０は、ＵＤＰキャッシュ３７０にアクセスする。キャッシュ３７０が低又は空である場合、ＰＮＲＰマネージャ３４０は、要求に応答することを拒否してＤＮＳフロントエンド３００に知らせるが、ＤＮＳフロントエンド３００はブロック５６０においてクライアント２１０に知らせ、ブロック５６５においてキャッシュを更新する。ＵＤＰキャッシュ３７０が使用可能なコミュニティ中継ノードを有する場合、ＰＮＲＰマネージャ３４０はブロック５６０においてコミュニティ中継ノードを選択する。ＵＤＰコミュニティ中継ノードの選択プロセスは、前述のＳＳＬコミュニティ中継ノードの選択プロセスと同様であってよい。ＵＤＰコミュニティ中継ノードを選択すると、ＰＮＲＰマネージャ３４０は、ブロック５５５においてＩＰアドレスをＤＮＳフロントエンド３００に返すが、図４を参照して説明されるように、ＤＮＳフロントエンド３００はＩＰアドレスを要求側クライアント２２０に返すことができる。ＵＤＰコミュニティ中継ノードのＩＰアドレスは、ＵＤＰコミュニティ中継ノードの通信ポート番号を持つＩＰｖ６アドレス（例えば、２００．１．２．４、ポート１２３４）であってよい。
【００５４】
図６Ａ〜図６Ｆを参照すると、ＰＮＲＰマネージャ３４０は、使用可能なコミュニティ中継ノードのＰＮＲＰスタックと共に、使用済み及び未使用のコミュニティ中継ノードのリストを保持して、コミュニティ中継ノードの選択を補助することができる。別個のＰＮＲＰスタックはＰＮＲＰネームごとに維持される（例えば、ＳＳＬに対してはＰＮＲＰスタック、ＵＤＰに対しては別のＰＮＲＰスタック）。図６Ａにおいて、使用可能なコミュニティ中継ノード（ＣＮＲ１、ＣＮＲ２、ＣＮＲ３）は未使用のままであり、未使用のコミュニティ中継ノードのリストに含められる。ＣＮＲ３は最も新しいコミュニティ中継ノードであり、そのため、最上位にスタックされる。続いて、図６Ｂに示されるように、コミュニティ中継ノード（ＣＲＮ３）が使用されて使用済みリストに移動され、残りの未使用のコミュニティ中継ノードが順序の上位に移動するが、これはスタックポインタによって示される。図６Ｃにおいて、新しい使用可能なコミュニティ中継ノード（ＣＮＲ４）がスタックに追加される。新しいコミュニティ中継ノード（ＣＮＲ４）は現在最新のものであるため、スタックポインタは、これが最初に選択されて使用済みリストに移動されることを示す。図６Ｄにおいて、スタックポインタは、以前のコミュニティ中継ノード（ＣＮＲ３及びＣＮＲ４）がすでに使用済みであり、残りの２つの未使用のコミュニティ中継ノード（ＣＮＲ１及びＣＮＲ２）が選択されるべきであることを示す。図６Ｅにおいて、すべての使用可能なコミュニティ中継ノードが使用されてしまうと、ＰＮＲＰマネージャ３４０は、負荷バランスを維持する目的で、最も使用頻度が低いものとしてＣＮＲ３を選択する。残りのコミュニティ中継ノードは使用済みリストから削除され、更に新しい又は未使用のコミュニティ中継ノードがない場合には未使用リストに保持される。図６Ｆにおいて、新しい使用可能なコミュニティ中継ノード（ＣＮＲ５）が未使用リストの最上位に追加され、ＣＮＲ３は使用済みリストにおいて最も使用頻度の高いコミュニティ中継ノードとして留まる。
【００５５】
その結果、ＰＮＲＰマネージャ３４０は、負荷のバランスを取りながら、最も新しく使用頻度の低いコミュニティ中継ノードを選択することによって、使用可能なコミュニティ中継ノードを管理することができる。使用済み及び未使用のリストは、新しいコミュニティ中継ノードを追加し、古いコミュニティ中継ノードを削除することができる。ＰＮＲＰマネージャ３４０は、最も新しい未使用のコミュニティ中継ノードを最初に返す。すべてのコミュニティ中継ノードが使用済みである場合、ＰＮＲＰマネージャ３４０は、以前に使用された順序でコミュニティ中継ノードを返す。ＰＮＲＰスタックは、新しい使用可能なコミュニティ中継ノードをスタックに継続的に再取り込みするために、ＰＮＲＰネームの事前取り出しを引き続き担当する。ＰＮＲＰスタックは更に、そのサイズを望ましいレベルに維持することができる。以下に説明されるＰＮＲＰ変換の後、スタックがあらかじめ定められたサイズよりも大きい場合、古いか又は使用済みのコミュニティ中継ノードがスタックから削除され、ＰＮＲＰ変換からの新しい使用可能なコミュニティ中継ノードが追加される。
【００５６】
ＰＮＲＰマネージャ３４０は更に、要求の期限切れまでの秒数に対するあらかじめ定められたスタックサイズの比から計算された、秒あたりの要求された変換済み要求を監視することができる。いかなる時点における要求の数も、秒あたりの要求された変換済み要求の合計と使用済み変換から計算され得る。いかなる時間にわたっても（例えば、毎秒）、ＰＮＲＰマネージャ３４０は、スタック及びリゾリューションキャッシュ３６０、３７０の構成で指定された制限を超えるＰＮＲＰ要求を発行しない。
【００５７】
図７は、リゾリューションキャッシュ３６０、３７０を更新して維持する方法５６５を示す流れ図である。更新の方法５６５は、図５の方法の期間に実施されるものとして示されるが、ＰＮＲＰマネージャ３４０の他の機能と並行して継続的に実施されてもよく、要求が使用可能なコミュニティ中継ノードを上回る場合、又は以前に選択されたコミュニティ中継ノードを置換するために特別に呼び出されることもある。実際、ＰＮＲＰマネージャ３４０は、各々の要求に応じてではなく、要求に先立ってコミュニティ中継ノードを事前に取り出すことができる。ＰＮＲＰマネージャ３４０は、要求ごとにコミュニティ中継ノードのＰＮＲＰクエリを行うことができるが、事前取り出しはより迅速に結果を返すことができる。方法５６５は、ＳＳＬキャッシュ３６０及びＵＤＰキャッシュ３７０に対して個別に実行される。一般に、リゾリューションキャッシュ３６０、３７０は、サイズ及び経過時間によって構成可能である。
【００５８】
図７を参照すると、ＰＮＲＰマネージャ３４０は、ブロック６００において、キャッシュが低又は空であるかどうかを決定する。キャッシュが低であるかどうかは、あらかじめ定められた閾値に基づいて決定される。もちろん、キャッシュが空である場合、キャッシュは低であると見なされる。キャッシュは、未使用のコミュニティ中継ノードがほとんどない場合、ライトノードを有する使用済みコミュニティ中継ノードがほとんどない場合、高いサービス品質のコミュニティ中継ノードがほとんどない場合など、様々なパラメータに基づいて低と見なされる。キャッシュが低と見なされる場合、制御はブロック６１０に渡される。キャッシュが低ではない場合、制御はブロック６０５に渡される。
【００５９】
ブロック６０５において、ＰＮＲＰマネージャ３４０は、キャッシュ３６０、３７０にリストされているコミュニティ中継ノードのいずれかがあらかじめ定められた存続時間閾値よりも古いかどうかを決定する。コミュニティ中継は、オフラインになるか、又は使用不可能になるので、ＰＮＲＰマネージャ３４０は、リストの鮮度を保つためにあらかじめ定められた時間経過後にリストからコミュニティ中継ノードを削除する。削除されたコミュニティ中継ノードは、ＰＮＲＰキャッシュ３９０に格納される。ブロック６０５において、存続時間閾値に到達するか又はこれを超える場合、制御は、古いコミュニティ中継ノードを新しいコミュニティ中継ノードと置換するブロック６１０に渡される。それ以外の場合、制御はブロック６００に戻り、更新の方法５６５を継続的に繰り返す。
【００６０】
ブロック６１０において、ＰＮＲＰマネージャ３４０は、ＰＮＲＰキャッシュ３９０に保持される既知のコミュニティ中継ノードのリストに関連付けられているＰＮＲＰネームを検索する。ＰＮＲＰネームは、使用可能なコミュニティ中継ノードのリストを識別するために使用されるものと同じであってよい（例えば、０．ｓｓｌ．ｖｌ．ｐｒｏｍｏｔｅｒ．ｍｉｃｒｏｓｏｆｔ．ｃｏｍ又は０．ｕｄｐ．ｖｌ．ｐｒｏｍｏｔｅｒ．ｍｉｃｒｏｓｏｆｔ．ｃｏｍ）。例えば、ＳＳＬキャッシュ３６０を更新する際、ＰＮＲＰマネージャ３４０は、０．ｓｓｌ．ｖｌ．ｐｒｏｍｏｔｅｒ．ｍｉｃｒｏｓｏｆｔ．ｃｏｍのＰＮＲＰネームを使用して既知のＳＳＬコミュニティ中継ノードのリストを識別する。ＵＤＰキャッシュ３７０を更新する際、ＰＮＲＰマネージャ３４０は、０．ｕｄｐ．ｖｌ．ｐｒｏｍｏｔｅｒ．ｍｉｃｒｏｓｏｆｔ．ｃｏｍのＰＮＲＰネームを使用して既知のＵＤＰコミュニティ中継ノードのリストを識別する。ＰＮＲＰキャッシュ３９０によって保持されるＰＮＲＰネームのリストは、前述のマッピングプロセスに使用されたものと同じであってよい。２つのＰＮＲＰネームのみを保持するように説明されているが、ＰＮＲＰキャッシュ３９０は、通信プロトコルタイプ、バージョン、サービス品質などに基づいて、各ＰＮＲＰネームが１つ又は複数の対応するコミュニティ中継ノードに関連付けられた複数のＰＮＲＰネームを保持することができる。
【００６１】
ブロック６１５において、ＰＮＲＰマネージャ３４０は、ＰＮＲＰネームを使用してＰＮＲＰインターフェイス３５０を介してＰＮＲＰリゾリューションを行う。ＰＮＲＰリゾリューションは、プロモータ２１０に登録された複数のコミュニティ中継ノードにクエリを行うことを含むことができる。その結果、複数のコミュニティ中継ノードに同時にクエリが行われる。更に、ＰＮＲＰマネージャ３４０は、コミュニティ中継ノードにランダムにクエリを行い、同じＰＮＲＰネームでランダムＩＰアドレスを返し、コミュニティ中継ノード間でバランスの取れた負荷を保持することができる。ＰＮＲＰマネージャ３４０はランダムヒント番号をＰＮＲＰ  ＡＰＩに使用することができる。ランダム番号は、コミュニティ中継ノードの登録時、及びＰＮＲＰ変換の実施時に供給され、ＰＮＲＰネットワークからランダム結果を生成することができる。ＰＮＲＰ変換の例は、参照により内容を本願に援用する２００１年８月２９日に出願した米国特許出願公開第２００２／０１４３９８９号明細書及び２００３年６月１３日に出願した米国特許出願公開第２００５／０００４９１６号明細書に開示されている。
【００６２】
ブロック６２０においてＰＮＲＰマネージャ３４０が１つ又は複数のコミュニティ中継ノードから応答を受信する場合、ＰＮＲＰマネージャ３４０は、コミュニティ中継ノードのＩＰアドレスをリゾリューションキャッシュ３６０、３７０の対応するリストに追加する。同様に、ＰＮＲＰマネージャ３４０は、新しい未使用のコミュニティ中継ノードを、使用可能なコミュニティ中継ノードのスタックの最上位に追加する。１つの例において、ＰＮＲＰマネージャ３４０は、最新の未使用のコミュニティ中継ノードを、リスト及びスタックの最上位に移動させる。リゾリューションキャッシュ３６０、３７０のこの連続的な事前取り出し及び更新の結果、より新しいコミュニティ中継ノードがリストの最上位に追加される。ＰＮＲＰマネージャ３４０がＰＮＲＰクエリに対する応答を受信しない場合、制御はブロック６１０に戻され、ＰＮＲＰマネージャ３４０はＰＮＲＰクエリに対して次のＰＮＲＰネームを使用することができる。
【００６３】
前述の開示に基づいて、アクセス保護されている要求側クライアントは、プロモータの周知のＤＮＳネームを使用してコミュニティ中継ノードを検出することができる。ＤＮＳネームは通信プロトコルタイプを示すように構築され、プロモータ２１０のＤＮＳフロントエンドによって受信される。ＤＮＳネームのフォーマットに基づいて、ＤＮＳフロントエンドはＤＮＳネームをＰＮＲＰネームに関連付け、ＰＮＲＰネームをプロモータ２１０のＰＮＲＰバックエンドに渡す。ＰＮＲＰバックエンドは、コミュニティ中継ノードの事前取り出しされたリストを保持し、ＰＮＲＰネームを変換してコミュニティ中継ノードを選択し、選択されたコミュニティ中継ノードのＩＰアドレスをＤＮＳフロントエンドに返す。次いで、ＤＮＳフロントエンドはＩＰアドレスを要求側クライアントに返し、要求側クライアントはＨＴＴＰを介してコミュニティ中継ノードと連絡をとり、その後、別のアクセス保護されたクライアントと通信するが、コミュニティ中継ノードはファイアウォールをトラバースする。コミュニティ中継ノードは、通信プロトコルタイプ、サービス品質、要求側クライアントへの近さ、負荷などに基づいて選択され得る。コミュニティ中継ノードは、そのＩＰアドレスを定義済みＰＮＲＰネームでプロモータ２１０に登録することができる。ＰＮＲＰバックエンドはＰＮＲＰリゾリューションを使用して、使用可能なコミュニティ中継ノードのリストを継続的に更新することができる。
【００６４】
以上の文は多くの様々な実施の形態の詳細な説明を示すが、理解されるように、本特許の範囲は、本特許出願に添付の特許請求の範囲の文言によって定義される。詳細な説明は模範的なものとしてのみ解釈されるべきであり、あらゆる可能な実施の形態を説明することは不可能ではないとしても実際的ではないため、あらゆる可能な実施の形態を説明するものではない。多くの代替の実施の形態は、現在の技術又は本特許請求の範囲に含まれることになる本特許の出願日以降に開発された技術を使用して実施することができる。
【００６５】
それゆえ、特許請求の精神及び範囲を逸脱することなく、多くの変更及び変形を本明細書に説明され示された技法及び構造に加えることが可能である。したがって、本明細書に説明される方法及び装置は例示的なものであり、特許請求の範囲を限定するものではないことを理解されたい。
【図面の簡単な説明】
【００６６】
【図１】請求項にしたがって動作することができるコンピュータシステムを示すブロック図である。
【図２】請求項にしたがうネットワークシステムを示すブロック図である。
【図３】請求項にしたがってネットワークシステム内でクライアントとコミュニティ中継ノードとの間の通信をブートストラップするコンピュータシステムを示すブロック図である。
【図４】請求項にしたがう、クライアントとコミュニティ中継ノードとの間の通信をブートストラップする方法を示す流れ図である。
【図５】請求項にしたがう、コミュニティ中継ノードに対するクライアントからの要求を変換する方法を示す流れ図である。
【図６Ａ】請求項にしたがうコミュニティ中継ノードの管理を示すブロック図である。
【図６Ｂ】請求項にしたがうコミュニティ中継ノードの管理を示すブロック図である。
【図６Ｃ】請求項にしたがうコミュニティ中継ノードの管理を示すブロック図である。
【図６Ｄ】請求項にしたがうコミュニティ中継ノードの管理を示すブロック図である。
【図６Ｅ】請求項にしたがうコミュニティ中継ノードの管理を示すブロック図である。
【図６Ｆ】請求項にしたがうコミュニティ中継ノードの管理を示すブロック図である。
【図７】請求項にしたがってコミュニティ中継ノードのリストを更新して保持する方法を示す流れ図である。
【図１】
2008538630.tif 000008
【図２】
2008538630.tif 000009
【図３】
2008538630.tif 000010
【図４】
2008538630.tif 000011
【図５】
2008538630.tif 000012
【図６Ａ】
2008538630.tif 000013
【図６Ｂ】
2008538630.tif 000014
【図６Ｃ】
2008538630.tif 000015
【図６Ｄ】
2008538630.tif 000016
【図６Ｅ】
2008538630.tif 000017
【図６Ｆ】
2008538630.tif 000018
【図７】
2008538630.tif 000019
【国際調査報告】
2008538630.tif 000020