(57)【要約】【解決手段】ネットワークアドレス変換（ＮＡＴ）越えを支援する方法および装置を開示する。たとえば、ネットワーク上で１以上の他のノードと通信するように構成されたノードは、ａ）当該ノードで１以上のＮＡＴの振る舞いに関する情報を判定し、１以上の他のノードが前記情報を取り出し可能な方法で前記情報を格納するか、または、ｂ）１以上の他のノードによって取得された１以上のＮＡＴの振る舞いに関する情報を取り出し、前記１以上のＮＡＴを越えるためにその情報を用いることによって、ＮＡＴ越えを促進する。【選択図】図１
2010535004.tif 000002
【特許請求の範囲】
【請求項１】
ネットワーク上で１以上の他のノードと通信するように構成されたノードにおける、ネットワークアドレス変換（ＮＡＴ）越えを支援する方法であって、
ａ）当該ノードで１以上のＮＡＴの振る舞いに関する情報を判定し、１以上の他のノードが前記情報を取り出し可能な方法で前記情報を格納するステップ、または、
ｂ）１以上の他のノードによって取得された１以上のＮＡＴの振る舞いに関する情報を取り出し、前記１以上のＮＡＴを越えるためにその情報を用いるステップを含むか、あるいは
ｃ）前記ステップａ）と前記ステップｂ）の両方を含むことを特徴とする方法。
【請求項２】
前記１以上のＮＡＴの振る舞いに関する情報を判定するステップは、１以上のＮＡＴに対するＭＡＣ（media access control）アドレスを判定するステップを含む請求項１の方法。
【請求項３】
前記１以上のＮＡＴの振る舞いに関する情報を判定するステップは、与えられた外部ＩＰアドレスおよび前記他のノードの一つの間にいくつのＮＡＴが存在するかを判定するステップを含む請求項１の方法。
【請求項４】
与えられた外部ＩＰアドレスおよび前記他のノードの一つの間にいくつのＮＡＴが存在するかを判定するステップは、所定のＴＴＬ（time to live）をもつデータグラムを送信するステップと、そのデータグラムに応答して当該ノードに時間超過エラーが返信された場合、インクリメントしたＴＴＬをもつデータグラムを再送するステップとを含む請求項３の方法。
【請求項５】
１以上のＮＡＴの振る舞いに関する情報にはＮＡＴタイプが含まれる請求項１の方法。
【請求項６】
１以上のＮＡＴの振る舞いに関する情報にはＮＡＴに関する地理的情報が含まれる請求項１の方法。
【請求項７】
前記情報を格納するステップは、ピアツーピアネットワーク上で前記情報を分散するステップを含む請求項１の方法。
【請求項８】
１以上の他のノードが前記情報を取り出し可能な方法で前記情報を格納するステップは、当該ノードと前記他のノードがアクセス可能なサーバ上に前記情報を格納するステップを含む請求項１の方法。
【請求項９】
前記サーバは共通のデータベースサーバである請求項８の方法。
【請求項１０】
ステップａ）は、前記１以上のＮＡＴに関連づけられた情報を格納するステップをさらに含む請求項１の方法。
【請求項１１】
ステップｂ）は、前記１以上のＮＡＴに関連づけられた情報を取り出すステップをさらに含む請求項１の方法。
【請求項１２】
ステップｂ）は、当該ノードと前記１以上の他のノードがアクセス可能な中央の場所から１以上のＮＡＴの振る舞いに関する情報を取り出すステップを含む請求項１の方法。
【請求項１３】
前記１以上のＮＡＴは１以上の無線アクセス可能なＮＡＴを含む請求項１の方法。
【請求項１４】
当該ノードと前記１以上の他のノードが同じＮＡＴの背後にある請求項１の方法。
【請求項１５】
前記ノードは、前記１以上の他のノードがアクセス可能なルータである請求項１の方法。
【請求項１６】
１以上の他のノードが前記情報を取り出し可能な方法で前記情報を格納するステップは、前記情報を前記ルータにキャッシュするステップを含む請求項１５の方法。
【請求項１７】
１以上のＮＡＴの振る舞いに関する情報には、ＮＡＴ振る舞い情報、１以上の利用可能なＳＴＵＮサーバのアドレス、１以上の共通のデータベースのアドレス、ＮＡＴ経由の複数のアクティブなセッション、ＮＡＴ上の全体的なトラフィック負荷、または、シンメトリックＮＡＴに対するポート予測のアトミック性を実現するフラグの値が含まれる請求項１の方法。
【請求項１８】
ネットワークアドレス変換（ＮＡＴ）越えを支援する装置であって、
ネットワーク上で１以上の他のノードと通信するように構成されたノードと、
実行可能な命令セットとを含み、
前記命令セットは、前記ノードによって実行されたときに前記ノードに、
ａ）当該ノードで１以上のＮＡＴの振る舞いに関する情報を判定し、１以上の他のノードが前記情報を取り出し可能な方法で前記情報を格納するステップ、または、
ｂ）１以上の他のノードによって取得された１以上のＮＡＴの振る舞いに関する情報を取り出し、前記１以上のＮＡＴを越えるためにその情報を用いるステップを実行させるか、あるいは
ｃ）前記ステップａ）と前記ステップｂ）の両方を実行させることを特徴とする装置。
【請求項１９】
当該ノードは無線ノードである請求項１８の装置。
【請求項２０】
前記情報を格納し、および／または、前記情報を取り出すために、当該ノードがアクセス可能なメモリロケーションをさらに含む請求項１８の方法。
【請求項２１】
当該ノードはＮＡＴを実装するルータを介して前記ネットワークの１以上の前記他のノードに接続されている請求項１８の装置。
【請求項２２】
当該ノードは１以上の前記他のノードに接続されたルータである請求項１８の装置。
【請求項２３】
前記ルータはＮＡＴを実装する請求項２２の装置。
【請求項２４】
１以上のＮＡＴの振る舞いに関する情報には、ＮＡＴ振る舞い情報、１以上の利用可能なＳＴＵＮサーバのアドレス、１以上の共通のデータベースのアドレス、ＮＡＴ経由の複数のアクティブなセッション、ＮＡＴ上の全体的なトラフィック負荷、または、シンメトリックＮＡＴに対するポート予測のアトミック性を実現するフラグの値が含まれる請求項１８の装置。
【発明の詳細な説明】
【技術分野】
【０００１】
［優先権主張］
本願は、２００７年７月２７日に出願された同一出願人による米国特許出願第１１／８２９，８３１号の優先権の利益を主張し、その開示内容全体を参照によりここに組み入れる。
【０００２】
［技術分野］
本発明はコンピュータネットワークコミュニケーションに関し、特に一つのアプリケーション内の異なる通信チャネル間でネットワークトラフィックの優先順位をつけることに関する。
【背景技術】
【０００３】
コンピューティングシステムはネットワーク環境を介してますます相互接続されるようになっている。そのようなネットワーク環境は集中型もしくは分散型である。分散型コンピューティング環境は、互いに通信できるように相互接続された多数のコンピューティングシステムによって定義され、各コンピューティングシステムはクライアント機能とサーバ機能の両方を実行可能である。ピアツーピア（Ｐ２Ｐ）ネットワークは、Ｐ２Ｐネットワーク内の各コンピューティングシステムがネットワーク内の他のすべてのコンピューティングシステムのピアとして定義される分散型コンピューティング環境の一つの例を示す。議論のために、Ｐ２Ｐネットワーク内の各ピアコンピューティングシステムをノードと呼ぶ。また、Ｐ２Ｐネットワーク内の各ノードは、実質的に等価な機能をもつソフトウェアを実行するように構成される。したがって、各ノードは、Ｐ２Ｐネットワークを介したデータとサービスのプロバイダおよびユーザの両方として動作する。ピアツーピアネットワークは集中型の階層または組織をもたない分散型データネットワークである。ピアツーピアデータネットワークは、一般にはノードと呼ばれる多数のコンピュータまたは他の情報デバイス間で情報を通信する頑強で柔軟な手段を提供する。
【０００４】
Ｐ２Ｐネットワークは、比較的少ない数のサーバに計算能力と帯域幅を集中させるのではなく、ネットワークの参加者の計算能力と帯域幅に主として依存する。Ｐ２Ｐネットワークは、典型的には、概してアドホックなコネクションを介してノードを接続するために用いられる。そのようなネットワークは多くの目的のために有益である。たとえば、Ｐ２Ｐネットワークは、オーディオ、ビデオ、データあるいはデジタルフォーマットの任意のものを含むコンテンツファイルを共有するためによく用いられており、電話のトラフィックのようなリアルタイムデータもＰ２Ｐ技術を用いて送信することができる。
【０００５】
Ｐ２Ｐアプリケーションは、ピア間の直接通信を容易にするためにＮＡＴを使用することがしばしばある。ユーザは、ＮＡＴを使うことで典型的には、複数のネットワーク接続されたコンピュータに、インターネットにアクセスするための単一の（グローバルまたはルーティング可能な）ＩＰアドレスを共有させることができる。ＮＡＴは直接通信に介入するため、多くの場合、Ｐ２ＰアプリケーションはＮＡＴに起因する接続性の問題を取り扱わなければならない。接続性の問題を克服するのに使われる技術は、しばしば「ＮＡＴ越え（ＮＡＴ通過）」と呼ばれる。ネットワークアドレス変換（ＮＡＴ）（ネットワークマスカレード、ネイティブアドレス変換、ＩＰマスカレードとしても知られる）は、一般的には、ＩＰ（Internet Protocol）パケットがルータまたはファイアウォールを通過するときに、ＩＰパケットの送信元および／または宛先アドレスを書き直すことに関与する。ＮＡＴを用いるたいていのシステムは、プライベートネットワーク上の複数のホストが、単一のパブリックＩＰアドレスを用いてインターネットのようなワイドエリアネットワークにアクセスできるようにするために、このようなアドレスの書き直しをする。
【０００６】
ＮＡＴの利便性と低コストに加えて、完全な双方向接続性がないことは、ある状況では、限界というよりは一つの特徴とみなすことができる。ＮＡＴが、ルータの他方の側にあるホストへの接続を開始するためにローカルネットワーク上のマシンに依存する限りは、外部ホストによって開始された悪意のある活動がローカルホストに到達することを防ぐことができる。このため、ワームを止めることでローカルシステムの信頼性を強化し、スキャンを阻止することでプライバシーを強化できる。多くのＮＡＴ可能なファイアウォールは、提供する保護のコアとしてこのことを用いている。多くのネットワーク管理者はＮＡＴを利便性のある技術であると考えており、ＮＡＴを幅広く用いている。それにもかかわらず、ＮＡＴはホスト間の接続に複雑さをもたらすことがあり、性能面に影響を及ぼしうる。
【０００７】
典型的な構成では、ローカルネットワークは、指定された「プライベート」ＩＰアドレスのサブネットの一つを用い、そのネットワーク上のルータはそのアドレス空間においてプライベートアドレスをもつ。ルータは、単一の「パブリック」アドレス（「オーバーロード」ＮＡＴとして知られる）をもってインターネットに接続するか、インターネットサービスプロバイダ（ＩＳＰ）によって割り当てられた複数の「パブリック」アドレスでインターネットに接続する。トラフィックがローカルネットワークからインターネットに通過するとき、各パケットにおける送信元アドレスは、プライベートアドレスからパブリックアドレスにその場で変換される。ルータは、各アクティブコネクションについての基本データ（特に送信先アドレスとポート）をトラッキング（追跡）する。この内部「トラッキング」データはしばしば「ＮＡＴバインディング」と呼ばれる。リプライがルータに返されるとき、外向き（往路）のフェーズの間に格納されたコネクショントラッキングデータを用いて、内部ネットワーク上のどこにリプライを転送すべきかを判定する。オーバーロードＮＡＴの場合はパケットを逆多重化するためにＴＣＰまたはＵＤＰのクライアントポート番号を用い、複数のパブリックアドレスが利用できる場合はＩＰアドレスとポート番号をパケット返送時に用いる。インターネット上のシステムにとって、ルータ自身はこのトラフィックに対して送信元／宛先に見える。
【０００８】
ＮＡＴ可能なルータの背後にあるノードは、真のエンドツーエンド接続性をもたない（すなわち、内部のネットワークエレメントにパケットをさらに解釈させることを要求することなく、ネットワークのすべての他のノードにパケットを送信することはできない）し、ある種のインターネットプロトコルには参加することができない。外部ネットワークからＴＣＰコネクションの開始を要求するサービス、またはＵＤＰを用いたもののようにステートレスなプロトコルを要求するサービスは、ＮＡＴルータがそのようなプロトコルをサポートする特別な努力をしないならば、ノードにとって混乱をもたらすものであり、入ってくるパケットは宛先に到達することができない。そのようなプロトコルは、参加するホスト間でＮＡＴの一つインスタンス（たとえば、「パッシブモード」ＦＴＰ）を収容することができる。また、ＮＡＴを使うと、たとえば、もしそのようなトンネリングプロトコルによってなされるインテグリティチェックと干渉するようなやり方でＮＡＴがヘッダの値を変更するならば、ＩＰｓｅｃのようなトンネリングプロトコルを複雑にする。
【発明の概要】
【発明が解決しようとする課題】
【０００９】
ネットワークに接続することを望むＩＰ可能なアプリケーションはいずれもＮＡＴに関連する問題に直面する可能性がある。専用のネットワークアプリケーションソフトウェア、特にピアツーピアアプリケーションを走らせるネットワークアプリケーションやデバイスはたいてい、他のアプリケーションと直接の通信を最適に確立するために、自分が属する物理的なネットワークトポロジを独立に判定するように構成されている。これは「ＮＡＴ振る舞いディスカバリ」または「ＮＡＴ振る舞い判定」として一般に知られている。このオペレーションは産業においては周知であるが、いろいろなアプローチが存在する。既存のアプローチは、ＮＡＴ振る舞いを判定するためにしばしば著しく時間がかかる。複数のアプリケーションがＮＡＴディスカバリを行わなければならないならば、既存のＮＡＴディスカバリ技術は問題があろう。
【００１０】
このような文脈のもとで本発明の実施の形態が考えられた。
【課題を解決するための手段】
【００１１】
本発明のある態様は、ネットワーク上で１以上の他のノードと通信するように構成されたノードにおける、ネットワークアドレス変換（ＮＡＴ）越えを支援する方法であって、ａ）当該ノードで１以上のＮＡＴの振る舞いに関する情報を判定し、１以上の他のノードが前記情報を取り出し可能な方法で前記情報を格納するステップ、または、ｂ）１以上の他のノードによって取得された１以上のＮＡＴの振る舞いに関する情報を取り出し、前記１以上のＮＡＴを越えるためにその情報を用いるステップを含むか、あるいはｃ）前記ステップａ）と前記ステップｂ）の両方を含む。
【図面の簡単な説明】
【００１２】
本発明の実施の形態は、添付の図面と併せて、以下の詳細な説明を考慮することによって容易に理解される。
【００１３】
【図１】本発明の実施の形態に係るＮＡＴ振る舞いディスカバリを実装するように構成されたネットワークのブロック図である。
【図２Ａ】ＮＡＴ振る舞いを判定する従来の方法を説明するフロー図である。
【図２Ｂ】本発明の実施の形態に係るＮＡＴ振る舞い判定方法を説明するフロー図である。
【図２Ｃ】本発明の実施の形態に係るＮＡＴ振る舞い判定方法を説明するフロー図である。
【図２Ｄ】本発明の実施の形態に係るＮＡＴ振る舞い判定方法を説明するフロー図である。
【図３Ａ】本発明の別の実施の形態に係るＮＡＴプロキシを用いたＮＡＴ振る舞いディスカバリを実装するように構成されたネットワークのブロック図である。
【図３Ｂ】本発明の別の実施の形態に係るＮＡＴプロキシを用いたＮＡＴ振る舞いディスカバリの方法を説明するフロー図である。
【図４】複数のＮＡＴの背後にあるノードに関わる、本発明の実施の形態に係るＮＡＴ振る舞いディスカバリを説明するブロック図である。
【図５】無線ノードに関わる、本発明の実施の形態の形態に係るＮＡＴ振る舞いディスカバリを説明するブロック図である。
【図６】本発明の実施の形態に係るＮＡＴ振る舞いディスカバリを実装するように構成されたノードのブロック図である。
【発明を実施するための形態】
【００１４】
以下の詳細な説明には、説明のための多くの具体的な詳細事項が含まれるが、それらに対する多くの変更や修正も本発明の技術範囲に含まれることは、当業者であれば誰でも理解するであろう。したがって、以下に説明する本発明の例示的な実施の形態は、クレームされた発明の一般性をなんら損なうことなく、また限定も行うことなく記載されている。
【００１５】
［技術背景］
ＮＡＴを取り扱うアプリケーションにおいて、ＮＡＴが見せる振る舞いのタイプによってＮＡＴを特徴づけることがしばしば有益である。ＳＴＵＮプロトコルは、ネットワークアドレス変換を、フルコーンＮＡＴ、制限付きコーンＮＡＴ、ポート制限付きコーンＮＡＴ、およびシンメトリックＮＡＴとして特徴づけるために使われる。フルコーンＮＡＴは、１対１ＮＡＴとしても知られ、同じ内部ＩＰアドレスおよびポートからのすべてのリクエストを同じ外部ＩＰアドレスおよびポートにマップするものである。外部のホストは、マップされた外部アドレスにパケットを送ることにより、内部のホストにパケットを送ることができる。制限付きコーンＮＡＴでは、同じ内部ＩＰアドレスおよびポートからのすべてのリクエストは同じ外部ＩＰアドレスおよびポートにマップされる。しかし、フルコーンＮＡＴとは違って、外部ホストが内部ホストにパケットを送ることができるのは、内部ホストがその外部ホストにパケットを以前送ったことがある場合に限られる。ポート制限付きコーンＮＡＴまたはシンメトリックＮＡＴは、制限付きコーンＮＡＴに似ているが、制限はポート番号を含む。具体的には、外部ホストが、内部ホストの特定のポートにパケットを送ることができるのは、内部ホストが以前その外部ホストに当該ポートからパケットを送ったことがある場合に限られる。シンメトリックＮＡＴでは、同じ内部ＩＰアドレスおよびポートから特定の宛先ＩＰアドレスおよびポートへのすべてのリクエストは、同じ外部ＩＰアドレスおよびポートにマップされる。もし、同じ内部ホストが、同じ送信元アドレスおよびポートをもつが宛先が異なるパケットを送信するなら、異なるマッピングが使われる。パケットを受信する外部ホストだけがＵＤＰ（Universal Datagram Protocol）パケットを内部ホストに送り返すことができる。
【００１６】
上述の分類は多少役に立たなくなってきている。なぜなら、多くのＮＡＴ実装においてＮＡＴの振る舞いは様々なタイプの間を行ったり来たりするからである。たとえば、多くのＮＡＴ実装はポート保存の設計方針を取っている。ほとんどの通信に対して、そのようなＮＡＴ実装は、内部および外部ポート番号として同じ値を用いる。しかしながら、二つの内部ホストが同じポート番号を用いて同じ外部ホストと通信しようとするならば、第２ホストによって用いられる外部ポート番号はランダムに選択される。そのようなＮＡＴは、あるときは制限付きコーンＮＡＴとして見ることができるが、他のときはシンメトリックＮＡＴとして見ることができる。
【００１７】
ＮＡＴディスカバリとＮＡＴ振る舞い判定はときどきＮＡＴ越えと呼ばれる。ＮＡＴ越えの例は、たとえば米国特許出願公開公報20070076729号に記載されており、参照によりここに組み込む。ＮＡＴ振る舞いディスカバリは時間のかかるオペレーションである。たとえば、ＮＡＴディスカバリはＳＴＵＮと呼ばれるプロトコルを用いて実装される。ＳＴＵＮプロトコルの詳細は、たとえば、ＩＥＴＦ  ＲＦＣ３４８９に記載されており、参照によりここに組み込む。ＳＴＵＮプロトコルでは、ＮＡＴ振る舞いタイプを確立するために、複数のメッセージが中央のＮＡＴディスカバリサーバ（ＳＴＵＮサーバと呼ばれる）に送信され、受信される。ＮＡＴ振る舞いのフィルタリングのゆえに、あるメッセージのトランザクションはタイムアウトするまで（典型的には各トランザクションに対して約１０秒）待たされる。また、信頼できない通信チャネルが存在すると、メッセージは再送される可能性がある。このオペレーションのすべてまたは一部を回避することのできるアプリケーションはより速く開始する。
【００１８】
［協調的ＮＡＴ振る舞いディスカバリ］
本発明の実施の形態では、ローカルネットワーク上のノードは、発見されたＮＡＴ振る舞いとローカルの物理ネットワークトポロジの他の側面についての情報を共有してもよい。さらに、これらのノードは、独立に発見したＮＡＴ振る舞いを受動的に共有するというよりは、さらにＮＡＴ振る舞いを判定するために能動的に協調してもよい。このことは、ＮＡＴディスカバリは上述のように時間がかかるため、重要である。さらに、２以上のアプリケーションがいろいろな振る舞いをもつＮＡＴデバイスを使用しようとするとき、些細でない問題が起こる。これは、たとえば、静的なポートマッピングを特定のローカルポートに対して構成するときに起こる。
【００１９】
本発明の実施の形態によれば、複数のノードが同じＮＡＴの背後にある。ノードの一つが、従来のＮＡＴディスカバリおよび／またはＮＡＴ越えを通してＮＡＴの特性を発見する。このノードは同じＮＡＴの背後にある他のノードとＮＡＴ越え情報を共有する。これによって、ＮＡＴの背後にある他のノードがＮＡＴディスカバリを実行する時間をかけるのを避けることができる。ＮＡＴの背後にあるすべてのノードが通常のようにＮＡＴディスカバリを試みる前に、ＮＡＴ情報は、それらのノードがアクセスできる中央の場所に格納される。
【００２０】
一例として、図１は、本発明の実施の形態に係る協調的ＮＡＴ振る舞いディスカバリを説明するネットワークトポロジを示す。一般に、ＬＡＮ１０１は２以上のノードを含む。たとえば、ノードＡ１０２とノードＢ１０４は、ルータ１０８に接続される。ルータ１０８は、インターネットのようなＷＡＮ１０６に接続する。ルータ１０８にはネットワークアドレス変換（ＮＡＴ）が関連づけられている。ノード１０２、１０４に対して多くの構成が可能であり、それらの構成は本発明の実施の形態の範囲に含まれる。一般に、ノードは、インターネットプロトコル（ＩＰ）を用いてネットワーク上での通信を実装するように構成される。ノードＡ１０２およびノードＢ１０４は、ＩＰ可能なデバイスであるか、異なるデバイスまたは同じデバイス上で動作するＩＰ可能なアプリケーションである。ここで、「ＩＰ可能」という用語は、デバイスが他のホストまたはデバイスと通信するためにＩＰを利用することを意味する。一例として、限定するわけではないが、ＩＰ可能なデバイスまたはアプリケーションは、ＩＰを利用して他のホストまたはデバイスと通信するためのインターネットプロトコルスタックまたは類似のネットワークプロトコルスタックを含む。図１では例示のために二つのノードを示したが、当業者であれば、本発明の実施の形態を２以上のノードで実装することもできることが理解される。
【００２１】
本発明の実施の形態は任意の数のノードを組み込んでもよいことに留意する。一例として、ノードＡ１０２とノードＢ１０４は、ネットワーク可能なデバイスまたはそのようなデバイス上で動作するネットワーク可能なアプリケーションである。そのようなノードは、コンピュータ、ハンドヘルドインターネットブラウザおよび／または電子メールデバイス、ＶｏＩＰ電話機、ビデオゲーム機、ハンドヘルドビデオゲームデバイスなどを含むが、これらに限定しない。メッセージはルータ１０８を介してあるノードから別のノードに伝達される。ＮＡＴはルータ１０８上にハードウェア、ソフトウェア、ファームウェアまたはそれらの組み合わせで実装される。
【００２２】
ノードＡ１０２、ノードＢ１０４およびルータ１０８は、ネットワークプロトコルにしたがって互いに通信するように構成される。一例として、ノードＡ１０２とノードＢ１０４は、（ソフトウェア、ハードウェア、またはその両方の組み合わせのいずれによるものであっても）５つのレイヤ、すなわち、アプリケーションレイヤＡＰＰ、トランスポートレイヤＴＲＡＮＳ、ネットワークレイヤＮＥＴ（しばしばＩＰレイヤとして参照される）、データリンクレイヤＤＬＬ、および物理レイヤＰＨＹＳをもつネットワークプロトコルスタック１０３をもって構成される。これらのレイヤは当業者には周知である。ノード１０２、１０４は典型的には５レイヤすべてを実装する。ルータ１０８は、ネットワークレイヤＮＥＴ、データリンクレイヤＤＬＬおよび物理レイヤＰＨＹＳだけを実装するプロトコルスタックを含む。ある実施の形態では、１以上のルータが５つのプロトコルスタックレイヤすべてを含んでもよい。そのようなルータの一例は、アプリケーションレイヤのデータを検査する「アプリケーションレイヤゲートウエイ」をサポートするファイアウォールである。もっとも、ルータ１０８のプロトコルスタック１０５の例示した構成は、比較的ありふれたものである。
【００２３】
アプリケーションレイヤＡＰＰは、アプリケーションがネットワークサービスにアクセスするレベルを表す。このレイヤは、ファイル転送、データベースアクセスおよび電子メール用のソフトウェアのようなアプリケーションを直接サポートするサービスを表す。アプリケーションレイヤソフトウェアの例として、ＨＬ７、Ｍｏｄｂｕｓ、ＳＩＰ（Session Initiation Protocol）、ＳＳＩ（Simple Sensor Interface Protocol）がある。ＴＣＰ／ＩＰの場合で言えば、アプリケーションレイヤＡＰＰは、ＨＴＴＰ（Hypertext Transfer Protocol）、ＳＩＰ（Session Initiation Protocol）、ＳＭＴＰ（Simple Mail Transfer Protocol）、ＳＭＰＰ（Short Message Peer-to-Peer Protocol）、ＳＮＭＰ（Simple Network Management Protocol）、ＦＴＰ（File Transfer Protocol）、ＴＥＬＮＥＴ（Teletype Network）、ＮＦＳ（Network File System）、ＮＴＰ（Network Time Protocol）、ＲＴＰ（Real-time Transport Protocol）、ＤＨＣＰ（Dynamic Host Configuration Protocol）、およびＤＮＳ（Domain Name System）のようなソフトウェアプロトコルで実装される。アプリケーションレイヤＡＰＰは、たとえばＯＳＩ（Open Systems Interface）プロトコルでは、さらにプレゼンテーションレイヤとセッションレイヤに分割されることがある。プレゼンテーションレイヤは、アプリケーションレイヤからのデータを中間フォーマットに変換する。プレゼンテーションレイヤはまた、データ暗号化のようなサービスを提供することによってセキュリティの問題を管理し、ネットワーク上で転送する必要のあるビット数を減らすためにデータを圧縮してもよい。セッションレイヤによって、異なるコンピュータ上の二つのアプリケーションがセッションを確立し、使用し、終了することができるようになる。セッションレイヤは、あるセッションにおいて二つのコンピュータ間の対話制御を確立し、どちらの側が送信するか、さらに、いつ、どれくらいの期間送信するかを規制する。
【００２４】
トランスポートレイヤＴＲＡＳは、アプリケーションレイヤＡＰＰからのリクエストをサービスし、ネットワークレイヤＮＥＴにサービスリクエストを発行する。あるプロトコルでは、トランスポートレイヤＴＲＡＮＳはまた、誤り認識および回復を取り扱う。送信ホストに対して、トランスポートレイヤはまた、送信のために小さなパケットにする必要があるときは、ロングメッセージを小分けにする。受信ホストに対して、トランスポートレイヤはパケットを元のメッセージに再構築する。受信ホストに対するトランスポートレイヤはまた、受信アクノレッジを送信する。特定のトランスポートレイヤプロトコルには、ＴＣＰ（Transmission Control Protocol）、ＵＤＰ（User Datagram Protocol）およびＳＣＴＰ（Stream Control Transmission Protocol）が含まれ、これらのすべておよびその均等物は当業者に周知である。トランスポートレイヤＴＲＡＮＳは、典型的にはパケットフラグメンテーションをサポートするレイヤである。フラグメンテーションは、メッセージの送信元であるホストのトランスポートレイヤで生じるか、または、ホストとメッセージの意図する受信者間の経路上のいずれかのルータのトランスポートレイヤで生じる。トランスポートレイヤ実装がすべて、エラー認識および回復を扱うとは限られない。たとえば、ＴＣＰはエラー認識および回復を扱うが、ＵＤＰは扱わない。
【００２５】
ネットワークレイヤＮＥＴはメッセージを送信し、論理アドレスおよび名前を物理アドレスに変換する。ネットワークレイヤＮＥＴはまた、送信元から宛先コンピュータへの経路を決定する。ネットワークレイヤはまた、スイッチング、ルーティング、およびデータパケットの輻輳制御のようなトラフィックの問題を管理する。特定のネットワークレイヤプロトコルの例には、ＩＰ（Internet Protocol）、ＩＣＭＰ（Internet Control Message Protocol）、ＩＰｓｅｃ（IP Security）、ＡＲＰ（Address Resolution Protocol）、ＲＩＰ（Routing Information Protocol）、およびＯＳＰＦ（Open Shortest Path First）が含まれるが、これらに限定されない。これらのすべておよび均等物は当業者に周知である。
【００２６】
データリンクレイヤＤＬＬは、物理レイヤＰＨＹＳからの生（raw）ビットをフレーム（データに対する論理的、構造化されたパケット）にパッケージ化する。データリンクレイヤはまた、あるコンピュータから別のコンピュータへ、エラーなしでフレームを転送する責任がある。フレームを送信した後、データリンクレイヤＤＬＬは、受信コンピュータからのアクノレッジを待つ。特定のデータリンクレイヤには、ＰＰＰ（Point-to-Point Protocol）、ＳＬＩＰ（Serial Line Internet Protocol）およびＭＡＣ（Media Access Control）が含まれるが、これらに限定されない。これらのすべておよび均等物は当業者に周知である。データリンクレイヤＤＬＬは典型的にはＭＴＵサイズを制限する。
【００２７】
物理レイヤＰＨＹＳはあるコンピュータから別のコンピュータへビットを送信し、物理メディア上のビットストリームの送信を規制する。このレイヤは、ケーブルがどのようにネットワークアダプタに取り付けられ、ケーブル上でデータを送信するためにどのような伝送技術が使われるかを決める。特定の物理レイヤの例には、ＲＳ−２３２、Ｖ．３５、Ｖ．３４、Ｉ．４３０、Ｉ．４３１、Ｔ１、Ｅ１、１０ＢＡＳＥ−Ｔ、１００ＢＡＳＥ−ＴＸ、ＰＯＴＳ、ＳＯＮＥＴ、ＤＳＬ、８０２．１１ａ、８０２．１１ｂ、８０２．１１ｇ、８０２．１１ｎが含まれるが、これらに限定されない。これらのすべておよび均等物は当業者に周知である。
【００２８】
ノードＡ１０２を起点とするメッセージがアプリケーションレイヤＡＰＰで始まり、物理レイヤＰＨＹＳまでプロトコルスタックを下って進んでいく。メッセージが第２ホスト１０４に到着すると、そのメッセージは物理レイヤＰＨＹＳで受信され、アプリケーションレイヤＡＰＰまでスタックを上って進んでいく。二つのノード１０２、１０４間の経路において、メッセージはルータ１０８の物理レイヤＰＨＹＳで受信され、トランスポートレイヤＴＲＡＮＳまで上っていき、そしてルータ１０８へ伝送するために物理レイヤＰＨＹＳまでスタックを下っていく。このプロセスは、ノードＡ１０２とノードＢ１０４間の経路に沿って、任意のさらなるルータ（図示しない）に対して繰り返される。ピアツーピアの状況では、いったんノードＡ１０２とノードＢ１０４間でコネクションが確立されると、これらのノードはピアツーピアコネクションによって、たとえば、アプリケーションレイヤＡＰＰまたはトランスポートレイヤＴＲＡＮＳで直接通信することができる。
【００２９】
上述のように、ルータ１０８はネットワークアドレス変換器を含む。しかしこれは、本発明のすべての実施の形態で必須ではない。もしルータ１０８がＮＡＴを含むなら、ノードＡ１０２およびノードＢ１０４は、互いにピアツーピアコネクションを確立したり、ＬＡＮ１０１に接続された他のノードやＷＡＮ１０６に接続された他のノードとピアツーピアコネクションを確立するために、ＮＡＴを越えなければならない。ＮＡＴ越え（ＮＡＴ通過）を容易にするために、ノードＡ１０２およびノードＢ１０４はＮＡＴに関する情報１１０を取得して共有する。この情報１１０を取得し共有する方法には多数の方法がある。一例として、一般性を損なうことなく、ノードＡ１０２とノードＢ１０４は、ＮＡＴ越えにおいてそれぞれの試行を通して情報１１０を取得してもよい。ＮＡＴ越えにおけるそのような試行には、ＳＴＵＮサーバ１１２の利用が含まれる。あるいは別の方法として、ノードＡ１０２およびノードＢ１０４はＬＡＮ１０１に接続された他のノードから情報１１０を取得してもよい。
【００３０】
情報１１０は、多数の異なる方法のいずれかにより共有してもよい。たとえば、ノードＡ１０２およびノードＢ１０４は、キャッシュまたは他のメモリロケーションにおいてローカルにこの情報を格納してもよい。ノードＡ１０２およびノードＢ１０４が別々のデバイスであるか、別々のデバイス上のアプリケーションである場合、ローカルに情報を格納することには、各対応デバイスにおける特定のメモリロケーションに情報を格納することが含まれる。ノードＡおよびノードＢが同じデバイスの異なるアプリケーションである場合、ローカルに情報を格納することには、当該デバイスに関連づけられた特定のメモリロケーションに情報を格納することが含まれる。情報１１０がローカルに格納されるならば、ノードＡとノードＢは、情報１１０を取得するためにＮＡＴ越えでのそれぞれの試行に先だって、互いに直接問い合わせをしてもよい。別の実施の形態では、ノードＡ１０２およびノードＢ１０４の両方に共通にアクセス可能であるメモリロケーションに情報１１０を格納してもよい。そのような共通にアクセス可能なメモリロケーションは、ＬＡＮ１０１またはＷＡＮ１０６に接続された別のノードまたはデバイスであってもよい。たとえば、共通にアクセス可能なメモリロケーションは、ＷＡＮ１０６に接続されたデータベースサーバ１１４である。ある実施の形態では、情報１１０は、ルータ１０８によって取得され、ルータ１０８に格納される。これには、ルータ１０８に特別な実装が必要である。
【００３１】
一例として、情報１１０はルータに対するユニークなアドレス、たとえば、ＭＡＣ（Media Access Control）アドレスや内部ＩＰアドレスのようなグローバルにユニークなアドレスを含む。ここで、ハードウェアアドレスまたはアダプタアドレスとしても知られるＭＡＣアドレスは、ほとんどのネットワークアダプタに付けられた準ユニークな識別子である。ＭＡＣアドレスは典型的には特定のネットワークアダプタに対する名前のような役割をする数字である。したがって、たとえば、二つの異なるコンピュータにおけるネットワークカード（またはビルトインネットワークアダプタ）は、異なる名前、すなわちＭＡＣアドレスをもつ。同様に、同じコンピュータにおけるイーサネット（商標または登録商標）アダプタとワイヤレスアダプタは異なるＭＡＣアドレスをもち、ルータの複数のネットワークカードも異なるＭＡＣアドレスをもつ。ＭＡＣアドレスは、グローバルにユニークに設計されたＭＡＣ−４８、ＥＵＩ−４８、ＥＵＩ−６４のような好適なプロトコルにしたがって割り当てられる。
【００３２】
さらに、情報１１０は、もしあるとしたらルータ１０８によって提示されるＮＡＴ振る舞いのタイプに関する情報、および／または、ルータ上の任意のポートがＬＡＮ１０１に接続されたデバイスによって使用されているかどうかに関する情報を含んでもよい。
【００３３】
共有される他のＮＡＴ振る舞い情報の例として、これに限定しないが、（ｉ）ＮＡＴ経由のアクティブセッションの数や（ｉｉ）ＮＡＴ上の集約されたトラフィック負荷がある。さらに、情報１１０には、シンメトリックＮＡＴに対するポート予測のアトミック性を実現するフラグの値が含まれてもよい。このフラグは、ポート予測に対する特定のアトミック性がロックされているかアンロックされているかを示す。アトミックなロックは、シンメトリックＮＡＴ越えにおけるポート予測のためにときどき使われる。もし同じＮＡＴ下で他のノードが予測フェーズの期間に別のＮＡＴバインディングを生成するならば、ポート予測は失敗することがあるため、このロッキングが有益である。
【００３４】
本発明の実施の形態によれば、ノードＡ１０２およびノードＢ１０４は、任意の従来技術によってＮＡＴディスカバリを実装し、これはハードウェア、ソフトウェア、ファームウェア、あるいはこれらの２以上の組み合わせによって実装される。一例として、図２Ａは、ＮＡＴディスカバリの一つのタイプを図示する。図２Ａに示すように、ノードＡ１０２は、開始２０２において、ＳＴＵＮサーバ１１２にＮＡＴ情報を求めるリクエスト２０４を送信し、ＳＴＵＮサーバ１１２はレスポンス２０６を返す。レスポンス２０６は、ノードＡ１０２が背後にいるＮＡＴのタイプに関する情報を含む。その後、ノードＢ１０４は、開始２０８において、同様にリクエスト２１０を送信し、レスポンス２１２を受信する。特にノードＡ１０２およびノードＢ１０４の両方が同じＮＡＴの背後にいるなら、レスポンス２０６、２１２はそれぞれ、ＮＡＴ振る舞いに関する同じまたは類似の情報を含むことに留意する。しかし、ルータ１０８におけるＮＡＴの性質に依存して、ＮＡＴ振る舞いは時間とともに変化することがある。本発明の実施の形態によれば、ＮＡＴ振る舞い情報を共有することで、ＮＡＴ越えを容易にすることができる。
【００３５】
一例として、図２Ｂに示すように、ノードＡ１０２およびノードＢ１０４はＮＡＴ情報１１０を次のように共有する。図２Ａに示すように、ノードＡ１０２は、開始２０２においてＳＴＵＮサーバ１１２にＮＡＴ情報を求めるリクエスト２０４を送信し、ＳＴＵＮサーバ１１２はレスポンス２０６を返信する。レスポンス２０６は、ノードＡ１０２が背後にあるＮＡＴのタイプに関する情報１１０を含む。情報１１０は、ノードＡ１０２においてローカルに格納される。その後、ノードＢ１０４は、開始２０８において、リクエスト２０９をルータ１０８の背後にある１以上の他のノードに送信する。たとえば、図２Ｂに示すように、ノードＢ１０４はノードＡ１０２にリクエスト２０９を送信する。ノードＢ１０４は、どのノードがルータのＮＡＴ振る舞いに関する情報をもっているかを知らないため、ルータ１０８の背後にある他のすべてのノードにリクエスト２０９をブロードキャストすることに留意する。リクエスト２０９を受信するノードのいずれかがＮＡＴ振る舞い情報をもって返答する。この例では、ノードＡ１０２が以前に情報１１０を取得していた。したがって、ノードＡ１０２が、情報１１０またはその情報の有益な部分集合が入ったレスポンス２１１をノードＢ１０４に送信する。他のノードのいずれもがリクエスト２０９に応答しない場合、ノードＢは、たとえば、ＳＴＵＮサーバ２１２にリクエスト２１０を送信し、レスポンス２１２を受信することによって、従来のＮＡＴディスカバリに後退する。レスポンスから取得した情報はローカルに格納され、リクエストの際、他のノードに利用可能になる。
【００３６】
２以上のノードがルータ１０８の振る舞いを決定するために協調してもよいことにさらに留意する。たとえば、図２Ｃに示すように、ノードＡ１０２は、開始２０２において、ＳＴＵＮサーバ１１２にＮＡＴ情報を求めるリクエスト２０４を送信する。ＳＴＵＮサーバ１１２は、ＮＡＴ振る舞い情報１１０を含むレスポンス２０６を返信し、その情報はノードＡ１０２にローカルに格納される。ＮＡＴ振る舞い情報１１０は不完全であるかもしれない。たとえば、それは、ＮＡＴ振る舞いを１以上のありうるタイプに狭めるかもしれない。その後、ノードＢ１０４は、開始２０８において、ルータ１０８の背後にあるノードＡ１０２を含む１以上の他のノードにリクエスト２０９を送信する。リクエスト２０９への応答において、ノードＡ１０２は部分的なレスポンス２１３を送信する。部分的なレスポンス２１３は、ノードＡ１０２が取得できた情報を含む。部分的なレスポンス２１３はまた、ルータ１０８のＮＡＴ振る舞いを特徴づけるためにどのような付加的な情報が必要であるかを示す。ノードＢ１０４はその後、ＳＴＵＮサーバ１１２にリクエスト２１０を送信し、レスポンス２１２を受信する。レスポンス２１２は、ルータ１０８のＮＡＴ振る舞いを特徴づけるのに必要な欠落した情報を提供する。ノードＢ１０４はその後、たとえば、更新レスポンス２１４をルータ１０８の背後にあるノードＡ１０２および／または他のノードに送信することにより、この情報を共有する。
【００３７】
図２Ｃに図示する例では、部分的なレスポンスと更新レスポンスの処理は、ＮＡＴ振る舞いの詳細が完全に決定されるまで続く。これは、ルータ１０８が非決定的振る舞いをもって複数のリクエストに対して外部バインディングを割り当てる場合に特に有益である。
【００３８】
ＮＡＴ振る舞い判定を改善する上で情報１１０の共有が与える影響は小さくない。典型的には、ＳＴＵＮサーバ１１２へのリクエストとＳＴＵＮサーバ１１２からのレスポンスは、ＬＡＮ１０１およびＷＡＮ１０６の両方に関連するレイテンシの影響を受ける。ＬＡＮ１０１上の一つのノードから別のノードへのリクエストは、典型的にはＬＡＮ１０１に関連づけられたレイテンシだけの影響を受ける。ＷＡＮレイテンシは一般的にＬＡＮレイテンシよりもずっと大きい。たとえば、理論的にＷＡＮレイテンシが約１００ミリ秒であり、ＬＡＮレイテンシが約１ミリ秒より小さいとき、ＮＡＴ振る舞い情報１１０をＬＡＮ１０１上のノード間で共有することにより、１００倍以上、ＮＡＴ振る舞い判定を改善することができる。
【００３９】
それに加えて、ＬＡＮ１０１上のノードは、それぞれのノードが自分自身で独立にＮＡＴ振る舞いタイプを決定した後、協調的にＮＡＴ情報を共有してもよい。この場合、判定された振る舞いについてノード間でうわさすることにより、ルータ１０８の振る舞いを事実上、ポート制限からシンメトリックに変えてしまう、悪いローカルポート保存の振る舞いをもつルータを特定することができる。情報１１０の共有は、ルータ１０８の振る舞いの変化を診断するために使われる。情報１１０の共有は、悪いローカルポート保存に関連するＮＡＴの問題を先験的に回避するために使われる。たとえば、ルータ１０８の背後にある複数のノードは、ルータ１０８上のいずれのローカルポートを使いたいかをお互いにブロードキャストすることができる。所与のノード（たとえばノードＡ１０２）は別のノード（たとえばノードＢ１０４）が既に選択されたポートを用いているならば、その選択されたポートを変更することができる。さらに、ノードは、ＬＡＮ１０１のローカルなネットワーク環境の他の予期しない振る舞いの変化についてうわさしてもよい。たとえば、住宅用ＮＡＴは典型的には、ＩＳＰ（コムキャストのようなインターネットサービスプロバイダ）がＤＨＣＰと呼ばれるプロトコルを用いて動的に割り当てた一つのグローバルＩＰアドレスをもつ。ＮＡＴに対して割り当てられた動的ＩＰは期限切れになると、ＩＳＰは別のＩＰアドレスを割り当てることができる。これが起きた場合、ローカルノードがそのようなイベントを検出するのに時間がかかる。あるノードがそのイベントを検出すると、そのノードはブロードキャストを用いて他のノードにそのイベントを通知する。
【００４０】
図２Ｂ〜図２Ｃに図示された実施の形態では、ＮＡＴ関連情報１１０はルータ１０８の背後にある各ノードにローカルに格納された。他の実施の形態では、この情報１１０を、ルータ１０８の背後にあるすべてのノードがアクセス可能なある共通の場所に格納してもよい。上述のように、そのような共通の場所は、共有のデータベースサーバ１１４またはＷＡＮ１０６に接続された類似のノードである。共有のデータベースサーバ１１４は、ＨＴＴＰ（hypertext transfer protocol）のような好適なプロトコルを用いてアクセスできる。
【００４１】
別の方法として、共通の場所はＬＡＮ１０１の一部であるノードであってもよい。たとえば、図２Ｄに示すように、情報１１０はルータ１０８に格納されてもよい。この例では、ノード、たとえばノードＡ１０２は、たとえば開始２０２において、ルータ１０８にＮＡＴ情報リクエスト２０５を送信する。ルータ１０８は、たとえば適当なプログラミングによって、ＳＴＵＮサーバ１１２にリクエスト２０４を送信し、その返信としてレスポンス２０６を受信するように構成される。その後、ルータ１０８は、ノードＡ１０２にレスポンス２０６にもとづいたリプライ２１５を転送する。ルータ１０８はオプションとして、レスポンス２０６からＮＡＴ振る舞い情報１１０を決定し、その情報を、たとえばルータ１０８によってローカルにアクセス可能なメモリに格納してもよい。リプライ２１５は、レスポンス２０６から取得されたＮＡＴ振る舞い情報１１０を含む。あるいは、リプライ２１５はノードＡ１０２にレスポンス２０６を転送することを含んでもよい。それ以降、異なるノードがＮＡＴ振る舞い情報をリクエストしたとき、ルータ１０８は、格納された情報１１０を用いて直接応答する。たとえば、開始２０８において、ノードＢ１０４は、ルータ１０８にＮＡＴ振る舞い情報リクエスト２１６を送信する。応答の際、ルータ１０８は、格納されたＮＡＴ振る舞い情報１１０にもとづいてリプライ２１８を送信する。
【００４２】
図２Ｄに図示した例では、ルータ１０８のアドレスは、ルータの背後にあるすべてのノードに周知であると仮定した。そのような場合、リクエスト２０５、２１６およびリプライ２１５、２１８はブロードキャストする必要はない。さらに、図２Ｄに図示した例では、各ノードとルータ１０８間でただ一つの往復メッセージが送信される。それとは対照的に、従来の状況では、各ノードがＮＡＴのＳＴＵＮサーバと話をするが、それにはしばしば複数の往復メッセージが要求される。それに加えて、ルータ１０８はオプションとして、ＮＡＴのＳＴＵＮサーバ１１２とともにレイジー（lazy）なやり方、すなわち、クライアントからルータに対してリクエストがなされたときにだけ実行するというやり方で振る舞い判定を実行してもよい。もしルータのＮＡＴ振る舞いが決定論的であるなら、これはルータ１０８の初期設定時にも起こる。ＮＡＴデバイスが完全に決定論的な振る舞いをもつ場合は、ルータ振る舞いは周知であるからＮＡＴのＳＴＵＮサーバ１１２との通信を省略し、ルータ１０８の背後にあるノードに直接通信してもよい。
【００４３】
上述のアプローチは、ＵＰｎＰ（Universal Plug and Play）と表面的に類似するように見えるがそれだけではない。本発明の実施の形態は、ＵＰｎＰとは多くの点で異なる。もっとも重要なことは、ＵＰｎＰデバイスがＬＡＮに追加されると、ＵＰｎＰデバイスはＬＡＮ上のコントロールポイントに自分のサービスを通知する。それとは対照的に、本発明の実施の形態では、ＬＡＮ上のノードがコントロールポイント（ルータ上のＮＡＴ）についての情報を見つけ、その情報を他のデバイスが利用できるようにする。
【００４４】
さらに、ＮＡＴ振る舞いの真の標準化が欠けているがために、既存のＵＰｎＰメカニズムは完全には実行可能なものにはならない。特に、ＵＰｎＰは、主に住宅用ルータだけがサポートしているが、他のより大きな規模のルータはサポートしていない。たとえば、客室からのインターネットアクセスサービスを提供するホテルのルータは典型的にはＵＰｎＰをサポートしない。ＵＰｎＰが動作しない別の例は、ＩＳＰが、ある種のサービス、たとえばホットスポットサービスを提供するルータに対してプライベートアドレスを提供する場合である。そのような場合、ノードが取得する外部アドレスは、もっとも近いＵＰｎＰ  ＮＡＴのプライベートアドレスである。ノードは、インターネット上をルーティング可能な現実のグローバルアドレスを取得するためにＳＴＵＮサーバを依然として使う必要がある。さらに、多くの既存ルータは、ＵＰｎＰをサポートしないか、またはＵＰｎＰをサポートする多くのルータに対してＵＰｎＰは作動していない。
【００４５】
本発明の別の実施の形態では、ローカルネットワーク１０１上のデバイスで動作する単一のアプリケーションが、他のアプリケーションに代わって、これらのオペレーションのすべてではないが、多くを実行することができる。このアプリケーションを実行するデバイスは、ＮＡＴプロキシと呼ばれる。もしＮＡＴプロキシが一つのデバイス上で動作しているだけであるなら、異なる内部ＩＰアドレスへのバインディングに関連したＮＡＴの問題を究明することはできないであろう。このことは、二つのデバイス上でこのアプリケーションの少なくとも二つのインスタンスを実行することにより克服することができる。もっとも、これをすることで、利便性の多くを失うことになる。
【００４６】
ＮＡＴプロキシを利用する実施の形態は、図３Ａと図３Ｂから理解できる。図３Ａに示すように、ローカルネットワーク１０１は、ノードＡ１０２に関連づけられた第１ＮＡＴプロキシ１１６と、ノードＢ１０４に関連づけられた第２ＮＡＴプロキシ１１８を含む。ＮＡＴプロキシ１１６、１１８はルータ１０８に接続されている。ＮＡＴプロキシは、ＮＡＴ振る舞い情報１１０を取得するために、ときどきＳＴＵＮサーバ１１２に問い合わせし、ノードＡ１０２、ノードＢ１０４、およびルータ１０８の背後にある他の任意のノードとその情報を共有する。一例として、図３Ｂに示すように、第１ＮＡＴプロキシ１１６は、ＳＴＵＮサーバ１１２にリクエスト２０４を送信し、返信としてレスポンス２０６を受信する。同様に、第２ＮＡＴプロキシ１１８は、ＳＴＵＮサーバ１１２にリクエスト２２４を送信し、返信としてレスポンス２２６を受信する。ＮＡＴプロキシ１１６、１１８は、レスポンス２０６、２２６からＮＡＴ振る舞い情報１１０を全体的にあるいは部分的に取り出す。情報１１０が取り出された後、ルータ１０８に接続されたノードの一つが、ＮＡＴプロキシ１１６、１１８にＮＡＴ振る舞い情報１１０を問い合わせする。たとえば、ノードＡ１０２はＮＡＴプロキシ１１６、１１８にリクエスト２２８をブロードキャストし、ＮＡＴプロキシ１１６、１１８が返信としてレスポンス２３０、２３２を送信する。
【００４７】
ＮＡＴプロキシアプリケーションは、リクエストしているアプリケーションと同じ物理デバイスノード上にともに位置してもよい。ノードは、任意のＮＡＴプロキシから一つのレスポンスを受信するだけでよい。ＮＡＴプロキシを階層的な方法で実行することができる。階層的な方法では、ただ一つのプロキシがローカルネットワークにおいてレスポンスを送信する責任をもつ。これには、そうでなければ冗長であるはずのネットワーク構成内で単一障害ポイントを作ってしまうという不運な副作用がある。さらに、図３Ａおよび図３Ｂに関して述べたＮＡＴプロキシ技術を図２Ｃに関して上述した部分的レスポンス／更新技術と組み合わせて、プロキシノード間でＮＡＴ振る舞いタイプの協調的でグローバルな理解に達するようにしてもよい。
【００４８】
これまでの議論においては、各ノードが単一のＮＡＴの背後にあることを仮定した。ネットワーク構成によっては、ノードが２以上のＮＡＴの背後に位置することもありうる。本発明の実施の形態を修正して、所与のノードが２以上のＮＡＴの背後にあるような状況に対処できるようにしてもよい。たとえば、図４に示すように、ノードＡ１０２とノードＢ１０４の両方がＮＡＴ１の背後にある。しかし、ノードＢ１０２はまた、ＮＡＴ２〜ＮＡＴ  Ｎの背後にもある。この例では、ＮＡＴ１は、ローカルエリアネットワーク１０１とワイドエリアネットワーク１０６間のゲートウエイルータの一部である。ＮＡＴ１の存在と振る舞いについての情報は、ＷＡＮ１０６と通信するために、ノードＡ１０２とノードＢ１０４の両方にとって有益である。さらに、ＮＡＴ１とＮＡＴ２〜ＮＡＴ  Ｎについての情報は、ノードＡ１０２とノードＢ１０４が互いに通信する状況に対して有益である。
【００４９】
一例として、ノード１０２、１０４、１２０は、自分がいくつのＮＡＴの背後にあるかを判定する。データグラムのヘッダ内のあるフィールドを使用してこの判定を行う。このフィールドは、データグラムの宛先に行く途中で遭遇する各ＮＡＴデバイスにおいて減らされる値をもつ。一例として、そのようなフィールドはＴＴＬ（time to live）フィールドである。ＩＰｖ４のコンテキストでは、ＴＴＬはＩＰ（Internet Protocol）ヘッダの８ビットフィールドのことである。これは２０ある内の９番目のオクテットである。ＴＴＬ値は、ＩＰデータグラムがインターネットシステム内に存在することができる時間の上限と考えることができる。ＴＴＬフィールドはデータグラムの送信者によって設定され、宛先への経路上の各ホストによって減らされる。データグラムが宛先に到着する前にＴＴＬフィールドがゼロに達するなら、データグラムは破棄され、ＩＣＭＰ（Internet Control Message Protocol）エラーデータグラム（タイプ１１−時間超過）が送信者に返送される。ＴＴＬフィールドは従来、配達されないデータグラムがインターネットシステム上で循環し続け、そのような「不死」のデータグラムが多数あることでシステムが最終的には圧倒されてしまう状況を避けるために使われる。データグラムを通過させる各ホストは、少なくとも１単位だけＴＴＬを減らさなければならないが、ＴＴＬは、理論上、秒単位で測定してもよい。実際は、ＴＴＬフィールドは各ホップで１だけ減らされる。この実施の仕方を反映して、このフィールドはＩＰｖ６ではホップリミットと名付けられている。ＩＣＭＰエラーデータグラムは、データグラムがタイミングアウトの前に到着した最後のホストを特定する。tracerouteと呼ばれるツールは、ＩＣＭＰエラーメッセージを用いて、遠隔にある終端ノードまでの経路を検出する。ＴＴＬあるいはホップリミットフィールドは、tracerouteコマンドで使われたのと類似したやり方でノードＡ１０２とノードＢ１０４間にあるＮＡＴのアドレスを判定するために使われる。
【００５０】
本発明の実施の形態では、ノードＡ１０２とノードＢ１０４と他のノード１２０は、ＮＡＴ１とＮＡＴ２〜Ｎの振る舞いに関する情報１１０を共有する。ノード１０２、１０４、１２０は、たとえば、図２Ａ〜２Ｄに関して上述したようなＮＡＴ情報１１０を取得し、ＬＡＮ１０１上のノードすべてがアクセス可能な方法で情報を格納する。一例として、情報１１０は、共通のデータベースサーバまたはＳＴＵＮサーバのようなサーバ１１２にキャッシュされる。一例として、サーバ１１２は、ＬＡＮ１０１とＷＡＮ１０６の間にあってもよい。ＮＡＴ１とＮＡＴ２〜Ｎをホストするデバイスが自分自身についての情報を集め、その情報をノード１０２、１０４、１２０と共有してもよいことにさらに留意する。
【００５１】
本発明の実施の形態は、無線ノードでＮＡＴ振る舞いディスカバリを実装するために用いることができる。たとえば、図５に示すように、無線ネットワーク５００は、第１、第２および第３無線アクセスポイントＷＡＰ１、ＷＡＰ２およびＷＡＰ３を含み、これらは地理的に分散した場所にある。無線アクセスポイントＷＡＰ１、ＷＡＰ２およびＷＡＰ３は、たとえば、それぞれネットワークアドレス変換器ＮＡＴ１、ＮＡＴ２およびＮＡＴ３を含む無線ルータによって実装される。無線アクセスポイントＷＡＰ１、ＷＡＰ２およびＷＡＰ３は、対応するサービスエリア５０２、５０４、５０５によって特徴づけられる。無線ノード５０７は、自分がこれらのサービスエリアの一つの中にいるならば、ネットワーク５０１にアクセスできる。一例として、無線ノード５０７は、無線ネットワーク通信用に構成された任意のデバイスであってもよい。そのようなデバイスの例には、これに限らないが、ラップトップコンピュータ、ポータブルビデオゲームデバイス、ポータブル音楽ダウンロードデバイス、ポータブルＶｏＩＰ（Voice over Internet protocol）デバイス、およびブラックベリー（登録商標）のようなポータブルインターネットブラウザまたは電子メールデバイスが含まれる。ブラックベリー（登録商標）は、カナダ国オンタリオ州ワーテルローのリサーチ・イン・モーション社の登録商標である。それに加えて、そのようなデバイスには、ＶｏＩＰ、インターネット、電子メールおよび音楽ダウンロードのような２以上の機能を組み込んだ無線デバイスが含まれる。そのようなデバイスの例は、カリフォルニア州クパチーノのアップル社のｉＰｈｏｎｅ（商標または登録商標）である。
【００５２】
無線アクセスポイントＷＡＰ１、ＷＡＰ２、ＷＡＰ３は、ルータ５０８を介してワイドエリアネットワーク５０６に接続される。さらに、ルータ５０８と無線アクセスポイントＷＡＰ１、ＷＡＰ２、ＷＡＰ３のそれぞれとの間に他のノードＡ、Ｂ、Ｃが接続されている。ネットワークアドレス変換器ＮＡＴ１、ＮＡＴ２、ＮＡＴ３に関する情報５１０は、ルータ５０８に接続された中央でアクセス可能なキャッシュ５１２に格納される。情報５１０を取得し、キャッシュする多数の異なる方法がある。たとえば、無線ノード５０７は、図２Ｂまたは図２Ｃに示すように、従来のＮＡＴ越えを通して情報５１０の一部を収集し、それを他のノードと共有する。また、ルータ５０８または無線アクセスポイントＷＡＰ１、ＷＡＰ２、ＷＡＰ３は、図２Ｄに関して上述したように情報５１０を取得する。さらに、他のノードＡ、Ｂ、Ｃは、図３Ａおよび図３Ｂに関して上述したようにプロキシノードとして動作することで情報のすべてまたは一部を取得する。さらに、情報が単一の場所５１２に格納されているものとして図示されているが、別の方法として、情報５１０をネットワーク５０１に接続されたノード間に分散させてもよい。ある実施の形態では、無線ネットワークアドレス変換器ＮＡＴ１、ＮＡＴ２、ＮＡＴ３に関する情報を対応する無線アクセスポイントＷＡＰ１、ＷＡＰ２、ＷＡＰ３にローカルに格納してもよい。情報５１０は、各ＮＡＴまたは無線アクセスポイントに対する地理的場所を含むことに留意する。情報５１０はまた、ＮＡＴまたは無線アクセスポイントに関する他の一般情報を含む。そのような情報には、これに限らないが、地方のレストラン、天気、ネットワーク５０１に接続された他のデバイスのアイデンティティ、特定の無線アクセスポイントを訪れた回数、およびその他の一般情報が含まれる。無線デバイスは、無線アクセスポイントＷＡＰ１、ＷＡＰ２、ＷＡＰ３のいずれかを通してネットワーク５１０にアクセスする際、この情報にアクセスしてもよい。
【００５３】
情報５１０の共有を通して、無線ネットワーク５０１上のサービス品質が強化される。たとえば、無線ノード５０７はあるサービスエリアから別のサービスエリアに移動する。たとえば、第１無線アクセスポイントＷＡＰ１に対するサービスエリア５０２から、第２無線アクセスポイントＷＡＰ２に対するサービスエリア５０４に移動する。無線デバイス５０７が第２無線アクセスポイントＷＡＰ２のような近傍の無線アクセスポイントに対するＮＡＴ情報を要求することができるように情報５１０は構成される。ある実施の形態では、たとえば、ＧＰＳデータまたは無線信号強度から、無線デバイスの移動の一般的な方向を判定し、この方向を用いて、デバイスがどの無線アクセスポイントに遭遇する可能性が高いかを推定するようにデバイス５０７はプログラムされる。
【００５４】
本発明の実施の形態は、ＮＡＴが移動する状況にも適用できる。たとえば、無線アクセスポイントＷＡＰ１、ＷＡＰ３、ＷＡＰ３を車に搭載してもよい。無線ノード５０７は、ＮＡＴが移動性のものであるかどうかを、たとえば地理的情報から判定してもよい。たとえば、無線ノード５０７は、ＧＰＳＳ（global positioning satellite system）受信機のような地理位置測定システムを含んでもよい。そのようなシステムを用いて、ノード５０７は、自分がＮＡＴに遭遇したとき、自分の位置を特定してもよい。ノードが十分遠くに離れた二つの異なる位置にあるときにノード５０７が同じＮＡＴに遭遇するならば、ノードはそのＮＡＴは動いたものと推測する。
【００５５】
上述のように、本発明の実施の形態に関連して用いることのできる、ノードに対する多数の異なる構成がある。たとえば、一般性を損なうことなく、図６は、本発明の実施の形態に係るＮＡＴ振る舞いディスカバリを実装するのに適したノード６００の構成を図示するブロック図である。一例として、一般性を損なうことなく、ノード６００は、本発明の実施の形態を実施するのに適した、パーソナルコンピュータ、ビデオゲーム機、携帯情報端末、無線デバイス、または他のデジタルデバイスのようなコンピュータシステムとして実装される。ある実施の形態では、ノード６００はルータである。ノード６００は、ソフトウェアアプリケーションと、任意であるがオペレーティングシステムとを走らせるように構成される中央演算処理装置（ＣＰＵ）６０１を含む。ＣＰＵ６０１は、１以上のプロセッシングコアを含む。一例として、これに限定しないが、ＣＰＵ６０１は、セルプロセッサのような並列プロセッサモジュールである。セルプロセッサアーキテクチャの例は、「セルブロードバンドエンジンアーキテクチャ」に詳細が記述されている。これは、ＩＢＭ、ソニー・コンピュータエンタテインメント、東芝の２００５年８月８日付けの著作権で保護されており、コピーはｈｔｔｐ：／／ｃｅｌｌ．ｓｃｅｉ．ｃｏ．ｊｐ／からダウンロード可能であり、その内容全体を参照によってここに組み入れる。
【００５６】
ノード６００において、メモリ６０２がＣＰＵ６０１に接続されている。メモリ６０２はＣＰＵ６０１が用いるアプリケーションおよびデータを格納する。メモリ６０２は集積回路（たとえば、ＲＡＭ、ＤＲＡＭ、ＲＯＭその他）の形態であってもよい。コンピュータプログラム６０３は、プロセッサ６０１で実行可能なインストラクションの形式でメモリ６０２に格納される。プログラム６０３の命令は、たとえば上述のようなＮＡＴ振る舞いディスカバリを実装するように構成される。特に、プログラム６０３は、実行されると、１以上のＮＡＴの振る舞いに関する情報を判定し、当該ノード６００または１以上の他のノードがその情報を取り出せるような方法でその情報を格納する動作をノード６００に実行させるインストラクションである。さらに、プログラム６０３は、１以上の他のノードによって取得された１以上のＮＡＴの振る舞いに関する情報を取得し、１以上のＮＡＴを越えるためにその情報を用いるように構成される。
【００５７】
メモリ６０２は、プログラム６０３によって生成される、または利用されるデータを含む。特に、メモリ６０２は、１以上のＮＡＴに関する情報６１０を含む。具体的には、情報６１０は、これに限定しないが、（ｉ）ＮＡＴ振る舞い情報（たとえば、ＮＡＴがフルコーン、制限付きコーン、ポート制限付きコーン、シンメトリックであるかどうか）であって、ＮＡＴ振る舞いにポート保存が含まれるか否かを含む情報、（ｉｉ）利用可能なＳＴＵＮサーバアドレス、および（ｉｉｉ）共通データベースアドレスを含む。情報６１０は、他のノードによってアクセス可能なメモリ６０２のある部分に格納される。
【００５８】
ノード６００はさらに、アプリケーションおよびデータ用の不揮発性のストレージを提供するストレージデバイス６１５を備えてもよい。一例としてストレージデバイス６１５は、固定ディスクドライブ、リムーバブルディスクドライブ、フラッシュメモリデバイス、テープドライブ、ＣＤ−ＲＯＭ、ＤＶＤ−ＲＯＭ、ブルーレイ（商標または登録商標）、ＨＤ−ＤＶＤ、ＵＭＤ、その他の光学式ストレージデバイスであってもよい。ノード６００はまた、コンピューティングシステムにおいて一般的に使われる周知のサポート機能６１０を備えてもよい。そのようなサポート機能には、入出力（Ｉ／Ｏ）装置６２１、電源（Ｐ／Ｓ）６２２、クロック（ＣＬＫ）６２３およびキャッシュ６２４のような特徴を含んでもよい。
【００５９】
１以上のユーザからのユーザ入力をノード６００に伝えるために１以上のユーザ入力デバイス６２５が用いられてもよい。たとえば、１以上のユーザ入力デバイス６２５が、入出力装置６２１を介してノード６００に接続されてもよい。適当な入力デバイス６２０の例には、キーボード、マウス、ジョイスティック、タッチパッド、タッチスクリーン、ライトペン、スチル／ビデオカメラ、および／またはマイクロホンが含まれる。Ａ／Ｖチャットの特定の例において、ユーザインタフェースデバイス６２５がカメラとマイクロホンの両方を含むことが望ましい。
【００６０】
ネットワークインターフェース６２６によって、ノード６００は、電子通信ネットワーク６２７を介して他のコンピュータシステムと通信することができる。一例として、ネットワーク６２７はワイドエリアネットワークであり、ノード６００はローカルエリアネットワーク上にある。ノードは、ネットワークアドレス変換ＮＡＴを含むルータ６０８を介してネットワーク６２７と相互作用する。ある実施の形態では、ノード６００自身が、たとえば図２Ｄに関して上述したようなルータである。ネットワークインターフェース６２６は、ローカルエリアネットワークやインターネットのようなワイドエリアネットワーク上の有線または無線通信を含む。ノード６００は、ネットワーク６２７上で１以上のメッセージパケット６２８によって、データの送受信および／またはファイルのリクエストを行う。一例として、ネットワークインターフェース６２６は、ネットワークカード、ネットワークアダプタ、またはイーサネット（商標または登録商標）カードのようなネットワークインタフェースカード（ＮＩＣ）を含むか、それらの一部である。ネットワークインターフェース６２６は、ノード６００がネットワーク６２７上で通信することを可能にするように設計されたコンピュータハードウェアを含む。ネットワークインターフェース６２６は、ネットワーキングメディアへの物理アクセスを提供する。たとえば、ＭＡＣアドレスの使用を通じて、低レベルのアドレスシステムを提供する。その結果、インターネットプロトコルスタックに関して言えば、ネットワークインターフェース６２６は、物理レイヤデバイスとデータリンクレイヤデバイスの両方であるとみなすことができる。
【００６１】
ノード６００は、グラフィックプロセッシングユニット（ＧＰＵ）６３５とグラフィックスメモリ６４０とを有するグラフィックス・サブシステム６３０を更に含む。グラフィックスメモリ６４０は、出力イメージの各画素に対する画素データを格納するために使われるディスプレイメモリ（例えばフレーム・バッファ）を含む。グラフィックスメモリ６４０は、ＧＰＵ６３５と同じデバイス内に統合されてもよく、別のデバイスとしてＧＰＵ６３５に結合されてもよく、メモリ６０２内に実装されてもよい。画素データは、ＣＰＵ６０１から直接グラフィックスメモリ６４０に提供される。あるいは、ＣＰＵ６０１は、所望の出力イメージを定めるデータやインストラクションをＧＰＵ６３５に提供する。ＧＰＵ６３５はそれを用いて出力イメージの画素データを生成する。所望出力イメージを定めるデータやインストラクションは、メモリ６０２やグラフィックスメモリ６４０に格納される。ある実施の形態では、ＧＰＵ６３５は、例えば、適当なプログラミングまたはハードウェア・コンフィギュレーションによって構成され、シーンのためにジオメトリ、ライティング（照明）、シェーディング、テクスチャリング、モーション、および／またはカメラパラメータを定めるインストラクションとデータから出力イメージに対する画素データを生成するための３Ｄレンダリング機能をもつ。ＧＰＵ６３５は、シェーダプログラムを実行することができるプログラム可能な実行ユニットを更に含む。
【００６２】
グラフィックス・サブシステム６３０は、表示装置６５０で表示されるべきグラフィックスメモリ６４０からのイメージに対する画素データを周期的に出力する。表示装置６５０は、コンピュータシステム６００からの信号に応じてビジュアル情報を表示することができる任意のデバイスであり、ＣＲＴ、ＬＣＤ、プラズマ、およびＯＬＥＤディスプレイを含む。ノード６００は、表示装置６５０にアナログまたはデジタル信号を提供する。一例として、表示装置６５０は、テキスト、数字、グラフィカルシンボル、または画像を表示するＣＲＴまたはフラットパネルスクリーンを含む。さらに、ノード６００は、可聴もしくは検知可能な音を出す１以上のオーディオスピーカー６５２を含んでもよい。そのような音の生成を容易にするために、ノード６００は、ＣＰＵ６０１、メモリ６０２、および／またはストレージ６１５によって提供されたインストラクションおよび／またはデータからアナログまたはデジタル音声出力を生成するために適したオーディオプロセッサ６５５を更に含む。Ａ／ＶチャットまたはＶｏＩＰ（Voice over Internet Protocol）のようなアプリケーションの場合は、ノード６００がグラフィカル表示装置６５０およびオーディオスピーカー６５２を含むことが望ましい。
【００６３】
ＣＰＵ６０１、メモリ６０２、サポート機能６２０、データストレージ６１５、ユーザ入力デバイス６２５、ネットワークインターフェース６２６、グラフィックス・サブシステム６３０、スピーカー６５２、およびオーディオプロセッサ６５５を含むノード６００の構成要素は、１以上のデータバス６６０を介して互いに機能的に接続されている。これらの構成要素は、ハートウェア、ソフトウェア、ファームウェア、あるいはこれらの２以上の組み合わせで実装される。
【００６４】
本発明の実施の形態は、ＮＡＴデバイス（ネットワークアドレス変換を実行するルータ）に関連するネットワーキング配備における主要問題を解決する。十分に特定された振る舞いをするルータを用いてＮＡＴ振る舞い情報のディスカバリと分配を中央集権的な方法で実装してもよい。個々のアプリケーションの状態をそのようなルータで十分に収集することができないなら、機能性のある部分が失われることもありうる。しかしながら、この機構に追加をすれば、この欠陥を補償することができる。もっとも、それに関連したオーバーヘッドを生じるであろうが。
【００６５】
本発明の実施の形態では、共通のＮＡＴの背後にある、本来は別個のピアネットワークノードが互いに協調して、非集中的な方法でＮＡＴ越えの問題を解決することもできる。ローカルネットワーク上の複数のノードの協調に関わるいろいろなＮＡＴデバイスの振る舞いから起こりうる問題の全体に対する解決は存在しない。
【００６６】
本発明の好ましい実施の形態を完全な形で説明してきたが、いろいろな代替物、変形、等価物を用いることができる。したがって、本発明の範囲は、上記の説明を参照して決められるものではなく、請求項により決められるべきであり、均等物の全範囲も含まれる。ここで述べた特徴はいずれも、好ましいかどうかを問わず、他の特徴と組み合わせてもよい。請求項において、明示的に断らない限り、各項目は１またはそれ以上の数量である。請求項において「〜のための手段」のような語句を用いて明示的に記載する場合を除いて、請求項がミーンズ・プラス・ファンクションの限定を含むものと解してはならない。
【図１】
2010535004.tif 000003
【図２Ａ】
2010535004.tif 000004
【図２Ｂ】
2010535004.tif 000005
【図２Ｃ】
2010535004.tif 000006
【図２Ｄ】
2010535004.tif 000007
【図３Ａ】
2010535004.tif 000008
【図３Ｂ】
2010535004.tif 000009
【図４】
2010535004.tif 000010
【図５】
2010535004.tif 000011
【図６】
2010535004.tif 000012
【国際調査報告】
2010535004.tif 000013