(57)【要約】  中間ノードは、セッションにおいてユニークなセッション識別子を有している複数のパケットのうちの先行パケットを取得し、少なくとも中間ノードを識別するため、また考えられる転送関連付けに関して、中間ノードによって割り当てられた送信元ポート番号および宛先ポート番号を識別するために、先行パケットを変更し、またＩＰネットワークに対する中間ノード電子出力インタフェースを介して、先行パケットを宛先ノードに転送する。また中間ノードは、ＩＰネットワークと通信する中間ノード入力インタフェースを介して、次ノード識別子を有している１つ次のノードから逆方向メッセージを受信することができる。中間ノードおよび１つ次のノードのいずれも、中間ノード識別子、次ノード識別子、中間ノードによって割り当てられた送信元ポート番号および宛先ポート番号の間の関連付けを形成する。この関連付けは、中間ノードに関する転送関連付けの一部であり、かつ１つ次のノードに関する戻り関連付けの一部である。
2018525941.tif 000002
【特許請求の範囲】
【請求項１】
ＩＰネットワークにおける起源ノードから宛先ノードへとセッションのパケットを案内するためのパケットルーティング方法において、
前記方法は、
中間ノード識別子を有している中間ノードが、１つのセッションにおける複数のパケットのうちの、本来の送信元アドレス、本来の送信元ポート番号、本来の宛先アドレス、および本来の宛先ポート番号から成る５組の情報を含んでいる先行パケットを取得すること、
前記先行パケットにおける前記５組の情報を基礎とする戻り関連付け情報をメモリに記憶すること、
前記セッションに関して、次ノード識別子を有している１つ次のノードを特定すること、
前記セッションに送信元ポート番号および宛先ポート番号を割り当てること、
前記セッションに関して、前記次ノード識別子、前記割り当てられた送信元ポート番号および前記割り当てられた宛先ポート番号を含んでいる、転送関連付け情報を記憶すること、
前記送信元アドレスとしての前記中間ノード識別子、前記宛先アドレスとしての次ノードアドレス、割り当てられたセッション送信元ポート番号、割り当てられたセッション宛先ポート番号、および本来のプロトコル識別子を含むように、かつ前記本来の送信元アドレス、前記本来の送信元ポート番号、前記本来の宛先アドレス、および前記本来の宛先ポート番号をメタデータとして含むように、前記先行パケットを変更すること、
前記変更された先行パケットを、前記ＩＰネットワークと通信する、該ＩＰネットワークとの中間ノード電子出力インタフェースを介して、前記１つ次のノードに転送すること、を含む、
パケットルーティング方法。
【請求項２】
前記先行パケットは、本来の先行パケットであり、前記本来の送信元アドレス、前記本来の送信元ポート番号、前記本来の宛先アドレス、および前記本来の宛先ポート番号を、前記本来の先行パケットのヘッダフィールドにおいて受信する、
請求項１記載のパケットルーティング方法。
【請求項３】
前記先行パケットは、転送先行パケットであり、前記本来の送信元アドレス、前記本来の送信元ポート番号、前記本来の宛先アドレス、および前記本来の宛先ポート番号を、メタデータとして、前記転送先行パケットにおいて受信する、
請求項１記載のパケットルーティング方法。
【請求項４】
前記セッションに関して前記１つ次のノードを特定することは、前記本来の宛先アドレスに基づいた、前記宛先ノードに関するルーティング情報および次ノード情報を有しているルーティング情報ベースにアクセスすることを含む、
請求項１記載のパケットルーティング方法。
【請求項５】
さらに、
前記中間ノードが、前記セッションにおける前記複数のパケットのうちの後続パケットを取得すること、
前記転送関連付け情報に基づいて、前記パケットを変更すること、
前記変更されたパケットを転送すること、を含む、
請求項１記載のパケットルーティング方法。
【請求項６】
さらに、
前記中間ノードが、前記セッションに関連付けられた戻りパケットを取得すること、
前記戻り関連付け情報に基づいて、前記戻りパケットを変更すること、
前記変更された戻りパケットを転送すること、を含む、
請求項１記載のパケットルーティング方法。
【請求項７】
前記中間ノードは、ルーティングデバイスまたはスイッチングデバイスを含む、
請求項１記載のパケットルーティング方法。
【請求項８】
前記変更された先行パケットの宛先が規定されており、それによって、前記変更された先行パケットが転送された後、かつ前記１つ次のノードが前記先行パケットを受信する前に、少なくとも１つのネットワークデバイスが前記変更された先行パケットを受信する、
請求項１記載のパケットルーティング方法。
【請求項９】
ＩＰネットワークにおける起源ノードから宛先ノードへとセッションのパケットを案内するための、中間ノード識別子を有している中間ルーティングデバイスにおいて、
前記ルーティングデバイスは、
前記ＩＰネットワークを介してＩＰパケットを送信および受信するための複数の通信インタフェースと、
セッション状態情報を記憶するためのメモリと、
前記複数の通信インタフェースと機能的に接続されており、かつ第１の通信インタフェースを介して受信したセッションにおける複数のパケットのうちの、本来の送信元アドレス、本来の送信元ポート番号、本来の宛先アドレス、および本来の宛先ポート番号から成る５組の情報を含んでいる先行パケットを識別するように構成されているパケット識別器と、
前記パケット識別器と機能的に接続されているパケット変更器であって、（ａ）前記先行パケットにおける前記５組の情報を基礎とする戻り関連付け情報をメモリに記憶し、（ｂ）前記セッションに関して、次ノード識別子を有している１つ次のノードを特定し、（ｃ）前記セッションに送信元ポート番号および宛先ポート番号を割り当て、（ｄ）前記セッションに関して、前記次ノード識別子、前記割り当てられた送信元ポート番号および前記割り当てられた宛先ポート番号を含んでいる、転送関連付け情報を記憶し、（ｅ）前記送信元アドレスとしての前記中間ノード識別子、前記宛先アドレスとしての次ノードアドレス、前記割り当てられたセッション送信元ポート番号、前記割り当てられたセッション宛先ポート番号、および本来のプロトコル識別子を含むように、かつ前記本来の送信元アドレス、前記本来の送信元ポート番号、前記本来の宛先アドレス、および前記本来の宛先ポート番号をメタデータとして含むように、前記先行パケットを変更する、ように構成されているパケット変更器と、
前記パケット変更器および電子出力インタフェースと機能的に接続されており、かつ第２の通信インタフェースを介して、前記変更された先行パケットを前記宛先ノードに転送するように構成されているルータと、を含んでいる、
中間ルーティングデバイス。
【請求項１０】
前記先行パケットは、本来の先行パケットであり、前記本来の送信元アドレス、前記本来の送信元ポート番号、前記本来の宛先アドレス、および前記本来の宛先ポート番号を、前記本来の先行パケットのヘッダフィールドにおいて受信する、
請求項９記載の中間ルーティングデバイス。
【請求項１１】
前記先行パケットは、転送先行パケットであり、前記本来の送信元アドレス、前記本来の送信元ポート番号、前記本来の宛先アドレス、および前記本来の宛先ポート番号を、メタデータとして、前記転送先行パケットにおいて受信する、
請求項９記載の中間ルーティングデバイス。
【請求項１２】
前記本来の宛先アドレスに基づいた、前記宛先ノードに関するルーティング情報および次ノード情報を有しているルーティング情報ベースをさらに含み、
前記パケット変更器は、さらに、前記ルーティング情報ベースにアクセスすることによって、前記セッションに関する前記１つ次のノードを特定するように構成されている、
請求項９記載の中間ルーティングデバイス。
【請求項１３】
前記パケット識別器は、さらに、前記第１の通信インタフェースを介して、前記セッションにおける前記複数のパケットのうちの後続パケットを取得するように構成されており、
前記パケット変更器は、さらに、前記転送関連付け情報に基づいて、前記パケットを変更するように構成されており、
前記ルータは、さらに、前記第２の通信インタフェースを介して、前記変更されたパケットを前記宛先ノードに転送するように構成されている、
請求項９記載の中間ルーティングデバイス。
【請求項１４】
前記パケット識別器は、さらに、前記第２の通信インタフェースを介して、前記セッションに関連付けられた戻りパケットを取得するように構成されており、
前記パケット変更器は、さらに、前記戻り関連付け情報に基づいて、前記戻りパケットを変更するように構成されており、
前記ルータは、さらに、前記第１の通信インタフェースを介して、前記変更された戻りパケットを前記起源ノードに転送するように構成されている、
請求項９記載の中間ルーティングデバイス。
【請求項１５】
コンピュータシステムにおいて実行されると、ＩＰネットワークにおいて起源ノードから中間ノードを介して宛先ノードへとセッションのパケットを案内するための方法を実現する命令がエンコードされている、有形の非一時的なコンピュータ使用可能媒体を含むコンピュータプログラム製品において、
前記方法は、
中間ノード識別子を有している前記中間ノードが、１つのセッションにおける複数のパケットのうちの、本来の送信元アドレス、本来の送信元ポート番号、本来の宛先アドレス、および本来の宛先ポート番号から成る５組の情報を含んでいる先行パケットを取得すること、
前記先行パケットにおける前記５組の情報を基礎とする戻り関連付け情報をメモリに記憶すること、
前記セッションに関する、次ノード識別子を有している１つ次のノードを特定すること、
前記セッションに送信元ポート番号および宛先ポート番号を割り当てること、
前記セッションに関して、前記次ノード識別子、前記割り当てられた送信元ポート番号および前記割り当てられた宛先ポート番号を含んでいる、転送関連付け情報を記憶すること、
前記送信元アドレスとしての前記中間ノード識別子、前記宛先アドレスとしての前記次ノードアドレス、割り当てられたセッション送信元ポート番号、割り当てられたセッション宛先ポート番号、および本来のプロトコル識別子を含むように、かつ前記本来の送信元アドレス、前記本来の送信元ポート番号、前記本来の宛先アドレス、および前記本来の宛先ポート番号をメタデータとして含むように、前記先行パケットを変更すること、
前記変更された先行パケットを、前記ＩＰネットワークと通信する、該ＩＰネットワークとの中間ノード電子出力インタフェースを介して、前記１つ次のノードに転送すること、を含む、
コンピュータプログラム製品。
【請求項１６】
前記先行パケットは、本来の先行パケットであり、前記本来の送信元アドレス、前記本来の送信元ポート番号、前記本来の宛先アドレス、および前記本来の宛先ポート番号を、前記本来の先行パケットのヘッダフィールドにおいて受信する、
請求項１５記載のコンピュータプログラム製品。
【請求項１７】
前記先行パケットは、転送先行パケットであり、前記本来の送信元アドレス、前記本来の送信元ポート番号、前記本来の宛先アドレス、および前記本来の宛先ポート番号を、メタデータとして、前記転送先行パケットにおいて受信する、
請求項１５記載のコンピュータプログラム製品。
【請求項１８】
前記セッションに関して前記１つ次のノードを特定することは、前記本来の宛先アドレスに基づいた、前記宛先ノードに関するルーティング情報および次ノード情報を有しているルーティング情報ベースにアクセスすることを含む、
請求項１５記載のコンピュータプログラム製品。
【請求項１９】
さらに、
前記中間ノードが、前記セッションにおける前記複数のパケットのうちの後続パケットを取得すること、
前記転送関連付け情報に基づいて、前記パケットを変更すること、
前記変更されたパケットを転送すること、を含む、
請求項１５記載のコンピュータプログラム製品。
【請求項２０】
さらに、
前記中間ノードが、前記セッションに関連付けられた戻りパケットを取得すること、
前記戻り関連付け情報に基づいて、前記戻りパケットを変更すること、
前記変更された戻りパケットを転送すること、を含む、
請求項１５記載のコンピュータプログラム製品。
【請求項２１】
前記中間ノードは、ルーティングデバイスまたはスイッチングデバイスを含む、
請求項１５記載のコンピュータプログラム製品。
【請求項２２】
前記変更された先行パケットの宛先が規定されており、それによって、前記変更された先行パケットが転送された後、かつ前記１つ次のノードが前記先行パケットを受信する前に、少なくとも１つのネットワークデバイスが前記変更された先行パケットを受信する、
請求項１５記載のコンピュータプログラム製品。
【発明の詳細な説明】
【技術分野】
【０００１】
関連出願
本願は、２０１５年８月２４日に出願された米国特許出願第１４／８３３，５７１号、発明の名称「拡張されたセッション管理を用いるネットワークパケットフローコントローラ（ＮＥＴＷＯＲＫ  ＰＡＣＫＥＴ  ＦＬＯＷ  ＣＯＮＴＲＯＬＬＥＲ  ＷＩＴＨ  ＥＸＴＥＮＤＥＤ  ＳＥＳＳＩＯＮ  ＭＡＮＡＧＥＭＥＮＴ）」、代理人整理番号４０９４／１０１１、発明者Ｋａｐｌａｎ、Ｋｕｍａｒ、ＴｉｍｍｏｎｓおよびＭｅＬａｍｐｙ、の優先権を主張するものであり、その開示内容全体は参照により本願に組み込まれる。
【０００２】
本願は、２０１４年９月２６日に出願された米国特許出願第１４／４９７，９５４号、発明の名称「ネットワークパケットフローコントローラ（ＮＥＴＷＯＲＫ  ＰＡＣＫＥＴ  ＦＬＯＷ  ＣＯＮＴＲＯＬＬＥＲ）」、代理人整理番号４０９４／１００１、発明者ＭｅＬａｍｐｙ、Ｂａｊ、Ｋａｐｌａｎ、Ｋｕｍａｒ、ＰｅｎｆｉｅｌｄおよびＴｉｍｍｏｎｓ、に関連するものであり、その開示内容全体は参照により本願に組み込まれる。
【０００３】
また本願は、２０１４年１２月８日に出願された米国特許出願第１４／５６２，９１７号、発明の名称「ステートレスなネットワークにおけるステートフルなロードバランシング（ＳＴＡＴＥＦＵＬ  ＬＯＡＤ  ＢＡＬＡＮＣＩＮＧ  ＩＮ  Ａ  ＳＴＡＴＥＬＥＳＳ  ＮＥＴＷＯＲＫ）」、代理人整理番号４０９４／１００２、発明者Ｔｉｍｍｏｎｓ、Ｂａｊ、Ｋａｐｌａｎ、ＭｅＬａｍｐｙ、ＫｕｍａｒおよびＰｅｎｆｉｅｌｄ、に関連するものであり、その開示内容全体は参照により本願に組み込まれる。
【０００４】
また本願は、２０１５年５月１８日に出願された米国特許出願第１４／７１５，０３６号、発明の名称「パケットシグネチャを使用してセッションを処理するためのネットワークデバイスおよび方法（ＮＥＴＷＯＲＫ  ＤＥＶＩＣＥ  ＡＮＤ  ＭＥＴＨＯＤ  ＦＯＲ  ＰＲＯＣＥＳＳＩＮＧ  Ａ  ＳＥＳＳＩＯＮ  ＵＳＩＮＧ  Ａ  ＰＡＣＫＥＴ  ＳＩＧＮＡＴＵＲＥ）」、代理人整理番号４０９４／１００６、発明者Ｋｕｍａｒ、ＴｉｍｍｏｎｓおよびＭｅＬａｍｐｙ、に関連するものであり、その開示内容全体は参照により本願に組み込まれる。
【０００５】
発明の分野
本発明は、データルーティングに関し、より詳細にはＩＰネットワークにおけるパケットルーティングに関する。
【背景技術】
【０００６】
インターネットプロトコル（「ＩＰ」）は、データメッセージ（「データグラム」）を、インターネットに接続されているネットワークデバイス間で転送するためのデファクトスタンダードとして使用されている。そのために、ＩＰは、一連のインターネットデバイスを介して、例えばルータおよびスイッチを介して、データグラムを１つまたは複数のデータパケットの形態で供給する。各パケットは、２つの主要部分、すなわち（１）伝送される情報（例えばテキストデータ、グラフィックデータ、オーディオデータ、またはビデオデータ）を有しているペイロード、ならびに（２）（１つまたは複数の）パケットを受信するネットワークデバイス（「宛先デバイス」）のアドレス、パケットを送信するネットワークデバイス（「起源デバイス」）の識別子、およびパケットをルーティングするためのその他のデータを有している、「ＩＰヘッダ」として公知であるヘッダ、を有している。
【０００７】
したがって、多くの人々は、パケットを一般郵便／ファーストクラスメール（ｆｉｒｓｔ  ｃｌａｓｓ  ｍａｉｌ）を使用する従来の手紙を例にして説明している。つまり、手紙は、ペイロードとして機能し、また差出人住所および宛先住所が示されている封書は、ＩＰヘッダとして機能する。
【０００８】
現在のインターネットデバイスは、実質的にパケットヘッダ内の宛先デバイスのアドレスに基づいて、パケットを１つずつ転送する。その他の利点もあるが、とりわけこのルーティングスキームによって、ネットワークの輻輳を低減するために、またはネットワークデバイスの誤作動を回避するために、ネットワークデバイスは、単一のデータグラムの種々のパケットを異なるルータに沿って転送する。したがって、当業者は、ＩＰを「ステートレスな（状態のない）」プロトコルとみなす。何故ならば、その他の理由もあるが、とりわけＩＰではパケット経路データが保存されず、またエンドポイント間でのパケットの事前に定められた伝送も行われないからである。
【０００９】
ＩＰは、種々の利点を有しているにもかかわらず、ステートレスであることによって種々の制限が課されている。例えば、変更がなされなければ、ステートレスなＩＰネットワークは、（１）モバイルネットワークにおけるユーザモビリティ、（２）ネットワークにおけるパケットトラフィックに関するセッション層ロードバランシング、および（３）プライベートネットワーク間または重畳するネットワーク間のルーティング、を抑制または阻止する。当業者は、トンネリング機能を提供するトンネリングプロトコルを実装することによってこの問題に対応していた。特に、トンネリングプロトコルは、このトンネリングプロトコルを使用しなかった場合にデータグラムが取るであろうルートとは通常異なるルートに沿って、ＩＰデータグラムを宛先へと伝送する。名目上はそれらの目的が達成されるが、トンネリングプロトコルは、望ましくないことに、付加的な問題をネットワークにもたらす。例えば、トンネリングは付加的なオーバヘッドを要求し、このオーバヘッドによってＩＰパケットフラグメンテーションが生じる可能性があり、したがって相当なネットワーク非効率性がセッションにもたらされる。さらに、トンネルは一般的に、トンネリングされないパケットよりも広い帯域幅を使用し、トンネルの開始地点および終了地点は、パケット毎に付加的なＣＰＵサイクルを必要とする。また、トンネルアドレスが事前に提供されなければならず、これによってフレキシビリティが低下する。
【００１０】
ステートレスであることによってもたらされる問題を克服するためのその他の試みも、やはり欠点を有している。
【００１１】
種々の実施の形態の概要
本発明の１つの実施例によれば、ＩＰネットワークにおける起源ノードから宛先ノードへとセッションのパケットを案内するためのパケットルーティング方法は、中間ノード識別子を有している中間ノードが、１つのセッションにおける複数のパケットのうちの、本来のプロトコル識別子、本来の送信元アドレス、本来の送信元ポート番号、本来の宛先アドレス、および本来の宛先ポート番号から成る５組の情報を含んでいる先行パケットを取得することを備える。パケットルーティング方法は、さらに、先行パケットにおける５組の情報を基礎とする戻り関連付け情報をメモリに記憶することを備える。パケットルーティング方法は、さらに、セッションに関する１つ次のノードを特定すること、セッションに送信元ポート番号および宛先ポート番号を割り当てること、セッションに関して、次ノード識別子、割り当てられた送信元ポート番号および割り当てられた宛先ポート番号を含んでいる、転送関連付け情報を記憶すること、および送信元アドレスとしての中間ノード識別子、宛先アドレスとしての次ノードアドレス、割り当てられたセッション送信元ポート番号、割り当てられたセッション宛先ポート番号、および本来のプロトコル識別子を含むように、かつ本来の送信元アドレス、本来の送信元ポート番号、本来の宛先アドレス、および本来の宛先ポート番号をメタデータとして含むように、先行パケットを変更すること、を備える。変更された先行パケットは、ＩＰネットワークと通信する、ＩＰネットワークとの中間ノード電子出力インタフェースを介して、１つ次のノードに転送される。
【００１２】
本発明の別の実施の形態によれば、中間ルーティングデバイスが、ＩＰネットワークにおいて起源ノードから宛先ノードへとセッションのパケットを案内するように構成されている。中間ルーティングデバイスは、ＩＰネットワークを介してＩＰパケットを送信および受信するための複数の通信インタフェースと、セッション状態情報を記憶するためのメモリと、複数の通信インタフェースと機能的に接続されており、かつ第１の通信インタフェースを介して受信したセッションにおける複数のパケットのうちの、本来の送信元アドレス、本来の送信元ポート番号、本来の宛先アドレス、および本来の宛先ポート番号から成る５組の情報を含んでいる先行パケットを識別するように構成されているパケット識別器と、パケット識別器と機能的に接続されているパケット変更器であって、（ａ）先行パケットにおける５組の情報を基礎とする戻り関連付け情報をメモリに記憶し、（ｂ）セッションに関して、次ノード識別子を有している１つ次のノードを特定し、（ｃ）セッションに送信元ポート番号および宛先ポート番号を割り当て、（ｄ）セッションに関して、次ノード識別子、割り当てられた送信元ポート番号および割り当てられた宛先ポート番号を含んでいる、転送関連付け情報を記憶し、（ｅ）送信元アドレスとしての中間ノード識別子、宛先アドレスとしての次ノードアドレス、割り当てられたセッション送信元ポート番号、割り当てられたセッション宛先ポート番号、および本来のプロトコル識別子を含むように、かつ本来の送信元アドレス、本来の送信元ポート番号、本来の宛先アドレス、および本来の宛先ポート番号をメタデータとして含むように、先行パケットを変更する、ように構成されているパケット変更器と、パケット変更器および電子出力インタフェースと機能的に接続されており、かつ第２の通信インタフェースを介して、変更された先行パケットを宛先ノードに転送するように構成されているルータと、を備える。
【００１３】
本発明のさらに別の実施例によれば、コンピュータプログラム製品が、コンピュータシステムにおいて実行されると、上記において要約したパケットルーティング方法を実現する命令がエンコードされている、有形の非一時的なコンピュータ使用可能媒体を含んでいる。
【００１４】
上記において要約した実施の形態のうちの任意の実施の形態においては、先行パケットが、本来の先行パケットであってよく、ここで、本来の送信元アドレス、本来の送信元ポート番号、本来の宛先アドレス、および本来の宛先ポート番号は、本来の先行パケットのヘッダフィールドにおいて受信される。代替的に、先行パケットは、転送先行パケットであってよく、ここで、本来の送信元アドレス、本来の送信元ポート番号、本来の宛先アドレス、および本来の宛先ポート番号は、メタデータとして、転送先行パケットにおいて受信される。中間ノードは、本来の宛先アドレスに基づいた、宛先ノードに関するルーティング情報および次ノード情報を有しているルーティング情報ベースを含むことができ、またルーティング情報ベースにアクセスすることによって、セッションに関する１つ次のノードを特定することができる。宛先ノードへと案内されるセッションの後続パケットを、転送関連付け情報に基づいて変更および転送することができる。起源ノードへと案内されるセッションの戻りパケットを、戻り関連付け情報に基づいて変更および転送することができる。変更された先行パケットの宛先を規定することができるので、先行パケットが転送された後、かつ１つ次のノードが先行パケットを受信する前に、少なくとも１つのネットワークデバイスが変更された先行パケットを受信する。中間ノードは、ルーティングデバイスまたはスイッチングデバイスを含むことができる。
【００１５】
本発明の図示の実施の形態は、コンピュータ使用可能媒体と、その媒体におけるコンピュータ可読プログラムコードと、を有しているコンピュータプログラム製品として実現される。コンピュータ可読コードを、従来のプロセスに従ってコンピュータシステムによって読み出して利用することができる。
【００１６】
当業者であれば、以下に簡単に説明している図面と関連させて説明を行う、「発明を実施するための形態」の項から、本発明の種々の実施の形態の利点がより十分に明らかになる。
【図面の簡単な説明】
【００１７】
【図１】従来技術による、仮想のネットワークの概略図を示す。
【図２】従来技術による、メッセージのフラグメンテーションを表す概略図を示す。
【図３】従来技術による、仮想のインターネットの概略図を示す。
【図４】本発明の１つの実施の形態による、従来のルータと拡張型ＩＰルータ（ＡＩＰＲ）とを含んでいる、仮想のインターネットの概略図を示す。
【図５】本発明の１つの実施の形態による、セッションの開始を識別するために使用されるフィールドを識別する、イーサネットヘッダの概略的なレイアウトを示す。
【図６】本発明の１つの実施の形態による、セッションの開始を識別するために使用されるフィールドを識別する、ＩＰヘッダの概略的なレイアウトを示す。
【図７】本発明の１つの実施の形態による、セッションの開始を識別するために使用されるフィールドを識別する、ＴＣＰヘッダの概略的なレイアウトを示す。
【図８】本発明の１つの実施の形態による、図４のＡＩＰＲの概略的なブロック図を示す。
【図９】本発明の１つの実施の形態による、図４および図８のＡＩＰＲによって情報ベースに記憶された情報の概略図を示す。
【図１０】本発明の１つの実施の形態による、図４および図８のＡＩＰＲによって生成された、変更された先行パケットの概略図を示す。
【図１１】本発明の１つの実施の形態による、図４および図８のＡＩＰＲによって実施される動作を概略的に説明するフローチャートを示す。
【図１２】本発明の１つの実施の形態による、図４および図８のＡＩＰＲによって実施される動作を概略的に説明するフローチャートを示す。
【図１３】１つの実施例に従い、所定の送信元（ＡＩＰＲ）ネットワークアドレス、宛先ネットワークアドレス、およびプロトコル識別子に関して、送信元ポート番号および宛先ポート番号をどのように関連付けることができるかを概略的に示す。
【図１４】本発明の特定の図示の実施の形態による、３つのＡＩＰＲデバイスを介する送信元デバイスから宛先デバイスまでの先行パケット処理の一例を提供する概略図を示す。
【図１５】図１４の先行パケット処理を基礎とする、最初のＡＩＰＲに関連付けられたセッション関連データを表す概略図を示す。
【図１６】図１４の先行パケット処理を基礎とする、中間ＡＩＰＲに関連付けられたセッション関連データを表す概略図を示す。
【図１７】図１４の先行パケット処理を基礎とする、最後のＡＩＰＲに関連付けられたセッション関連データを表す概略図を示す。
【図１８】図１４において確立されたセッションについて複数のＡＩＰＲデバイスを介して送信元デバイスから宛先デバイスへと送信された一例としてのパケットに関する、セッションパケット処理の一例を提供する概略図を示す。
【図１９】図１４において確立されたセッションについて複数のＡＩＰＲデバイスを介して宛先デバイスから送信元デバイスへと送信された戻りパケットに関する、セッションパケット処理の一例を提供する概略図を示す。
【図２０】本発明の特定の図示の実施の形態によるＡＩＰＲによって実施される幾つかの先行パケット処理動作を概略的に説明するフローチャートを示す。
【図２１】本発明の特定の図示の実施の形態によるＡＩＰＲによって実施される幾つかのパケット処理動作を概略的に説明するフローチャート２１００を示す。
【図２２】本発明の特定の代替的な実施の形態による、３つのＡＩＰＲデバイスを介する送信元デバイスから宛先デバイスまでの先行パケット処理の一例を提供する概略図を示す。
【図２３】図２２の先行パケット処理を基礎とする、最初のＡＩＰＲに関連付けられたセッション関連データを表す概略図を示す。
【図２４】図２２の先行パケット処理を基礎とする、中間ＡＩＰＲに関連付けられたセッション関連データを表す概略図を示す。
【図２５】図２２の先行パケット処理を基礎とする、最後のＡＩＰＲに関連付けられたセッション関連データを表す概略図を示す。
【図２６】図２２において確立されたセッションについて複数のＡＩＰＲデバイスを介して送信元デバイスから宛先デバイスへと送信された一例としてのパケットに関する、セッションパケット処理の一例を提供する概略図を示す。
【図２７】図２２において確立されたセッションについて複数のＡＩＰＲデバイスを介して宛先デバイスから送信元デバイスへと送信された戻りパケットに関する、セッションパケット処理の一例を提供する概略図を示す。
【図２８】本発明の特定の代替的な実施の形態によるＡＩＰＲによって実施される幾つかの先行パケット処理動作を概略的に説明するフローチャートを示す。
【発明を実施するための形態】
【００１８】
本発明の好適な実施の形態によれば、パケットフローコントローラは、少なくとも順方向におけるフローに関して、１つのセッションのパケットが、そのセッションの先行の／第１のパケットと同一の経路を辿ることを、すなわち送信元（Ｓｏｕｒｃｅ）デバイスから宛先（Ｄｅｓｔｉｎａｔｉｏｎ）デバイスへと同一の経路を辿ることを保証する。種々の実施の形態を下記において詳述する。
【００１９】
ネットワーク
図示の実施の形態は、好適には、従来のコンピュータネットワークにおいて実現されている。特に、ネットワークは、少なくとも２つのノードと、ノード間の少なくとも１つのリンクと、を含んでいる。ノードは、（ホストまたはデバイスと称する場合もある）コンピューティングデバイスおよびルータを含むことができる。コンピュータには、パーソナルコンピュータ、スマートフォン、テレビジョン・セットトップボックス、現金自動預け払い機（ＡＴＭ）、ならびにプロセッサおよびネットワークインタフェースを含んでいるその他の多くのタイプの装置が含まれると考えられる。リンクは、ノードペア間の有線式および無線式のコネクションを含んでいる。さらに、ノードおよび／またはリンクを、完全にソフトウェアとして実現することができ、例えば仮想マシン、ソフトウェア定義ネットワーク（ＳＤＮ：Ｓｏｆｔｗａｒｅ  Ｄｅｆｉｎｅｄ  Ｎｅｔｗｏｒｋ）において、またネットワーク機能の仮想化（ＮＦＶ：Ｎｅｔｗｏｒｋ  Ｆｕｎｃｔｉｏｎ  Ｖｉｒｔｕａｌｉｚａｔｉｏｎ）を使用して実現することができる。多くのネットワークは、スイッチを含んでおり、それらのスイッチの大部分は、この議論に関してトランスペアレント（透過性）である。しかしながら、幾つかのスイッチは、ルーティング機能も実施する。ここでの議論に関して、そのようなルーティングスイッチはルータとみなされる。ルータについては下記において説明する。
【００２０】
ノードを、１つまたは複数のその他のノードと、それぞれ個別のリンクを介して直接的に接続することができる。例えば、図１には、ノードＡがリンク１を介してノードＢに直接的に接続されていることが概略的に示されている。所定のネットワークにおいて（例えば、ローカルエリアネットワーク内では）、各ノードは、データの送信および受信を容易にするためのユニークなネットワークアドレスを有している。ネットワークは、ネットワークのアドレッシングスキームに従ってネットワーク内でアドレッシング可能なすべてのノードと、ネットワークのアドレッシングスキームに従って通信を行うためにノードを相互接続するすべてのリンクと、を含んでいる。例えば、図１においては、ノードＡ、ノードＢ、ノードＣ〜ノードＦおよびすべてのリンク１〜８が一緒になって１つのネットワーク１００を形成している。簡略化のために、ネットワークを、１つのクラウドとして、または１つのクラウド内に含まれるものとして示すことができる。しかしながら、クラウドは存在しないということが、複数のノードおよび複数のリンクの集合体はネットワークではないということを意味しているわけではない。例えば、複数の比較的小さいネットワークから１つのネットワークを形成することができる。
【００２１】
各ノードは、ネットワークを介してその他のノードとの通信を開始することができ、また各ノードは、ネットワークを介してその他のノードによって開始された通信を受信することができる。例えば、ノードは、直接的に接続されているノード（隣接ノード）に、その隣接ノードと相互接続されているリンクを介してデータ（メッセージ）を送信することによって、そのデータ（メッセージ）を伝送／転送／送信することができる。メッセージは、送信ノードのネットワークアドレス（「送信元アドレス」）と、意図されている受信ノードのネットワークアドレス（「宛先アドレス」）と、を含んでいる。送信ノードは、メッセージを非隣接ノードに、１つまたは複数のその他の介在ノードを介して送信することができる。例えば、ノードＤは、ノードＦにノードＢを介してメッセージを送信することができる。公知のネットワーキングプロトコルを使用して、送信元と宛先との間に存在する（１つまたは複数の）ノードは、メッセージがその宛先ノードに到達するまで、メッセージを転送する。したがって、適切に動作するために、ネットワークプロトコルは、各ノードによる、そのネットワーク内の非隣接ノードのネットワークアドレスの学習または発見を実現する。
【００２２】
ノードは、プロトコルに従って、例えば公知のインターネットプロトコル（ＩＰ：Ｉｎｔｅｒｎｅｔ  Ｐｒｏｔｏｃｏｌ）および伝送制御プロトコル（ＴＣＰ：Ｔｒａｎｓｍｉｓｓｉｏｎ  Ｃｏｎｔｒｏｌ  Ｐｒｏｔｏｃｏｌ）に従って、ネットワークを介して通信を行う。プロトコルは、典型的には、例えば公知の７層オープンシステム接続（ＯＳＩ：Ｏｐｅｎ  Ｓｙｓｔｅｍ  Ｉｎｔｅｒｃｏｎｎｅｃｔ）モデルに従って、階層化されたソフトウェアコンポーネントおよび／またはハードウェアコンポーネントによって実施される。一例として、ＩＰは、ＯＳＩのレイヤ３（ネットワーク層）で機能し、その一方、ＴＣＰは、大部分がＯＳＩのレイヤ４（トランスポート層）で機能する。各層は、論理的な機能を実施し、また自身より下位の層を抽象化し、したがって下位層の詳細を隠す。
【００２３】
例えば、レイヤ３は、レイヤ２（データリンク層）が１つの大きいメッセージを１回の伝送で処理できない場合には、そのメッセージの、複数のより小さいパケットへのフラグメント化を実施することができる。図２には、複数の部分２０２、２０４、２０６、２０８、２１０および２１２に分割された大きいメッセージ２００が概略的に示されている。この場合、各部分２０２〜２１２を、パケット２１４によって例示されている個別のパケットとして送信することができる。各パケットは、ペイロード２１６によって例示されているペイロード（本体）部分と、参照番号２１８によって例示されているヘッダ部分と、を含んでいる。ヘッダ部分２１８は、（１）パケットのその宛先へのルーティング、（２）メッセージのパケットの再組み立て、および（３）プロトコルに従って提供されるその他の機能、のために必要とされるまたは所望される情報、例えばパケットの送信元アドレス、宛先アドレスおよびパケットシーケンス番号を含んでいる。幾つかのケースにおいては、例えばペイロードまたはパケット全体のチェックサムを運ぶために、ペイロードにトレーラ部分も付加されている。メッセージのすべてのパケットが同一の経路に沿って送信される必要はない。つまり、それらのパケットの共通の宛先への経路において同一のノードを通過する必要はない。ＩＰパケットは、正式にはＩＰデータグラムと称されるが、それらは一般的には単純にパケットと称されていることを言及しておく。
【００２４】
その他の幾つかのプロトコルも、データの複数のパケットへのフラグメント化を実施する。例えば、ＴＣＰは、データの複数のセグメントへのフラグメント化を実施する。セグメントは、正式には、ＴＣＰプロトコルデータユニット（ＰＤＵ：Ｐｒｏｔｏｃｏｌ  Ｄａｔａ  Ｕｎｉｔ）と称される。それにもかかわらず、一般的には、ＰＤＵおよびデータグラムを表す際に、またイーサネットフレームを表す際にパケットという用語が用いられている。
【００２５】
プロトコルの多くは、上位の階層のプロトコルのパケットのカプセル化を実施する。例えば、ＩＰは、ＩＰパケットを生成するために、ＴＣＰパケットにＩＰヘッダを付加することによって、ＴＣＰパケットのカプセル化を実施する。したがって、下位の階層において送信されたパケットは、パケット内のパケットから成るものであると考えられる。通常の場合、あるプロトコルに従って動作するコンポーネントは、同一のプロトコルに従って動作する別のコンポーネント、典型的には別のノード内の別のコンポーネントによって生成されたヘッダおよび／またはトレーラ内の情報しか検査または変更しない。つまり、一般的には、あるプロトコルに従って動作するコンポーネントは、その他のプロトコルによって生成されたパケットの部分を検査または変更しない。
【００２６】
階層プロトコルによって提供される抽象化の別の例では、幾つかの層がアドレスを変換する。幾つかの層は、層固有のアドレッシングスキームを含んでいる。例えば、リンクの各端部は、実際の（例えば電子的な）インタフェースまたは仮想のインタフェース、例えばイーサネットインタフェースを介してノードに接続されている。レイヤ２（データリンク層）では、各インタフェースがアドレスを、例えばメディアアクセスコントロール（ＭＡＣ：Ｍｅｄｉａ  Ａｃｃｅｓｓ  Ｃｏｎｔｒｏｌ）アドレスを有している。その一方で、ＩＰを使用するレイヤ３では、各インタフェースが、または少なくとも各ノードがＩＰアドレスを有している。レイヤ３は、ＩＰアドレスをＭＡＣアドレスに変換する。
【００２７】
典型的には、ルータは、２つまたはそれ以上の個別のネットワーク、もしくは単一のネットワークの２つまたはそれ以上のサブネットワーク（サブネット）を相互接続するノードとして機能する。これによって、「複数のネットワークから成る１つのネットワーク」（すなわち、１つのインターネット）が形成される。したがって、ルータは、少なくとも２つのインタフェースを有しており、各インタフェースは、図３に例示されているように、ルータを異なるネットワークに接続する。ルータは、一方のインタフェースを介して一方のネットワークからパケットを受信すると、自身のルーティングテーブルに記憶されている情報を使用して、そのパケットを他方のインタフェースを介して他方のネットワークに案内する。ルーティングテーブルは、ネットワークとネクストホップとの関連性を含んでいる。それらの関連性は、最終的な宛先への経路上のネクストホップを表している特定のルータにパケットを送信することによって、特定の宛先に最適に到達できることをルータに知らせる。例えば、第１のルータ３００が自身の第１のインタフェース３０４を介して、第１のネットワーク３０２からパケットを受信し、かつそのパケットの宛先が第３のネットワーク３０６内のあるノードに指定されている場合、第１のルータ３００は、自身のルーティングテーブルを参照して、自身の第２のインタフェース３０８を介して第２のネットワーク３１０にパケットを転送する。続けて、第２のネットワーク３１０は、パケットを第３のネットワーク３０６に転送する。ネクストホップの関連性を、最終的な宛先への出力（出口）インタフェースとしてルーティングテーブルに示すこともできる。
【００２８】
大規模な組織、例えば大企業、商用データセンタおよび電気通信事業者は、内部トラフィックの送信のために、階層構造のルータのセットを使用することが多い。例えば、１つまたは複数のゲートウェイルータによって、各組織のネットワークと、１つまたは複数のインターネットサービスプロバイダ（ＩＳＰ：Ｉｎｔｅｒｎｅｔ  Ｓｅｒｖｉｃｅ  Ｐｒｏｖｉｄｅｒ）と、を相互接続することができる。またＩＳＰは、自身の顧客のゲートウェイ間のトラフィックの送信のために階層構造のルータを使用して、その他のＩＳＰとの相互接続およびインターネットバックボーンにおけるコアルータとの相互接続を実現する。
【００２９】
従来のルータは、その主たる転送の判断に関して、レイヤ３ＩＰパケットにおける情報、特に宛先ＩＰアドレスを基礎としているので、レイヤ３デバイスとみなされる。従来のルータは、パケットが運ぶ実際のデータコンテンツ（すなわち、カプセル化されたペイロード）を参照しない。その代わりにルータは、単に、転送の判断を行うためのレイヤ３アドレスと、オプションとして、サービス品質（ＱｏＳ：Ｑｕａｌｉｔｙ  ｏｆ  Ｓｅｒｖｉｃｅ）要求のようなヒントに関するヘッダにおけるその他の情報と、だけを見る。パケットが転送されると、従来のルータは、そのパケットに関する履歴情報を保持しない。しかしながら、ルータがそのように構成されている場合であっても、統計的なデータを生成するために転送活動を収集することはできる。
【００３０】
したがって、ＩＰネットワークは、特にこの履歴情報を保持しないことから、「ステートレスな」ネットワークとみなされる。例えば、ＩＰネットワークは一般的に、各リクエストを、以前のいずれのリクエストにも関係しない独立したトランザクションとして処理する。したがって、ルータは、先行のパケットをどのように処理したかを顧みずに、パケットをルーティングすることができる。例えば、ＩＰネットワークは典型的には、新規に加わった通信パートナの状態またはセッション情報を記憶しない。例えば、ネットワークの一部が、使用できない中間トランザクションになった場合、リソースを再割り当てする必要はないか、またはさもなければ、ネットワークの状態を固定する必要はない。その代わりに、パケットをネットワーク内のその他のノードに沿ってルーティングすることができる。
【００３１】
しかしながら、図示の実施の形態は、上記において参照により組み込まれた特許明細書に記載されているような、安全に通信を行うルータを含むことができる。
【００３２】
上記において述べたように、ルータは、一方のインタフェースを介して一方のネットワークからパケットを受信すると、自身のルーティングテーブルを使用して、そのパケットを他方のネットワークに案内する。表１には、基本的なＩＰルーティングテーブルから一般的に見て取れる情報が列挙されている。
【表１】
2018525941.tif 000003
【００３３】
ルーティングテーブルを、例えばシステム管理者によって手動で埋めることができるか、またはルータによって動的に埋めることができる。ルータは、その他のルータと情報を交換するためにルーティングプロトコルを使用し、またそれによって、周囲のネットワークまたはインターネットのトポロジを動的に学習する。例えば、ルータは、自身の存在を（１つまたは複数の）ネットワークに通知する。より詳細には、ルータは、自身がパケットを転送できるＩＰアドレスの範囲をネットワークに通知する。隣接するルータは、その情報を用いて自身のルーティングテーブルを更新し、また第１のルータの（１つまたは複数の）ネットワークへとパケットを転送する自身の能力をブロードキャストする。この情報は、必要に応じて、ネットワーク内のより遠隔のルータに拡散される。動的なルーティングによって、ルータは、ネットワークまたはインターネット内の変化に、例えば増大したネットワークの輻輳、新たなルータのインターネットへの追加、およびルータまたはリンクのエラーに反応することができる。
【００３４】
したがって、ルーティングテーブルは、パケットを各宛先へとルーティングするための一連の規則を提供する。パケットが到着すると、ルータは、パケットの内容を検査し、例えばそのパケットの宛先アドレスを検査し、ルーティングテーブルにおける最適な規則を発見する。その規則は、事実上、パケットを転送するためにどのインタフェースが使用されるかをルータに知らせ、またそのパケットの最終的な宛先ＩＰアドレスへの経路上においてそのパケットが転送されるノードのＩＰアドレスも知らせる。
【００３５】
ホップ・バイ・ホップ方式のルーティングでは、各ルーティングテーブルには、到達可能なすべての宛先に関して、その宛先への経路に沿った１つ次のノード、すなわちネクストホップのアドレスが記載されている。ルーティングテーブルに矛盾がないと仮定すれば、ネットワーク内のいずれかの場所にパケットを送信するためには、パケットをその宛先の各ネクストホップへとリレーする各ルータの単純なアルゴリズムで十分である。ホップ・バイ・ホップ方式は、ＩＰインターネットワーク層およびＯＳＩネットワーク層の基本的な特性を表している。
【００３６】
したがって、各ルータのルーティングテーブルは、典型的には、パケットを、そのパケットの宛先の「比較的近くに位置する」別のルータに転送するには十分な情報しか含んでいないので、パケットが常にその宛先に送信されることは保証していない。ある意味において、少なくとも大部分のパケットが最終的にその宛先へと到達することを目的として、パケットは、一連のルータを辿って、各ルータにおいてその時点での最新の規則を使用して、次にどのルータを辿るかを決定することによって、自身の宛先までの自身の経路を発見している。
【００３７】
例えば、ルータが輻輳した場合、またはリンクに障害が発生した場合、規則は１つのパケットの連続する２つのホップ間で、または１つのメッセージの連続する２つのパケット間で変化する可能性があることを言及しておく。したがって、１つのメッセージの２つのパケットが異なる経路を辿る可能性があり、それどころか順番通りに到着しない可能性がある。換言すれば、パケットが送信元ノードまたは起源ノードから送信される場合、ネットワークがステートレスであることから、送信元ノードとパケットの宛先ノードとの間でパケットが取ることになる、事前に規定された経路は一般的には存在しない。その代わりに、典型的には、パケットが種々のルータを通過するときに、経路が動的に求められる。これは「自然なルーティング」と称することができる。つまり、パケットがインターネットを通過するときに、経路が動的に求められる。
【００３８】
自然なルーティングが長年にわたり上手く機能しているにもかかわらず、この自然なルーティングは欠点を有している。例えば、１つのセッションの各パケットが異なる経路に沿って伝播する可能性があり、また異なるルータのセットを通過する可能性があるので、セッションに関するメトリックを収集することは困難である。セッションのパケットに適用することができるセキュリティ機能を広範囲にわたり分散させなければならないか、またはそのようなセキュリティ機能がすべてのパケットに適用されないリスクも考えられる。さらに、セッションへの攻撃が多くの場所から開始される可能性がある。
【００３９】
一般的には、宛先ノードから再び送信元ノードに送信されるパケットは、送信元ノードから宛先ノードに送信されたパケットとは異なる経路を辿る可能性があることを言及しておく。
【００４０】
多くの状況において、クライアントコンピュータノード（「クライアント」）は、サーバコンピュータノード（「サーバ」）とセッションを確立し、またクライアントとサーバは、そのセッション内でパケットを交換する。例えば、ブラウザを実行しているクライアントは、従来のプロセスを使用して、ウェブサーバとのセッションを確立することができる。クライアントは、ウェブページをリクエストするために１つまたは複数のパケットを送信することができ、またウェブサーバは、ウェブページのコンテンツを含んでいる１つまたは複数のパケットでもって応答することができる。幾つかのタイプのセッションでは、パケットのこの往復的な交換を複数回のサイクルにわたり継続することができる。幾つかのタイプのセッションでは、パケットを２つのノード間で非同期的に送信することができる。下記において考察するように、公知のプロトコル、例えばセキュア・ソケット・レイヤ・プロトコル（「ＳＳＬ」：Ｓｅｃｕｒｅ  Ｓｏｃｋｅｔｓ  Ｌａｙｅｒ  Ｐｒｏｔｏｃｏｌ）またはトランスポート・レイヤ・セキュリティ・プロトコル（「ＴＬＳ」：Ｔｒａｎｓｐｏｒｔ  Ｌａｙｅｒ  Ｓｅｃｕｒｉｔｙ  Ｐｒｏｔｏｃｏｌ）を使用して、インターネットを介するセキュアなセッションを提供するために、このハンドシェイクを実施することができる。
【００４１】
セッションは、その通常の意味を有している。つまり、セッションとは、プロトコルに従って一方のノードから他方のノードに送信される、各パケットが関連付けられている複数のパケットである。セッションは、そのセッションを開始する先行パケット（または最初のパケット）と、そのセッションの１つまたは複数の後続パケットと、を含むものと考えられる。セッションには、明確な開始および明確な終了が存在する。例えば、ＴＣＰセッションは、ＳＹＮパケットによって開始される。幾つかのケースにおいては、１つの所定のパケットまたは一連のパケットによって、終了を規定することができる。例えば、ＴＣＰセッションを、ＦＩＮ交換によってまたはＲＳＴによって終了させることができる。その他のケースにおいては、少なくとも事前に規定された長さの時間（タイムアウト時間）にわたり、ノード間で通信が行われないことによって終了を規定することができる。例えば、ＴＣＰセッションを、規定されたタイムアウト期間後に終了させることができる。幾つかのセッションは、一方のノードから他方のノードに送信されるパケットしか含んでいない。その他のセッションは、ウェブクライアントとサーバとのインタラクションの例のように、応答パケットを含んでいる。１つのセッションは、プロトコルに従った、何サイクルもの往復的な通信または非同期的な通信を含むことができるが、しかしながら、１つのセッションのすべてのパケットは、ノードの同一のクライアントとサーバのペア間で交換される。本明細書においては、セッションを一連のパケット（パケットシリーズ）とも称する。
【００４２】
単一のＩＰアドレスを有しているコンピュータは、種々のサービス、例えばＷｅｂサービス、Ｅメールサービスおよびファイル転送（ＦＴＰ：Ｆｉｌｅ  Ｔｒａｎｓｆｅｒ  Ｐｒｏｔｏｃｏｌ）サービスを提供することができる。典型的には、各サービスに、コンピュータ上でユニークである、０〜６５，５３５の範囲のポート番号が割り当てられている。したがって、サービスは、ノードのＩＰアドレスとサービスのポート番号との組合せによって規定されている。この組合せは、コンピュータが接続されているネットワーク内でユニークであり、またインターネット内でもユニークであることが多いことを言及しておく。同様に、単一のノードにおいて多数のクライアントを実行することができる。したがって、サービスをリクエストするクライアントには、そのクライアントのノードにおけるユニークなポート番号が割り当てられているので、サービスからの戻りパケットを、リクエストを行ったクライアント宛てに一意に送ることができる。
【００４３】
ソケットという用語は、ＩＰアドレスとポート番号との組合せを意味している。したがって、各サービスは、ネットワーク固有の、またインターネット固有であることも多いサービスソケットを有しており、サービスをリクエストするクライアントには、ネットワーク固有の、またインターネット固有である場合もあるクライアントソケットが割り当てられている。ところによっては、送信元クライアントおよび宛先サービスという用語は、サービスをリクエストするためにパケットを送信するクライアントおよびリクエストされているサービスをそれぞれ表す際に使用される。
【００４４】
順方向および逆方向のフロー制御
本発明の図示の実施の形態は、少なくとも順方向においては、すなわち送信元クライアントから宛先サービスへは、セッションの先行パケットと同じ経路を、そのセッションの後続パケットが辿ることを保証することによって、上述の欠点およびその他の欠点を克服する。後続パケットは、先行パケットが送信元クライアントと宛先サービスとの間で通過したルータの少なくとも１つのサブセットを通過する。本明細書においては、サブセット内の各ルータを中間ノードまたは中間地点と称する。ただし、先行パケットが送信元クライアントから送信される前に、中間地点が事前に規定されている必要はない。先行パケットを、自然にルーティングすることができる。それにもかかわらず、先行パケットが取る経路は中間地点を形成し、また後続パケットは先行パケットと同一の中間地点を、先行パケットと同じ順番で通過する。
【００４５】
もちろん、例えば過負荷のルータによって、またはリンクによるパケットの破損に起因して、幾つかのパケットは、経路から脱落する可能性があるが、これはＩＰネットワークまたはインターネットにおいては一般的に起こりうることである。つまり、送信元クライアントから送信されたすべてのパケットが、セッションの宛先サービスに到達しなければならないのではなく、したがって送信元クライアントから送信されたすべてのパケットが、すべての中間地点を通過する必要はない。しかしながら、宛先サービスへと到達する後続パケットは、すべての中間地点を通過しなければならない。説明を簡単にするために、脱落したパケットは以下の議論においては無視するので、「すべてのパケット」という用語は、自身の各宛先に到達するすべてのパケットを意味している。
【００４６】
この順方向のフロー制御の結果、複数ある中間地点のうちの１つの中間地点において収集されたメトリックは、セッションのすべてのパケットを表している。それらのメトリックの質が、その中間地点を迂回するパケットによって低下することはない。何故ならば、セッションのすべてのパケットがいずれの中間地点も迂回することは起こりえないからである。１つの中間地点において実施されるセキュリティ機能、例えば、悪意のあるパケットの検査を、セッションのすべてのパケットに対して確実に実施することができる。
【００４７】
本発明の幾つかの実施の形態は、宛先サービスから送信元クライアントへの戻りパケットも同一の経路を逆の順序で辿ること、すなわち中間地点を逆の順序で通過することを保証する。この逆方向のフロー制御は、別の方法で戻りパケットを自然にルーティングすることによっては利用できない経路、例えば専用の（プロプライエタリな）ネットワークを介する経路の使用を実現する。
【００４８】
パケットフローコントローラ（本明細書においては、拡張型ＩＰルータ（「ＡＩＰＲ」：Ａｕｇｍｅｎｔｅｄ  ＩＰ  Ｒｏｕｔｅｒ）とも称する）は、上記において考察したように、セッションの先行パケットと同一の経路を、そのセッションの後続パケットが辿ることを保証する。ＡＩＰＲは、従来のルーティング機能も実施する。図４は、相互接続されている複数のネットワーク４００、４０２、４０４および４０６の仮想のセット、すなわちインターネットを表している概略図である。各ネットワーク４００〜４０６は、複数のルータおよびＡＩＰＲを含んでいるが、必ずしもそれらすべてのルータおよびＡＩＰＲが示されているわけではない。ネットワーク４００は、第１のＡＩＰＲ４０８およびルータ４１０を含んでいる。ネットワーク４００は、例えば、電気通信事業者のネットワークであってよい。ネットワーク４０２は、ルータ４１２および第２のＡＩＰＲ４１４を含んでいる。ネットワーク４０２は、例えば、第１のＩＳＰのネットワークであってよい。ネットワーク４０４は、ルータ４１６および第３のＡＩＰＲ４１８を含んでいる。ネットワーク４０４は、例えば、インターネットバックボーンまたはその一部であってよい。ネットワーク４０６は、ルータ４２０、第４のＡＩＰＲ４２２および別のルータ４２４を含んでいる。ネットワーク４０６は、例えば、第２のＩＳＰのネットワークであってよい。
【００４９】
送信元クライアントノード４２６が、宛先サービスノード４２８とのセッションを開始する場合を想定する。例えば、送信元クライアント４２６は、ウェブページをリクエストすることができ、また宛先サービスノード４２８は、ウェブサーバを含むことができる。送信元クライアント４２６は、例えば、第１の企業内の第１のローカルエリアネットワーク（ＬＡＮ）（図示せず）の一部であってよく、またＬＡＮをその企業によって管理されているゲートウェイルータ４３０を介して電気通信事業者のネットワーク４００に接続することができる。同様に、宛先サービスノード４２８を第２の企業によって管理することができ、また宛先サービスノード４２８は、第２の企業によって管理されているゲートウェイルータ４３２を介して第２のＩＳＰのネットワーク４０６に接続されている第２のＬＡＮ（図示せず）の一部であってよい。セッションの先行パケットがインターネットを通過する際、そのパケットが通過する各ＡＩＰＲ（中間地点）は、その中間地点がセッションに関する自身の１つ前の中間地点および自身の１つ先の中間地点を最終的に識別できるようにする情報を記録する。
【００５０】
セッションの先行パケットは自然にルーティングされる。先行パケットがネットワーク４０２、４０４または４０６に到達する前に、第１のＡＩＰＲ４０８に到達する場合を想定する。第１のＡＩＰＲ４０８は、先行パケットがセッションの最初のパケットであることを自動的に識別する。第１のＡＩＰＲ４０８は、上記において述べたように、また下記においてより詳細に考察するように、種々の技術を使用してセッションの開始を識別することができる。第１のＡＩＰＲ４０８は、先行パケットが最終的に辿る経路に沿った最初の中間地点となる。
【００５１】
第１のＡＩＰＲ４０８は、セッションにユニークな識別子を割り当て、またそのセッションに関する情報をＡＩＰＲのデータベースに記憶し、それによって第１のＡＩＰＲ４０８は、そのセッションの後続パケットを識別することができる。幾つかの実施の形態においては、第１のＡＩＰＲ４０８が、先行パケットにおけるクライアントソケット／サービスソケット番号ペアを読み出し、セッションを一意に識別するために、そのクライアントソケット／サービスソケット番号ペアをデータベースに記憶する。これによって、第１のＡＩＰＲ４０８は、後続パケットをそのセッションの一部として識別することができる。何故ならば、そのセッションのすべての後続パケットは、同一のクライアントソケット／サービスソケット番号ペアを含むことになるからである。
【００５２】
幾つかの実施の形態においては、第１のＡＩＰＲ４０８が、先行パケットは第１のＡＩＰＲ４０８に到達する前にその他のいずれのＡＩＰＲも通過していないことを示すフラグを自身のデータベースにセットする。このフラグを後の時点に、例えば第１のＡＩＰＲ４０８が戻りパケットを処理する際に使用することができる。第１のＡＩＰＲ４０８は、パケットにいずれの変更も行われていないことから、先行パケットをその他のいずれのＡＩＰＲも通過していないパケットとして識別することができる。パケットの変更については下記において説明する。
【００５３】
第１のＡＩＰＲ４０８は、先行パケットがＡＩＰＲによって処理されたことを示すために先行パケットを変更する。幾つかの実施の形態においては、変更された先行パケットを生成するために、第１のＡＩＰＲ４０８がパケットにセッションのユニークな識別子を記憶し、またユニークな識別子が含まれない場合には、ＡＩＰＲのネットワークアドレスを記憶する。（その時点において変更されている）先行パケットを処理する後続のＡＩＰＲが存在する場合、その後続のＡＩＰＲは、先行パケットをＡＩＰＲによって処理された先行パケットとして識別するために、またセッションの後続パケットは先行パケットがルーティングされる経路と同じ経路でルーティングされるべきことを示すために、この変更を利用する。
【００５４】
幾つかの実施の形態においては、第１のＡＩＰＲ４０８が、先行パケットを転送する際に使用されるインタフェースにポート番号を割り当てる。ＡＩＰＲのネットワークアドレスおよびこのポート番号は、組み合わされることによって、少なくとも経路に沿った１つ次のＡＩＰＲの観点からは、セッションのユニークな識別子として使用することができる。第１のＡＩＰＲ４０８は、ＡＩＰＲのネットワークアドレスとポート番号の組合せを、変更された先行パケットに含ませることができる。したがって、経路に沿った１つ次のＡＩＰＲは、このネットワークアドレスとポート番号の組合せから送信された後続パケットがセッションの一部であること、またはセッションの一部である可能性が高いことを想定できる。
【００５５】
続いて、第１のＡＩＰＲ４０８は、先行パケットを自然に転送する。先行パケットは、この先行パケットをネットワーク４０２に自然にルーティングするルータ４１０に到達するまで、ネットワーク４００の不特定数のノードを通過する。ここではルータ４１０が先行パケットをネットワーク４０２内の第２のＡＩＰＲ４１４に転送する場合を想定する。
【００５６】
第２のＡＩＰＲ４１４は、先行パケットに対する変更を検出し、特別な処理の必要性を識別する。第２のＡＩＰＲ４１４は、先行パケットが辿る経路に沿った第２の中間地点となる。第２のＡＩＰＲ４１４は、自身のデータベースに第１のＡＩＰＲ４０８のネットワークアドレスおよび第１のＡＩＰＲ４０８によって割り当てられたポート番号を、セッションのユニークな識別子、例えばクライアントソケット／サーバソケット番号ペアと関連させて記憶し、したがってこのセッションに関連する経路に沿った１つ前の中間地点を識別する。このようにして、各中間地点は、このセッションの経路に沿った１つ前の中間地点のネットワークアドレスおよびポート番号を学習し、また関連する関連付けデバイス（「アソシエータ」）を使用して、この情報をセッション識別子に関連付ける。この情報は後に、送信元クライアント４２６へと戻される戻りパケットを中間地点から中間地点へと転送するために使用することができる。
【００５７】
幾つかの実施の形態においては、第２のＡＩＰＲ４１４が、先行パケットを受信したインタフェースにポート番号を割り当てる。ＡＩＰＲのネットワークアドレスおよびこのポート番号は、組み合わされることによって、少なくとも第１のＡＩＰＲ４０８の観点からは、セッションのユニークな識別子として使用することができる。したがって、このネットワークアドレスとポート番号との組合せ宛てに送られる後続パケットは、セッションの一部であること、または少なくともセッションの一部である可能性が高いことを想定できる。
【００５８】
幾つかの実施の形態においては、第２のＡＩＰＲ４１４が、セッションの識別に関連して、第１のＡＩＰＲ４０８にネットワークアドレスとポート番号との組合せについての情報を通知するために、パケットを第１のＡＩＰＲ４０８に返送する。幾つかの実施の形態においては、ネットワークアドレスとポート番号との組合せが、下記において説明するように、戻りパケットとの関連において、後に第１のＡＩＰＲ４０８に送信される。いずれのケースにおいても、第１のＡＩＰＲ４０８は、セッションに対してユニークであるネットワークアドレスとポート番号との組合せを学習し、また第１のＡＩＰＲ４０８は、後続パケットを自然に転送するのではなく、後続パケットをそのネットワークアドレスとポート番号との組合せに送信する。このようにして、各中間地点は、このセッションの経路に沿った１つ次の中間地点のネットワークアドレスおよびポート番号を学習する。この情報は、先行パケットと同じ経路に沿って、後続パケットを、複数の中間地点を介して宛先サービス４２８に転送するために使用される。この種のルーティングは、本発明者が知っている従来技術に教示されているいずれのルーティングとも異なるものである。
【００５９】
第２のＡＩＰＲ４１４は、この第２のＡＩＰＲ４１４のネットワークアドレスを含ませるために先行パケットを変更し、続けて、その先行パケットを自然に転送する。第１のＡＩＰＲ４０８と同様に、幾つかの実施の形態においては、第２のＡＩＰＲ４１４が、パケットを転送する際に使用するインタフェースにポート番号を割り当て、第２のＡＩＰＲ４１４のネットワークアドレスおよびポート番号が、第２のＡＩＰＲ４１４によって送信される、変更された先行パケットに含まれる。
【００６０】
先行パケットは、この先行パケットをネットワーク４０４に自然にルーティングするルータ４１２に到達するまで、ネットワーク４０２の不特定数のノードを通過する。ルータ４１６が先行パケットを第３のＡＩＰＲ４１８に転送する場合を想定する。
【００６１】
第３のＡＩＰＲ４１８は、先行パケットが辿る経路に沿った第３の中間地点となる。第３のＡＩＰＲ４１８は、第２のＡＩＰＲ４１４と同様に動作する。続けて、先行パケットは、ネットワーク４０６に転送され、そのネットワーク４０６において先行パケットは、第４のＡＩＰＲ４２２を通過し、この第４のＡＩＰＲ４２２が第４の中間地点となる。宛先サービス４２８への経路に沿った最後のＡＩＰＲ（第４のＡＩＰＲ）４２２に関しては、３つのシナリオが考えられる。
【００６２】
第１のシナリオにおいては、宛先サービスへの先行パケットを処理するために、宛先サービスの比較的に近くに位置する１つまたは複数のＡＩＰＲが設けられる。それらのＡＩＰＲを、各自のデータベースに、例えばサービスソケット番号またはサービスのその他のユニークな識別子によって宛先サービスを識別するための情報を記憶することによって設けることができる。これらの「終端」ＡＩＰＲは、宛先サービスにパケットを転送できることをブロードキャストする。終端ＡＩＰＲは、パケットが別のＡＩＰＲを通過することなく、パケットを宛先サービスに転送することができるＡＩＰＲである。終端ＡＩＰＲは、そのＡＩＰＲにおいて終端するサービス宛ての先行パケットを、宛先サービスソケット番号をＡＩＰＲのデータベースに提供されている情報と比較することによって認識する。
【００６３】
第４のＡＩＰＲ４２２がそのように設けられている場合、第４のＡＩＰＲ４２２は、先行パケットをその本来の形に、すなわち送信元クライアント４２６が先行パケットを送信したときにその先行パケットが有していた形に復元することができるか、またはルータ４３０によって変更することができたパケットとして、例えばルータ４３０によって実施されたネットワークアドレス変換（ＮＡＴ：Ｎｅｔｗｏｒｋ  Ａｄｄｒｅｓｓ  Ｔｒａｎｓｌａｔｉｏｎ）の結果を復元することができる。したがって、先行パケットを、中間地点４０８、４１４および４１８によって行われたいずれの変更も含んでいない形に復元することができる。続けて、第４のＡＩＰＲ４２２は、先行パケットを宛先サービス４２８に転送する。第３のＡＩＰＲ４１８と同様に、第４のＡＩＰＲ４２２は、自身のデータベースに、第３のＡＩＰＲ４１８をそのセッションに関する１つ前のＡＩＰＲとして識別する情報を記憶する。
【００６４】
第２のシナリオにおいては、第４のＡＩＰＲ４２２には、宛先サービス４２８に関する情報が供給されない。その種の実施の形態においては、第４のＡＩＰＲ４２２は、第２のＡＩＰＲ４１４および第３のＡＩＰＲ４１８が動作するのと同じように動作することができる。第４のＡＩＰＲ４２２は、先行パケットを変更して自然に転送し、先行パケットが、最終的に宛先サービス４２８に送信される。宛先サービス４２８は、先行パケットに応答する。例えば、先行パケットが、ＴＣＰセッションを開始するためのＳＹＮパケットである場合、宛先サービス４２８は、ＡＣＫパケットまたはＳＹＮ／ＡＣＫパケットで応答する。第４のＡＩＰＲ４２２は、戻りパケットを、例えばその戻りパケットにおける送信元クライアント／宛先サービスのネットワークアドレスとポート番号のペアに基づいて、セッションの一部として認識する。さらに、戻りパケットは別のＡＩＰＲからではなく、宛先サービス４２８から送信されたものなので、第４のＡＩＰＲ４２２は、自身がこのサービスに関する経路に沿った最後のＡＩＰＲであることを認識する。
【００６５】
第４のＡＩＰＲ４２２は、この第４のＡＩＰＲ４２２が終端ＡＩＰＲであることを示す情報を自身のデータベースに記憶する。第４のＡＩＰＲ４２２がセッションの後続パケットを受信すると、第４のＡＩＰＲ４２２は、後続パケットをその本来の形に、すなわち送信元クライアント４２６が後続パケットを送信したときにその後続パケットが有していた形に復元することができるか、またはルータ４３０によって変更することができたパケットとして、例えばルータ４３０によって実施されたネットワークアドレス変換（ＮＡＴ）の結果を復元することができる。第４のＡＩＰＲ４２２は、後続パケットを宛先サービス４２８に転送する。
【００６６】
第４のＡＩＰＲ４２２は、戻りパケットを、その第４のＡＩＰＲ４２２が第３のＡＩＰＲ４１８からの先行パケットを受信したインタフェースにおけるポート番号、ならびに第４のＡＩＰＲ４２２のネットワークアドレスを含むように変更する。続けて、第４のＡＩＰＲ４２２は、戻りパケットを第３のＡＩＰＲ４１８に転送する。戻りパケットをその他のルータによって転送できるにもかかわらず、第４のＡＩＰＲ４２２は、特に戻りパケットを第３のＡＩＰＲ４１８宛てに送る。これによって、先行パケットが辿った経路に沿って、先行パケットが通過したすべての中間地点を逆の順序で通過する、戻りパケットの移動が開始される。したがって、戻りパケットは、自然なルーティングによって送信元クライアント４２６に戻るのではない。この種の戻りパケットのルーティングは、本発明者が知っている従来技術に教示されているいずれのルーティングとも異なるものである。
【００６７】
第３のＡＩＰＲ４１８は、変更された戻りパケットを受信し、その戻りパケットは、第３のＡＩＰＲ４１８が以前に割り当てたものであり、かつそのセッションに関連付けられているポート番号宛てに送られたものであることから、第３のＡＩＰＲ４１８は、戻りパケットがセッションの一部であること、またはセッションの一部である可能性が高いことを想定できる。第３のＡＩＰＲ４１８は、戻りパケットから、第４のＡＩＰＲ４２２のネットワークアドレスおよびポート番号を、このセッションに関する１つ次の中間地点としてそのＡＩＰＲのデータベースにコピーする。第３のＡＩＰＲ４１８がセッションの後続パケットを受信すると、第３のＡＩＰＲ４１８は、それらの後続パケットを、１つ次の中間地点の、すなわち第４のＡＩＰＲ４２２のネットワークアドレスおよびポート番号に転送する。
【００６８】
したがって、ＡＩＰＲにセッションの経路に沿った１つ次のＡＩＰＲのネットワークアドレスおよびポート番号が一度通知されると、ＡＩＰＲは、後続パケットの自然なルーティングを行わずに、その１つ次のＡＩＰＲへと後続パケットを転送する。
【００６９】
第３のＡＩＰＲ４１８は、戻りパケットを、第３のＡＩＰＲ４１８のデータベースにそのネットワークアドレスおよびポート番号が記憶されており、かつセッションの１つ前の中間地点として識別されている第２のＡＩＰＲ４１４に転送する。同様に、送信元クライアント４２６へと戻る経路に沿った各中間地点は、戻りパケットを自身の１つ前の中間地点にそれぞれ転送する。
【００７０】
最初の中間地点、すなわち第１のＡＩＰＲ４０８が戻りパケットを受信すると、その中間地点は戻りパケットをその本来の形に、すなわち宛先サービス４２８が戻りパケットを送信したときにその戻りパケットが有していた形に復元することができるか、またはルータ４３０によって変更することができたパケットとして、例えばルータ４３０によって実施されたネットワークアドレス変換（ＮＡＴ）の結果を復元することができる。最初の中間地点が、先行パケットは最初の中間地点に到達する前にその他のいずれの中間地点も通過しなかったことを示すフラグを自身のデータベースにセットしていたことを想起されたい。このフラグは、戻りパケットを復元して、その復元された戻りパケットを送信元クライアント４２６に転送することを最初の中間地点に知らせるために使用される。最初の中間地点は、戻りパケットを送信元クライアント４２６に転送する。後続の戻りパケットも同様に処理される。
【００７１】
図４には図示していない第３のシナリオにおいては、先行パケットを受信するための最後のＡＩＰＲが、宛先サービスのネットワークアドレスと同じネットワークアドレスを有している。例えば、宛先サービスのネットワークアドレスをゲートウェイルータ／ＡＩＰＲに与えることができ、またゲートウェイルータ／ＡＩＰＲは、サービスリクエストを処理することができるか、またはサービスを実施するために、自身のルーティングテーブルを用いて、パケットを別のノードに転送することができる。最後のＡＩＰＲは、上記において説明したように、先行パケットおよび後続パケットを復元することができる。
【００７２】
先行パケットの識別
上記において述べたように、中間地点はセッションの先行パケットを識別できるべきである。先行パケットを識別するために種々の技術を使用することができる。それらの技術のうちの幾つかはプロトコル固有のものである。例えば、ＴＣＰセッションは、ＳＹＮパケット、ＳＹＮ−ＡＣＫパケットおよびＡＣＫパケットを含んでいる公知の３ウェイハンドシェイクに従って開始される。ノードペア間のパケット交換をステートフルに追跡することによって、中間地点は、セッションの開始を識別することができ、また多くの場合においてセッションの終了を識別することができる。例えば、ＦＩＮフラグをパケットに含ませて、その他のノードがＡＣＫを送信することによって、または単純にＲＳＴフラグをパケットに含ませることによって、ＴＣＰセッションを終了させることができる。各中間地点は、各セッションに関する状態情報、例えば送信元クライアント／宛先サービスのネットワークアドレスとポート番号のペアを記憶しているので、中間地点は、受信した各パケットが関連付けられているセッションを識別することができる。中間地点は、セッションの終点から送信されたメッセージおよびフラグ、例えばＳＹＮおよびＦＩＮを監視することによって、また各セッションに関する状態情報を自身のデータベースに記憶することによって、各セッションのプロトコル状態を追跡することができる。パケットトラフィックのそのようなステートフルな監視は、本発明者が知っている従来技術には教示されていない。その代わりに、従来技術からはこのタイプのセッションとは異なるものが知られている。
【００７３】
ＳＹＮパケットを再送することができ、各ＳＹＮパケットが別個のセッションを開始する必要はないことを言及しておく。しかしながら、中間地点は、セッションを開始するＳＹＮパケットと、例えば応答パケットに基づいて再送されたＳＹＮパケットとを区別することができる。
【００７４】
プロトコルがセッションを終了するためのパケットシーケンスを規定していなければ、中間地点は、タイマを使用することができる。セッションに関してパケットが全く処理されずに事前に規定された長さの時間が経過すると、中間地点は、そのセッションが終了していると想定することができる。そのようなタイムアウト時間を、終了シーケンスを規定するプロトコルを使用して、セッションに適用することもできる。
【００７５】
表２には、種々のプロトコルに従って、セッションの開始および終了を識別するための例示的な種々の技術が記載されている。それらのプロトコルの規定に基づいて、類似の技術をその他のプロトコルのために発展させることができる。
【表２】
2018525941.tif 000004
【００７６】
図５は、宛先ＭＡＣアドレス５０２および８０２．１Ｑ  ＶＬＡＮタグ５０４を含んでいる、イーサネットヘッダ５００の概略的なレイアウトである。図６は、プロトコルフィールド６０２、送信元ＩＰアドレス６０４および宛先ＩＰアドレス６０６を含んでいる、ＩＰヘッダ６００の概略的なレイアウトである。図７は、送信元ポート７０２、宛先ポート７０４、シーケンス番号７０６、ＳＹＮフラグ７０８およびＦＩＮフラグ７１０を含んでいる、ＴＣＰヘッダ７００の概略的なレイアウトである。これらのパケットおよび識別フィールドを、表３にまとめたように、セッションの開始を識別するために使用することができる。
【表３】
2018525941.tif 000005
【００７７】
拡張型ＩＰルータ（ＡＩＰＲ）
図８は、本発明の図示の実施の形態に従って構成されているＡＩＰＲ（中間地点）８００の概略的なブロック図である。ＡＩＰＲ８００は、少なくとも２つのネットワークインタフェース８０２および８０４を含んでおり、それら２つのネットワークインタフェース８０２、８０４を介して、ＡＩＰＲ８００を２つのネットワークに接続することができる。ネットワークインタフェース８０２および８０４は、例えば、イーサネットインタフェースであってよい。ＡＩＰＲ８００は、ネットワークインタフェース８０２および８０４を介して、パケットを送信および受信することができる。
【００７８】
先行パケット識別器８０６は、本明細書において考察するように、先行パケットを自動的に識別する。一般的に、先行パケット識別器８０６は、ＡＩＰＲの情報ベース８１０にまだ存在しないセッションに関連するパケット、例えば新たな送信元クライアント／宛先サービスのネットワークアドレスとポート番号のペアを識別するパケットを受信すると、先行パケットを識別する。上記において述べたように、各先行パケットは、一連のパケット（パケットシリーズ／セッション）の脱落してない最初のパケットである。各セッションは、先行パケットおよび少なくとも１つの後続パケットを含んでいる。順方向のフロー制御に関しては、先行パケットおよびすべての後続パケットが、同一の送信元クライアントから同一の宛先サービスに送信される。順方向および逆方向のフロー制御に関しては、セッションのすべてのパケットが、送信元クライアントから宛先サービスに送信されて、宛先サービスから送信元クライアントに送信される。
【００７９】
セッション（パケットシリーズ）マネージャ８０８が、先行パケット識別器８０６に接続されている。各セッションに対して、セッションマネージャは、ユニークな識別子を割り当てる。ユニークな識別子は、例えば、ＡＩＰＲ８００のネットワークアドレスと、またはインタフェース８０２のネットワークアドレスと、セッションの後続パケットを受信するためにセッションマネージャ８０８によって割り当てられた第１のポート番号との組合せであってよい。ユニークな識別子は、さらに、先行パケットおよび後続パケットを伝送するために、セッションマネージャ８０８によって割り当てられた第２のポート番号と組み合わされた、ＡＩＰＲ８００のネットワークアドレス、または他方のインタフェース８０４のネットワークアドレスを含むことができる。このユニークな識別子は、セッションに関連付けられている。セッションマネージャ８０８は、セッションに関する情報を情報ベース８１０に記憶する。この情報は、本来の送信元クライアント／宛先サービスのネットワークアドレスとポート番号のペアに関連付けられた、ユニークな識別子を含むことができる。
【００８０】
図９は、例示的な中間地点情報ベース９００の概略的なレイアウトである。各行は、セッションを表している。セッション識別列９０２は、送信元クライアント９０４および宛先サービス９０６に関するサブ列を含んでいる。各クライアント９０４に関して、そのネットワークアドレス９０８およびポート番号９１０が記憶されている。各宛先サービス９０６に関して、そのネットワークアドレス９１２およびポート番号９１４が記憶されている。この情報は、先行パケットから抽出される。
【００８１】
セッションに関する状態情報を、状態列９１５に記憶することができる。この情報を、例えばセッションが開始されているか、またはセッションが終了しているときに、一連のパケットをステートフルに追跡するために使用することができる。
【００８２】
逆方向列は、特に１つ前のＡＩＰＲへの逆方向の経路の部分に関する情報９１６を記憶するためのサブ列を含んでいる。逆方向の経路情報９１６は、１つ前のＡＩＰＲに関する情報９１８および現在のＡＩＰＲ８００に関する情報９２０を含んでいる。１つ前のＡＩＰＲに関する情報９１８は、ＡＩＰＲのネットワークアドレス９２２およびポート番号９２４を含んでいる。セッションマネージャ８０８は、先行パケットがＡＩＰＲから転送されたことを前提として、この情報を先行パケットから抽出する。しかしながら、現在のＡＩＰＲ８００が先行パケットを処理するための最初のＡＩＰＲである場合には、情報９１８は、フラグとして空のまま残される。現在のＡＩＰＲ８００に関する情報９２０は、先行パケットを受信したインタフェース８０２のネットワークアドレス９２６と、セッションマネージャ８０８によって割り当てられた第１のポート番号９２８と、を含んでいる。
【００８３】
中間地点情報ベース９００は、特に１つ次のＡＩＰＲへの順方向の経路の部分に関する情報９３０を記憶するようにも構成されている。この情報９３０は、現在のＡＩＰＲ８００に関する情報９３２と、１つ次のＡＩＰＲが存在することを前提として、経路に沿った１つ次のＡＩＰＲに関する情報９３４と、を含んでいる。情報９３２は、現在のＡＩＰＲが先行パケットおよび後続パケットを送信する際に使用するインタフェースのネットワークアドレス９３６と、セッションマネージャ８０８によって割り当てられた第２のポート番号９３８と、を含んでいる。経路に沿った１つ次のＡＩＰＲに関する情報９３４は、ＡＩＰＲに順方向の経路に関する情報が供給されない限り利用できない。１つ次のＡＩＰＲに関する情報９３４は、そのネットワークアドレス９４０およびポート番号９４２を含んでいる。１つ次のＡＩＰＲに関する情報９３４をまだ利用できない場合には、下記において説明するように、ＡＩＰＲ８００が戻りパケットを処理する際に、情報９３４を埋めることができる。
【００８４】
中間地点情報ベース９００の幾つかの実施の形態は、逆方向情報９１６を含まずに、順方向情報９３０を含むことができる。中間地点情報ベース９００の別の実施の形態は、順方向情報９３０を含まずに、逆方向情報９１６を含むことができる。
【００８５】
再び図８を参照すると、先行パケット変更器８１２が、セッションマネージャ８０８と接続されている。先行パケット変更器８１２は、先行パケットを変更し、セッションに関連付けられているユニークな識別子を記憶する。必要に応じて、本来の送信元クライアントのネットワークアドレスとポート番号のペアおよび本来の宛先サービスのネットワークアドレスとポート番号のペアが、変更された先行パケットに記憶される。パケットに記憶される付加的な情報を含むために先行パケットを拡張することができるか、または先行パケット内の既存のスペース、例えばベンダ固有の属性フィールドを使用することができる。付加的な情報を伝送するためのその他の技術はプロトコル固有であり、例えばＴＣＰを用いて、付加的な情報をＴＣＰオプションフィールドとして伝送することができるか、またはデータとしてＳＹＮパケットに付加することができる。いずれのケースにおいても、セッションデータブロックという用語は、変更された先行パケットに付加された情報を参照する際に用いられる。
【００８６】
図１０は、本来の送信元ＩＰアドレス１００２および宛先ＩＰアドレス１００４の各ＩＰアドレスと、本来の送信元ポート番号１００６および宛先ポート番号１００８の各ポート番号と、が示されている、例示的に変更された先行パケット１０００の概略図である。図１０には、変更された先行パケット１０００内のセッションデータブロック１０１０も示されている。セッションデータブロック１０１０は、連続的なものとして示されているが、それとは異なり、変更された先行パケット１０００にわたりその内容が分散されていてもよい。セッションデータブロック１０１０は、送信を行うＡＩＰＲの識別子、すなわち中間ノード識別子１０１２、例えば第２のネットワークインタフェース８０４のネットワークアドレスおよび第２のポート番号を記憶することができる。
【００８７】
再び図８を参照する。先行パケット変更器８１２は、必要に応じて、パケットの何らかの拡張を反映させるためにパケット長を更新する。先行パケット変更器８１２は、パケットに対して行われた変更を反映させるために、パケットのチェックサムを更新する。続けて、変更された先行パケットは、パケットルータ８１４によって第２のネットワークインタフェース８０４を介して伝送される。ＡＩＰＲ８００に順方向経路情報が供給されていなければ、変更された先行パケットは自然にルーティングされる。
【００８８】
最終的には、宛先サービスが、戻りパケットを送信する。ＡＩＰＲ８００は、第２のネットワークインタフェース８０４を介して戻りパケットを受信する。現在のＡＩＰＲ８００と宛先サービスとの間の別のＡＩＰＲ（下流側のＡＩＰＲ）が先行パケットおよび戻りパケットを処理する場合には、下流側のＡＩＰＲが戻りパケットを変更して、下流側のＡＩＰＲのネットワークアドレスおよびポート番号を含ませる。ダウンストリームコントローラ識別器８１６は、本明細書において説明したように、ステートフルな診断を使用して、戻りパケットを識別する。ダウンストリームコントローラ識別器８１６は、１つ次のＡＩＰＲに関する情報９３４（図９を参照されたい）を、特にネットワークアドレスおよびポート番号を、中間地点情報ベース９００に記憶する。
【００８９】
現在のＡＩＰＲ８００は、この情報を使用して、後続パケットを１つ次のＡＩＰＲ宛てに送ることができる。特に、後続パケット変更器８１８は、後続パケットの宛先アドレスを、直接的に宛先サービスへと続く中間地点のネットワークアドレスおよびポート番号の代わりに、１つ次の中間地点のネットワークアドレス９４０およびポート番号９４２（図９を参照されたい）にセットすることができる。パケットルータ８１４は、後続パケットをそれらの変更された宛先アドレスに従って送信する。したがって、一連の各パケットに関して、後続パケットは、それら一連のパケットの先行パケットと同一のダウンストリームパケットフローコントローラを介して流れる。
【００９０】
最終パケット識別器８２０は、上記において考察したように、各ストリームの最後を識別するために、各セッションをステートフルに追跡する。上記において述べたように、幾つかのケースにおいては、終了が最後のパケットによって、例えばＲＳＴフラグがセットされているＴＣＰパケット、またはＦＩＮフラグがセットされている、ＴＣＰパケットに対する応答のＴＣＰ  ＡＣＫパケットによって明示される。その他のケースにおいては、タイマの期間満了によって、終了を明示することができる。セッションの終了が検出されると、パケットシリーズマネージャ８０８は、セッションからユニークな識別子を分離し、中間地点情報ベース９００からセッションに関する情報を削除する。
【００９１】
ＡＩＰＲ８００が宛先サービスの手前の最後のＡＩＰＲとなるように設けられている場合、先行パケット変更器８１２は、先行パケットを、送信元クライアントが先行パケットを送信したときに先行パケットが有していた状態に復元することができるか、または先行パケットが変更されたときの状態に復元することができ、例えばネットワークアドレス変換（ＮＡＴ）の結果を復元することができる。同様に、後続パケット変更器８１８は後続パケットを復元する。
【００９２】
同様に、先行パケットの宛先アドレスが、ＡＩＰＲ８００のネットワークアドレスと同じである場合、または、先行パケットを受信する際に使用するＡＩＰＲ８００のネットワークインタフェース８０２のネットワークアドレスと同じである場合、先行パケット変更器８１２および後続パケット変更器８１８は、先行パケットおよび後続パケットを復元する。
【００９３】
上記において述べたように、幾つかのプロトコルにおいては、セッションを開始するために、例えばＴＣＰのＳＹＮ−ＳＹＮ／ＡＣＫ−ＡＣＫハンドシェイクを用いる場合のように、種々のパケットが要求される。したがって、ダウンストリームコントローラ識別器８１６は、セッションが開始されたとみなす前に、宛先サービスから第２の戻りパケットを受信するまで待機することができる。
【００９４】
上記において述べたように、中間地点８００の幾つかの実施の形態は、戻りパケット経路も管理する。先行パケット識別器８０６は、先行パケットが上流側の中間地点から中間地点８００に転送されたか否かを自動的に確認する。先行パケットがセッションデータブロックを含んでいる場合、上流側の中間地点は、先行パケットを転送している。パケットシリーズマネージャ８０８は、上流側の中間地点に関する情報を中間地点情報ベース８１０に記憶する。戻りパケット識別器８２２は、第２のネットワークインタフェース８０４から戻りパケットを受信し、セッションの戻りパケットを自動的に識別する。それらの戻りパケットを、そのセッションに対応する、中間地点情報ベースにおける情報９３２（図９を参照されたい）に等しい宛先アドレスおよびポート番号によって識別することができる。戻りパケット変更器は、戻りパケットを変更し、中間地点情報ベース９００における情報９１８によって識別されたように、そのセッションに関する上流側の中間地点宛てにそれらの戻りパケットを送る。
【００９５】
パケットのステートフルな監視は、従来のルータによって行われないことを言及しておく。ルータによるパケットのステートフルな監視は、本発明者が知っている従来技術には教示されていない。しかしながら、パケットのステートフルな監視は、本願に開示した中間地点の１つの態様である。本発明の実施の形態によるこのタイプの監視は、従来技術のものとは区別される。
【００９６】
図１１は、本発明の図示の実施の形態によるＡＩＰＲ８００（図８を参照されたい）によって実施される幾つかの動作を概略的に説明するフローチャート１１００を含んでいる。このフローチャート１１００は、ＩＰネットワークにおける起源ノードから宛先ノードへとセッションのパケットを案内するためのパケットルーティング方法を示している。１１０２においては、中間ノードがセッションにおける複数のパケットのうちの先行パケットを取得する。この中間ノードは、ルーティング機能を実施するルーティングデバイスまたはスイッチングデバイスを含むことができる。
【００９７】
セッションにおけるパケットは、ユニークなセッション識別子を有している。１１０４では、先行パケットが通過した、１つ前のノードが特定される。この１つ前のノードは、前ノード識別子を有している。１１０６では、前ノード識別子とセッション識別子との戻り関連付けが形成される。１１０８では、セッションに関する状態情報を保持するために、戻り関連付けがメモリに記憶される。
【００９８】
１１１０では、少なくとも中間ノードを識別するために、先行パケットが変更される。１１１２では、先行パケットが、ＩＰネットワークに対する中間ノード電子出力インタフェースを介して、宛先ノードに転送される。電子出力インタフェースは、ＩＰネットワークと通信する。１１１４では、逆方向メッセージ（例えば、「逆方向パケット」と称するパケット）が、中間ノードの電子入力インタフェースを介して受信される。逆方向メッセージは、１つ次のノードから受信される。この１つ次のノードは、次ノード識別子を有している。逆方向メッセージは、次ノード識別子およびセッション識別子を含んでいる。電子入力インタフェースは、ＩＰネットワークと通信する。
【００９９】
１１１６では、次ノード識別子とセッション識別子との順方向関連付けが形成される。１１１８では、セッションに関する状態情報を保持するために、順方向関連付けがメモリに記憶される。１１２０では、セッションの付加的なパケットが取得される。１１２２では、セッションにおける実質的にすべての付加的なパケットが、記憶されている順方向関連付けを使用して、１つ次のノードに転送される。付加的なパケットは、中間ノードの電子出力インタフェースを介して転送される。
【０１００】
１１２４では、複数のパケットが、戻りセッションにおいて、またはセッションの戻り部分において、宛先ノードから受信される。戻りセッションは、起源ノードに宛てに送られる。１１２６では、戻りセッションにおける実質的にすべてのパケットが、記憶されている戻り関連付けを使用して、１つ前のノードに転送される。パケットは、電子出力インタフェースを介して転送される。
【０１０１】
図１２において１２００に示されているように、先行パケットの宛先ノードへの転送１１１２は、１つ次のノードに関するルーティング情報を有しているルーティング情報ベースへのアクセスを含むことができる。１２０２に示されているように、中間ノードは、ルーティングテーブルを有することができ、また先行パケットの宛先ノードへの転送１１１２は、先行パケットを宛先ノードに転送するためのルーティングテーブルの使用を含むことができる。１２０４に示されているように、先行パケットの宛先ノードへの転送１１１２は、先行パケットを１つ次のノード宛てに送るための次ノード識別子の使用を含むことができる。
【０１０２】
先行パケットの宛先を規定することができるので、先行パケットが転送された後、かつ１つ次のノードが先行パケットを受信する前に、複数のネットワークデバイスが先行パケットを受信する。
【０１０３】
ＡＩＰＲ８００およびそのコンポーネント８０２〜８２４のすべてまたは一部を、メモリに記憶されている命令を実行するプロセッサ、ハードウェア（例えば組合せロジック、特定用途向け集積回路（ＡＳＩＣ：Ａｐｐｌｉｃａｔｉｏｎ  Ｓｐｅｃｉｆｉｃ  Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔｓ）、フィールドプログラマブルゲートアレイ（ＦＰＧＡ：Ｆｉｅｌｄ−Ｐｒｏｇｒａｍｍａｂｌｅ  Ｇａｔｅ  Ａｒｒａｙｓ）またはその他のハードウェア）、ファームウェアまたはそれらの組合せによって実施することができる。
【０１０４】
拡張されたセッション管理
上記において説明した特定の実施例においては、セッションが、ＡＩＰＲのネットワークアドレスと、ＡＩＰＲによって割り当てられた送信元ポート番号と、の組合せに基づいて識別される。例えば、あるセッションに関する先行パケット（最初の中間地点ＡＩＰＲによって受信された本来の先行パケット、または下流側の中間地点ＡＩＰＲによって受信された、変更された先行パケット）の受信に基づいて、各中間地点ＡＩＰＲは、そのセッションに送信元ポート番号を割り当てることができ、また割り当てられた送信元ポート番号を、出力インタフェースを介して転送される、変更された先行パケットの一部として含ませることができる。そのような変更された先行パケットを受信する下流側のＡＩＰＲは、受信した送信元ネットワークアドレス（受信ＡＩＰＲが最初の中間地点ＡＩＰＲである場合には、本来の送信元ネットワークアドレスであってよいか、または受信ＡＩＰＲが下流側の中間地点ＡＩＰＲである場合には、先行の上流側の中間地点ＡＩＰＲのネットワークアドレスであってよい）と、そのセッションに関する識別子としての、受信した送信元ポート番号と、の組合せを使用することができる。特定の実施例においては、各中間地点ＡＩＰＲが、後に、（存在する場合には）下流側のＡＩＰＲによって割り当てられたポート番号を学習して、この宛先ポート番号をセッションに関連させて記憶する。ＡＩＰＲのネットワークアドレスと１６ビットの送信元ポート番号との組合せによって、論理的には２＾１６−１＝６５，５３５までのセッションに、特定のＡＩＰＲネットワークアドレスを割り当てることができ、これは場合によっては過度に制限される場合もある。
【０１０５】
したがって、種々の代替的な実施の形態においては、各中間地点ＡＩＰＲが、送信元アドレス、送信元ポート番号、宛先アドレス、宛先ポート番号、およびプロトコル識別子を含んでいる、５組の情報を使用して、セッションに関連付けられたパケットを識別する。各中間の中間地点ＡＩＰＲは、１つ次の中間地点ＡＩＰＲに転送されるセッション関連パケットに、送信元ポート番号および宛先ポート番号の両方を割り当て、割り当てられた送信元ポート番号および割り当てられた宛先ポート番号を、変更された先行パケットの一部として運び、出力インタフェースを介して転送する。そのような変更された先行パケットを受信する下流側のＡＩＰＲは、セッションに関する戻り関連付け情報としての、受信したパケットに由来する５組の情報を使用する。したがって、送信ＡＩＰＲに返送されるパケットにポート番号を割り当てるのではなく、受信ＡＩＰＲは、受信した送信元ポート番号および宛先ポート番号を使用する。ＡＩＰＲが両方のポート番号を割り当てることによって、また受信ＡＩＰＲが割り当てられたポート番号を使用することによって、２つのＡＩＰＲ間でサポートすることができるセッションの数は、所定の送信元ネットワークアドレス、宛先ネットワークアドレス、およびプロトコル識別子に関して、少なくとも（６５，５３５）2まで増える。
【０１０６】
図１３は、１つの実施例に従い、所定の送信元（ＡＩＰＲ）ネットワークアドレス、宛先ネットワークアドレス、およびプロトコル識別子に関して、送信元ポート番号および宛先ポート番号をどのように関連付けることができるかを概略的に表す。この例では、最初の６５，５３５個のセッション（すなわち、セッション番号１から始まるセッション）には、それらの各セッションに対して使用される異なる宛先ポート番号と共に、送信元ポート番号１が関連付けられ、次の６５，５３５個のセッション（すなわち、セッション番号６５，５３６から始まるセッション）には、それらの各セッションに対して使用される異なる宛先ポート番号と共に、送信元ポート番号２が関連付けられ、また後続のセッションについても同様の関連付けが行われる。したがって、丁度６５，５３５個のセッションではなく、少なくとも（６５，５３５）2個のセッションを、中間地点ＡＩＰＲの各ペア間でサポートすることができる。
【０１０７】
以下では、送信元ポート番号および宛先ポート番号の組合せを基礎とする、拡張されたセッション管理を、図１４〜図１９を参照しながら例示的に説明する。特に、図１４は、３つのＡＩＰＲデバイス（「ノードＡ」、「ノードＢ」および「ノードＣ」と記す）を介する送信元デバイスから宛先デバイスまでの先行パケット処理の一例を提供する概略図であり、ここでは、送信元デバイスがネットワークアドレス１．１．１．１を有しており、ノードＡがネットワークアドレス２．２．２．２を有しており、ノードＢがネットワークアドレス３．３．３．３を有しており、ノードＣがネットワークアドレス４．４．４．４を有しており、また宛先デバイスがネットワークアドレス５．５．５．５を有している。図１５は、図１４の先行パケット処理を基礎とする、ノードＡに関連付けられたセッション関連データを示す概略図である。図１６は、図１４の先行パケット処理を基礎とする、ノードＢに関連付けられたセッション関連データを示す概略図である。図１７は、図１４の先行パケット処理を基礎とする、ノードＣに関連付けられたセッション関連データを示す概略図である。図１８は、図１４において確立されたセッションについて複数のＡＩＰＲデバイスを介して送信元デバイスから宛先デバイスへと送信された一例としてのパケットに関する、セッションパケット処理の一例を提供する概略図である。図１９は、図１４において確立されたセッションについて複数のＡＩＰＲデバイスを介して宛先デバイスから送信元デバイスへと送信された戻りパケットに関する、セッションパケット処理の一例を提供する概略図である。
【０１０８】
以下の実施例においては、各ＡＩＰＲが、自身のルーティング情報ベースに含まれているネットワーク／ネクストホップ関連付けに関して、ネットワーク内のその他のＡＩＰＲの先験的な知識を有していること、例えば、特定のＡＩＰＲは、特定の宛先ネットワークアドレスに関する出力ポートだけでなく、（存在する場合には）その宛先ネットワークアドレスを使用する１つ次の中間地点ＡＩＰＲも知っていることを前提とする。
【０１０９】
図１４を参照すると、送信元デバイスが、本来の先行パケット１４０１を、宛先デバイスに送信する。この例では、本来の先行パケット１４０１が、１．１．１．１の送信元アドレス（ＳＡ）、１０の送信元ポート番号（ＳＰ）、５．５．５．５の宛先アドレス（ＤＡ）、２０の宛先ポート番号、および１００のプロトコル識別子を含んでいる。分かり易くするために、１つのパケット内の送信元アドレス、送信元ポート番号、宛先アドレス、宛先ポート番号、およびプロトコル識別子の組合せを、以下では総称的に「５タプル」と表す。
【０１１０】
この例においては、ノードＡが、送信元１．１．１．１に対するデフォルトルータ／ゲートウェイであるので、先行パケット１４０１は、ネットワークによってノードＡにルーティングされ、このノードＡが、先行パケット１４０１を、上記において考察したような新たなセッション（この例では、「セッションＸ」と記す）に関する先行パケットとして識別し、またこの先行パケット１４０１はセッションメタデータを含んでいる変更された先行パケットではないことも特定する。したがって、ノードＡは、自身がセッションＸに関する最初の中間地点ＡＩＰＲであることを特定し、またインジケータを記憶し、それによって、最初の中間地点ＡＩＰＲとして、セッションに関連付けられた後続のパケットを処理する。このことは、図１５において「フラグ＝最初の中間地点ＡＩＰＲ」として表されている。
【０１１１】
ノードＡは、受信した先行パケット１４０１に由来する５タプル情報を、セッションＸに関する戻り関連付け（ＲＡ）として記憶する。このことは、図１５において「戻り関連付け」情報として表されている。分かり易くするために、特定のセッションに関連付けられた、送信元アドレス、送信元ポート番号、宛先アドレス、宛先ポート番号、およびプロトコル識別子の情報は、図１５〜図１７において、セッション送信元アドレス（ＳＳＡ）、セッション送信元ポート番号（ＳＳＰ）、セッション宛先アドレス（ＳＤＡ）、セッション宛先ポート番号（ＳＤＰ）、およびセッションプロトコル識別子（ＳＰＲ）としてそれぞれ表されている。
【０１１２】
出力インタフェースを介して、変更された先行パケット（すなわち、変更された先行パケット１４０２）を転送するために、ノードＡは、５．５．５．５の本来の宛先アドレスに関するルーティング情報（例えば、出力ポートおよび１つ次のノードの情報）を参照するために、自身のルーティング情報ベースにアクセスする。この例では、ノードＡが、５．５．５．５の本来の宛先アドレスに基づいて、ノードＢを１つ次の中間地点ＡＩＰＲとして識別する。続いて、ノードＡは、セッションに関連付けられた出力パケットに送信元ポート番号および宛先ポート番号（この例では、送信元ポート番号３０および宛先ポート番号４０）を割り当て、また結果として生じた５タプルを、セッションに関連付けられた出力パケットに関する転送関連付け（ＦＡ）として記憶する。このことは、図１５において、「転送関連付け」情報として示されている。暗示的に、２．２．２．２のノードＡのネットワークアドレスは、出力インタフェースを介して転送される、セッション関連パケットに関する送信元アドレスになる。
【０１１３】
ノードＡは、自身に記憶されている転送関連付け情報を使用して、変更された先行パケット１４０２を生成する。この例においては、変更された先行パケット１４０２が、送信元アドレス（ＳＡ）としての２．２．２．２のノードＡのネットワークアドレス、送信元ポート番号（ＳＰ）としての３０の割り当てられたセッション送信元ポート番号（ＳＳＰ）、宛先アドレス（ＤＡ）としての３．３．３．３のノードＢのアドレス、宛先ポート番号（ＤＰ）としての４０の割り当てられたセッション宛先ポート番号（ＳＤＰ）、およびプロトコル識別子（ＰＲ）としての１００の受信したプロトコル識別子を含んでいる。またノードＡは、１．１．１．１の本来の送信元アドレス（ＯＳＡ）、１０の本来の送信元ポート番号（ＯＳＰ）、５．５．５．５の本来の宛先アドレス（ＯＤＡ）、および２０の本来の宛先ポート番号も、メタデータとして、変更された先行パケット１４０２に含ませる。この情報は、先行パケットに追加されたメタデータであることを表すために括弧内に示されている。ノードＡは、変更された先行パケット１４０２をノードＢに転送する。
【０１１４】
変更された先行パケット１４０２はノードＢに到達し、このノードＢは、上記において考察したように、新たなセッションに関する先行パケットとして、変更された先行パケット１４０２を識別し、また変更された先行パケット１４０２がセッションメタデータを含んでいる変更された先行パケットであることも特定する。したがって、ノードＢは、自身がセッションに関する最初の中間地点ＡＩＰＲではないことを特定する。
【０１１５】
ノードＢは、受信した、変更された先行パケット１４０２に由来する５タプル情報を、セッションＸに関する戻り関連付け（ＲＡ）として記憶する。このことは、図１６において「戻り関連付け」情報として表されている。
【０１１６】
出力インタフェースを介して、変更された先行パケット（すなわち、変更された先行パケット１４０３）を転送するために、ノードＢは、５．５．５．５の本来の宛先アドレスに関するルーティング情報（例えば、出力ポートおよび１つ次のノードの情報）を参照するために、自身のルーティング情報ベースにアクセスする。この例では、ノードＢが、５．５．５．５の本来の宛先アドレスに基づいて、ノードＣを１つ次の中間地点ＡＩＰＲとして識別し、したがって、自身がセッションに関して、中間の中間地点ＡＩＰＲであることを特定する。ノードＢはインジケータを記憶し、それによって、中間の中間地点ＡＩＰＲとして、セッションに関連付けられた後続のパケットを処理する。このことは、図１６において「フラグ＝中間の中間地点ＡＩＰＲ」として表されている。続いて、ノードＢは、セッションに関連付けられた出力パケットに送信元ポート番号および宛先ポート番号（この例では、送信元ポート番号５０および宛先ポート番号６０）を割り当て、また結果として生じた５タプルを、セッションに関連付けられた出力パケットに関する転送関連付け（ＦＡ）として記憶する。このことは、図１６において、「転送関連付け」情報として示されている。暗示的に、３．３．３．３のノードＢのネットワークアドレスは、出力インタフェースを介して転送される、セッション関連パケットに関する送信元アドレスになる。
【０１１７】
ノードＢは、自身に記憶されている転送関連付け情報を使用して、変更された先行パケット１４０３を生成する。この例においては、変更された先行パケット１４０３が、送信元アドレス（ＳＡ）としての３．３．３．３のノードＢのネットワークアドレス、送信元ポート番号（ＳＰ）としての５０の割り当てられたセッション送信元ポート番号（ＳＳＰ）、宛先アドレス（ＤＡ）としての４．４．４．４のノードＣのアドレス、宛先ポート番号（ＤＰ）としての６０の割り当てられたセッション宛先ポート番号（ＳＤＰ）、およびプロトコル識別子（ＰＲ）としての１００の受信したプロトコル識別子を含んでいる。またノードＢは、１．１．１．１の本来の送信元アドレス（ＯＳＡ）、１０の本来の送信元ポート番号（ＯＳＰ）、５．５．５．５の本来の宛先アドレス（ＯＤＡ）、および２０の本来の宛先ポート番号も、メタデータとして、変更された先行パケット１４０３に含ませる（つまりノードＢは、変更された先行パケット１４０２において受信したメタデータを転送する）。この情報は、先行パケットに追加されたメタデータであることを表すために括弧内に示されている。ノードＢは、変更された先行パケット１４０３をノードＣに転送する。
【０１１８】
変更された先行パケット１４０３はノードＣに到達し、このノードＣは、上記において考察したように、新たなセッションに関する先行パケットとして、変更された先行パケット１４０３を識別し、また変更された先行パケット１４０３がセッションメタデータを含んでいる変更された先行パケットであることも特定する。したがって、ノードＣは、自身がセッションに関する最初の中間地点ＡＩＰＲではないことを特定する。
【０１１９】
ノードＣは、受信した、変更された先行パケット１４０３に由来する５タプル情報を、セッションＸに関する戻り関連付け（ＲＡ）として記憶する。このことは、図１７において「戻り関連付け」情報として表されている。
【０１２０】
出力インタフェースを介して、変更された先行パケット（すなわち、変更された先行パケット１４０４）を転送するために、ノードＣは、５．５．５．５の本来の宛先アドレスに関するルーティング情報（例えば、出力ポートおよび１つ次のノードの情報）を参照するために、自身のルーティング情報ベースにアクセスする。この例では、ノードＣが、５．５．５．５の本来の宛先アドレスに基づいて、１つ次のノードは存在せず、したがって自身が最後の中間地点ＡＩＰＲであることを特定する。ノードＣはインジケータを記憶し、それによって、最後の中間地点ＡＩＰＲとして、セッションに関連付けられた後続のパケットを処理する。このことは、図１７において「フラグ＝最後の中間地点ＡＩＰＲ」として表されている。続いてノードＣは、本来の５タプル情報を、セッションに関連付けられた出力パケットに関する転送関連付け（ＦＡ）として記憶する。このことは、図１７において、「転送関連付け」情報として示されている。
【０１２１】
ノードＣは、自身に記憶されている転送関連付け情報を使用して、変更された先行パケット１４０４を生成する。この例においては、変更された先行パケット１４０４が、送信元アドレス（ＳＡ）としての１．１．１．１の本来の送信元アドレス、送信元ポート番号（ＳＰ）としての１０の本来の送信元ポート番号（ＯＳＰ）、宛先アドレス（ＤＡ）としての５．５．５．５の本来の宛先デバイスのアドレス、宛先ポート番号（ＤＰ）としての２０の本来の宛先ポート番号、およびプロトコル識別子（ＰＲ）としての１００の受信した／本来のプロトコル識別子を含んでいる。
【０１２２】
変更された先行パケット１４０４は宛先デバイスに到達し、この宛先デバイスは、変更された先行パケット１４０４を処理する。典型的には、この宛先デバイスには、送信元デバイスに応答パケットを返送する宛先デバイスが含まれる。
【０１２３】
各ノードは複数のセッションに関する情報を記憶できることを言及しておく。例えば、図１５〜図１７には、付加的なセッションＹおよびＺに関して記憶されている情報が概略的に示されている。セッションＸに関して記憶されている情報と同様に、セッションＹおよびＺに関して記憶されている情報は、戻り関連付け（ＲＡ）情報、転送関連付け（ＦＡ）情報、およびフラグを含んでいる。各ノードは、異なるセッションでは異なる役割を有している場合があることを言及しておく。つまり例えば、図１４の例においては、ノードＡが最初の中間地点ＡＩＰＲであり、またノードＣが最後の中間地点ＡＩＰＲであるが、セッションＹに関しては、ノードＡが最後の中間地点ＡＩＰＲになる可能性があり、またセッションＺに関しては、中間の中間地点ＡＩＰＲとなる可能性がある。
【０１２４】
先行パケットが処理され、またセッション関連情報が、送信元デバイスから宛先デバイスへの、中間地点ＡＩＰＲのホップ・バイ・ホップによって確立された後に、送信元デバイスと宛先デバイスとの間でエンド・ツー・エンド通信セッションを確立するために、付加的なパケットを、送信元デバイスと宛先デバイスとの間で交換することができる。
【０１２５】
図１８は、図１４において確立されたセッションについて複数のＡＩＰＲデバイスを介して送信元デバイスから宛先デバイスへと送信された一例としてのパケットに関する、セッションパケット処理の一例を提供する概略図である。
【０１２６】
ここでは、送信元デバイスが、１．１．１．１の送信元アドレス（ＳＡ）、１０の送信元ポート番号（すなわち、本来のＳＰ）、５．５．５．５の宛先アドレス、２０の宛先ポート番号（すなわち、本来のＤＰ）、および１００のプロトコル識別子を有しているセッションパケット１８０１を送信する。ノードＡは、送信元１．１．１．１に対するデフォルトルータ／ゲートウェイであるので、セッションパケット１８０１は、ネットワークによってノードＡにルーティングされる。
【０１２７】
受信したセッションパケット１８０１に含まれている５タプル情報およびノードＡによってメモリに記憶された戻り関連付けに基づいて、ノードＡは、受信したセッションパケット１８０１がセッションＸに関連付けられていることを特定することができる。ノードＡは、図１５に示したように、セッションＸに関連付けられた転送関連付け情報に従い、パケットを転送する。特に、ノードＡによって伝送された、転送されたセッションパケット１８０２は、２．２．２．２の送信元アドレス（ＳＡ）、３０の送信元ポート番号（すなわち、ノードＡによって割り当てられたＳＳＰ）、３．３．３．３の宛先アドレス、４０の宛先ポート番号（すなわち、ノードＡによって割り当てられたＳＤＰ）、および１００のプロトコル識別子を有している。
【０１２８】
転送されたセッションパケット１８０２は、３．３．３．３の宛先アドレス（すなわち、ノードＢのネットワークアドレス）を有しているので、セッションパケット１８０２は、ノードＢにルーティングされる。受信したセッションパケット１８０２に含まれている５タプル情報およびノードＢによってメモリに記憶された戻り関連付けに基づいて、ノードＢは、受信したセッションパケット１８０２がセッションＸに関連付けられていることを特定することができる。ノードＢは、図１６に示したように、セッションＸに関連付けられた転送関連付け情報に従い、パケットを転送する。特に、ノードＢによって伝送された、転送されたセッションパケット１８０３は、３．３．３．３の送信元アドレス（ＳＡ）、５０の送信元ポート番号（すなわち、ノードＢによって割り当てられたＳＳＰ）、４．４．４．４の宛先アドレス、６０の宛先ポート番号（すなわち、ノードＢによって割り当てられたＳＤＰ）、および１００のプロトコル識別子を有している。
【０１２９】
転送されたセッションパケット１８０３は、４．４．４．４の宛先アドレス（すなわち、ノードＣのネットワークアドレス）を有しているので、セッションパケット１８０３は、ノードＣにルーティングされる。受信したセッションパケット１８０３に含まれている５タプル情報およびノードＣによってメモリに記憶された戻り関連付けに基づいて、ノードＣは、受信したセッションパケット１８０３がセッションＸに関連付けられていることを特定することができる。ノードＣは、図１７に示したように、セッションＸに関連付けられた転送関連付け情報に従い、パケットを転送する。特に、ノードＣによって伝送された、転送されたセッションパケット１８０４は、１．１．１．１の送信元アドレス（ＳＡ）（すなわち、本来の送信元アドレス）、１０の送信元ポート番号（すなわち、本来のＳＰ）、５．５．５．５の宛先アドレス（すなわち、本来の宛先アドレス）、２０の宛先ポート番号（すなわち、本来のＤＰ）、および１００のプロトコル識別子を有している。
【０１３０】
転送されたセッションパケット１８０４は、５．５．５．５の宛先アドレス（すなわち、宛先デバイスのネットワークアドレス）を有しているので、転送されたセッションパケット１８０４は、パケットを処理する宛先デバイスにルーティングされる。
【０１３１】
図１９は、図１４において確立されたセッションについて複数のＡＩＰＲデバイスを介して宛先デバイスから送信元デバイスへと送信された戻りパケットに関する、セッションパケット処理の一例を提供する概略図である。
【０１３２】
ここでは、宛先デバイスが、５．５．５．５の送信元アドレス（ＳＡ）、２０の送信元ポート番号（すなわち、本来のＤＰ）、１．１．１．１の宛先アドレス（すなわち、本来の送信元アドレス）、１０の宛先ポート番号（すなわち、本来のＳＰ）、および１００のプロトコル識別子を有している戻りパケット１９０１を送信する。この例では、ノードＣが、宛先５．５．５．５に対するデフォルトルータ／ゲートウェイであるので、戻りパケット１９０１は、ネットワークによってノードＣにルーティングされる。
【０１３３】
受信した戻りパケット１９０１に含まれている５タプル情報およびノードＣによってメモリに記憶された転送関連付けに基づいて、ノードＣは、受信した戻りパケット１９０１がセッションＸに関連付けられていることを特定することができる。ノードＣは、図１７に示したように、セッションＸに関連付けられた戻り関連付け情報に従い、パケットを転送する。特に、ノードＣによって伝送された、転送された戻りパケット１９０２は、４．４．４．４の送信元アドレス（ＳＡ）、６０の送信元ポート番号（すなわち、ノードＢによって割り当てられたＳＳＰ）、３．３．３．３の宛先アドレス、５０の宛先ポート番号（すなわち、ノードＢによって割り当てられたＳＤＰ）、および１００のプロトコル識別子を有している。
【０１３４】
転送された戻りパケット１９０２は、３．３．３．３の宛先アドレス（すなわち、ノードＢのネットワークアドレス）を有しているので、戻りパケット１９０２は、ノードＢにルーティングされる。受信した戻りパケット１９０２に含まれている５タプル情報およびノードＢによってメモリに記憶された転送関連付けに基づいて、ノードＢは、受信した戻りパケット１９０２がセッションＸに関連付けられていることを特定することができる。ノードＢは、図１６に示したように、セッションＸに関連付けられた戻り関連付け情報に従い、パケットを転送する。特に、ノードＢによって伝送された、転送された戻りパケット１９０３は、３．３．３．３の送信元アドレス（ＳＡ）、４０の送信元ポート番号（すなわち、ノードＡによって割り当てられたＳＳＰ）、２．２．２．２の宛先アドレス、３０の宛先ポート番号（すなわち、ノードＡによって割り当てられたＳＤＰ）、および１００のプロトコル識別子を有している。
【０１３５】
転送された戻りパケット１９０３は、２．２．２．２の宛先アドレス（すなわち、ノードＡのネットワークアドレス）を有しているので、戻りパケット１９０３は、ノードＡにルーティングされる。受信した戻りパケット１９０３に含まれている５タプル情報およびノードＡによってメモリに記憶された転送関連付けに基づいて、ノードＡは、受信した戻りパケット１９０３がセッションＸに関連付けられていることを特定することができる。ノードＡは、図１５に示したように、セッションＸに関連付けられた戻り関連付け情報に従い、パケットを転送する。特に、ノードＡによって伝送された、転送された戻りパケット１９０４は、５．５．５．５の送信元アドレス（ＳＡ）、２０の送信元ポート番号（すなわち、本来のＳＰ）、１．１．１．１の宛先アドレス、１０の宛先ポート番号（すなわち、本来のＤＰ）、および１００のプロトコル識別子を有している。
【０１３６】
転送された戻りパケット１９０４は、１．１．１．１の宛先アドレス（すなわち、送信元デバイスのネットワークアドレス）を有しているので、転送された戻りパケット１９０４は、パケットを処理する送信元デバイスにルーティングされる。
【０１３７】
ＡＩＰＲは、種々あるやり方のうちのいずれかによって（例えば、連続的、非連続的、ランダム）、送信元ポート番号および宛先ポート番号を割り当てることができることを言及しておく。
【０１３８】
図２０は、本発明の特定の図示の実施の形態による中間ＡＩＰＲによって実施される幾つかの先行パケット処理動作を概略的に説明するフローチャート２０００を含んでいる。
【０１３９】
ブロック２００２においては、中間ＡＩＰＲがセッションの先行パケットを取得する。ブロック２００４においては、ＡＩＰＲが、受信したパケットに由来する５タプル情報を、セッションに関する戻り関連付け情報として記憶する。
【０１４０】
ブロック２００５においては、ＡＩＰＲが、本来の宛先アドレスに基づいて、１つ次の中間地点ＡＩＰＲを特定する。この特定には、典型的には、ＡＩＰＲが本来の宛先アドレスに関する出力ポートおよび（存在する場合には）１つ次の中間地点ＡＩＰＲを特定することができる、ＡＩＰＲのルーティング情報ベースへのアクセスが含まれる。
【０１４１】
ブロック２００６においては、ＡＩＰＲが、セッション送信元ポート番号およびセッション宛先ポート番号を割り当てる。
【０１４２】
ブロック２００７においては、ＡＩＰＲが、転送関連付けに関する５タプル情報を記憶する。転送関連付けは、送信元アドレスとしてのＡＩＰＲのネットワークアドレス、宛先アドレスとしての次ノードアドレス、割り当てられたセッション送信元ポート番号、割り当てられたセッション宛先ポート番号、および起源プロトコル識別子を含んでいる。
【０１４３】
ブロック２００８においては、ＡＩＰＲが、送信元アドレスとしてのＡＩＰＲのネットワークアドレス、宛先アドレスとしての次ノードアドレス、割り当てられたセッション送信元ポート番号、割り当てられたセッション宛先ポート番号、および起源プロトコル識別子を含んでおり、さらには本来の送信元アドレス、本来の宛先アドレス、本来の送信元ポート番号および本来の宛先ポート番号をメタデータとして含んでいる、変更された先行パケットを生成する。ブロック２０１０においては、ＡＩＰＲが変更された先行パケットを転送する。
【０１４４】
図２０のフローチャートは、上記において考察したような処理とは僅かに異なる処理を実施する、最後の中間地点ＡＩＰＲとは異なる中間ＡＩＰＲに適用されることを言及しておく（例えば、最後の中間地点ＡＩＰＲは、自身の転送関連付け情報に関して、受信したパケットのメタデータに含まれている、本来の送信元アドレス、本来の送信元ポート番号、本来の宛先アドレス、および本来の宛先ポート番号を使用する）。
【０１４５】
図２１は、本発明の特定の図示の実施の形態によるＡＩＰＲによって実施される幾つかのパケット処理動作を概略的に説明するフローチャート２１００を含んでいる。ブロック２１０２においては、ＡＩＰＲがセッション関連パケットを受信する。ブロック２１０４においては、ＡＩＰＲが、セッション関連パケットは宛先デバイスにルーティングされるか、または宛先デバイスからルーティングされるかを特定する。ブロック２１０６において、セッション関連パケットが宛先デバイスにルーティングされる場合、ブロック２１０８においては、ＡＩＰＲが、最後の転送関連付け情報を使用して、変更されたセッションパケットを生成する。しかしながら、ブロック２１０６において、セッション関連パケットが宛先デバイスからルーティングされる場合、ブロック２１１０においては、ＡＩＰＲが、最後の戻り関連付け情報を使用して、変更されたセッションパケットを生成する。いずれの場合にも、ブロック２１１２においては、ＡＩＰＲが、変更された宛先アドレスに基づいて、変更されたセッションパケットを転送する。
【０１４６】
以下では、送信元ポート番号および宛先ポート番号の組合せを基礎とする、拡張されたセッション管理に関する代替的な技術を、図２２〜図２７を参照しながら説明する。特に、図２２は、３つのＡＩＰＲデバイス（「ノードＡ」、「ノードＢ」および「ノードＣ」と記す）を介する送信元デバイスから宛先デバイスまでの先行パケット処理の一例を提供する概略図であり、ここでは、送信元デバイスがネットワークアドレス１．１．１．１を有しており、ノードＡがネットワークアドレス２．２．２．２を有しており、ノードＢがネットワークアドレス３．３．３．３を有しており、ノードＣがネットワークアドレス４．４．４．４を有しており、また宛先デバイスがネットワークアドレス５．５．５．５を有している。図２３は、図２２の先行パケット処理を基礎とする、ノードＡに関連付けられたセッション関連データを示す概略図である。図２４は、図２２の先行パケット処理を基礎とする、ノードＢに関連付けられたセッション関連データを示す概略図である。図２５は、図２２の先行パケット処理を基礎とする、ノードＣに関連付けられたセッション関連データを示す概略図である。図２６は、図２２において確立されたセッションについて複数のＡＩＰＲデバイスを介して送信元デバイスから宛先デバイスへと送信された一例としてのパケットに関する、セッションパケット処理の一例を提供する概略図である。図２７は、図２２において確立されたセッションについて複数のＡＩＰＲデバイスを介して宛先デバイスから送信元デバイスへと送信された戻りパケットに関する、セッションパケット処理の一例を提供する概略図である。
【０１４７】
以下の実施例においては、各ＡＩＰＲが、自身のルーティング情報ベースに含まれているネットワーク／ネクストホップ関連付けに関して、ネットワーク内のその他のＡＩＰＲの先験的な知識を有していないこと、例えば、特定のＡＩＰＲは、（存在する場合には）宛先ネットワークアドレスを使用する１つ次の中間地点ＡＩＰＲを知らないことを前提とする。むしろ、それらの例においては、各中間地点ＡＩＰＲが、変更された先行パケットを転送した後に、１つ次の中間地点ＡＩＰＲが存在するか、または存在しないかを学習する。
【０１４８】
再び図２２を参照すると、送信元デバイスが、１．１．１．１の送信元アドレス（ＳＡ）、１０の送信元ポート番号（ＳＰ）、５．５．５．５の宛先アドレス（ＤＡ）、２０の宛先ポート番号（ＤＰ）、および１００のプロトコル識別子（ＰＲ）を備えたセッションパケット２２０１を送信する。
【０１４９】
この例においては、ノードＡが、送信元１．１．１．１に対するデフォルトルータ／ゲートウェイであるので、先行パケット２２０１は、ノードＡにルーティングされ、このノードＡが、先行パケット２２０１を、上記において考察したような新たなセッションに関する先行パケットとして識別し、またこの先行パケット２２０１はセッションメタデータを含んでいる変更された先行パケットではないことも特定する。したがって、ノードＡは、自身がセッションに関する最初の中間地点ＡＩＰＲであることを特定し、またインジケータを記憶し、それによって、最初の中間地点ＡＩＰＲとして、セッションに関連付けられた後続のパケットを処理する。このことは、図２３において「フラグ＝最初の中間地点ＡＩＰＲ」として表されている。
【０１５０】
ノードＡは、受信した先行パケット２２０１に由来する情報、例えば送信元アドレス、送信元ポート番号、宛先ポート番号、およびプロトコル識別子を記憶する。このことは、図２３において「先行パケット情報」として表されている。分かり易くするために、特定のセッションに関連付けられた、送信元アドレス、送信元ポート番号、宛先アドレス、宛先ポート番号、およびプロトコル識別子の情報は、図２３〜図２５において、セッション送信元アドレス（ＳＳＡ）、セッション送信元ポート番号（ＳＳＰ）、セッション宛先アドレス（ＳＤＡ）、セッション宛先ポート番号（ＳＤＰ）、およびセッションプロトコル識別子（ＳＰＲ）としてそれぞれ表されている。
【０１５１】
ノードＡは最初の中間地点ＡＩＰＲであるので、ノードＡは、送信元デバイスから受信する将来のセッション関連パケットが、１．１．１．１の送信元アドレス（ＳＡ）、１０の送信元ポート番号、５．５．５．５の宛先アドレス、２０の宛先ポート番号、および１００のプロトコル識別子を有することになることを特定することができる。このことは、図２３において、「最後の戻り関連付け」情報として示されている。
【０１５２】
出力インタフェースを介して、変更された先行パケット（すなわち、変更された先行パケット２２０２）を転送するために、ノードＡは、セッションに関連付けられた出力パケットに送信元ポート番号および宛先ポート番号（この例では、送信元ポート番号３０および宛先ポート番号４０）を割り当て、また割り当てられた送信元ポート番号および割り当てられた宛先ポート番号を、セッションに関連付けられた出力パケットに関するその他のセッション識別子情報と共に記憶する。このことは、図２３において、「先行転送関連付け」情報として示されている。暗示的に、２．２．２．２のノードＡのネットワークアドレスは、出力インタフェースを介して転送される、セッション関連パケットに関する送信元アドレスになる。この時点において、ノードＡは、出力インタフェースを介して転送されるセッション関連パケットに使用されることになる宛先アドレスを知らない（何故ならば、ノードＡは、後の時点になるまで、自身が送信元デバイスと宛先デバイスとの間の最後の中間地点ＡＩＰＲであるか否かを特定しないからである）。
【０１５３】
ノードＡは、送信元アドレス（ＳＡ）としての２．２．２．２の自身の固有のネットワークアドレス、送信元ポート番号（ＳＰ）としての１０の受信した送信元ポート番号、宛先アドレス（ＤＡ）としての５．５．５．５の受信した宛先アドレス、宛先ポート番号（ＤＰ）としての２０の受信した宛先ポート番号、およびプロトコル識別子（ＰＲ）としての１００の受信したプロトコル識別子を使用して、変更された先行パケット２２０２を生成する。またノードＡは、３０の割り当てられたセッション送信元ポート番号（ＳＳＰ）および４０の割り当てられたセッション宛先ポート番号（ＳＤＰ）を、メタデータとして、変更された先行パケット２２０２に含ませる。この情報は、先行パケットに追加されたメタデータであることを表すために括弧内に示されている。ノードＡは、５．５．５．５の宛先アドレスに基づいて、変更された先行パケット２２０２を転送する。
【０１５４】
変更された先行パケット２２０２はノードＢに到達し、このノードＢは、上記において考察したように、新たなセッションに関する先行パケットとして、変更された先行パケット２２０２を識別し、また変更された先行パケット２２０２がセッションメタデータを含んでいる変更された先行パケットであることも特定する。したがって、ノードＢは、自身がセッションに関する最初の中間地点ＡＩＰＲではないことを特定する。この時点において、ノードＢは、自身がセッションに関する最後の中間地点ＡＩＰＲであるか否かを特定することはできない。この例では、ノードＢが、自身はセッションに関する最後の中間地点ＡＩＰＲではないことを後に特定し、またインジケータを記憶し、それによって、中間の中間地点ＡＩＰＲとして、セッションに関連付けられた後続のパケットを処理する。このことは、図２４において「フラグ＝中間の中間地点ＡＩＰＲ」として表されている。
【０１５５】
ノードＢは、受信した、変更された先行パケット２２０２に由来する情報、例えば送信元アドレス、送信元ポート番号、宛先ポート番号、およびプロトコル識別子を記憶する。このことは、図２４において「先行パケット情報」として表されている。
【０１５６】
ノードＢは最初の中間地点ＡＩＰＲではないので、ノードＢは、ノードＡから受信する将来のセッション関連パケットが、２．２．２．２の送信元アドレス（ＳＡ）、３０の送信元ポート番号（すなわち、ノードＡによって割り当てられたＳＳＰ）、３．３．３．３の宛先アドレス、４０の宛先ポート番号（すなわち、ノードＡによって割り当てられたＳＤＰ）、および１００のプロトコル識別子を有することになることを特定することができる。このことは、図２４において、「最後の戻り関連付け」情報として示されている。
【０１５７】
出力インタフェースを介して、変更された先行パケット（すなわち、変更された先行パケット２２０３）を転送するために、ノードＢは、セッションに関連付けられた出力パケットに送信元ポート番号および宛先ポート番号（この例では、送信元ポート番号５０および宛先ポート番号６０）を割り当て、また割り当てられた送信元ポート番号および割り当てられた宛先ポート番号を、セッションに関連付けられた出力パケットに関するその他のセッション識別子情報と共に記憶する。このことは、図２４において、「先行転送関連付け」情報として示されている。暗示的に、３．３．３．３のノードＢのネットワークアドレスは、出力インタフェースを介して転送される、セッション関連パケットに関する送信元アドレスになる。この時点において、ノードＢは、出力インタフェースを介して転送されるセッション関連パケットに使用されることになる宛先アドレスを知らない（何故ならば、ノードＢは、後の時点になるまで、自身が送信元デバイスと宛先デバイスとの間の最後の中間地点ＡＩＰＲであるか否かを特定しないからである）。
【０１５８】
ノードＢは、送信元アドレス（ＳＡ）としての３．３．３．３の自身の固有のネットワークアドレス、送信元ポート番号（ＳＰ）としての１０の受信した送信元ポート番号、宛先アドレス（ＤＡ）としての５．５．５．５の受信した宛先アドレス、宛先ポート番号（ＤＰ）としての２０の受信した宛先ポート番号、およびプロトコル識別子（ＰＲ）としての１００の受信したプロトコル識別子を使用して、変更された先行パケット２２０３を生成する。またノードＢは、５０の割り当てられたセッション送信元ポート番号（ＳＳＰ）および６０の割り当てられたセッション宛先ポート番号（ＳＤＰ）を、メタデータとして、変更された先行パケット２２０２に含ませる。この情報は、先行パケットに追加されたメタデータであることを表すために括弧内に示されている。ノードＢは、５．５．５．５の宛先アドレスに基づいて、変更された先行パケット２２０３を転送する。
【０１５９】
上記において考察したように、ある時点において、ノードＢは、自身がセッションに関してノードＡに対する中間地点ＡＩＰＲであることを（例えば、変更された先行パケット２２０２の受信に基づいて、またはセッションに関連付けられた戻りパケットにおいて）識別する。これによって、ノードＡは、自身が最後の中間地点ＡＩＰＲではないことを特定することができ、したがってノードＡは、セッション関連パケットを転送するために使用される転送関連付けパラメータを特定することができる。つまり、ノードＡは、ノードＢに送信される将来のセッション関連パケットが、２．２．２．２の送信元アドレス（ＳＡ）、３０の送信元ポート番号（すなわち、ノードＡによって割り当てられたＳＳＰ）、３．３．３．３の宛先アドレス、４０の宛先ポート番号（すなわち、ノードＡによって割り当てられたＳＤＰ）、および１００のプロトコル識別子を有することになることを特定することができる。このことは、図２３において、「最後の転送関連付け」情報として示されている。
【０１６０】
変更された先行パケット２２０３はノードＣに到達し、このノードＣは、上記において考察したように、新たなセッションに関する先行パケットとして、変更された先行パケット２２０３を識別し、また変更された先行パケット２２０３がセッションメタデータを含んでいる変更された先行パケットであることも特定する。したがって、ノードＣは、自身がセッションに関する最初の中間地点ＡＩＰＲではないことを特定する。この時点において、ノードＣは、自身がセッションに関する最後の中間地点ＡＩＰＲであるか否かを特定することはできない。この例では、ノードＣが、自身はセッションに関する最後の中間地点ＡＩＰＲであることを後に特定し、またインジケータを記憶し、それによって、中間の中間地点ＡＩＰＲとして、セッションに関連付けられた後続のパケットを処理する。このことは、図２５において「フラグ＝最後の中間地点ＡＩＰＲ」として表されている。
【０１６１】
ノードＣは、受信した、変更された先行パケット２２０３に由来する情報、例えば送信元アドレス、送信元ポート番号、宛先ポート番号、およびプロトコル識別子を記憶する。このことは、図２５において「先行パケット情報」として表されている。
【０１６２】
ノードＣは最初の中間地点ＡＩＰＲではないので、ノードＣは、ノードＢから受信する将来のセッション関連パケットが、３．３．３．３の送信元アドレス（ＳＡ）、５０の送信元ポート番号（すなわち、ノードＢによって割り当てられたＳＳＰ）、４．４．４．４の宛先アドレス、６０の宛先ポート番号（すなわち、ノードＢによって割り当てられたＳＤＰ）、および１００のプロトコル識別子を有することになることを特定することができる。このことは、図２５において、「最後の戻り関連付け」情報として示されている。
【０１６３】
出力インタフェースを介して、変更された先行パケット（すなわち、変更された先行パケット２２０４）を転送するために、ノードＣは、セッションに関連付けられた出力パケットに送信元ポート番号および宛先ポート番号（この例では、送信元ポート番号７０および宛先ポート番号８０）を割り当て、また割り当てられた送信元ポート番号および割り当てられた宛先ポート番号を、セッションに関連付けられた出力パケットに関するその他のセッション識別子情報と共に記憶する。このことは、図２５において、「先行転送関連付け」情報として示されている。暗示的に、４．４．４．４のノードＣのネットワークアドレスは、出力インタフェースを介して転送される、セッション関連パケットに関する送信元アドレスになる。この時点において、ノードＣは、出力インタフェースを介して転送されるセッション関連パケットに使用されることになる宛先アドレスを知らない（何故ならば、ノードＣは、後の時点になるまで、自身が送信元デバイスと宛先デバイスとの間の最後の中間地点ＡＩＰＲであるか否かを特定しないからである）。
【０１６４】
ノードＣは、送信元アドレス（ＳＡ）としての４．４．４．４の自身の固有のネットワークアドレス、送信元ポート番号（ＳＰ）としての１０の受信した送信元ポート番号、宛先アドレス（ＤＡ）としての５．５．５．５の受信した宛先アドレス、宛先ポート番号（ＤＰ）としての２０の受信した宛先ポート番号、およびプロトコル識別子（ＰＲ）としての１００の受信したプロトコル識別子を使用して、変更された先行パケット２２０４を生成する。またノードＣは、７０の割り当てられたセッション送信元ポート番号（ＳＳＰ）および８０の割り当てられたセッション宛先ポート番号（ＳＤＰ）を、メタデータとして、変更された先行パケット２２０４に含ませる。この情報は、先行パケットに追加されたメタデータであることを表すために括弧内に示されている。ノードＣは、５．５．５．５の宛先アドレスに基づいて、変更された先行パケット２２０４を転送する。
【０１６５】
上記において考察したように、ある時点において、ノードＣは、自身がセッションに関してノードＢに対する中間地点ＡＩＰＲであることを（例えば、変更された先行パケット２２０３の受信に基づいて、またはセッションに関連付けられた戻りパケットにおいて）識別する。これによって、ノードＢは、自身が最後の中間地点ＡＩＰＲではないことを特定することができ、したがってノードＢは、セッション関連パケットを転送するために使用される転送関連付けパラメータを特定することができる。つまり、ノードＢは、ノードＣに送信される将来のセッション関連パケットが、３．３．３．３の送信元アドレス（ＳＡ）、５０の送信元ポート番号（すなわち、ノードＢによって割り当てられたＳＳＰ）、４．４．４．４の宛先アドレス、６０の宛先ポート番号（すなわち、ノードＢによって割り当てられたＳＤＰ）、および１００のプロトコル識別子を有することになることを特定することができる。このことは、図２４において、「最後の転送関連付け」情報として示されている。
【０１６６】
変更された先行パケット２２０４は宛先デバイスに到達し、この宛先デバイスは、パケットに含まれているセッションメタデータを参照することなく、変更された先行パケット２２０４を処理する。典型的には、この宛先デバイスには、送信元デバイスに応答パケットを返送する宛先デバイスが含まれる。
【０１６７】
ノードＣは、その他の中間地点ＡＩＰＲとは異なり、宛先デバイスからパケットを受信するので、ノードＣは、自身が最後の中間地点ＡＩＰＲであることを特定することができ、したがって、セッション関連パケットを転送するために使用される転送関連付けパラメータを特定することもできる。つまり、ノードＣは、宛先デバイスに送信される将来のセッション関連パケットが、４．４．４．４の送信元アドレス（ＳＡ）、１０の送信元ポート番号（すなわち、本来のＳＰ）、５．５．５．５の宛先アドレス、２０の宛先ポート番号（すなわち、本来のＤＰ）、および１００のプロトコル識別子を有することになることを特定することができる。このことは、図２５において、「最後の転送関連付け」情報として示されている。
【０１６８】
先行パケットが処理され、またセッション関連情報が、送信元デバイスから宛先デバイスへの、中間地点ＡＩＰＲのホップ・バイ・ホップによって確立された後に、送信元デバイスと宛先デバイスとの間でエンド・ツー・エンド通信セッションを確立するために、付加的なパケットを、送信元デバイスと宛先デバイスとの間で交換することができる。
【０１６９】
図２６は、図２２において確立されたセッションについて複数のＡＩＰＲデバイスを介して送信元デバイスから宛先デバイスへと送信された一例としてのパケットに関する、セッションパケット処理の一例を提供する概略図である。
【０１７０】
ここでは、送信元デバイスが、１．１．１．１の送信元アドレス（ＳＡ）、１０の送信元ポート番号（すなわち、本来のＳＰ）、５．５．５．５の宛先アドレス、２０の宛先ポート番号（すなわち、本来のＤＰ）、および１００のプロトコル識別子を有しているセッションパケット２６０１を送信する。
【０１７１】
ノードＡは、送信元１．１．１．１に対するデフォルトルータ／ゲートウェイであるので、セッションパケット２６０１はノードＡにルーティングされる。ノードＡは、図２３に示した最後の転送関連付け情報に従い、パケットを転送する。特に、ノードＡによって伝送された、転送されたセッションパケット２６０２は、２．２．２．２の送信元アドレス（ＳＡ）、３０の送信元ポート番号（すなわち、ノードＡによって割り当てられたＳＳＰ）、３．３．３．３の宛先アドレス、４０の宛先ポート番号（すなわち、ノードＡによって割り当てられたＳＤＰ）、および１００のプロトコル識別子を有している。
【０１７２】
転送されたセッションパケット２６０２は、３．３．３．３の宛先アドレス（すなわち、ノードＢのネットワークアドレス）を有しているので、セッションパケット１８０２は、ノードＢにルーティングされる。ノードＢは、図２４に示した最後の転送関連付け情報に従い、パケットを転送する。特に、ノードＢによって伝送された、転送されたセッションパケット１８０３は、３．３．３．３の送信元アドレス（ＳＡ）、５０の送信元ポート番号（すなわち、ノードＢによって割り当てられたＳＳＰ）、４．４．４．４の宛先アドレス、６０の宛先ポート番号（すなわち、ノードＢによって割り当てられたＳＤＰ）、および１００のプロトコル識別子を有している。
【０１７３】
転送されたセッションパケット２６０３は、４．４．４．４の宛先アドレス（すなわち、ノードＣのネットワークアドレス）を有しているので、セッションパケット２６０３は、ノードＣにルーティングされる。ノードＣは、図２５に示した最後の転送関連付け情報に従い、パケットを転送する。特に、ノードＣによって伝送された、転送されたセッションパケット２６０４は、４．４．４．４の送信元アドレス（ＳＡ）、１０の送信元ポート番号（すなわち、本来のＳＰ）、５．５．５．５の宛先アドレス、２０の宛先ポート番号（すなわち、本来のＤＰ）、および１００のプロトコル識別子を有している。
【０１７４】
転送されたセッションパケット２６０４は、５．５．５．５の宛先アドレス（すなわち、宛先デバイスのネットワークアドレス）を有しているので、転送されたセッションパケット２６０４は、パケットを処理する宛先デバイスにルーティングされる。
【０１７５】
図２７は、図２２において確立されたセッションについて複数のＡＩＰＲデバイスを介して宛先デバイスから送信元デバイスへと送信された戻りパケットに関する、セッションパケット処理の一例を提供する概略図である。
【０１７６】
ここでは、宛先デバイスが、５．５．５．５の送信元アドレス（ＳＡ）、２０の送信元ポート番号（すなわち、本来のＳＰ）、４．４．４．４の宛先アドレス、１０の宛先ポート番号（すなわち、本来のＤＰ）、および１００のプロトコル識別子を有している戻りパケット２７０１を送信する。
【０１７７】
戻りパケット２７０１は、４．４．４．４の宛先アドレス（すなわち、ノードＣのネットワークアドレス）を有しているので、戻りパケット２７０１は、ノードＣにルーティングされる。ノードＣは、図２５に示した最後の戻り関連付け情報に従い、パケットを転送する。特に、ノードＣによって伝送された、転送された戻りパケット２７０２は、４．４．４．４の送信元アドレス（ＳＡ）、６０の送信元ポート番号（すなわち、ノードＢによって割り当てられたＳＳＰ）、３．３．３．３の宛先アドレス、５０の宛先ポート番号（すなわち、ノードＢによって割り当てられたＳＤＰ）、および１００のプロトコル識別子を有している。
【０１７８】
転送された戻りパケット２７０２は、３．３．３．３の宛先アドレス（すなわち、ノードＢのネットワークアドレス）を有しているので、戻りパケット２７０２は、ノードＢにルーティングされる。ノードＢは、図２４に示した最後の戻り関連付け情報に従い、パケットを転送する。特に、ノードＢによって伝送された、転送された戻りパケット２７０３は、３．３．３．３の送信元アドレス、４０の送信元ポート番号（すなわち、ノードＡによって割り当てられたＳＳＰ）、２．２．２．２の宛先アドレス、３０の宛先ポート番号（すなわち、ノードＡによって割り当てられたＳＤＰ）、および１００のプロトコル識別子を有している。
【０１７９】
転送された戻りパケット２７０３は、２．２．２．２の宛先アドレス（すなわち、ノードＡのネットワークアドレス）を有しているので、戻りパケット２７０３は、ノードＡにルーティングされる。ノードＡは、図２３に示した最後の戻り関連付け情報に従い、パケットを転送する。特に、ノードＡによって伝送された、転送された戻りパケット２７０４は、５．５．５．５の送信元アドレス、２０の送信元ポート番号（すなわち、本来のＳＰ）、１．１．１．１の宛先アドレス、１０の宛先ポート番号（すなわち、本来のＤＰ）、および１００のプロトコル識別子を有している。
【０１８０】
転送された戻りパケット２７０４は、１．１．１．１の宛先アドレス（すなわち、送信元デバイスのネットワークアドレス）を有しているので、転送された戻りパケット２７０４は、パケットを処理する送信元デバイスにルーティングされる。
【０１８１】
割り当てられたポート番号は、中間地点ＡＩＰＲによって「内部的に」使用されるので、ＡＩＰＲは、種々のいずれかのやり方で（例えば、連続的または非連続的に）、送信元ポート番号および宛先ポート番号を割り当てることができ、最後の中間地点ＡＩＰＲは、本来の宛先アドレスおよび本来の宛先ポート番号を含んでいるパケットを転送することを言及しておく。
【０１８２】
図２８は、本発明の特定の図示の実施の形態によるＡＩＰＲによって実施される幾つかの先行パケット処理動作を概略的に説明するフローチャート２８００を含んでいる。
【０１８３】
ブロック２８０２においては、ＡＩＰＲがセッションの先行パケットを取得する。ブロック２８０４においては、ＡＩＰＲが、セッションに関する最後の戻り関連付け情報を特定して記憶する。先行パケットが変更された先行パケットではない場合（すなわち、ＡＩＰＲが最初の中間地点ＡＩＰＲである場合）、最後の戻り関連付け情報は、受信したパケットに由来する、送信元ネットワークアドレス、宛先ネットワークアドレス、送信元ポート番号、および宛先ポート番号を含んでいる。しかしながら、先行パケットが変更された先行パケットである場合（すなわち、ＡＩＰＲが最初の中間地点ＡＩＰＲではない場合）、最後の戻り関連付け情報は、パケットに由来する送信元ネットワークアドレスを含んでおり、また１つ前の中間地点ＡＩＰＲによって挿入されたパケットメタデータに由来する、セッション送信元ポート番号およびセッション宛先ポート番号を含んでいる。
【０１８４】
ブロック２８０６においては、ＡＩＰＲが、考えられる転送関連付けに関して、セッション送信元ポート番号およびセッション宛先ポート番号を割り当てる。ブロック２８０８においては、ＡＩＰＲが、送信元ネットワークアドレスとしてのＡＩＰＲネットワークアドレスを含んでおり、また割り当てられたポート番号をメタデータとして含んでいる、変更された先行パケットを生成する。ブロック２８１０においては、ＡＩＰＲが変更された先行パケットを転送する。
【０１８５】
ブロック２８１２においては、ＡＩＰＲが、このＡＩＰＲは最後の中間地点ＡＩＰＲであるか否かを特定し、続いてブロック２８１４においては、ＡＩＰＲが、このＡＩＰＲは最後の中間地点ＡＩＰＲであるか否かの特定に基づいて、セッションに関する最後の転送関連付け情報を特定して記憶する。ＡＩＰＲが戻りパケットまたはその他の指示を１つ次の中間地点ＡＩＰＲから受信した場合には、ＡＩＰＲは、自身が最後の中間地点ＡＩＰＲではないことを特定し、その場合には、最後の転送関連付けは、後続のＡＩＰＲのネットワークアドレスを、セッションに関する宛先アドレスとして含んでおり、また割り当てられたセッション送信元ポート番号および割り当てられたセッション宛先ポート番号も含んでいる。しかしながら、ＡＩＰＲが戻りパケットを宛先デバイスから受信した場合には、ＡＩＰＲは、自身が最後の中間地点ＡＩＰＲであることを特定し、その場合には、最後の転送関連付けは、宛先デバイスのネットワークアドレスを、セッションに関する宛先アドレスとして含んでおり、また本来の送信元ポート番号および本来の宛先ポート番号も含んでいる。
【０１８６】
パケット処理動作は、図２１に示したフローチャートに従いＡＩＰＲによって実施される。
【０１８７】
上記において考察したように、ＡＩＰＲおよびそのコンポーネントのすべてまたは一部を、メモリに記憶されている命令を実行するプロセッサ、ハードウェア（例えば組合せロジック、特定用途向け集積回路（ＡＳＩＣ）、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）またはその他のハードウェア）、ファームウェアまたはそれらの組合せによって実施することができる。
【０１８８】
本発明を上記の実施例に基づいて説明したが、本明細書に開示した本発明の思想から逸脱することなく、図示の実施の形態に対する修正および変更を行うことができる。さらに、開示した複数の態様またはそれらの一部を、上記には挙げていないやり方で、かつ／または明示的に権利主張していないやり方で組み合わせることができる。したがって、本発明は、開示した実施の形態に制限されるものとみなされるべきではない。
【０１８９】
種々の実施の形態の態様をフローチャートおよび／またはブロック図を参照しながら説明したが、各ブロックのすべてまたは一部の機能、動作、判断など、または複数のブロックの組合せを結合することができるか、別個の動作に分割することができるか、または別の順序で実施することができる。各ブロックのすべてまたは一部、もしくは複数のブロックの組合せを、コンピュータプログラム命令（例えばソフトウェア）、ハードウェア（例えば組合せロジック、特定用途向け集積回路（ＡＳＩＣ）、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）またはその他のハードウェア）、ファームウェアまたはそれらの組合せとして実施することができる。種々の実施の形態を、メモリに記憶されている命令を実行するか、またはそのような命令によって制御されるプロセッサによって実施することができる。メモリは、制御ソフトウェアまたはその他の命令およびデータを記憶することに適している、ランダムアクセスメモリ（ＲＡＭ）、リードオンリメモリ（ＲＯＭ）、フラッシュメモリまたはその他の任意のメモリ、もしくはそれらの組合せであってよい。本発明の機能を定義する命令を、種々の形態でプロセッサに提供することができ、例えば有形の書き込み不可能な記憶媒体（例えばコンピュータ内のリードオンリメモリデバイス、例えばＲＯＭ、またはコンピュータのＩ／Ｏアタッチメントによって読み出し可能なデバイス、例えばＣＤ−ＲＯＭディスクまたはＤＶＤディスク）に永続的に記憶されている情報、有形の書き込み可能な記憶媒体（例えば、フロッピーディスク、取り外し可能なフラッシュメモリおよびハードディスクドライブ）に変更可能に記憶されている情報、もしくは有線式または無線式のコンピュータネットワークを含む通信媒体を介してコンピュータに伝送される情報の形態でプロセッサに提供することができる。しかしながら、提供の形態はこれらに限定されるものではない。さらに、実施の形態を図示した種々のデータ構造に関連させて説明することができるが、システムを、異なるデータ構造を使用しても実施することができる。
【０１９０】
雑則
上記において、見出しは分かり易くするために用いたものであって、何らかの形で本発明を限定するものとみなされるべきではないことを言及しておく。
【０１９１】
本発明の種々の実施の形態を、少なくとも部分的に、任意の慣例のコンピュータプログラム言語で実現することができる。例えば、幾つかの実施の形態を、手続き型プログラミング言語（例えば「Ｃ」）、またはオブジェクト指向プログラミング言語（例えば「Ｃ＋＋」）で実現することができる。本発明のその他の実施の形態を、事前構成されたスタンドアローン型のハードウェア要素および／または事前プログラミングされたハードウェア要素（例えば、特定用途向け集積回路、ＦＰＧＡおよびディジタル・シグナル・プロセッサ）として、またはその他の関連するコンポーネントとして実現することができる。
【０１９２】
１つの代替的な実施の形態においては、開示した装置および方法（例えば、上述の種々のフローチャートを参照されたい）を、コンピュータシステムを用いて使用するためのコンピュータプログラム製品として実現することができる。そのような実現形態は、有形の非一時的な媒体、例えばコンピュータ可読媒体（例えば、ディスケット（登録商標）、ＣＤ−ＲＯＭ、ＲＯＭまたは固定ディスク）に記憶されている一連のコンピュータ命令を含むことができる。一連のコンピュータ命令は、本明細書においてシステムに関して上述した機能のすべてまたは一部を実施することができる。
【０１９３】
当業者であれば、そのようなコンピュータ命令を、多くのコンピュータアーキテクチャまたはオペレーティングシステムを用いて使用するために、多数のプログラミング言語で書けることが分かる。さらに、そのような命令を、任意のメモリデバイスに、例えば半導体デバイス、磁気デバイス、光学デバイスまたはその他のメモリデバイスに記憶することができ、また任意の通信技術を使用して、例えば光学伝送技術、赤外線伝送技術、マイクロ波伝送技術またはその他の伝送技術を使用して伝送することができる。
【０１９４】
この他、そのようなコンピュータプログラム製品を、リムーバブル媒体として、印刷された文書または電子文書と共に配布することができ（例えば、市販ソフトウェア）、コンピュータシステムに（例えば、システムＲＯＭまたは固定ディスクに）プリロードすることができるか、もしくはネットワーク（例えば、インターネットまたはワールド・ワイド・ウェブ）を介してサーバまたは電子掲示板から配布することができる。実際には、幾つかの実施の形態を、ＳａａＳ（Ｓｏｆｔｗａｒｅ  ａｓ  ａ  Ｓｅｒｖｉｃｅ）モデルまたはクラウドコンピューティングモデルとして実現することができる。もちろん、本発明の幾つかの実施の形態を、ソフトウェア（例えば、コンピュータプログラム製品）とハードウェアとの組合せとして実現することができる。本発明のさらに別の実施の形態は、完全にハードウェアとして、または完全にソフトウェアとして実現される。
【０１９５】
本発明の種々の実施の形態を、この段落に続く後続の段落に記載した潜在的な請求項（また、さらに後の本願の最後に記載されている実際の特許請求の範囲）によって特徴付けることができる。それらの潜在的な特許請求の範囲は、記載した本願の説明の一部を成す。したがって、以下の潜在的な請求項の主たる対象を、本願、または本願を基礎とする優先権を主張するいずれかの出願が関与する後の訴訟における実際の請求項として呈示することができる。そのような潜在的な請求項を含めることは、実際の請求項が潜在的な請求項の主たる対象をカバーしないことを意味していると解されるべきではない。したがって、後の訴訟においてそれらの潜在的な請求項を呈示しないという決定は、公衆に対する主たる対象の寄与とみなされるべきではない。
【０１９６】
限定を意図することなく、権利を主張することができる潜在的な主たる対象（下記に呈示する実際の請求項との混同を回避するために、頭に文字「Ｐ」が付されている）には、以下のものが含まれる：
請求項Ｐ１
ＩＰネットワークにおける起源ノードから宛先ノードへとセッションのパケットを案内するためのパケットルーティング方法において、
中間ノード識別子を有している中間ノードが、セッションにおける複数のパケットのうちの先行パケットを取得すること、
セッションに送信元ポート番号および宛先ポート番号を割り当てること、
中間ノード識別子、割り当てられた送信元ポート番号および割り当てられた宛先ポート番号を含むように先行パケットを変更すること、
ＩＰネットワークと通信する、該ＩＰネットワークとの中間ノード電子出力インタフェースを介して、変更された先行パケットを宛先ノードに転送すること、
ＩＰネットワークと通信する、中間ノードの電子入力インタフェースを介して、次ノード識別子を有している１つ次のノードから、その次ノード識別子を含んでいる逆方向メッセージを受信すること、
中間ノード識別子、次ノード識別子、割り当てられた送信元ポート番号および割り当てられた宛先ポート番号の間の転送関連付けを形成すること、
転送関連付けをメモリに記憶すること、
セッションの付加的なパケットを取得すること、
中間ノードの電子出力インタフェースを介して、セッションにおける実質的にすべての付加的なパケットを、記憶されている転送関連付けを使用して、１つ次のノードに転送すること、を含む、
パケットルーティング方法。
【０１９７】
請求項Ｐ２
変更された先行パケットを宛先ノードに転送することは、変更された先行パケットを１つ次のノードに伝送するために、先行パケットにおける起源ノード識別子を使用することを含む、
請求項Ｐ１記載のパケットルーティング方法。
【０１９８】
請求項Ｐ３
変更された先行パケットを宛先ノードに転送することは、宛先ノードに関するルーティング情報を有しているルーティング情報ベースにアクセスすることを含む、
請求項Ｐ２記載のパケットルーティング方法。
【０１９９】
請求項Ｐ４
さらに、
前ノード識別子を有している１つ前のノードが存在する場合には、前ノード識別子、１つ前のノードによって割り当てられた送信元ポート番号および宛先ポート番号を含んでいる先行パケットが通過した１つ前のノードを特定すること、
前ノード識別子、中間ノード識別子、１つ前のノードによって割り当てられた送信元ポート番号および宛先ポート番号の間の戻り関連付けを形成すること、
戻り関連付けをメモリに記憶すること、を含む、
請求項Ｐ１記載のパケットルーティング方法。
【０２００】
請求項Ｐ５
さらに、
宛先ノードから、起源ノード宛てに送られる戻りセッションにおける複数のパケットを受信すること、
電子出力インタフェースを介して、戻りセッションにおける実質的にすべてのパケットを、記憶されている戻り関連付けを使用して、１つ前のノードに転送すること、を含む、
請求項Ｐ４記載のパケットルーティング方法。
【０２０１】
請求項Ｐ６
中間ノードは、ルーティングテーブルを有しており、
先行パケットを宛先ノードに転送することは、先行パケットを宛先ノードに転送するためにルーティングテーブルを使用することを含む、
請求項Ｐ１記載のパケットルーティング方法。
【０２０２】
請求項Ｐ７
中間ノードは、ルーティングデバイスまたはスイッチングデバイスを含む、
請求項Ｐ１記載のパケットルーティング方法。
【０２０３】
請求項Ｐ８
変更された先行パケットの宛先が規定されており、それによって、変更された先行パケットが転送された後、かつ１つ次のノードが先行パケットを受信する前に、少なくとも１つのネットワークデバイスが変更された先行パケットを受信する、
請求項Ｐ１記載のパケットルーティング方法。
【０２０４】
請求項Ｐ９
ＩＰネットワークにおける起源ノードから宛先ノードへとセッションのパケットを案内するための、中間ノード識別子を有している中間ルーティングデバイスにおいて、
ルーティングデバイスは、
ＩＰネットワークからＩＰパケットを受信するための電子入力インタフェースと、
ＩＰネットワークにおいてＩＰパケットを転送するための電子出力インタフェースと、
セッション状態情報を記憶するためのメモリと、
電子入力インタフェースと機能的に接続されており、かつ１つのセッションにおける複数のパケットのうちの先行パケットを識別するように構成されている先行パケット識別器と、
先行パケット識別器と機能的に接続されており、かつ送信元ポート番号および宛先ポート番号をセッションに割り当て、中間ノード識別子、割り当てられた送信元ポート番号および割り当てられた宛先ポート番号を含むように先行パケットを変更する構成されている先行パケット変更器と、
電子出力インタフェースと機能的に接続されており、かつ電子出力インタフェースを介して、変更された先行パケットを宛先ノードに転送するように構成されているルータと、
電子入力インタフェースと機能的に接続されており、かつ（ａ）次ノード識別子を有している１つ次のノードから、次ノード識別子を含んでいる逆方向メッセージを受信し、（ｂ）中間ノード識別子、次ノード識別子、割り当てられた送信元ポート番号および割り当てられた宛先ポート番号の間の転送関連付けを形成し、かつ（ｃ）転送関連付けをメモリに記憶する、ように構成されているアソシエータと、を含み、
またルータは、電子出力インタフェースを介して、セッションにおける付加的なパケットを、記憶されている転送関連付けを使用して、１つ次のノードに転送するように構成されている、
中間ルーティングデバイス。
【０２０５】
請求項Ｐ１０
ルータは、１つ次のノードに変更された先行パケットを伝送するために先行パケットにおける起源ノード識別子を使用するように構成されている、
請求項Ｐ９記載の中間ルーティングデバイス。
【０２０６】
請求項Ｐ１１
ルータは、宛先ノードに先行パケットを転送するためのルーティング情報を有しているルーティング情報ベースを含む、
請求項Ｐ１０記載の中間ルーティングデバイス。
【０２０７】
請求項Ｐ１２
アソシエータは、（１）前ノード識別子を有している１つ前のノードが存在する場合には、前ノード識別子、１つ前のノードによって割り当てられた送信元ポート番号および宛先ポート番号を含んでいる先行パケットが通過した１つ前のノードを特定し、（２）前ノード識別子、中間ノード識別子、１つ前のノードによって割り当てられた送信元ポート番号および割り当てられた宛先ポート番号の間の戻り関連付けを形成し、かつ（３）戻り関連付けをメモリに記憶する、ように構成されている、
請求項Ｐ９記載の中間ルーティングデバイス。
【０２０８】
請求項Ｐ１３
ルータは、前記電子出力インタフェースを介して、戻りセッションにおけるパケットを、記憶されている戻り関連付けを使用して、１つ前のノードに転送するように構成されている、
請求項Ｐ１２記載の中間ルーティングデバイス。
【０２０９】
請求項Ｐ１４
中間ルーティングデバイスは、さらに、ルーティングテーブルを有しており、
ルータは、変更された先行パケットを、ルーティングテーブルを使用して、宛先ノードに転送するように構成されている、
請求項Ｐ９記載の中間ルーティングデバイス。
【０２１０】
請求項Ｐ１５
ＩＰネットワーク内の起源ノードから宛先ノードへとセッションのパケットを案内するための、コンピュータシステムにおいて使用されるコンピュータプログラム製品において、
コンピュータプログラム製品は、有形の非一時的なコンピュータ使用可能媒体と、該媒体におけるコンピュータ可読プログラムコードと、を有しており、
コンピュータ可読プログラムコードは、
中間ノード識別子を有している中間ノードに、１つのセッションにおける複数のパケットのうちの先行パケットを取得させるためのプログラムコードと、
セッションに送信元ポート番号および宛先ポート番号を割り当てるためのプログラムコードと、
中間ノード識別子、割り当てられた送信ポート番号および割り当てられた宛先ポート番号を含むように先行パケットを変更するためのプログラムコードと、
ＩＰネットワークと通信する、該ＩＰネットワークとの中間ノード電子出力インタフェースを介して、変更された先行パケットを宛先ノードに転送するためのプログラムコードと、
ＩＰネットワークと通信する、中間ノードの電子入力インタフェースを介して、次ノード識別子を有している１つ次のノードから、次ノード識別子を含んでいる逆方向メッセージを受信するためのプログラムコードと、
中間ノード識別子、次ノード識別子、割り当てられた送信元ポート番号および割り当てられた宛先ポート番号の間の転送関連付けを形成するためのプログラムコードと、
転送関連付けをメモリに記憶するためのプログラムコードと、
セッションの付加的なパケットを取得するためのプログラムコードと、
中間ノードの電子出力インタフェースを介して、セッションにおける実質的にすべての付加的なパケットを、記憶されている転送関連付けを使用して、１つ次のノードに転送するためのプログラムコードと、を含む、
コンピュータプログラム製品。
【０２１１】
請求項Ｐ１６
変更された先行パケットを宛先ノードに転送するためのプログラムコードは、変更された先行パケットを１つ次のノードに伝送するための、先行パケットにおける起源ノード識別子を使用するためのプログラムコードを含む、
請求項Ｐ１５記載のコンピュータプログラム製品。
【０２１２】
請求項Ｐ１７
変更された先行パケットを宛先ノードに転送するためのプログラムコードは、宛先ノードに関するルーティング情報を有しているルーティング情報ベースにアクセスするためのプログラムコードを含む、
請求項Ｐ１６記載のコンピュータプログラム製品。
【０２１３】
請求項Ｐ１８
さらに、
前ノード識別子を有している１つ前のノードが存在する場合には、前ノード識別子、１つ前のノードによって割り当てられた送信元ポート番号および宛先ポート番号を含んでいる先行パケットが通過した１つ前のノードを特定するためのプログラムコードと、
前ノード識別子、中間ノード識別子、１つ前のノードによって割り当てられた送信元ポート番号および宛先ポート番号の間の戻り関連付けを形成するためのプログラムコードと、
戻り関連付けをメモリに記憶するためのプログラムコードと、を含む、
請求項Ｐ１５記載のコンピュータプログラム製品。
【０２１４】
請求項Ｐ１９
さらに、
宛先ノードから、起源ノード宛てに送られる戻りセッションにおける複数のパケットを受信するためのプログラムコードと、
電子出力インタフェースを介して、戻りセッションにおける実質的にすべてのパケットを、記憶されている戻り関連付けを使用して、１つ前のノードに転送するためのプログラムコードと、を含む、
請求項Ｐ１８記載のコンピュータプログラム製品。
【０２１５】
請求項Ｐ２０
中間ノードは、ルーティングテーブルを有しており、
変更された先行パケットを宛先ノードに転送するためのプログラムコードは、先行パケットを宛先ノードに転送するためにルーティングテーブルを使用するためのプログラムコードを含む、
請求項Ｐ１５記載のコンピュータプログラム製品。
【０２１６】
請求項Ｐ２１
中間ノードは、ルーティングデバイスまたはスイッチングデバイスを含む、
請求項Ｐ１５記載のコンピュータプログラム製品。
【０２１７】
請求項Ｐ２２
変更された先行パケットの宛先が規定されており、それによって、先行パケットが１つ次のノードに転送された後、かつ１つ次のノードが変更された先行パケットを受信する前に、少なくとも１つのネットワークデバイスが変更された先行パケットを受信する、
請求項Ｐ１５記載のコンピュータプログラム製品。
【０２１８】
上記においては、本発明の種々の実施例を説明したが、当業者であれば、本発明の真の精神から逸脱することなく、本発明の幾つかの利点を達成する種々の変更を行えることが分かる。
【図１】
2018525941.tif 000006
【図２】
2018525941.tif 000007
【図３】
2018525941.tif 000008
【図４】
2018525941.tif 000009
【図５】
2018525941.tif 000010
【図６】
2018525941.tif 000011
【図７】
2018525941.tif 000012
【図８】
2018525941.tif 000013
【図９】
2018525941.tif 000014
【図１０】
2018525941.tif 000015
【図１１】
2018525941.tif 000016
【図１２】
2018525941.tif 000017
【図１３】
2018525941.tif 000018
【図１４】
2018525941.tif 000019
【図１５】
2018525941.tif 000020
【図１６】
2018525941.tif 000021
【図１７】
2018525941.tif 000022
【図１８】
2018525941.tif 000023
【図１９】
2018525941.tif 000024
【図２０】
2018525941.tif 000025
【図２１】
2018525941.tif 000026
【図２２】
2018525941.tif 000027
【図２３】
2018525941.tif 000028
【図２４】
2018525941.tif 000029
【図２５】
2018525941.tif 000030
【図２６】
2018525941.tif 000031
【図２７】
2018525941.tif 000032
【図２８】
2018525941.tif 000033
【国際調査報告】
2018525941.tif 000034
2018525941.tif 000035
2018525941.tif 000036
2018525941.tif 000037