(57)【特許請求の範囲】
【請求項１】
データ転送ネットワークの転送経路上の個々の転送ノードに備えられている通信インタフェースを識別するための識別子を並べることによって構成された複数の転送経路情報を送信する経路管理サーバと、
前記経路管理サーバから取得した前記複数の転送経路情報を格納したヘッダが付加されたパケットについて、前記複数の転送経路情報からパケット転送処理に用いる転送経路情報を選択し、前記選択した転送経路情報に含まれる識別子のいずれかに従ってパケット転送処理を実行する転送ノードと、を含む通信システム。
【請求項２】
前記パケットは、前記転送経路情報に含まれる識別子のうち参照すべき識別子を示す所定の情報を格納可能であり、
前記転送ノードは、前記所定の情報を参照して、前記パケットの転送処理に用いる識別子を決定する請求項１の通信システム。
【請求項３】
前記パケットは、前記複数の転送経路情報のうち参照すべき転送経路情報を示す経路選択情報を格納可能であり、
前記転送ノードは、前記経路選択情報を参照して、前記パケット転送処理に用いる転送経路情報を決定する請求項１の通信システム。
【請求項４】
前記データ転送ネットワークにおいて、前記転送経路が分岐する位置の転送ノードに転送経路情報の選択を行わせる請求項１から３いずれか一の通信システム。
【請求項５】
データ転送ネットワークの転送経路上の個々の転送ノードに備えられている通信インタフェースを識別するための識別子を並べることによって構成された複数の転送経路情報を送信する経路管理サーバと接続され、
前記経路管理サーバから取得した前記複数の転送経路情報を格納したヘッダが付加されたパケットの転送処理を実行する転送ノードであって、
前記複数の転送経路情報からパケット転送処理に用いる転送経路情報を選択し、前記選択した転送経路情報に含まれる識別子のいずれかに従ってパケット転送処理を実行する転送ノード。
【請求項６】
データ転送ネットワークの転送経路上の所定の転送ノードからの要求に応じて、前記転送経路上の個々の転送ノードに備えられている通信インタフェースを識別するための識別子を並べることによって構成された複数の転送経路情報を構成し、送信する経路管理サーバであって、
前記複数の転送経路情報を格納したヘッダが付加されたパケットを受信した転送ノードに、前記複数の転送経路情報からパケット転送処理に用いる転送経路情報を選択させ、かつ、前記選択した転送経路情報に含まれる識別子のいずれかに従ってパケット転送処理を実行させる経路管理サーバ。
【請求項７】
データ転送ネットワークの経路管理サーバが、データ転送ネットワークの転送経路上の個々の転送ノードに備えられている通信インタフェースを識別するための識別子を並べることによって構成された複数の転送経路情報を送信するステップと、
前記転送経路上の転送ノードが、前記経路管理サーバから取得した前記複数の転送経路情報を格納したヘッダが付加されたパケットについて、前記複数の転送経路情報からパケット転送処理に用いる転送経路情報を選択し、前記選択した転送経路情報に含まれる識別子のいずれかに従ってパケット転送処理を実行するステップと、
を含む通信方法。
【請求項８】
データ転送ネットワークの転送経路上の個々の転送ノードとその隣接ノードとの間に張られたリンクを識別するための識別子を並べることによって構成された複数の転送経路情報を送信する経路管理サーバと、
前記経路管理サーバから取得した前記複数の転送経路情報を格納したヘッダが付加されたパケットについて、前記複数の転送経路情報からパケット転送処理に用いる転送経路情報を選択し、前記選択した転送経路情報に含まれる識別子のいずれかに従ってパケット転送処理を実行する転送ノードと、を含む通信システム。
【請求項９】
前記パケットは、前記転送経路情報に含まれる識別子のうち参照すべき識別子を示す所定の情報を格納可能であり、
前記転送ノードは、前記所定の情報を参照して、前記パケットの転送処理に用いる識別子を決定する請求項８の通信システム。
【請求項１０】
前記パケットは、前記複数の転送経路情報のうち参照すべき転送経路情報を示す経路選択情報を格納可能であり、
前記転送ノードは、前記経路選択情報を参照して、前記パケット転送処理に用いる転送経路情報を決定する請求項８の通信システム。
【請求項１１】
前記データ転送ネットワークにおいて、前記転送経路が分岐する位置の転送ノードに転送経路情報の選択を行わせる請求項８から１０いずれか一の通信システム。
【請求項１２】
データ転送ネットワークの転送経路上の個々の転送ノードとその隣接ノードとの間に張られたリンクを識別するための識別子を並べることによって構成された複数の転送経路情報を送信する経路管理サーバと接続され、
前記経路管理サーバから取得した前記複数の転送経路情報を格納したヘッダが付加されたパケットの転送処理を実行する転送ノードであって、
前記複数の転送経路情報からパケット転送処理に用いる転送経路情報を選択し、前記選択した転送経路情報に含まれる識別子のいずれかに従ってパケット転送処理を実行する転送ノード。
【請求項１３】
データ転送ネットワークの転送経路上の所定の転送ノードからの要求に応じて、前記転送経路上の個々の転送ノードとその隣接ノードとの間に張られたリンクを識別するための識別子を並べることによって構成された複数の転送経路情報を構成し、送信する経路管理サーバであって、
前記複数の転送経路情報を格納したヘッダが付加されたパケットを受信した転送ノードに、前記複数の転送経路情報からパケット転送処理に用いる転送経路情報を選択させ、かつ、前記選択した転送経路情報に含まれる識別子のいずれかに従ってパケット転送処理を実行させる経路管理サーバ。
【請求項１４】
データ転送ネットワークの経路管理サーバが、データ転送ネットワークの転送経路上の個々の転送ノードとその隣接ノードとの間に張られたリンクを識別するための識別子を並べることによって構成された複数の転送経路情報を送信するステップと、
前記転送経路上の転送ノードが、前記経路管理サーバから取得した前記複数の転送経路情報を格納したヘッダが付加されたパケットについて、前記複数の転送経路情報からパケット転送処理に用いる転送経路情報を選択し、前記選択した転送経路情報に含まれる識別子のいずれかに従ってパケット転送処理を実行するステップと、
を含む通信方法。
【発明の詳細な説明】
【技術分野】
【０００１】
［関連出願についての記載］
本発明は、日本国特許出願：特願２０１０−００２８７５号（２０１０年０１月０８日出願）の優先権主張に基づくものであり、同出願の全記載内容は引用をもって本書に組み込み記載されているものとする。
本発明は、通信システム、転送ノード、経路管理サーバおよび通信方法に関し、特に、ネットワークに配置された転送ノードによりパケットを転送して通信を実現する通信システム、転送ノード、経路管理サーバおよび通信方法に関する。
【背景技術】
【０００２】
図３０にＩＰ（Ｉｎｔｅｒｎｅｔ  Ｐｒｏｔｏｃｏｌ）を使ったネットワーク構成を示す。図３０において、通信ノード１００（通信ノード１００ａおよび通信ノード１００ｂ）は、ＩＰを使って通信を行う通信ノードである。転送ノード２００は、通信ノード１００が送信したＩＰパケットを受信した際に、前記ＩＰパケットの転送先を決定し、決定された転送先に転送する。転送ノードは、これを繰り返し、最終的に宛先とする通信ノードにＩＰパケットを転送する。
【０００３】
前記ＩＰパケットの転送先の決定には、転送ノード２００が内部に保持するルーティングテーブルが使用される。ルーティングテーブルとは、どのネットワーク宛のパケットを、どのインタフェースを介して次の転送処理を担う転送ノードに送れば良いかを示すテーブルであり、宛先ネットワークアドレス、次の転送先のＩＰアドレス、送信先とするインタフェースの対応を１つのエントリとして、これを列挙したテーブルである。エントリには前述した情報以外の情報も含むが、ここでは簡単のため省略する。
【０００４】
前記ネットワークアドレスとは、ＩＰアドレスの内、上位から一部のビット数を抜き出したアドレスであり、例えば、１９２．１６８．１．０／２４といった形式で表現される。この場合、アドレスの上位２４ｂｉｔがネットワークアドレスであり、当該ネットワークには、１９２．１６８．１．１から１９２．１６８．１．２５５までのアドレスが含まれる。このとき、２４をプレフィクス長と呼ぶ。
【０００５】
転送ノード２００は、ルーティングテーブルから適切なルート情報を決定する際に、ロンゲストマッチという方法を使用する。これは、ＩＰパケットの宛先アドレスとルーティングテーブルの個々のエントリを比較し、前記宛先アドレスの上位ビットから、より長いビット数が一致したものに決定するという方法である。
【０００６】
前記ルーティングテーブルは、転送ノード２００に手動などの方法により事前に設定するか、ルーティングプロトコルと呼ばれるルート情報を交換するプロトコルにより自動的に設定される。
【０００７】
ＩＰネットワークでは、以上の転送方式によりパケットを転送するが、この場合パケットの転送は、個々の転送ノードのルーティングテーブルに依存し、経路を完全には制御できないという問題点がある。また、宛先アドレスのみで転送先を決定するので、送信元アドレスや、どのアプリケーションによる通信か、といった違いによる緻密な経路制御ができないという問題点もある。
【０００８】
上記経路制御を行う方式として、ソースルーティングという手法が存在する。ソースルーティングとは、送信元となるノード（例えば、通信ノード１００ａ）が、転送経路としたい転送ノード２００のアドレスを送信パケット中に明示的に列挙する方法である。この場合、通信ノード１００ａは使用するアプリケーションなどにより意図した転送経路で宛先とするノード（例えば、通信ノード１００ｂ）にパケットを転送することができる。
【０００９】
また、ＭＰＬＳ（Ｍｕｌｔｉ−Ｐｒｏｔｏｃｏｌ  Ｌａｂｅｌ  Ｓｗｉｔｃｈｉｎｇ）というパケット転送技術にも、ソースルーティングに相当する技術が存在する。ＭＰＬＳは、受信したパケットに対してラベルを付与し、ラベルに基づいて転送処理を行う技術である。
【００１０】
前記ラベルの付与は、パケットがＭＰＬＳネットワークの境界に配置された転送ノードに入力された後、当該パケットを転送する際に実施され、以降ＭＰＬＳネットワーク内の転送ノードは、当該パケット転送するたびラベルを貼り替えながら、転送処理を繰り返す。そして、ＭＰＬＳネットワークの境界に配置された転送ノードにより外部のネットワークへ転送される際に、当該転送ノードによりラベルが除去される。
【００１１】
ＭＰＬＳにおける、ソースルーティングに相当する技術とは、ＣＲ−ＬＤＰ（Ｃｏｎｓｔｒａｉｎｔ  Ｒｏｕｔｉｎｇ−Ｌａｂｅｌ  Ｄｉｓｔｒｉｂｕｔｉｏｎ  Ｐｒｏｔｏｃｏｌ）である。ＬＤＰは、ＭＰＬＳネットワーク内の転送ノード間で前記ラベルを交換するためのプロトコルであるが、トラフィック・エンジニアリングなどの目的で、パケットの転送経路を厳密に指定することを目的としたＬＤＰがＣＲ−ＬＤＰである。
【００１２】
特許文献１には、上記ソースルーティング技術において、ルーティングヘッダ中に並列に位置する複数の中継ノードを格納し、中継ノードが所定のポリシーに基づいて、前記並列に位置する複数の中継ノードの中から一の中継ノードを選択するようにしたパケット通信方法が開示されている。
【００１３】
また同じく経路制御を行うものとして、非特許文献１、２にオープンフロー（ＯｐｅｎＦｌｏｗ）という技術が提案されている。オープンフローは、通信をエンドツーエンドのフローとして捉え、フロー単位で経路制御、障害回復、負荷分散、最適化を行うものである。転送ノードとして機能するオープンフロースイッチは、オープンフローコントローラとの通信用のセキュアチャネルを備え、オープンフローコントローラから適宜追加または書き換え指示されるフローテーブルに従って動作する。フローテーブルには、フロー毎に、パケットヘッダと照合するルールと、処理内容を定義したアクションと、フロー統計情報との組が定義される。
【００１４】
例えば、オープンフロースイッチは、最初のパケット（ｆｉｒｓｔ  ｐａｃｋｅｔ）を受信すると、フローテーブルから、受信パケットのヘッダ情報に適合するルール（ＦｌｏｗＫｅｙ）を持つエントリを検索する。検索の結果、受信パケットに適合するエントリが見つかった場合、オープンフロースイッチは、受信パケットに対して、当該エントリのアクションフィールドに記述された処理内容を実施する。一方、前記検索の結果、受信パケットに適合するエントリが見つからなかった場合、オープンフロースイッチは、セキュアチャネルを介して、オープンフローコントローラに対して受信パケットを転送し、受信パケットの送信元・送信先に基づいたパケットの経路の決定を依頼し、これを実現するフローエントリを受け取ってフローテーブルを更新する。
【先行技術文献】
【特許文献】
【００１５】
【特許文献１】特開２００４−１５３３１８号公報
【非特許文献】
【００１６】
【非特許文献１】Ｎｉｃｋ  ＭｃＫｅｏｗｎほか７名、“ＯｐｅｎＦｌｏｗ：  Ｅｎａｂｌｉｎｇ  Ｉｎｎｏｖａｔｉｏｎ  ｉｎ  Ｃａｍｐｕｓ  Ｎｅｔｗｏｒｋｓ”、［ｏｎｌｉｎｅ］、［平成２１年１２月１４日検索］、インターネット〈ＵＲＬ：ｈｔｔｐ：／／ｗｗｗ．ｏｐｅｎｆｌｏｗｓｗｉｔｃｈ．ｏｒｇ／／ｄｏｃｕｍｅｎｔｓ／ｏｐｅｎｆｌｏｗ−ｗｐ−ｌａｔｅｓｔ．ｐｄｆ〉
【非特許文献２】“ＯｐｅｎＦｌｏｗ  Ｓｗｉｔｃｈ  Ｓｐｅｃｉｆｉｃａｔｉｏｎ”  Ｖｅｒｓｉｏｎ  ０．９．０．  （Ｗｉｒｅ  Ｐｒｏｔｏｃｏｌ  ０ｘ９８）  ［平成２１年１２月１４日検索］  、インターネット〈ＵＲＬ：ｈｔｔｐ：／／ｗｗｗ．ｏｐｅｎｆｌｏｗｓｗｉｔｃｈ．ｏｒｇ／ｄｏｃｕｍｅｎｔｓ／ｏｐｅｎｆｌｏｗ−ｓｐｅｃ−ｖ０．９．０．ｐｄｆ〉
【発明の概要】
【発明が解決しようとする課題】
【００１７】
上記特許文献１及び非特許文献１〜２の全開示内容はその引用をもって本書に繰込み記載する。
以下の分析は、本発明によってなされたものである。
ＩＰ技術に基づく転送ノード、すなわちスイッチやルータが保持するルーティングテーブルは増大の一途をたどり、ルート情報の爆発と呼ばれる問題が指摘されている。ルート増大の結果、ルーティングテーブルを保持するためのメモリの必要量が増えるとともに、ルート決定処理に時間がかかるため、パケット転送処理能力が劣化する。
【００１８】
ＭＰＬＳは、ＩＰルーティングと比してルート決定時間が削減できるものの、多様な転送ポリシを適用すれば、やはりルーティングテーブルのエントリ数は増大し、処理性能の劣化につながる。
【００１９】
以上のように、ルーティングテーブルのエントリ数の抑制は、メモリ削減や処理能力向上の観点で転送ノードの重要な課題となっている。
【００２０】
一方、上記したソースルーティングでは、パケット中に転送ノード１００のアドレスを格納するため、パケットが含むことができる正味のデータ量が小さくなってしまうという問題点がある。このため、ソースルーティングは、ネットワークの試験など一部の用途に限られ、アプリケーションなどの通信で使われるパケット（これを以降「データパケット」と呼称する。）には使用されない。なお、正味のデータ以外の情報をオーバヘッドと呼ぶ。すなわち、前述の問題は、オーバヘッドが大きくなる問題と言い換えられる。
【００２１】
また、ＣＲ−ＬＤＰで使われるパケット中には、前述のＩＰルーティングにおけるソースルーティングと同様に、転送毎（１ホップ毎）の転送ノードの情報が含まれる。転送ノードの情報としては、例えばＩＰｖ４アドレスやＩＰｖ６アドレスが使われるが、この場合も転送経路中のすべての転送ノードの情報を列挙する場合は当該情報が大きくなるため、制御用パケット以外に用いるのは現実的ではない。結果として、データパケットの転送経路を厳密に決定する際には、前記ＣＲ−ＬＤＰなどで、転送ポリシごとの転送情報を転送ノード内に設定する必要が生じる。
【００２２】
特許文献１の方法も、上記したソースルーティングそのものであり、パケットが含むことができる正味のデータ量が小さくなってしまうという問題点がある。
【００２３】
また、非特許文献１、２の方法は、冒頭に述べたルーティングテーブルを参照する方式と同様に、個々の転送ノードが、フローテーブルを参照する必要があり、エントリの増大に従って、レイテンシ（遅延時間）の発生やノードへの負荷が掛かってしまうことが考えられる。
【００２４】
以上説明したように、ルーティングテーブルやフローテーブルに様々な転送ポリシごとのエントリを追加する方式は、エントリの追加・更新・削除の処理負荷と、ルーティングテーブルの情報量が増大するという問題点があり、転送経路を明示的に指定するソースルーティング等は、オーバヘッドが大きくなり、データパケットの送信には適さないという問題点がある。
【００２５】
本発明は、上記した事情に鑑みてなされたものであって、その目的とするところは、簡略化された転送テーブルを用いて実現可能であり、しかも、データパケットの経路制御、とりわけ、転送経路上の障害発生状況やトラフィックの負荷状況に応じて、代替経路への切替を可能とする通信システム、転送ノード、経路管理サーバ、通信方法およびプログラムを提供することにある。
【課題を解決するための手段】
【００２６】
本発明の第１の視点によれば、データ転送ネットワークの転送経路上の個々の転送ノードに備えられている通信インタフェースを識別するための識別子を並べることによって構成された複数の転送経路情報を送信する経路管理サーバと、前記経路管理サーバから取得した前記複数の転送経路情報を格納したヘッダが付加されたパケットについて、前記複数の転送経路情報からパケット転送処理に用いる転送経路情報を選択し、前記選択した転送経路情報に含まれる識別子のいずれかに従ってパケット転送処理を実行する転送ノードと、を含む通信システムが提供される。
【００２７】
本発明の第２の視点によれば、データ転送ネットワークの転送経路上の個々の転送ノードに備えられている通信インタフェースを識別するための識別子を並べることによって構成された複数の転送経路情報を送信する経路管理サーバと接続され、前記経路管理サーバから取得した前記複数の転送経路情報を格納したヘッダが付加されたパケットの転送処理を実行する転送ノードであって、前記複数の転送経路情報からパケット転送処理に用いる転送経路情報を選択し、前記選択した転送経路情報に含まれる識別子のいずれかに従ってパケット転送処理を実行する転送ノードが提供される。
【００２８】
本発明の第３の視点によれば、データ転送ネットワークの転送経路上の所定の転送ノードからの要求に応じて、前記転送経路上の個々の転送ノードに備えられている通信インタフェースを識別するための識別子を並べることによって構成された複数の転送経路情報を構成し、送信する経路管理サーバであって、前記複数の転送経路情報を格納したヘッダが付加されたパケットを受信した転送ノードに、前記複数の転送経路情報からパケット転送処理に用いる転送経路情報を選択させ、かつ、前記選択した転送経路情報に含まれる識別子のいずれかに従ってパケット転送処理を実行させる経路管理サーバが提供される。
【００２９】
本発明の第４の視点によれば、データ転送ネットワークの経路管理サーバが、データ転送ネットワークの転送経路上の個々の転送ノードに備えられている通信インタフェースを識別するための識別子を並べることによって構成された複数の転送経路情報を送信するステップと、前記転送経路上の転送ノードが、前記経路管理サーバから取得した前記複数の転送経路情報を格納したヘッダが付加されたパケットについて、前記複数の転送経路情報からパケット転送処理に用いる転送経路情報を選択し、前記選択した転送経路情報に含まれる識別子のいずれかに従ってパケット転送処理を実行するステップと、を含む通信方法が提供される。本方法は、上記した転送ノードおよび経路管理サーバという、特定の機械に結びつけられている。
【００３０】
本発明の第５の視点によれば、上記した通信システム、転送ノード、経路管理サーバ及び通信方法において、データ転送ネットワークの転送経路上の個々の転送ノードとその隣接ノードとの間に張られたリンクを識別するための識別子を並べることによって構成された転送経路情報を用いる構成が提供される。
【発明の効果】
【００３１】
本発明によれば、正味のデータ量の圧迫や、経路上にある転送ノードへの負荷増大の少ない、代替経路への切替の可能な経路制御が可能となる。その理由は、データ転送ネットワークの転送経路上の個々の転送ノードに備えられている通信インタフェースまたは前記個々の転送ノードとその隣接ノードとの間に張られたリンクを識別するための識別子を並べることによって構成された複数の転送経路情報をヘッダに付加し、転送ノードに転送経路情報を解釈・実行させていく構成を採用したことにある。
【図面の簡単な説明】
【００３２】
【図１】本発明の第１の実施形態に係る通信システムを示す図である。
【図２】本発明の第１の実施形態に係る通信システムの境界転送ノードの構成を示す図である。
【図３】本発明の第１の実施形態の境界転送ノードおよび内部転送ノードの記録部に記録される転送テーブルを示す図である。
【図４】パケットへの経路情報ヘッダ、代替経路開始位置情報ヘッダおよび代替経路情報ヘッダの付与形態の一例を示す図である。
【図５】境界転送ノードにて付加される経路情報ヘッダのフォーマットの例である。
【図６】図５の経路転送ヘッダ中のローカルＩＤのフォーマット（拡張なしの例）を示す図である。
【図７】図５の経路転送ヘッダ中のローカルＩＤのフォーマット（拡張ありの例）を示す図である。
【図８】境界転送ノードにて付加される代替経路開始位置情報ヘッダのフォーマットの例である。
【図９】境界転送ノードにて付加される代替経路情報ヘッダのフォーマットの例である。
【図１０】本発明の第１の実施形態に係る通信システムの内部転送ノードの構成を示す図である。
【図１１】本発明の第１の実施形態に係る通信システムの経路管理サーバの構成を示す図である。
【図１２】各転送ノードから通知される近隣情報を示す図である。
【図１３】図１２の近隣情報から構築したネットワークトポロジの例である。
【図１４】境界転送ノードがパケットを受信した際の動作を示すフローチャートである。
【図１５】図１４の転送処理の詳細を示すフローチャートである。
【図１６】図１５の代替経路転送判定処理の詳細を示すフローチャートである。
【図１７】内部転送ノードがパケットを受信した際の動作を示すフローチャートである。
【図１８】境界転送ノードおよび内部転送ノードが近隣情報通知を送信する動作を示すフローチャートである。
【図１９】経路管理サーバが近隣情報通知を受信した際の動作を示すフローチャートである。
【図２０】経路管理サーバが経路情報を要求された際の動作を示すフローチャートである。
【図２１】本発明の第１の実施形態の通信ノードが、パケットを対向の通信ノードに送信した際のパケット転送の流れを示すシーケンス図である。
【図２２】本発明の第１の実施形態の通信ノードが、パケットを対向の通信ノードに送信した際のパケット転送の流れ（１回の転送失敗有り）を示すシーケンス図である。
【図２３】本発明の第１の実施形態の通信ノードが、パケットを対向の通信ノードに送信した際のパケット転送の流れ（２回の転送失敗有り）を示すシーケンス図である。
【図２４】本発明の第２の実施形態に係る通信システムの境界転送ノードの構成を示す図である。
【図２５】本発明の第２の実施形態の境界転送ノードの記録部に記録される転送失敗経路情報テーブルの例を示す図である。
【図２６】本発明の第２の実施形態の境界転送ノードで付加される経路転送ヘッダ中のローカルＩＤのフォーマット（拡張なしの例）を示す図である。
【図２７】本発明の第２の実施形態に係る通信システムの内部転送ノードの構成を示す図である。
【図２８】本発明の第２の実施形態における代替経路転送判定処理の詳細を示すフローチャートである。
【図２９】本発明の第２の実施形態の通信ノードが、パケットを対向の通信ノードに送信した際のパケット転送の流れを示すシーケンス図である。
【図３０】背景技術として説明する、パケット転送を行う通信システムを示す図である。
【発明を実施するための形態】
【００３３】
はじめに、本発明の概要を説明する。本発明の通信システムの転送ノードは、受信パケットに、複数の転送経路情報が含まれるヘッダが付与されている場合、これら複数の転送経路情報のうち、いずれかを選択して転送処理を実施する。
【００３４】
ここで、前記転送経路情報は、データ転送ネットワーク上の個々の転送ノードが、転送先とする通信インタフェースを識別可能な識別子を転送順に並べたものとすることができる。前記識別子は、各転送ノード内で、転送先の一意性を確保するに足る長さがあればよい。
【００３５】
転送ノードが備えるインタフェースの数はＩＰアドレス等に比べてはるかに少ない。冒頭に述べたソースルーティングと異なり、本発明の転送経路情報を構成する識別子は、例えば１バイト長などの短い情報で記述することが可能となるため、正味のデータ量に与える影響は軽微である。従って、一部の制御用パケットのみならず、データパケットなど、すべてのパケットに対して、転送経路を１ホップ毎に記述した情報を格納することが可能となり、高度な転送制御が可能となる。
【００３６】
さらに、個々の転送ノードは、前記識別子と、転送先の通信インタフェースとの対応関係を保持すればよく、膨大な数となる冒頭に述べたルーティングテーブル等の転送テーブルを保持する必要はないため、メモリ量を削減できる。また、転送先の決定も、簡単かつ高速に行えるため、パケットの転送遅延も小さくすることが可能となる。さらに、個々の転送ノードのＣＰＵの処理能力も低くて済む。
【００３７】
なお、上記複数の転送経路情報を含んだヘッダの付加および削除は、転送ノードのうち、外部ネットワークとの境界に配置された転送ノード（境界転送ノード）に次のように実行させればよい。外部ネットワークからパケットを受信した境界転送ノードは、当該パケットの転送経路を、別途設けられた経路管理サーバまたは当該境界転送ノード内に記録された情報から取得し、複数の転送経路情報を格納したヘッダを受信したパケットに付与する。また、境界転送ノードは、外部ネットワークにパケットを送信する場合、前記ヘッダを削除する。
【００３８】
前記複数の転送経路情報のうち、どの転送経路情報を使用するかは、個々の転送ノードに判断させても良いが、転送経路情報の格納順序や別途優先順位情報を付加することにより、優先順位を付けることも可能である。
本発明において以下の形態が可能である。
［形態１］
データ転送ネットワークの転送ノードが、パケットの転送経路を一意に指定可能な情報を含む転送経路情報を複数格納したパケットを、前記複数の転送経路情報のいずれかを使って転送処理を行う通信システム、即ち、データ転送ネットワークの転送経路上の個々の転送ノードに備えられている通信インタフェースまたは前記個々の転送ノードとその隣接ノードとの間に張られたリンクを識別するための識別子を並べることによって構成された複数の転送経路情報を構成する経路管理サーバと、前記経路管理サーバから取得した前記複数の転送経路情報を格納したヘッダが付加されたパケットについて、前記複数の転送経路情報のいずれかに従ってパケット転送処理を実行する転送ノードを含む通信システム。
［形態２］
前記パケットは、前記複数の転送経路情報のうちのどの転送経路情報を使うかを示す経路選択情報を格納可能であり、
前記転送ノードは、前記経路選択情報を参照して、前記パケット転送処理に用いる転送経路情報を決定することが好ましい。
［形態３］
前記複数の転送経路情報には、１つの転送経路から、別の転送経路へと分岐可能な転送ノードを判別するための情報が含まれており、
前記分岐可能な位置の転送ノードが、前記複数の転送経路情報のいずれかを選択することが好ましい。
［形態４］
前記パケットは、転送ノードが前記経路選択情報により決定された転送経路情報に基づき転送処理を行った際の転送結果を示す転送結果情報を格納可能であり、
前記転送ノードは、転送処理の結果により更新される前記転送結果情報を参照して、転送に失敗していない転送経路情報を選択することが好ましい。
［形態５］
前記パケットは、当該パケットを受信した転送ノードまで至る転送経路上における現在の転送経路から異なる転送経路へと分岐可能な転送ノードの数を示す分岐点情報を格納可能であり、
前記転送ノードは、転送処理に失敗した場合前記分岐点情報を減らし、前記分岐点情報を用いて当該パケットを破棄するか否かを決定することが好ましい。
［形態６］
前記パケットは、転送経路を変更した際に、変更前の転送経路情報を特定可能な情報を格納可能であり、
前記転送ノードは、前記パケットに含まれる変更前の転送経路情報を用いて、変更前の転送経路への復帰処理を行い、さらなる分岐先を探索することが好ましい。
［形態７］
前記転送ノードは、さらに、
転送失敗が発生した転送経路情報を記録する転送結果記録部を備え、
パケットを受信した際に、当該パケットに格納された転送経路情報と前記記録された転送失敗が発生した経路情報とを比較し、その結果、転送失敗が予測される場合、別の転送経路に切りかえることが好ましい。
［形態８］
データ転送ネットワークの転送経路上の個々の転送ノードに備えられている通信インタフェースまたは前記個々の転送ノードとその隣接ノードとの間に張られたリンクを識別するための識別子を並べることによって構成された複数の転送経路情報を構成する経路管理サーバと接続され、前記経路管理サーバから取得した前記複数の転送経路情報を格納したヘッダが付加されたパケットについて、前記複数の転送経路情報のいずれかを使ってパケット転送処理を実行する転送ノード。
［形態９］
上記した転送ノードからの経路要求を受信した際に、前記経路要求に含まれる情報に基づき、前記パケットを通信相手まで到達させ得る複数の転送経路情報を応答する経路管理サーバ。
［形態１０］
データ転送ネットワークの経路管理サーバが、転送ノードからの経路要求を受信した際に、前記経路要求に含まれる情報に基づき、データ転送ネットワークの転送経路上の個々の転送ノードに備えられている通信インタフェースまたは前記個々の転送ノードとその隣接ノードとの間に張られたリンクを識別するための識別子を並べることによって構成された複数の転送経路情報を応答するステップと、前記経路管理サーバから取得した前記転送ノードを含む前記複数の転送経路情報のいずれかから選択された転送経路上の転送ノード群が、前記選択された転送経路情報を使って順次前記パケットを転送するステップと、を含む通信方法。
［形態１１］
上記した転送ノード、経路管理サーバを構成するコンピュータに実行させるプログラム。
なお、上記形態８〜形態１１に記載の転送ノード、経路管理サーバ、通信方法およびプログラムは、形態１の通信システムと同様に、それぞれの構成要素ないしステップについて、形態２〜形態７の内容に展開することが可能である。
【００３９】
以下の実施形態では、優先順位が２位以下の転送経路を、「代替転送経路」とする。このような代替転送経路は、ある転送経路を用いた転送に失敗したときに使用する。例えば、あるパケットの転送処理に失敗した場合、転送に失敗したパケット内部の転送経路情報に基づき、転送経路を逆方向に転送し、境界転送ノードまたは複数の転送経路上の分岐点となる転送ノードに到達させ、代替転送経路を用いた再送を行わせることができる。また、前記複数の転送経路情報に、このような代替経路の存在を示すヘッダ（後記する代替経路開始位置ヘッダはその一例である。）や、前記分岐点の有無（後記する経路情報ヘッダ内の‘Ｅｘ’フィールドはその一例である。）、転送結果を示す情報（後記する経路情報ヘッダ内の‘Ｆ’フィールドはその一例である。）、次に使用すべき代替経路の識別情報（後記する経路情報ヘッダ内の‘Ａｌｔ’フィールドの値にインクリメントまたはデクリメントする。）、あるいは、データ転送ネットワークの状態（転送先のノードの故障・負荷増大、トラヒック状況等）などを経路選択情報として用いる構成も採用可能である。
【００４０】
［第１の実施形態］
続いて、本発明の第１の実施形態について図面を参照して詳細に説明する。図１は、本発明の第１の実施形態に係る通信システムを示す図である。図１を参照すると、通信ノード１００ａ、１００ｂと、境界転送ノード３００ａ、３００ｂと、内部転送ノード４００と、経路管理サーバ５００とが示されている。
【００４１】
データ転送ネットワーク６００は、本発明の方式によりパケットの転送処理を行うネットワークであり、外部ネットワーク７００は、ＩＰネットワークなどのように、ネットワーク６００とは異なる方式によりパケット転送処理を実施するネットワークである。ただし、ネットワーク６００と同様の転送方式を使っている場合も、管理者が異なる場合は外部ネットワーク７００となり得る。ここでは外部ネットワーク７００は、ＩＰネットワークとした説明を行う。外部ネットワーク７００は、データ転送ネットワーク６００と、境界転送ノード３００ａ、３００ｂを介して接続される。
【００４２】
通信ノード１００ａ、１００ｂは、それぞれ外部ネットワーク７００に属する通信ノードであり、外部ネットワーク７００のパケット転送方式に沿ったパケットの送受信を行う。つまり、本実施形態においてはＩＰパケットの送受信を行うノードである。通信ノード１００ａ、１００ｂは、一般的なＩＰノードと同様であるので詳細な説明は省略する。
【００４３】
境界転送ノード３００ａ、３００ｂは、データ転送ネットワーク６００と外部ネットワーク７００との間に配置され、通信ノード１００ａ、１００ｂから送信されたパケットを受信した場合には、後述の転送経路情報や代替転送経路情報を格納するヘッダを付与し、さらにヘッダ中のこれら複数の転送経路情報に基づきデータ転送ネットワーク６００内の内部転送ノード４００に当該パケットを転送する。
【００４４】
また、境界転送ノード３００ａ、３００ｂは、内部転送ノード４００から転送経路情報等を格納したヘッダが付与されたパケットを受信した場合であってそのヘッダ中の転送経路情報または代替転送経路情報から転送経路上の最後のノードであると判定した場合、受信したパケットから前記経路情報ヘッダを削除し、その後、外部ネットワーク７００の通信ノード１００ａ、１００ｂ側にパケットを送信する。
【００４５】
なお、以下の説明では、転送経路情報は、経路管理サーバ５００から取得するものとして説明するが、これに拘らず、境界転送ノード３００内に保持した情報により転送経路情報を生成しても良い。
【００４６】
以下、本実施形態の境界転送ノード３００ａ（３００ｂ）、内部転送ノード４００、経路監視サーバ５００の順に、その構成を説明する。
【００４７】
図２は、図１の境界転送ノード３００ａ、３００ｂの構成を示す図である。図２に示すとおり、境界転送ノード３００は、通信インタフェース３１０と、パケット転送部３２０と、ヘッダ操作部３３０と、ローカルＩＤ決定部３４０と、近隣情報通知部３５０と、経路取得部３６０と、代替経路移行部３７０と、転送結果記録部３８０と、記録部３９０とを備えて構成される。
【００４８】
通信インタフェース３１０は、パケットの送受信を行うためのインタフェースであり、例えばＬＡＮカードのようなＮｅｔｗｏｒｋ  Ｉｎｔｅｒｆａｃｅ  Ｃａｒｄ（ＮＩＣ）と、それを動作させるソフトウェア（ドライバ）により実現される。ただし、前記のような物理的なインタフェースのみならず、論理的なインタフェースであっても良い。この場合、物理的なインタフェース１つを使って、複数のインタフェースを備えているように動作させることができる。
【００４９】
境界転送ノード３００は、上記のような１つ以上の物理インタフェース、あるいは論理インタフェースを備える。各々の通信インタフェース３１０は、データ転送ネットワーク内の内部転送ノード４００や他の境界転送ノード３００と接続される。また、一部の通信インタフェース３１０は、外部ネットワーク７００の通信ノード１００とも接続される。さらに、一部の通信インタフェース３１０は、経路管理サーバ５００とも接続される。経路管理サーバ５００は、データ転送ネットワーク６００内に配置していても構わないし、経路管理サーバ５００専用のネットワークを介して接続することとしても構わない。
【００５０】
パケット転送部３２０は、受信パケットに転送経路情報等を格納したヘッダが付与されていた場合、まず代替経路移行部３７０（詳細は後述）にて代替経路へ移行するかどうかの判定と、移行する場合はそのための準備を終えた後、前記ヘッダ内の転送経路情報または代替転送経路情報と、記録部３９０に記録された情報に基づき、パケットを転送する機能を備える。
【００５１】
記録部３９０には、後に図３を用いて説明するとおり、ローカルＩＤと、転送先とする通信インタフェースと、当該通信インタフェース３１０と接続している近隣の境界転送ノード３００、あるいは内部転送ノード４００の識別子の対応情報を１つのエントリとした転送テーブルが記録されている。パケット転送部３２０は、前記ローカルＩＤに対応する次ノードにパケットを転送することができる。
【００５２】
なお、以降では、境界転送ノード３００と内部転送ノード４００の総称を転送ノードとする。また、直接接続しているノード（通信ノード１００、境界転送ノード３００、内部転送ノード４００）同士を近隣ノードと呼称する。
【００５３】
図３は、境界転送ノード３００および内部転送ノード４００の記録装置（記録部３９０または後記記録部４７０に相当。）に記録される転送テーブルの例である。本実施形態では、図３に示すとおり、ローカルＩＤとして、隣接する転送ノード間あるいは境界転送ノード３００と通信ノード１００ａ（１００ｂ）間の、物理リンクあるいは論理リンクに割当てた識別子（リンクＩＤ）を使用する。したがって、「ローカルＩＤ」のフィールドには前記リンクＩＤが設定される。転送先とする通信インタフェースを示す「インタフェース」のフィールドには、リンクＩＤが割当てられたリンクに接続した通信インタフェース３１０を識別する情報が設定される。また、図３の例では、近隣ノードの情報を示す「次ホップ」のフィールドに、前記リンクに接続された転送ノードの識別子が設定されている。
【００５４】
なお、転送先とする通信インフェースがＩＰにより通信を行う通信ノード１００ａ（１００ｂ）と接続されていた場合は、「次ホップ」のフィールドの識別子として、例えば、通信ノード１００ａ（１００ｂ）のＩＰアドレスを使用できる。一方、境界転送ノード３００、あるいは内部転送ノード４００の場合は、一意に割当てた識別子（例えば、図３のＮｏｄｅ＿１、Ｎｏｄｅ＿２等）を使用する。前記転送ノードの識別子は、事前に設定することとしても良いし、経路管理サーバ５００など、外部のノードから設定する方式としても構わない。さらに、前記「次ホップ」フィールドの識別子は、転送処理に必ず必要なわけではなく、省略することもできる。
【００５５】
また、ローカルＩＤとして、通信インタフェース３１０を識別する情報そのものを使うこともできる。通信インタフェース３１０を識別する情報は、短い情報量（例えば、１〜２バイト程度）で記述できる情報であることが望ましいため、通信インタフェース３１０を識別する情報が長い場合（例えば、通信インタフェースの名前などを使う場合）は、１バイトなど短い情報で記述できる別の識別子を別途割り振った上でローカルＩＤとして適用する。ただし、ここでは特に説明しない場合、ローカルＩＤとしてリンクＩＤを使用するものとして説明する。
【００５６】
一般的なレイヤ３で転送処理を行うルータやＬ３スイッチ、また、レイヤ２での転送処理を行うＬ２スイッチが備えている通信インタフェースは基本的に数十個程度であるため、リンクの識別子や通信インタフェースの識別子は、１バイトで十分表現できる。実際の通信インタフェースの識別子が数バイトを要するような長い情報である場合は、１バイト、あるいは２バイトに格納可能な範囲とした識別子を別途作成し、通信インタフェースの識別子に対応づければよい。
【００５７】
なお、図３の転送テーブルは、本発明を端的に説明するために例示したものであり、個々のエントリに、他の情報をさらに対応づけて記録することとしても構わない。
【００５８】
図４は、境界転送ノード３００によるパケットへの経路情報ヘッダ、代替経路開始位置情報ヘッダおよび代替経路情報ヘッダの付与形態の一例を示す図である。図４の例では、経路情報ヘッダは、パケットの先頭部分に付与される。さらに、代替経路情報を含める場合は、経路情報ヘッダ、代替経路開始位置情報ヘッダ（後に詳述する。）、代替経路情報ヘッダの順で付与される。代替経路情報ヘッダは複数付与することが可能であり、複数付与する場合は最初の代替経路情報ヘッダに続けて、次の代替経路情報ヘッダを配置する。
【００５９】
代替経路情報ヘッダの数に制限はないが、先に述べた正味のデータ量の圧迫を回避することが本発明の目的の一つであるから、代替経路情報ヘッダの数に上限を設けることも望ましい。以下、本実施形態では、最大３個の代替経路情報ヘッダを付加できるものとして説明する。
【００６０】
図５は、本実施形態で用いる経路情報ヘッダのフォーマットの１例である。図５において、‘Ｄ’（＝Ｄｉｒｅｃｔｉｏｎ）は転送方向を示す。例えば、‘０’なら順方向の転送を示し、‘１’なら逆方向の転送を示す。‘Ａｌｔ’（＝Ａｌｔｅｒｎａｔｅ  Ｒｏｕｔｅ  Ｎｕｍｂｅｒ）は転送時に参照している代替経路情報を示す値が設定される。本実施形態では、‘Ａｌｔ’は２ｂｉｔなので、設定値は０〜３となる。‘Ａｌｔ’が０のときは代替経路を使わず、‘Ｌｏｃａｌ  ＩＤ＃ｎ’以降の経路情報を参照して転送処理を行う。一方、‘Ａｌｔ’が１〜３の場合は、それぞれの値に対応した代替経路情報ヘッダに記載された代替経路を参照して転送処理を行うことを示す。代替経路情報ヘッダについては後に詳細に説明する。
【００６１】
図５の‘Ｅｘ’（＝Ａｌｔｅｒｎａｔｅ  Ｒｏｕｔｅ  Ｅｘｉｓｔｅｎｃｅ）は、現在当該パケットの転送処理を行おうとしている転送経路における代替経路への分岐点の数を示す。転送ノードは、当該パケットの転送にあたり、自ノードから代替経路に分岐可能な場合は、‘Ｅｘ’フィールドをインクリメントする。したがって、現在転送処理を実施する転送ノードまでに代替経路が無い場合は、当該値は‘０’となる。代替経路がある場合は、存在した代替経路への分岐点の数が設定されていることになる。‘Ｅｘ’は、代替経路に移行する場合にデクリメントされる。
【００６２】
‘Ｆ’（Ｆａｉｌｕｒｅ  Ｆｌａｇ）は、転送ノードが何らかの理由により次ホップとなる転送ノードへの転送処理に失敗した場合、‘１’に設定される。
【００６３】
‘Ｒｓｖ’（Ｒｅｓｅｒｖｅｄ）は予約フィールドであり、本発明の実施形態では使用しない。したがって、０などの固定値が設定される。
【００６４】
‘Ｃｕｒｒｅｎｔ  Ｏｆｆｓｅｔ’は、転送時に参照すべきローカルＩＤ情報のオフセット情報が設定される（単位はバイト）。この値は、‘ＬｏｃａｌＩＤ  ＃０’からのオフセットバイト数で示される。境界転送ノード３００で経路情報ヘッダを付与する際には、‘Ｃｕｒｒｅｎｔ  Ｏｆｆｓｅｔ’の値は‘０’に設定される。
【００６５】
‘Ｈｅａｄｅｒ  Ｌｅｎｇｔｈ’は、‘Ｒｏｕｔｅ  Ｌｅｎｇｔｈ’以降のヘッダの長さをバイト数で示す。本実施形態では、パケットの整形（アライメント）を考慮し、４バイト単位の値とする。正味のデータの終わりが４バイト単位の境界に合わない場合は、スタッフィング（パディング）を行う（０を設定したダミーの情報を後置する。）。
【００６６】
‘Ｒｏｕｔｅ  Ｌｅｎｇｔｈ’は、後に続くローカルＩＤの列挙により示された経路情報の合計バイト数を示す。
【００６７】
‘Ｌｏｃａｌ  ＩＤ＃ｎ’は、ｎホップ目の境界転送ノード３００あるいは内部転送ノード４００が転送先として参照すべきローカルＩＤが設定される。上記図５のフォーマットはあくまで一例であり、種々の変形フォーマットで情報を格納したとしても構わない。
【００６８】
上記のように、転送経路の情報として、転送ノード内、あるいは、隣接する転送ノード間といった局所的な範囲において一意となるローカルＩＤを用いることで、経路情報ヘッダの情報量を削減できる。
【００６９】
なお、本実施形態では、各々のローカルＩＤは１バイトとしたが、論理的なリンクでは１バイトでは表現できない可能性がある。また、代替経路に関わる情報（優先順位や選択条件など）を個々の経路情報に設定する場合も１バイトでは不足すると考えられる。
【００７０】
この場合は、図６に示すように、‘ＬｏｃａｌＩＤ＃ｎ’の最上位ｂｉｔを、ローカルＩＤが１バイト表記か２バイト表記かを示すローカルＩＤ拡張フラグ（‘Ｅ’（Ｅｘｔｅｎｓｉｏｎ）ビット）として使用しても良い。この場合、最上位ビットが０の場合、転送ノードは、ローカルＩＤを１バイトの識別子と解釈し、最上位ビットが１の場合、ローカルＩＤを２バイトの識別子として解釈することになる。
【００７１】
図６は、ローカルＩＤ拡張フラグ（‘Ｅ’）が‘０’の場合のローカルＩＤを示す図である。図７は、ローカルＩＤ拡張フラグ（‘Ｅ’）が‘１’の場合のローカルＩＤを示す図であり、１ホップあたりの経路情報長は２バイトとなる。なお、ローカルＩＤの長さとして、１バイトまたは２バイトを選択できるものとして説明したが、なるべく短いビット長で１ホップあたりの経路を記述することが重要なのであって、厳密に１バイト、２バイトである必要はなく、１バイト未満の固定長としたり、適当なデリミタ文字で区切られた任意の可変長とすることも可能である。
【００７２】
なお、図７の‘Ａｌｔ’（＝Ａｌｔｅｒｎａｔｉｖｅ  Ｒｏｕｔｅ）は、当該ローカルＩＤを参照する転送ノードから分岐可能な代替経路の存在の有無と、代替経路に分岐する場合に参照すべき代替経路情報ヘッダを指定する値が設定される。具体的には、‘Ａｌｔ’が０の場合は、当該ローカルＩＤを参照する転送ノードから分岐する代替経路が無いことを示す。一方、‘Ａｌｔ’が１〜３の場合は、前記転送ノードから分岐する代替経路があることを示し、さらにその値は、代替経路へ分岐する際に参照すべき転送情報ヘッダの番号を示す。
【００７３】
図７の‘Ｕ’（＝Ｕｓｅｄ）は、‘Ａｌｔ’により示された代替経路への転送処理が実施されたことを示す。言い換えれば代替経路が使われたことを示す。転送ノードは、代替経路にパケットを転送する際に、当該ビットを‘１’に設定する。
【００７４】
図７の‘Ｌｏｃａｌ  ＩＤ  ｔｙｐｅ２’は、図６の‘Ｌｏｃａｌ  ＩＤ’同様、ローカルＩＤを設定するためのフィールドであるが、図６よりもビット長が大きいため、より多くのリンク識別子、あるいはインタフェース識別子を記述することが可能である。
【００７５】
次に、図４の代替経路開始位置情報ヘッダについて説明する。図８は、代替経路開始位置情報ヘッダのフォーマットの１例である。図８において、‘Ｒｅｓｅｒｖｅｄ’は予約フィールドであり本実施の形態では使用しない。‘Ｏｆｆｓｅｔ＃ｎ’は、経路情報ヘッダの先頭バイトからｎ番目の代替経路情報ヘッダまでのオフセットが設定される。単位はバイトである。なお、オフセットを代替経路開始位置情報ヘッダからの先頭バイトからのオフセットとしても構わない。
【００７６】
次に、図４の代替経路情報ヘッダについて説明する。図９は、代替経路情報ヘッダのフォーマットの１例である。図９において、‘Ｆｒｍ’（＝Ｆｒｏｍ）には当該代替経路に移行する前の経路情報の番号が設定される。‘Ｒｅｓｅｒｖｅｄ’は予約フィールドであり本実施形態では使用しない。
【００７７】
上記で例示した、経路情報ヘッダ、代替経路開始位置情報ヘッダ、代替経路情報ヘッダのフォーマットや、設定される情報はあくまで一例であり、異なるフォーマットとしても良いし、各ヘッダが含む情報を他のヘッダの一部としても良いし、あるいは、別のヘッダとして格納する形態も採用可能である。
【００７８】
パケット転送部３２０は、受信パケットの経路情報ヘッダの‘Ａｌｔ’フィールドを参照し、これが‘０’の場合、経路情報ヘッダを使った転送処理を行い、それ以外の場合は、代替経路情報ヘッダによる転送処理を行う。
【００７９】
‘Ａｌｔ’が‘０’の場合、パケット転送部３２０は、前述のように経路情報ヘッダを参照しての転送処理を行う。より具体的には、受信パケットの経路情報ヘッダの‘Ｄ’フィールドが‘０’であった場合、すなわち順方向への転送を示していた場合、パケット転送部３２０は、‘Ｃｕｒｒｅｎｔ  Ｏｆｆｓｅｔ’を参照し、対応するローカルＩＤを参照して転送先の通信インタフェース３１０を決定した後、‘Ｃｕｒｒｅｎｔ  Ｏｆｆｓｅｔ’の値を参照したローカルＩＤの長さ分（例えば、１バイト、あるいは２バイト）増やし、前記決定した通信インタフェース３１０からパケットを送出する。一方、‘Ｄ’が‘１’である場合、すなわち逆方向への転送を示していた場合、パケット転送部３２０は、‘Ｃｕｒｒｅｎｔ  Ｏｆｆｓｅｔ’を参照し、対応するローカルＩＤの１つ手前のローカルＩＤを参照し、転送先とする通信インタフェース３１０を決定する。その後、‘Ｃｕｒｒｅｎｔ  Ｏｆｆｓｅｔ’の値を参照したローカルＩＤの長さ分減らし、決定した通信インタフェース３１０からパケットを送出する。
【００８０】
一方、‘Ａｌｔ’が‘０’以外の場合、パケット転送部３２０は、代替経路開始位置情報ヘッダを参照し、前記‘Ａｌｔ’フィールドに設定された値を代替経路の番号とみなし、対応する‘Ｏｆｆｓｅｔ＃ｎ’フィールドを読み取る。例えば、‘Ａｌｔ’が‘１’の場合は、‘Ｏｆｆｓｅｔ＃１’フィールドの値を読み取る。ここで読み取られた値が、経路情報ヘッダの先頭バイトから、参照すべき代替経路情報ヘッダまでのオフセットバイトとなる。したがって、パケット転送部３２０はオフセットバイト数で示された代替経路情報ヘッダを参照し、転送処理を実行する。代替経路情報ヘッダにより転送処理を行う場合でも、転送の制御に使われる‘Ｄ’フィールド、‘Ｅｘ’フィールド、‘Ｆ’フィールドは経路情報ヘッダのものが参照される。
【００８１】
代替経路情報ヘッダの‘Ｆｒｍ’フィールドは、当該代替経路情報ヘッダが示す代替経路に経路を移行した際に、移行元となった経路の番号が設定される。代替経路からさらに代替経路に移行することも可能であるため、移行元となる経路は、経路情報ヘッダで示される経路だけでなく、代替経路情報ヘッダで示される経路も含まれる。
【００８２】
パケット転送部３２０は、また、現在転送用に参照する経路情報ヘッダ、あるいは、代替経路情報ヘッダの‘ＬｏｃａｌＩＤ＃ｎ’フィールドの‘Ａｌｔ’フィールドが‘０’以外の場合、すなわち当該転送ノードから代替経路に分岐可能である場合、経路情報ヘッダの‘Ｅｘ’フィールドをインクリメントし、経路上に代替経路への分岐点が存在することを受信パケットに記録する機能を備える。
【００８３】
パケット転送部３２０は、さらに、当該転送ノードが代替経路への分岐点であり、前記代替経路においても転送失敗が発生して送り戻されたパケットを受信した場合、前記代替経路へ移行する前の経路に戻した上で、さらに当該パケットを逆方向に送り戻す機能を備える。具体的には、経路情報ヘッダの‘Ｆ’フィールド、‘Ｄ’フィールドが共に‘１’であり、‘Ａｌｔ’フィールドが‘０’以外のパケットを受信した場合で、代替経路情報ヘッダの‘Ｃｕｒｒｅｎｔ  Ｏｆｆｓｅｔ’が０の場合、パケット転送部３２０は、代替経路情報ヘッダの‘Ｆｒｍ’フィールドの情報を経路情報ヘッダの‘Ａｌｔ’フィールドにコピーする機能を備える。
【００８４】
ヘッダ操作部３３０は、外部ネットワーク７００からパケットを受信した場合、経路取得部３６０から、当該境界転送ノード３００から出口となる境界転送ノード３００までの１ホップ毎の経路情報を取得し、図５に示した経路情報ヘッダと、さらに必要に応じて代替経路開始位置情報ヘッダおよび代替経路情報ヘッダを構成し、前記パケットに付与する機能を備える。例えば、ヘッダ操作部３３０は、経路情報ヘッダを付与する際には、‘Ｄ’フィールドには順方向への転送を意味する‘０’を設定し、同様に‘Ａｌｔ’、‘Ｅｘ’、‘Ｆ’の各フィールドにも‘０’に設定する。さらに、ヘッダ操作部３３０は、‘Ｃｕｒｒｅｎｔ  Ｏｆｆｓｅｔ’には‘０’を、‘Ｌｏｃａｌ  ＩＤ＃ｎ’には取得した１ホップ毎の経路情報を設定する。ヘッダ操作部３３０は、他のフィールドにもそれぞれ適切な値を設定する。
【００８５】
ヘッダ操作部３３０は、また、経路情報ヘッダが付与されていたパケットを外部ネットワーク７００に転送する場合、経路情報ヘッダと、必要に応じて代替経路開始位置情報ヘッダおよび代替経路情報ヘッダを削除する機能を備える。
【００８６】
ローカルＩＤ決定部３４０は、当該境界転送ノード３００と近隣ノードとの間で情報交換を行って、重複しないリンクＩＤを決定する機能を備える。例えば、以下の方法で隣接するノードとのリンクＩＤの重複設定を回避することができる。
【００８７】
まず、転送ノードは、自身が既に割当てたリンクＩＤ以外のリンクＩＤを設定したパケットを近隣ノードに送信することでリンクＩＤ候補を提案する。リンクＩＤを提案された近隣ノードは、自ノード内に重複したリンクＩＤがないかどうか確認し、重複するリンクＩＤがない場合は、提案されたリンクＩＤと自ノードの識別情報を設定した応答パケットを、提案元となる転送ノードに送信する。一方、近隣ノードにおいて重複するリンクＩＤがあった場合は、重複することを意味する情報と自ノードの識別子を設定した応答パケットを送信する。この処理を、重複するリンクＩＤがなくなるまで繰り返す。
【００８８】
このようにして決定されたリンクＩＤや、近隣ノードの情報は、記録部３９０に転送テーブルとして記録される。
【００８９】
以上、リンクＩＤの決定方法の例を示したが、他の方法でリンクＩＤを決定することとしても構わない。例えば、経路管理サーバ５００など、他のノードが決定し、各転送ノードに通知することとしても良い。
【００９０】
なお、ローカルＩＤとして通信インタフェースの識別子を使う場合は、上記近隣ノードとのネゴシエーションを省略することができる。代わりに、前記のようにインタフェース識別子に数バイトを要するような長い情報である場合は、１バイト、あるいは２バイトに格納可能な範囲とした識別子をインタフェース識別子に対応づける処理を行う。ただし、ローカルＩＤとして、インタフェース識別子のように近隣ノードが知りえない情報を使い、さらに、その情報をお互い交換しないこととした場合は、前記した逆方向の転送ができなくなるため、リンク識別子のような近隣ノードと情報を共有された情報を使うことが好ましい。
【００９１】
近隣情報通知部３５０は、ローカルＩＤ決定部３４０によりローカルＩＤとして決定したリンクＩＤと、リンクに接続された近隣ノードの識別子と、自らの識別子と、を格納した近隣情報を経路管理サーバ５００に送信する機能を備える。リンクに接続されているのが外部ネットワーク７００の通信ノード１００ａ、１００ｂであった場合は、外部ネットワークのノードと判定できる情報も前記情報に追加する。また、経路管理サーバ５００での経路計算のため、前記近隣情報には、各リンクの帯域、信頼性、混雑状況といった情報や、近隣ノードの故障情報などを含めることとしても良い。経路管理サーバ５００に前記近隣情報を送信する契機は、ローカルＩＤの決定処理が完了したタイミングでも良いし、所定の時間間隔で送信するものとしてもよい。また、リンクの情報や、近隣ノードの故障情報も含めて送信する場合は、これらの情報に変化が生じた契機で送信しても良い。
【００９２】
経路取得部３６０は、外部ネットワーク７００の通信ノード１００ａ、１００ｂからパケットを受信した際に、当該受信パケットの情報と、当該境界転送ノード３００の識別子を格納した経路要求信号を経路管理サーバ５００に送信し、当該パケットの転送経路を取得する機能を備える。前記受信パケットの情報とは、転送経路決定に影響を与えうる情報であり、最も単純な場合は、宛先アドレスのみである。しかし、より緻密な経路制御を実施する場合には、宛先アドレスに加え、送信元アドレス、当該パケットヘッダ以降に格納されたプロトコル情報、ＴＣＰ（Ｔｒａｎｓｍｉｓｓｉｏｎ  Ｃｏｎｔｒｏｌ  Ｐｒｏｔｏｃｏｌ）あるいはＵＤＰ（Ｕｓｅｒ  Ｄａｔａｇｒａｍ  Ｐｒｏｔｏｃｏｌ）使用時の宛先ポート番号、送信元ポート番号といった情報の一部、あるいはすべてを含めることができる。さらに、他の情報を含むこととしてもかまわない。
【００９３】
前記経路要求信号を送った結果、経路管理サーバ５００から経路応答信号が返される。前記経路応答信号に含まれる転送経路情報には、当該境界転送ノード３００を起点とした転送経路に沿って、ローカルＩＤを１ホップ毎に列挙した情報が格納される。代替経路が存在する場合は、代替経路情報についての情報も格納される。
【００９４】
なお、宛先アドレスなど、前記転送経路に影響を与えうる情報と、転送経路を示すローカルＩＤ群との対応情報は、当該境界転送ノード３００に事前に設定し、予め経路管理サーバから受信しておくこともできる。この場合は、経路取得部３６０は、経路管理サーバ５００ではなく、内部に設定された情報から転送経路情報を取得する。
【００９５】
また、上記の例では、当該境界転送ノード３００が最初に転送先とする通信インタフェースを識別可能なローカルＩＤを起点としたが、前記パケットを受信した通信インタフェース３１０を識別可能なローカルＩＤを、起点としても構わない。
【００９６】
代替経路移行部３７０は、前記受信パケットを代替経路に転送すべきかどうかを判定する機能を備える。より具体的には、代替経路移行部３７０は、前記受信パケットが、転送に失敗した結果として送り戻されたパケットであり、さらに当該転送ノードから分岐可能な未使用の代替経路が存在する場合に、代替経路に転送すべきと判定する。すなわち、現在転送処理に使用している経路情報ヘッダの‘Ｄ’フィールド、および‘Ｆ’フィールドが共に‘１’であり、代替経路情報ヘッダ中の現在参照しているローカルＩＤが、さらに、‘Ｅ’フィールド＝‘１’、‘Ａｌｔ’フィールド＝‘０’以外、‘Ｕ’フィールド＝‘０’、の場合に代替経路に転送すべきと判定する。
【００９７】
代替経路移行部３７０は、また、代替経路に移行すると判定した場合、代替経路情報を使った転送に移行する処理を行う。具体的には、代替経路移行部３７０は、前記ローカルＩＤ中の、‘Ｕ’フィールドを‘１’に設定し、同じくローカルＩＤ中の‘Ａｌｔ’フィールドの値を経路情報ヘッダ中の‘Ａｌｔ’フィールドにコピーする。さらに、代替経路移行部３７０は、経路情報ヘッダの‘Ｄ’フィールド、‘Ｆ’フィールドを共に‘０’に設定し、また、‘Ｅｘ'フィールドをデクリメントする。
【００９８】
転送結果記録部３８０は、パケット転送処理部３２０により、前記受信パケットを適切な通信インタフェース３１０から転送した後に、リンクダウンなど、何らかの理由により転送に失敗した場合、現在の転送経路による転送が失敗したことを示す情報を当該受信パケットに記録し、さらに当該受信パケットが転送されてきた経路を辿って送り戻すための処理を行う。具体的には、転送結果記録部３８０は、現在転送処理用に参照している経路情報ヘッダ、あるいは代替経路情報ヘッダの‘Ｆ’フィールドを‘１’とし、さらに‘Ｄ’フィールドも‘１’に設定し、さらにパケット転送手段３２０に出力する。この結果、逆方向への転送処理が行われる。
【００９９】
記録部３７０は、図３に示す転送テーブルを保持し、パケット転送部３２０や、ローカルＩＤ決定部３４０や、近隣情報通知部３５０に、参照させる。
【０１００】
内部転送ノード４００は、データ転送ネットワーク６００内に配置され、近隣ノードから送信されたパケットを受信した場合には、パケット中の経路情報ヘッダまたは代替経路情報ヘッダの情報に基づきデータ転送ネットワーク６００内の近隣ノードに当該パケットを転送する機能を備える。
【０１０１】
図１０は、図１の内部転送ノード４００の構成を示す図である。内部転送ノード４００は、図１０に示すように、通信インタフェース４１０と、パケット転送部４２０と、近隣情報通知部４３０と、ローカルＩＤ決定部４４０と、代替経路移行部４５０と、転送結果記録部４６０と、記録部４７０とを備えて構成されている。
【０１０２】
内部転送ノード４００の通信インタフェース４１０、パケット転送部４２０、ローカルＩＤ決定部４３０、近隣情報通知部４４０、代替経路移行部４５０、転送結果記録部４６０および記録部４７０は、それぞれ、境界転送ノード３００の、通信インタフェース３１０、パケット転送部３２０、ローカルＩＤ決定部３４０、近隣情報通知部３５０、代替経路移行部３７０と、転送結果記録部３９０と、記録部３９０と同等であるため、ここでは詳細な説明を省略する。
【０１０３】
つまり内部転送ノード４００は、境界転送ノード３００から、ヘッダ操作部３３０と、経路取得部３６０を差し引いたものとみなすことができる。反対に、境界転送ノード３００は、内部転送ノード４００に、ヘッダ操作部３３０と、経路取得部３６０を追加した転送ノードであるということができる。
【０１０４】
経路管理サーバ５００は、境界転送ノード３００と内部転送ノード４００から通知された近隣情報を収集し、データ転送ネットワーク６００内の境界転送ノード３００および内部転送ノード４００の接続関係を記述したネットワークトポロジ情報を構築する。このネットワークトポロジ情報には、境界転送ノード３００に接続する通信ノード１００ａ、１００ｂとの接続情報も含まれる。前記通知された経路情報に、各転送ノード間のリンクや転送ノードの状態を示す情報（混雑状況、故障状況など）が含まれていた場合は、それも前記接続情報に対応づけて管理する。そして、境界転送ノード３００から、転送経路情報を要求された場合には、経路要求に含まれる情報と、内部に構築したネットワークトポロジ情報を使って適切な転送経路を求める計算を実施し、経路要求を行った境界転送ノード３００を起点として、外部ネットワーク７００への出口となる境界転送ノード３００までの転送経路を、１ホップ毎のローカルＩＤ（リンクＩＤ）を順に列挙した情報として応答する機能を備える。ここで、転送ノードの故障やリンクの断線などにより転送が失敗した場合を考慮し、経路管理サーバ５００は、１つないしは複数の代替経路を算出し、算出された代替経路の情報を前記応答する情報に含めても良い。
【０１０５】
図１１は、図１の経路管理サーバ５００の構成を示す図である。経路管理サーバ５００は図１１に示すように、通信インタフェース５１０と、経路情報収集部５２０と、経路要求処理部５３０と、経路計算部５３１と、経路情報記録部５４０とを備えて構成されている。
【０１０６】
通信インタフェース５１０は、パケットの送受信を行うためのインタフェースである。前述のように、例えばＬＡＮカードのようなＮＩＣと、それを動作させるソフトウェア（ドライバ）により実現できる。
【０１０７】
経路情報収集部５２０は、境界転送ノード３００および内部転送ノード４００から送られた近隣情報を受信すると、近隣情報に格納された、前記近隣情報を送信したノードの識別子、ローカルＩＤ（リンクＩＤ）、近隣ノード識別子を使って、経路情報記録部５４０内にデータ転送ネットワーク６００内のネットワークトポロジ情報を構築する。前記近隣情報に、リンクの帯域、信頼性、混雑状況や、近隣ノードの故障情報といった付帯情報が含まれていた場合は、前記ネットワークトポロジ情報に前記付帯情報を関連づけて記録する。これらの情報は、例えば、後述する経路計算のときにリンクのコストとして使用することができる。
【０１０８】
図１２は、各転送ノードから受信した近隣情報の例である。図１３は、図１２の近隣情報から構築したネットワークトポロジの例である。図１３の例では、簡単のため、付帯情報は省略している。また、外部ネットワークはＩＰネットワークであることを想定している。
【０１０９】
図１２中の‘ｓｅｎｄｅｒＩＤ’は近隣情報を送信した転送ノードの識別子を示している。図１２中の‘ＬｉｎｋＩＤ’は、前記転送ノードが接続するリンクに割当てたリンクＩＤを示している。図１２中の‘ｎｅｉｇｈｂｏｒＩＤ’は前記リンクに接続している近隣ノードの識別子を示している。外部ネットワークはＩＰネットワークとの想定なので、通信ノード１００の識別子としてＩＰアドレスを使用する。また、上述のように隣接する転送ノード間でネゴシエーションが行われているため、リンクＩＤは、一の転送ノードに重複して設定されないが、隣接しない転送ノード同士が同一のリンクＩＤを用いることは許容される。例えば、ＬｉｎｋＩＤ＝１のリンクは、ＩＤ＝１のノードと、ＩＤ＝１０のノード間およびＩＤ＝５のノードと、ＩＤ＝６のノード間に用いられているが、それぞれの転送ノード内で一意にリンクを識別することが可能である。つまり、リンクＩＤの長さは、一の転送ノード内で一意性を確保するに足る長さがあればよい。
【０１１０】
経路情報収集部５２０は、例えば、図１２の近隣情報が得られている場合、図１３に示すようなネットワークトポロジを構築し、経路情報記録部５４０に記録する。
【０１１１】
図１２の近隣情報と、それに基づいて構築された図１３のネットワークトポロジ情報にはリンクＩＤを使ったが、インタフェース識別子など、他の情報をローカルＩＤとした場合でも、同様にネットワークトポロジ情報の構築は可能である。
【０１１２】
経路要求処理部５３０は、境界転送ノード３００から送信された経路要求信号を受信し、そこに含まれる情報と共に、経路計算要求を経路計算部５３１に通知する。
【０１１３】
経路要求処理部５３０はまた、経路計算部５３１から、１つないしは複数の転送経路情報（１ホップ毎のリンクＩＤを転送経路順に列挙した情報）を取得した際に、当該転送経路情報を格納した経路応答信号を前記経路要求信号の送信元となる境界転送ノード３００に送信する。
【０１１４】
経路計算部５３１は、経路要求処理部５３０から経路計算要求を通知された場合、共に入力された、経路要求元の境界転送ノード３００の識別子と、宛先アドレスをそれぞれ始点、終点ポイントとして、経路情報記録部５４０に記録された図１３のようなネットワークトポロジ情報を使って、経路の計算を行う。経路計算には、Ｄｉｊｋｓｔｒａ法と呼ばれる最短経路を求めるアルゴリズムを適用することができる。ただし、他のアルゴリズムを適用することとしても構わない。このとき、最適な経路のほかにも幾つかの代替経路を求めることとしても良い。
【０１１５】
経路計算要求にＩＰパケットの送信元アドレスを含む場合は、始点として送信元アドレス（即ち境界転送ノード３００が受信したパケットの送信元となる通信ノード１００ａまたは１００ｂの識別子）を使っても良い。また、前記したように経路計算を行う上で、ＴＣＰ、あるいはＵＤＰの宛先／送信元ポート番号など、他の情報を使って経路計算を行っても良い。さらには、リンクに付帯する情報（帯域、混雑具合など）や、故障した境界／内部転送ノードの識別子といった情報を経路計算に使用しても良い。
【０１１６】
経路情報記録部５４０には、経路情報収集部５２０により、図１３に示すようなネットワークトポロジ情報が記録される。前記ネットワークトポロジ情報は、経路計算のため経路計算部５３１から参照される。
【０１１７】
以上本発明の実施の形態で説明した、通信インタフェース３１０、４１０、５１０は、前記したとおり、例えばＬＡＮカードのようなＮＩＣと、それを動作させるソフトウェア（ドライバ）により実現できる。
【０１１８】
また、記録部３９０、記録部４７０、経路情報記録部５４０は、半導体メモリ、ハードディスクドライブなど情報を記録可能な装置で実現することができる。
【０１１９】
その他の機能ブロックについては、それぞれの機器に搭載された１つあるいは複数のＣＰＵにて実行されるコンピュータプログラム（ソフトウェア）あるいはハードウェアで実現できる。機能ブロックが行うべき処理の一部をコンピュータプログラム（ソフトウェア）で担わせ、それ以外をハードウェアで構成することとしても良い。
【０１２０】
続いて、本実施形態の動作について図面を参照して詳細に説明する。はじめに、境界転送ノード３００の動作を説明する。
【０１２１】
図１４は、境界転送ノード３００が、データ転送ネットワーク６００あるいは外部ネットワーク７００からパケットを受信した場合の処理の流れを示している。
【０１２２】
まず、パケット転送部３２０は、通信インタフェース３１０を介してパケットを受信すると、当該パケットに経路情報ヘッダが付与されているかどうかをチェックする（ステップＳ１００）。
【０１２３】
経路情報ヘッダが付与されていた場合は‘Ｙ’に進み、その経路情報ヘッダに従って転送処理が行われる（ステップＳ１０３へ）。一方、経路情報ヘッダが付与されていなかった場合は‘Ｎ’に進み、経路取得部３６０から、経路要求信号を経路管理サーバ５００に送信することで転送経路情報を取得する経路取得処理が行われる（ステップＳ１０１）。
【０１２４】
転送経路情報の取得が完了すると、ヘッダ操作部３３０は、前記取得した転送経路情報の転送経路の順に従って、図５の経路情報ヘッダのローカルＩＤフィールド（‘ＬｏｃａｌＩＤ＃ｎ’）に、ローカルＩＤを設定する。また、ヘッダ操作部３３０は、また、‘Ｄ’、‘Ａｌｔ’、‘Ｅｘ’、‘Ｆ’フィールドを‘０’に設定し、‘Ｃｕｒｒｅｎｔ  Ｏｆｆｓｅｔ’を‘０’に設定する。ヘッダ操作部３３０は、その他のフィールドも適切な値に設定する。
【０１２５】
また、上記ステップＳ１０１で取得した経路情報に代替経路の情報が含まれていた場合、ヘッダ操作部３３０は、代替経路の数だけ代替経路情報ヘッダも付与する。このとき、ヘッダ操作部３３０は、図９に示す代替経路情報ヘッダの‘Ｆｒｍ’および‘Ｃｕｒｒｅｎｔ  Ｏｆｆｓｅｔ’に‘０’を設定し、ローカルＩＤフィールド（‘Ｌｏｃａｌ  ＩＤ＃ｎ’）には取得した代替経路を設定する。さらに、ヘッダ操作部３３０は、その他のフィールドも適切な値に設定するとともに、代替経路開始位置情報ヘッダの‘Ｏｆｆｓｅｔ＃ｎ’フィールドに、前記したように、経路情報ヘッダの先頭バイトからｎ番目の代替経路情報ヘッダまでのオフセットバイト数をそれぞれ設定する。
【０１２６】
ヘッダ操作部３３０は、上記経路情報ヘッダ、代替経路開始位置情報ヘッダ、代替経路情報ヘッダを図４に示す順番で、前記受信したパケットの先頭に付加する（ステップＳ１０２）。
【０１２７】
パケット転送部３２０は、前記した経路情報ヘッダおよび代理経路情報ヘッダのいずれかに従って転送処理を実施する（ステップＳ１０３）。
【０１２８】
図１５は、図１４のステップＳ１０３の転送処理の詳細を表したフローチャートである。図１５を参照すると、まず、代替経路移行部３７０が、代替経路を使って転送処理するか、通常の経路情報を使って転送処理をするかを判定する。ここでの判定処理の詳細は後に図１６を用いて説明する。
【０１２９】
パケット転送部３２０は、経路情報ヘッダの‘Ｄ’フィールドをチェックし順方向への転送をすべきか、逆方向の転送をすべきかを判定する（ステップＳ２０１）。
【０１３０】
‘Ｄ’フィールドの値が順方向の転送を示す（‘０’）場合（ステップＳ２０１の‘Ｙ’）、当該パケットの転送先が外部ネットワーク７００であるかどうかが判定される（ステップＳ２０２）。順方向の転送において、外部ネットワーク７００への転送かどうかの判定は、‘Ｃｕｒｒｅｎｔ  Ｏｆｆｓｅｔ’と‘Ｒｏｕｔｅ  Ｌｅｎｇｔｈ’を比較することにより判定できる。判定方法は他にも、ローカルＩＤを外部ネットワーク７００への転送かどうかを区別可能な値とすることとしても良いし、経路情報ヘッダ中の最後のローカルＩＤの後に、終端を意味する情報を格納しても良い。さらに、他の方法としても構わない。
【０１３１】
外部ネットワーク７００への転送でないと判定された場合は、‘Ｎ’に進み、経路情報ヘッダの‘Ａｌｔ’フィールドの値に従い、経路情報ヘッダまたは代替経路情報ヘッダを参照し、参照したヘッダの‘Ｃｕｒｒｅｎｔ  Ｏｆｆｓｅｔ’に１ホップ分のバイト数が加算される（詳細は後述）。１ホップ分のバイト数とは、現在参照している‘ＬｏｃａｌＩＤ＃ｎ’フィールドのバイト数となる。ここで、‘Ｃｕｒｒｅｎｔ  Ｏｆｆｓｅｔ’の値を加算する前に参照先となっていたローカルＩＤを保持しておく。また、ローカルＩＤ（‘ＬｏｃａｌＩＤ＃ｎ’）中の‘Ａｌｔ’フィールドが‘０’以外の場合、すなわち当該受信パケットにとって、当該転送ノードが代替経路への分岐ポイントとなっている場合、経路情報ヘッダの‘Ｅｘ’フィールドをインクリメントする。
【０１３２】
そして、パケット転送部３２０は、前記保持しておいたローカルＩＤを用いて、順方向へのパケットの転送処理を行う（ステップＳ２０３）。具体的には、記録部３７０に記録された転送テーブルの情報を使ってローカルＩＤから、転送先とすべき通信インタフェース３１０を決定し、当該通信インタフェース３１０からパケットを転送する。
【０１３３】
ここで、パケット転送部３２０が参照すべき経路情報が、経路情報ヘッダか、代替経路情報ヘッダか（複数存在する場合は、そのいずれか）を判定する方法について説明する。まず、パケット転送部３２０は、経路情報ヘッダの‘Ａｌｔ’フィールドを参照し、‘Ａｌｔ’フィールドが‘０’であれば経路情報ヘッダを参照し、‘０’以外であれば、その値を代替経路番号ｎとし、ｎ番目の代替経路情報ヘッダを参照する。ｎ番目の代替経路情報ヘッダまでのオフセットバイト数は、代替経路開始位置情報ヘッダ中の‘Ｏｆｆｓｅｔ＃ｎ’フィールドを参照することで得られる。
【０１３４】
前記順方向のパケット転送の結果、パケット転送が成功した場合（ステップＳ２０４の‘Ｙ’）、当該パケットに関する処理は終了する。一方、パケット転送に失敗した場合（ステップＳ２０４の‘Ｎ’）、代替経路の有無の確認が行われる（ステップＳ２０５）。なお、パケットの転送失敗には、通信インタフェースの故障、またはリンクが機能していないことの検出、送信バッファがあふれた場合など、多種多様ものが考えられるが、これらのいずれかを検出したものとする。
【０１３５】
代替経路の有無の確認は、経路情報ヘッダの‘Ｅｘ’フィールドを用いて行われる。‘Ｅｘ’フィールドが‘０’以外の場合、パケット転送部３２０は、代替経路有りと判定し（ステップＳ２０５の‘Ｙ’）、代替経路への分岐点（自転送ノードが分岐点のケースもありえる）となる転送ノードまで受信パケットが送り戻されるように、経路情報ヘッダの各フィールドを適切に設定する復帰用設定を行う（ステップＳ２０６）。具体的には、経路情報ヘッダの‘Ｄ’フィールドおよび‘Ｆ’フィールドを共に‘１’に設定し、ステップＳ２００の代替経路転送判定が行われる。
【０１３６】
一方、‘ＥＸ’フィールドが‘０’の場合は代替経路無しと判定され（ステップＳ２０５の‘Ｎ’）、  パケット転送部３２０は、当該パケットを破棄して（ステップＳ２０７）、当該パケットに関する処理を終了する。‘Ｅｘ’フィールドは‘０’であれば代替経路情報ヘッダが付与されていないとみなせるが、上記方法に代えて、経路情報ヘッダを辿ることで代替経路が存在していることを確認することとしても良い。
【０１３７】
一方、‘Ｄ’フィールドの値が逆方向の転送を示す（‘１’）場合（ステップＳ２０１の‘Ｎ’）、当該パケットの転送先が外部ネットワーク７００であるかどうかが判定される（ステップＳ２０８）。
【０１３８】
逆方向の転送における外部ネットワーク７００への転送かどうかの判定は、経路情報ヘッダの‘Ａｌｔ’フィールドが‘０’であり、かつ‘Ｃｕｒｒｅｎｔ  Ｏｆｆｓｅｔ’の値が‘０’かどうかにより判定することができる（‘０’のとき外部ネットワークへの転送と判定）。これは、パケットをはじめに送信する通信ノード１００ａ（１００ｂ）と、それを受信する境界転送ノード３００間のリンクのリンク識別子を、１番最初のローカルＩＤとして使わない場合の判定方法となる。前記リンク識別子を１番最初のローカルＩＤとして使う場合は、現在の‘Ｃｕｒｒｒｅｎｔ  Ｏｆｆｓｅｔ’を、１ホップ分減算した値が‘０’の場合、外部ネットワークへの転送と判定できる。逆方向への転送時の判定方法は他にも、ローカルＩＤを、外部ネットワーク７００への転送かどうかを区別可能な値とすることとしても良いし、経路情報ヘッダ中の最初のローカルＩＤの前に、開始を意味する情報を格納しても良い。さらに、他の方法としても構わない。
【０１３９】
外部ネットワーク７００への転送でないと判定された場合（ステップＳ２０８の‘Ｎ’）、  パケット転送部３２０は、経路情報ヘッダの‘Ａｌｔ’フィールドの値に従い、経路情報ヘッダまたは代替経路情報ヘッダを参照し、参照したヘッダの‘Ｃｕｒｒｅｎｔ  Ｏｆｆｓｅｔ’から１ホップ分のバイト数が減算される（詳細は後述）。ここで、減算後の‘Ｃｕｒｒｅｎｔ  Ｏｆｆｓｅｔ’の値で参照先となるローカルＩＤを保持しておく。
【０１４０】
その後、パケット転送部３２０は、前記保持しておいたローカルＩＤに基づき、パケットの転送処理を行う（ステップＳ２０９）。具体的には、記録部３９０に記録された転送テーブルを使って前記ローカルＩＤから、転送先とすべき通信インタフェース３１０を決定し、当該通信インタフェース３１０からパケットを転送し、処理を完了する。
【０１４１】
ここで、経路情報ヘッダか、代替経路情報ヘッダのいずれか（代替経路情報が複数存在する場合も含む。）を判定する方法はステップＳ２０３の順方向転送と同様である。
【０１４２】
一方、ステップＳ２０２、Ｓ２０８にて、外部ネットワーク７００への転送であると判定された場合（ステップＳ２０８の‘Ｙ’）、受信パケットのヘッダから、経路情報ヘッダ、代替経路開始位置情報ヘッダや代替経路情報ヘッダが削除される（ステップＳ２１０）。前記ヘッダが削除されたパケットは、外部ネットワーク７００のノード１００ａ（１００ｂ）へと転送される（ステップＳ２１１）。
【０１４３】
次に、図１６のフローチャートを参照して図１５のステップＳ２００の代替経路転送判定処理の詳細を説明する。
【０１４４】
まず、代替経路移行部３７０は、受信パケットが、当該転送ノードおよび当該転送ノードを経由し何処かの転送ノードにおいて転送失敗が発生し、経由した転送ノードを逆方向に送り戻されたパケットであるかどうかを判定する（ステップＳ３００）。具体的には、当該受信パケットの経路情報ヘッダ中の‘Ｄ’フィールド、および‘Ｆ’フィールドを参照し、それらが両方ともに‘１’であるかどうかを判定する。ここで、当該パケットが逆方向のパケットでも転送失敗パケットでもない場合、代替経路移行部３７０は、代替経路へと転送経路を移行させないことに決定し、処理が完了する（ステップＳ３００の‘Ｎ’）。
【０１４５】
一方、ステップＳ３００の判定の結果、失敗による逆方向への転送（‘Ｄ’、‘Ｆ’共に‘１’）だった場合（ステップＳ３００の‘Ｙ’）、代替経路移行部３７０は、‘Ｃｕｒｒｅｎｔ  Ｏｆｆｓｅｔ’フィールドにより、当該転送ノードが参照すべきローカルＩＤをチェックし、当該転送ノードは、代替経路へと移行できる分岐点であり、かつ代替経路が未使用かどうかを判定する（ステップＳ３０１）。具体的には、前記ローカルＩＤ（‘ＬｏｃａｌＩＤ＃ｎ’）中の‘Ａｌｔ’フィールドが‘０’以外であり、かつ‘Ｕ’フィールドが‘０’であるかを確認する。
【０１４６】
ステップＳ３０１の判定の結果、当該転送ノード自身が未使用の代替経路への分岐点となっていると判定できた場合、代替経路へパケットを転送するために、経路情報ヘッダ、代理情報ヘッダの各フィールドに適切な値を設定する（ステップＳ３０２）。設定内容は、以下に列挙する。
・経路情報ヘッダの‘Ｄ’フィールドを‘０’に設定（順方向の転送に戻す）
・経路情報ヘッダの‘Ｆ’フィールドを‘０’に設定（転送失敗情報をクリア）
・経路情報ヘッダの‘Ｅｘ’フィールドをデクリメント
・代替経路情報ヘッダの‘Ｆｒｍ’フィールドに代替経路への移行元となる、経路情報の番号を設定する。つまり、経路情報ヘッダの‘Ａｌｔ’フィールドの値を、代替経路情報ヘッダの‘Ｆｒｍ’フィールドにコピーする。
・前記ローカルＩＤ（‘ＬｏｃａｌＩＤ＃ｎ’）中の‘Ｕ’フィールドを‘１’に設定
・前記ローカルＩＤ（‘ＬｏｃａｌＩＤ＃ｎ’）中の‘Ａｌｔ’フィールドの値を、経路情報ヘッダの‘Ａｌｔ’フィールドにコピーする。
【０１４７】
以上の設定により、代替経路に移行して転送をするか否かの判定および代替経路への移行のための処理が完了する。
【０１４８】
一方、ステップＳ３０１で未使用の代替経路が無いと判定された場合、つまり、当該転送ノード自身が、代替経路への分岐点ではないか、あるいは分岐点ではあるが分岐先の代替経路が既に当該パケットが転送済みの経路であった場合（ステップＳ３０１の‘Ｎ’）、代替経路移行部３７０は、現在参照しているのが代替経路情報ヘッダであり、その中で最初の経路情報（ローカルＩＤ）を参照しているかどうか（代替経路の起点であるかどうか）を判定する（ステップＳ３０３）。ここで、代替経路情報ヘッダを参照しているかどうかは、経路情報ヘッダの‘Ａｌｔ’フィールドを参照すれば判定できる。また、最初かどうかは代替経路情報ヘッダの‘Ｃｕｒｒｅｎｔ  Ｏｆｆｓｅｔ’が‘０’かどうかで判定できる。
【０１４９】
ステップＳ３０３の判定の結果、当該転送ノード自身が代替経路の起点であると判定された場合（ステップＳ３０３の‘Ｙ’）、代替経路移行部３７０は、元経路への復帰処理を実行する（ステップＳ３０４）。この元経路への復帰処理は、現在参照対象としている代替経路情報ヘッダ中の‘Ｆｒｍ’フィールドの値を、経路情報ヘッダの‘Ａｌｔ’フィールドにコピーすることで行われる。その後は、ステップＳ３０１に戻って、未使用の代替経路があるかどうかの判定が行われる。
【０１５０】
それ以外の場合（ステップＳ３０３の‘Ｎ’）、元経路への復帰処理は行われることなく、処理を終了する。
【０１５１】
続いて、内部転送ノード４００の動作を説明する。図１７は、内部転送ノード４００が、データ転送ネットワーク６００の境界転送ノード３００あるいは内部転送ノード４００からパケットを受信した場合の処理を示している。
【０１５２】
図１７を参照すると、まず、パケット転送部４２０は、通信インタフェース４１０を介してパケットを受信すると、当該パケットに経路情報ヘッダが付与されているかどうかをチェックする（ステップＳ４００）。
【０１５３】
経路情報ヘッダが付与されていた場合は‘Ｙ’に進み、代替経路転送判定が実行される。ここでは、図１６に示した境界転送ノード３００における代替経路転送判定処理と同じ処理が行われる（ステップＳ４０１）。一方、経路情報ヘッダが付与されていなかった場合は‘Ｎ’に進み、受信したパケットの破棄処理が行われる（ステップＳ４０７）。
【０１５４】
次に、パケット転送部４２０は、経路情報ヘッダの‘Ｄ’フィールドをチェックし、順方向への転送をすべきか、逆方向の転送をすべきかを判定する（ステップＳ４０２）。
【０１５５】
ここで、‘Ｄ’フィールドの値が順方向の転送を示す（‘０’）場合は、‘Ｙ’に進み、経路情報ヘッダの‘Ａｌｔ’フィールドの値に従い、経路情報ヘッダまたは代替経路情報ヘッダを参照し、参照したヘッダの‘Ｃｕｒｒｅｎｔ  Ｏｆｆｓｅｔ’に１ホップ分のバイト数を加算する。１ホップ分のバイト数とは、現在参照しているローカルＩＤ（‘Ｌｏｃａｌ  ＩＤ＃ｎ’）フィールドのバイト数となる。ここで、‘Ｃｕｒｒｅｎｔ  Ｏｆｆｓｅｔ’の値を加算する前に参照先となっていたローカルＩＤを保持しておく。また、ローカルＩＤフィールド中の‘Ａｌｔ’フィールドが‘０‘以外の場合、すなわち当該受信パケットにとって、当該転送ノードが代替経路への分岐点となっている場合、経路情報ヘッダの‘Ｅｘ’フィールドをインクリメントする。
【０１５６】
その後、前記保持しておいたローカルＩＤに基づき、順方向のパケットの転送処理が行われる（ステップＳ４０３）。具体的には、記録部４７０に記録された転送テーブルを使って前記ローカルＩＤから、転送先とすべき通信インタフェース４１０を決定し、当該通信インタフェース４１０からパケットが転送される。
【０１５７】
ここで、経路情報ヘッダまたは代替経路情報ヘッダ（複数存在する場合は、そのいずれか）のうちのどれを参照するかは、経路情報ヘッダの‘Ａｌｔ’フィールドを用いて決定することができる。‘Ａｌｔ’フィールドが‘０’であれば経路情報ヘッダを参照し、‘０’以外であれば、その値を代替経路番号ｎとし、ｎ番目の代替経路情報ヘッダを参照する。ｎ番目の代替経路情報ヘッダまでのオフセットバイト数は、代替経路開始位置情報ヘッダ中の‘Ｏｆｆｓｅｔ＃ｎ’フィールドを参照することで得られる。
【０１５８】
前記順方向のパケット転送の結果、パケット転送が成功した場合（ステップＳ４０４の‘Ｙ’）、当該パケットに関する処理は終了する。一方、パケット転送に失敗した場合（ステップＳ４０４の‘Ｎ’）、代替経路の有無の確認が行われる（ステップＳ４０５）。
【０１５９】
代替経路の有無（受信したパケットが当該転送ノードまでに経由した経路中に代替経路への分岐点があるかどうか）の確認は、経路情報ヘッダの‘Ｅｘ’フィールドを用いて行われる。‘Ｅｘ’フィールドが‘０’以外の場合、パケット転送部４２０は、代替経路有りと判定し（ステップＳ４０５の‘Ｙ’）、代替経路への分岐点（自転送ノードが分岐点のケースもありえる）となる転送ノードまで受信パケットが送り戻されるように、経路情報ヘッダの各フィールドを適切に設定する復帰用設定を行う（ステップＳ４０６）。具体的には、経路情報ヘッダの‘Ｄ’フィールドおよび‘Ｆ’フィールドを共に‘１’に設定し、その後は、ステップＳ４０１の代替経路転送判定が行われる。
【０１６０】
一方、‘ＥＸ’フィールドが‘０’の場合は代替経路無しと判定され（ステップＳ４０５の‘Ｎ’）、パケット転送部４２０は、当該パケットを破棄して（ステップＳ４０７）、当該パケットに関する処理を終了する。‘Ｅｘ’フィールドは‘０’であれば代替経路情報ヘッダが付与されていないとみなせるが、上記方法に代えて、経路情報ヘッダを辿ることで代替経路が存在していることを確認することとしても良い。
【０１６１】
一方、ステップＳ４０２にて‘Ｄ’フィールドの値が逆方向の転送を示す（‘１’）場合（ステップＳ４０２の‘Ｎ’）、  パケット転送部４２０は、経路情報ヘッダの‘Ａｌｔ’フィールドの値に従い、経路情報ヘッダまたは代替経路情報ヘッダを参照し、参照したヘッダの‘Ｃｕｒｒｅｎｔ  Ｏｆｆｓｅｔ’の値を１ホップ分減算する。ここで、パケット転送部４２０は、減算後の‘Ｃｕｒｒｅｎｔ  Ｏｆｆｓｅｔ’で参照先となるローカルＩＤを保持しておく。
【０１６２】
その後、パケット転送部４２０は、前記保持しておいたローカルＩＤに基づき、逆方向のパケットの転送処理を行う（ステップＳ４０８）。具体的には、記録部４７０に記録された転送テーブルを使って前記ローカルＩＤから、転送先とすべき通信インタフェース４１０を決定し、当該通信インタフェース４１０からパケットを転送し、処理を完了する。
【０１６３】
ここで、参照すべき経路情報を、経路情報ヘッダとするか、代替経路情報ヘッダとするか（複数存在する場合は、そのいずれか）の判定は、ステップＳ４０３の順方向転送と同様である。
【０１６４】
続いて、境界転送ノード３００および内部転送ノード４００によるローカルＩＤの決定およびその結果を経路管理サーバ５００に近隣情報として通知する処理を説明する。
【０１６５】
図１８は、境界転送ノード３００および内部転送ノード４００が近隣情報通知を送信する動作を示すフローチャートである。
【０１６６】
図１８を参照すると、まず、ローカルＩＤ決定部３４０（４３０）が、ローカルＩＤを決定する（ステップＳ５００）。ローカルＩＤとしてリンクＩＤを使う場合は、近隣ノードとリンクＩＤのネゴシエーションを実施することでリンクＩＤを決定する。なお、ローカルＩＤとして、通信インタフェースの識別子を使う場合は、当該境界転送ノード３００あるいは内部転送ノード４００は、自らが備える通信インタフェース３１０（４１０）に割当てた識別子をローカルＩＤとする。
【０１６７】
ここで、前記リンクＩＤは、当該境界転送ノード３００あるいは内部転送ノード４００が使用可能なすべての物理的あるいは論理的なリンクに対して決定される。同じように、通信インタフェースの識別子は、全ての物理的あるいは論理的な通信インタフェースに対して決定される。ただし、管理上の理由などにより、一部のリンクや、通信インタフェースを対象外としても構わない。
【０１６８】
次に、ローカルＩＤ決定部３４０（４４０）は、前記決定したローカルＩＤと通信インタフェース情報（当該通信インタフェースをパケット転送先とするのに必要な情報）とを対応づけて、記録部３９０（４７０）中の転送テーブル（図３参照）に記録する（ステップＳ５０１）。転送テーブルには、各リンクの先に接続された近隣ノードの識別子も対応づけて記録する。さらに、各リンクに関連する情報や、近隣ノードの故障情報なども付帯情報として記録しても良い。
【０１６９】
前記転送テーブルへの記録が完了すると、近隣情報通知部３５０（４３０）が、記録部３９０（４７０）に記録された転送テーブルの情報から、ローカルＩＤと、近隣ノードの識別子を設定した近隣情報（図１２参照）を構成し、これを経路管理サーバ５００へ送信する（ステップＳ５０２）。近隣情報には、各リンクに関連する情報や、近隣ノードの故障情報などといった付帯情報も格納することとしても良い。
【０１７０】
続いて、経路管理サーバ５００の動作を説明する。図１９は、上記近隣情報を受信した経路管理サーバ５００の処理を表したフローチャートである。図１９を参照すると、まず、経路情報収集部５２０にて境界転送ノード３００あるいは内部転送ノード４００から送られた近隣情報を受信すると（ステップＳ６００）、経路管理サーバ５００は、受信した近隣情報から、ローカルＩＤや近隣ノードの識別子といった情報を取得し、取得した情報を用いてネットワークトポロジ情報を構築し、記録部５４０に記録する（ステップＳ６０１）。
【０１７１】
図２０は、境界転送ノード３００から経路情報を要求された経路管理サーバ５００の処理を表したフローチャートである。図２０を参照すると、まず、境界転送ノード３００から経路要求信号を受信すると、経路要求処理部５３０は、経路要求信号に含まれる情報を経路計算部５３１に通知する（ステップＳ７００）。
【０１７２】
次に、経路計算部５３１は、ステップＳ７００で通知された経路要求信号に含まれていた情報と、経路情報記録部５４０に記録されたネットワークトポロジ情報とにより、最適な転送経路の計算を行う（ステップＳ７０１）。このとき、前記決定された転送経路での転送に失敗した場合を考慮し、前記転送経路上の任意の転送ノードにおいて経路を分岐させた代替経路をいくつか計算することとしても良い。転送経路の計算が完了すると、経路計算部５３１は、決定された経路および代替経路についてそれぞれ転送順に１ホップ毎のローカルＩＤを読み出し、経路要求処理部５３０に通知する。
【０１７３】
前記転送経路の計算結果（代替経路がある場合は代替経路情報も含む）を受け取った経路要求処理部５３０は、通知された転送経路情報（ローカルＩＤの並び）を、経路情報応答信号に設定して、経路要求信号の送信元である境界転送ノード３００に送信する（ステップＳ７０２）。
【０１７４】
次に、図２１のシーケンス図を参照して、ＩＰノードである通信ノード１００ａが境界転送ノード３００ａにパケットを送信し、それが順次転送処理され、最終的にＩＰノードである通信ノード１００ｂに届くまでの一連の流れを説明する。
【０１７５】
ここでは、例として、各ノードの接続状況が図１３に示したネットワークトポロジのようになっているものとして説明する。境界転送ノード３００ａは、図１３のＩＤ＝１のノードに相当する。境界転送ノード３００ｂは、図１３のＩＤ＝８のノードに相当する。ＩＰパケットの送信元アドレスは、１９２．１６８．０．５０であり、宛先アドレスは、１９２．１６８．０．２０であるものとする。また、代替経路は使わないものとする。
【０１７６】
通信ノード１００ａから送信されたＩＰパケットが境界転送ノード３００ａに届くと（ステップＳ８００）、境界転送ノード３００ａは、図１４に示すフローチャートに従った処理を実行する。ここでは、ＩＰパケットには経路情報ヘッダが付与されていないため、図１４のステップＳ１０１において経路情報要求信号が経路管理サーバ５００に送信される（ステップＳ８０１）。
【０１７７】
前記経路情報要求信号を受信した経路管理サーバ５００は、図２０のフローチャートに従い、経路情報を計算し、転送経路を決定した後、経路情報応答信号を境界転送ノード３００ａに送信する（ステップＳ８０２）。
【０１７８】
リンクの帯域や、混雑具合は考慮せず、最短パスを計算する場合、以下のとおり、転送経路が計算される。図１３のネットワークトポロジの最短パスは、ＩＤ＝１のノード  −＞  ＩＤ＝１０のノード  −＞  ＩＤ＝８のノード  −＞  １９２．１６８．０．２０のノード（パケットの宛先となる外部ネットワークのＩＰノード）が転送経路として選択される。従って、前記経路情報応答信号には、図１３のネットワークトポロジのパス上のリンクＩＤである、１、２、０の値がローカルＩＤとして上記順番で格納される。
【０１７９】
ここで、ＩＤ＝１９２．１６８．０．５０のノード（外部ネットワーク７００のＩＰノード）からＩＤ＝８のノード間のリンクＩＤ（＝０）を経路情報応答に含めることとしても構わない。この場合、前記経路情報応答信号に含めるローカルＩＤの格納順序は、０、１、２、０となる。また逆に、外部ネットワーク（通信ノード１００ｂ）へのリンクＩＤ（＝０）を経路情報応答に含めないこととしても構わない。この場合、ローカルＩＤの格納順序は、１、２となる。
【０１８０】
さらに、外部ネットワークのＩＰノードのＩＤとしてＩＰアドレスを使ったが、ＩＰアドレスの上位から任意のｂｉｔ長を抜き出したネットワークアドレスとしても良いし、ＭＡＣ（Ｍｅｄｉａ  Ａｃｃｅｓｓ  Ｃｏｎｔｒｏｌ）アドレスなどレイヤ２の情報や、それ以外の情報を用いても構わない。
【０１８１】
境界転送ノード３００は前記経路情報応答信号を受信すると（ステップＳ８０３）、図１４のステップＳ１０２以降の処理にしたがい、ステップＳ８００で受信したＩＰパケットに経路情報ヘッダを付与し、その後、図１４のステップＳ１０３において、付与した経路情報ヘッダに従い、転送すべきローカルＩＤ（＝１）に対応した通信インタフェースからパケットを送出する（ステップＳ８０４）。この結果、ＩＤ＝１０の内部転送ノード４００にパケットが転送される。
【０１８２】
内部転送ノード４００は、経路情報ヘッダが付与されたパケットを受信すると（ステップＳ８０５）、図１７に示すフローチャートに従い転送処理を行う（ステップＳ８０６）。ここでは、転送経路情報に従って、転送すべきローカルＩＤ（＝２）に対応した通信インタフェースからパケットが送出され、ＩＤ＝８の境界転送ノード３００ｂにパケットが転送される。
【０１８３】
境界転送ノード３００ｂは、経路情報ヘッダが付与されたパケットを受信すると（ステップＳ８０７）、図１４に示すフローチャートにそって処理を実施する。さらに図１４のステップＳ１０３では、さらに図１５に示すフローチャートに示した転送処理が実施される。ここでは、図１５のステップＳ２０２で外部ネットワークへの転送と判定されるため、境界転送ノード３００ｂは、前記受信したパケットから経路情報ヘッダが除去した後、除去前の経路情報ヘッダの情報に従い、転送すべきローカルＩＤ（＝０）に対応した通信インタフェースからパケットを送出する（ステップＳ８０８）。この結果、最終的に通信ノード１００ｂへとＩＰパケットが転送される。
【０１８４】
次に、図２２のシーケンス図を参照して、ＩＰノードである通信ノード１００ａが境界転送ノード３００ａにパケットを送信し、それが順次転送処理されるが、第１に計算された最適な経路（基本経路）で転送している途中で送信失敗が発生し、代替経路を用いて転送に成功した場合の一連の流れを説明する。
【０１８５】
以下図２１と同様に、各ノードの接続状況が図１３に示したネットワークトポロジのようになっているものとして説明する。
【０１８６】
通信ノード１００ａから送信されたＩＰパケットが境界転送ノード３００ａに届くと（ステップＳ９００）、境界転送ノード３００ａは、経路管理サーバ５００から経路情報を取得し、前記ＩＰヘッダに経路情報ヘッダを付与する処理を行う（ステップＳ９０１）。ステップＳ９０１は、図２１におけるステップＳ８０２からステップＳ８０３に相当するが、ここでは、経路情報として、以下のとおり、基本経路に加え、２つの代替経路を取得できたものとする。
【０１８７】
基本経路情報（代替経路ではない経路）は、図２１の場合と同様、ＩＤ＝１のノード  −＞  ＩＤ＝１０のノード  −＞  ＩＤ＝８のノード  −＞  １９２．１６８．０．２０のノードという経路とする。
【０１８８】
第１の代替経路情報は、基本経路のＩＤ＝１０のノードを分岐点として、ＩＤ＝１０のノード  −＞  ＩＤ＝５  −＞  ＩＤ＝６  −＞  ＩＤ＝８のノード  −＞  １９２．１６８．０．２０のノード  という経路とする。
【０１８９】
第２の代替経路情報は、基本経路のＩＤ＝１のノードを分岐点として、ＩＤ＝１のノード  −＞  −＞  ＩＤ＝５  −＞  ＩＤ＝６  −＞  ＩＤ＝８のノード  −＞  １９２．１６８．０．２０のノードという経路とする。
【０１９０】
このとき、基本経路、第１の代替経路、第２の経路のローカルＩＤの並びは以下となる。
基本経路：１（第２の代替経路への分岐有り），２（第１の代替経路への分岐有り），０
第１の代替経路：３，１，３，０
第２の代替経路：２，１，３，０
【０１９１】
この結果、前記受信したＩＰパケットには、上記ローカルＩＤを並べた経路情報ヘッダに加え、代替経路開始位置情報ヘッダ、そして上記ローカルＩＤを並べた２つの代替経路情報ヘッダが付与される。
【０１９２】
前記基本情報ヘッダにおいて、ローカルＩＤ＝１および２となる箇所が代替経路への分岐点となっているので、これらのローカルＩＤは、図７の拡張されたローカルＩＤとなる。それぞれ‘Ａｌｔ’フィールドには、分岐先の代替経路の番号が設定される。
【０１９３】
境界転送ノード３００は、上記のように付与した経路情報ヘッダに従い、転送すべきローカルＩＤ（＝１）に対応した通信インタフェースからパケットを送出する（ステップＳ９０２）。このとき、境界転送ノード（ＩＤ＝１）は、代替経路への分岐点を持つので、経路情報ヘッダの‘Ｅｘ’フィールドはインクリメントされ‘１’となる。
【０１９４】
前記パケットを受信したノードＩＤ＝１０の内部転送ノード４００ａは、図１７に示すフローチャートに従い転送処理を実施し、転送すべきローカルＩＤ（＝２）に対応した通信インタフェースからパケットを送出する。このとき、内部転送ノード４００ａは、代替経路への分岐点を持つので、経路情報ヘッダの‘Ｅｘ’フィールドはインクリメントされ‘２’となる。
【０１９５】
ここで、内部転送ノード４００ａにてパケット転送失敗を検出したものとする（図１７のステップＳ４０４の‘Ｎ’）。
【０１９６】
このとき、内部転送ノード４００ａは、代替経路の有無を確認する。ここでは、経路情報ヘッダの‘Ｅｘ’フィールドが‘０’でない（‘２’）ため、当該転送ノードまでの経路の途中に代替経路が存在していると判定される。
【０１９７】
その結果、内部転送ノード４００ａは、当該パケットの経路情報ヘッダに代えて、代替経路により当該パケットを転送するため、分岐点までパケットを逆方向に転送する設定を行う（図１７のステップＳ４０６の「復帰用設定」）。具体的には、経路情報ヘッダの‘Ｄ’フィールド、‘Ｆ‘フィールドを共に’１‘が設定される。
【０１９８】
その後、内部転送ノード４００ａは、当該パケットを直ちに逆方向に転送するのではなく、図１７のステップＳ４０１の代替経路転送判定処理を再度実施する。
【０１９９】
当該転送ノード（ＩＤ＝１０）は、第１の代替経路への分岐点であるため、代替経路へ移行するために経路情報ヘッダの値の設定が行われる。
【０２００】
図１６に示した代替経路転送判定処理が行われた結果として経路情報ヘッダの‘Ｄ’フィールド、‘Ｆ’フィールドはすぐに‘０’に再設定され、‘Ｅｘ’フィールドもデクリメントされる。この結果‘Ｅｘ’フィールドは‘１’となる。参照していたローカルＩＤの’Ｕ’フィールドを’１’として、さらに同じくローカルＩＤの’Ａｌｔ’フィールドを代替経路情報ヘッダの’Ａｌｔ’フィールドにコピーする。この結果当該フィールドには’１’が設定される。
【０２０１】
以上の処理により、当該内部転送ノード４００ａおよび以降の転送ノードは、第１の代替経路を使った転送処理を実行する。まず、内部転送ノード４００ａは、経路情報ヘッダの’Ａｌｔ’フィールドが’１’であるため、第１の代替経路情報が設定された代替経路情報ヘッダのローカルＩＤを参照する。その結果ローカルＩＤ（リンク識別子）が’３’であるため、リンク識別子＝’３’に接続された通信インタフェースから前記パケットを送出する（ステップＳ９０５）。この際、前記代替経路ヘッダの’Ｃｕｒｒｅｎｔ  Ｏｆｆｓｅｔ’フィールドは、当該ローカルＩＤのバイト数分だけ加算される。
【０２０２】
前記転送の結果、前記パケットは内部転送ノード４００ｂ（ＩＤ＝５）に受信される。以降では、第１の代替経路情報ヘッダの’Ｃｕｒｒｅｎｔ  Ｏｆｆｓｅｔ’により示された位置のローカルＩＤを参照し、次ホップとなる転送ノードへとパケットを順次転送され、最終的に、通信ノード１００ｂへとパケットが転送される（ステップＳ９０６〜ステップＳ９０８）。
【０２０３】
次に、図２３のシーケンス図を参照して、ＩＰノードである通信ノード１００ａが境界転送ノード３００ａにパケットを送信し、それが順次転送処理されるが、第１に計算された最適な経路（基本経路）および第１の代替経路で転送している途中で送信失敗が発生し、第２の代替経路を用いて転送に成功した場合の一連の流れを説明する。
【０２０４】
以下図２１と同様に、各ノードの接続状況が図１３に示したネットワークトポロジのようになっているものとして説明する。
【０２０５】
図２３のステップＳ１０００からステップＳ１００４までは、図２２のステップＳ９００からステップＳ９０４までと全く同じであるため説明を省略する。
【０２０６】
ステップＳ１００５において、内部転送ノード４００ａは、第１の代替経路への分岐点となっているため、第１の代替経路が設定された代替経路情報ヘッダのローカルＩＤを参照する。その結果ローカルＩＤ（リンク識別子）が’３’であるため、リンク識別子＝’３’に接続された通信インタフェースから前記パケットを送出する。この際、前記代替経路ヘッダの’Ｃｕｒｒｅｎｔ  Ｏｆｆｓｅｔ’フィールドは、当該ローカルＩＤのバイト数分だけ加算される。
【０２０７】
ここまではステップＳ９０５と同じであるが、ここで、内部転送ノード４００ａにてパケット転送失敗を検出したものとする（図１７のステップＳ４０４の‘Ｎ’）。
【０２０８】
このとき、内部転送ノード４００ａは、代替経路の有無を確認する（ステップＳ１００６）。ここでは、経路情報ヘッダの’Ｅｘ’フィールドが’０’でない（’１’）ため、当該転送ノードまでの経路の途中に代替経路が存在していると判定される。
【０２０９】
その結果、内部転送ノード４００ａは、当該パケットの経路情報ヘッダに代えて、代替経路により当該パケットを転送するため、分岐点までパケットを逆方向に転送する設定を行う（図１７のステップＳ４０６の「復帰用設定」）。具体的には、経路情報ヘッダの’Ｄ’フィールド、’Ｆ’フィールドを共に’１’が設定される。
【０２１０】
その後、内部転送ノード４００ａは、当該パケットを直ちに逆方向に転送するのではなく、図１７のステップＳ４０１の代替経路転送判定処理を再度実施する。
【０２１１】
そして、図１６に示した代替経路転送判定処理に従い、第１の代替経路で参照しているローカルＩＤには、さらなる代理経路への分岐点となる情報がないので、図１６のステップＳ３００の‘Ｙ’およびステップＳ３０１の‘Ｎ’と遷移し、図１６のステップＳ３０３で、代替経路の起点に戻ったかどうかが判定される。
【０２１２】
このとき、第１の代替経路情報ヘッダの’Ｃｕｒｒｅｎｔ  Ｏｆｆｓｅｔ’は’０’であるため、起点に戻っていることが判定できる。したがって、図１６のステップＳ３０４に進み、元経路への復帰処理が実行される。前記元経路への復帰処理は、第１の代替経路情報ヘッダの’Ｆｒｍ’フィールドの値を、経路情報ヘッダの’Ａｌｔ’フィールドにコピーすることで行われる。
【０２１３】
この結果、前記’Ａｌｔ’フィールドは’０’に設定され、内部転送ノード４００ａを含め、これ以降当該パケットを受信した転送ノードは、基本経路情報（経路情報ヘッダに設定された経路）により転送処理を行うこととなる。
【０２１４】
図１６のフローチャートにしたがい、この後、再度ステップＳ３０１で未使用の代替経路があるかどうかが判定される。ここでの判定には経路情報ヘッダのローカルＩＤが使用される。この結果、当該内部転送ノード４００ａから第１の代替経路への経路があるが、使用済み（’Ｕ’＝’１’）なので、図１６のステップＳ３０１では’Ｎ’に進み、次に図１６のステップＳ３０３で、代理経路の起点かどうかが判定される。当該内部転送ノード４００ａは基本経路の起点では無く、そもそも代替経路ではないので、判定結果は’Ｎ’となり代替経路転送判定処理は完了する。
【０２１５】
その後、図１７のステップＳ４０２で転送方向の判定は、‘Ｄ’フィールドが‘１’であることにより、’Ｎ’（逆方向）となるため、図１７のステップＳ４０８で逆方向への転送処理が実行される。この結果、受信パケットは、リンク識別子＝’１’に接続された通信インタフェースから、境界転送ノード３００ａ（ＩＤ＝１）へと送られる（ステップＳ１００７）。
【０２１６】
次にステップＳ１００８において、前記逆方向へ転送されたパケットを受信すると、境界転送ノード３００ａは、図１５に示す転送処理を実行する。まず、ステップＳ２００の代替経路転送判定処理で、受信パケットは、逆方向、かつ転送失敗（’Ｄ’フィールド＝１、’Ｆ’フィールド＝１）であり、さらに未使用の代替経路がある（第２の代替経路）ため、図１６のステップＳ３０２で代替経路への移行処理が実施される。
【０２１７】
具体的には、経路情報ヘッダの’Ｄ’フィールド、’Ｆ’フィールドは、’０’に設定される。また、同じく経路情報ヘッダの’Ａｌｔ’フィールドには、ローカルＩＤの’Ａｌｔ’フィールドがコピーされ、結果として’２’が設定される。また、前記ローカルＩＤ中の’Ｕ’フィールドは’１’に設定される。この後は、図１５のステップＳ２０１以降に従い、第２の代替経路情報ヘッダを使って受信パケットの転送処理が行われる。
【０２１８】
ここでは、第２の代替経路情報ヘッダ中の最初のローカルＩＤ情報は’２’（リンク識別子＝’２’）であるため、当該境界転送ノード３００ａ（ＩＤ＝１）の通信インタフェースのうち、リンク識別子＝’２’のリンクに接続された通信インタフェースよりパケットが送出される（ステップＳ１００９）。
【０２１９】
内部転送ノード４００ｂ（ＩＤ＝５）によりステップＳ１００９で受信したパケットの転送処理が行われる（ステップＳ１０１０）。転送の手順は、これまで説明したように経路情報ヘッダの’Ａｌｔ’フィールドを参照し、これが’０’でない（’２’）ことから、第２の代替経路情報ヘッダ使った転送が開始される。第２の代替経路情報ヘッダの’Ｃｕｒｒｅｎｔ  Ｏｆｆｓｅｔ’フィールドにより参照すべきローカルＩＤを特定する。ここでは’Ｃｕｒｒｅｎｔ  Ｏｆｆｓｅｔ’は’Ｃ１’なので、第２の代替経路情報ヘッダの‘Ｌｏｃａｌ  ＩＤ＃１’が参照される。前記したとおり‘Ｌｏｃａｌ  ＩＤ＃１’は、’１’であるため、当該内部転送ノード４００ｂは、リンク識別子が’１’であるリンクに接続された通信インタフェースから、当該パケットを送出する（ステップＳ１０１１）。
【０２２０】
次に、内部転送ノード４００ｃ（ＩＤ＝６）は、ステップＳ１０１１で送出されたパケットの転送処理を行う（ステップＳ１０１２）。処理内容は、ステップＳ１０１０で説明した内部転送ノード４００ｂにおける転送処理と同様である。結果として、当該内部転送ノード４００ｃは、リンク識別子が’３’であるリンクに接続された通信インタフェースから、当該パケットを送出する（ステップＳ１０１３）。
【０２２１】
最後にステップＳ１０１４では、境界転送ノード３００ｂ（ＩＤ＝８）は、ステップＳ１０１３で送出されたパケットの転送処理を行う。この際、境界転送ノード３００ｂは、図１４に示すフローチャートにそって処理を実施する。さらに図１４のステップＳ１０３では、さらに図１５の示すフローチャートに示した転送処理が実施される。ここでは、外部ネットワークへの転送となるので、図１５のステップＳ２１０で経路情報ヘッダ、代替経路開始位置情報ヘッダ、代替経路情報ヘッダが除去され、その後、外部ネットワークに接続された通信インタフェースから当該パケットが送出される（ステップＳ１０１５）。その結果、通信ノード１００ｂにパケットが送られる。
【０２２２】
以上のとおり、本実施形態によれば、ＩＰアドレス等のグローバルに一意性が確保される経路情報ではなく、転送ノード内、あるいは、隣接する転送ノード間といった局所的な範囲での一意性だけが保証されたローカルＩＤを使って転送先を指定するよう構成している。このため、１バイトあるいは２バイト程度の情報量に１ホップ分の転送経路が格納可能となり、当該転送経路の情報を経路情報ヘッダに格納してパケットに付与した場合でも、付与するヘッダによるオーバヘッドを極めて小さいサイズに抑制することが可能になる。この結果、用途を限らずすべてのパケットに経路情報ヘッダを格納することが可能となる。
【０２２３】
また本実施形態では、転送ノードに備える転送テーブルのエントリ数を、各転送ノードが備える通信インタフェースの数程度とすることが可能になる。また、転送テーブルの格納・更新・利用のため、転送ノードに必要とされるメモリのサイズやＣＰＵの処理能力も抑制可能となり、転送ノードを安価とすることができる。
【０２２４】
これらの結果として、本実施形態によれば、転送経路を１ホップ毎に厳密に指定した場合においても正味の情報を効率よく、さらに高速に転送可能となる。
【０２２５】
さらに、本実施形態によれば、パケットに代替転送経路情報を付加し、転送ノードに、適宜代替転送経路への移行機能を備えたため、転送経路に障害が発生した場合や、トラヒックが過大となった場合などにも、影響を受けることなく、宛先にパケットを転送することが可能となっている。
【０２２６】
［第２の実施形態］
続いて、本発明の第１の実施形態に変更を加え、転送失敗経路を記憶保持するようにした本発明の第２の実施形態について図面を参照して詳細に説明する。
【０２２７】
本発明の第２の実施形態の全体の構成は、第１の実施形態とほぼ同じ構成、機能となるが、境界転送ノード３０１、および内部転送ノード４０１に変更が加えられている。以下のその相違点を中心に説明を加える。
【０２２８】
図２４は、本発明の第２の実施形態の境界転送ノード３０１の構成を示す図である。第１の実施形態の境界転送ノード３００と、同等の機能ブロックは、同一の符号を付している。以下、第１の実施形態の境界転送ノード３００と異なる符号が付された、代替経路移行部３７１、転送結果記録部３８１、記録部３９１について説明する。
【０２２９】
代替経路移行部３７１は、本発明の第１の実施形態の代替経路移行部３７０とほぼ同じ機能を備えるが、受信パケット中の経路情報ヘッダ（代替経路を使っている場合は代替経路情報ヘッダ）中の経路情報（ローカルＩＤの並び）を、記録部３９１に記録されている転送失敗経路情報テーブルの各エントリと比較し、一致する場合は、当該受信パケットを無効な経路を経由するパケットとみなし、転送経路を代替経路または他の代替経路へと移行させる機能をさらに備える。
【０２３０】
ここで、記録部３９１に記録される転送失敗経路情報テーブルについて説明する。転送失敗経路情報テーブルは、例えば、図２５に示すようなフォーマットであり、各エントリは転送失敗経路と有効時刻の情報を含む。
【０２３１】
前記転送失敗経路情報とは、当該転送ノードにおいて参照するローカルＩＤから、当該転送ノード以降の転送ノードにおいて転送に失敗したローカルＩＤまでを並べた情報である。ここで、本実施形態のローカルＩＤは、後記するように第１の実施形態とフォーマットが異なるのみであり、転送に失敗した転送ノードが、転送を試みた通信インタフェースの識別子または前記通信インタフェースに接続したリンクのリンク識別子のいずれかである。
【０２３２】
有効時刻情報は、時刻が、ここに記録された有効時刻を超過した場合は当該エントリが削除されるか無効となることを意味する。ただし、有効時刻を使わないこととしても良い。
【０２３３】
代替経路移行部３７１は、また、転送が失敗し、逆方向に転送されてきたパケット（すなわち、’Ｄ’フィールド、’Ｆ’フィールドともに’１’のパケット）を受信した場合、当該転送ノードが代替経路への分岐点となっている場合、前記受信パケットを代替経路へ転送すると共に、受信パケットの経路情報ヘッダまたは代替経路情報ヘッダの情報を使って前記転送失敗経路情報テーブルにエントリを追加する機能を備える。
【０２３４】
図２６は、本実施形態で用いるローカルＩＤのフォーマットである。第１の実施形態におけるローカルＩＤに対し、’Ｂ’（ＢｒｏｋｅｎＬｉｎｋ）フィールドが追加されている。転送失敗が発生した場合、転送失敗が発生した通信インタフェース識別子、あるいはリンク識別子に相当するローカルＩＤの’Ｂ’フィールドが’１’に設定される。したがって、当該転送ノードが参照するローカルＩＤから、転送失敗したローカルＩＤまでを読み出し、転送失敗経路情報テーブルに記録することができる。
【０２３５】
転送結果記録部３８１は、本発明の第１の実施形態の転送結果記録部３８０とほぼ同じ機能を備えるが、転送に失敗した際に、経路情報ヘッダの’Ｄ’フィールド、および’Ｆ’フィールドを’１’に設定するのに加え、転送を試みた際に参照していたローカルＩＤの’Ｂ’フィールドに’１’を設定する機能を備える。
【０２３６】
記録部３９１には、本発明の第１の実施形態において記録される転送テーブルに加え、図２５に例示した転送失敗経路情報テーブルが記録される。
【０２３７】
図２７は、本発明の第２の実施形態の内部転送ノード４０１の構成を示す図である。第１の実施形態の内部転送ノード４００と、同等の機能ブロックは、同一の符号を付している。
【０２３８】
第１の実施形態の内部転送ノード４００と異なる符号が付された、代替経路移行部４５１、転送結果記録部４６１、記録部４７１は、それぞれ境界転送ノード３０１の代替経路移行部３７１、転送結果記録部３８１、記録部３９１と同等の機能であるため、これらの説明は省略する。
【０２３９】
続いて、第２の実施形態における境界転送ノード３０１および内部転送ノード４０１が近隣ノードからパケットを受信した際の処理の流れを説明する。
【０２４０】
境界転送ノード３０１、内部転送ノード４０１ともに、第１の実施形態における境界転送ノード３００、内部転送ノード４００とほぼ同等の動作となる。異なるのは、図１６に示す代替経路転送判定処理と、図１５の境界転送ノード３００における復帰用設定（ステップＳ２０６）、図１７の内部転送ノード４００における復帰用設定（ステップＳ４０６）である。以下、第１の実施形態との相違点を中心に説明する。
【０２４１】
まず、図２８に示すフローチャートを用いて、本発明の第２の実施形態における代替経路転送判定処理を説明する。
【０２４２】
まず、転送ノードは、受信パケットが、当該転送ノードおよび当該転送ノードを経由し、それ以降の転送ノードにおいて転送失敗が発生し、経由した転送ノードを逆方向に送り戻されたパケットであるかどうかを判定する（ステップＳ１１００）。具体的には、当該受信パケットの経路情報ヘッダ中の’Ｄ’フィールド、および’Ｆ’フィールドを参照し、それらが両方ともに’１’であるかどうかを判定する。
【０２４３】
受信パケットが失敗による逆方向への転送パケットでなかった場合（ステップＳ１１００の’Ｎ’）、転送ノードは、受信パケットの経路情報ヘッダ（代替経路を使用している場合は代替経路情報ヘッダ）において現在参照しているローカルＩＤと、それに続くローカルＩＤを、図２５に示した転送失敗経路情報テーブルの各エントリと比較する（ステップＳ１１０１）。比較の結果、一致するエントリがある場合は、当該受信パケットは転送失敗するパケットとして代替経路へと移行することに決定する（ステップＳ１１０１の’Ｙ’）。一方、一致するエントリが無い場合は’Ｎ’に進み、処理が完了する（ステップＳ１１０１の’Ｎ’）。
【０２４４】
上記ステップＳ１１０１の処理は、本発明の第２の実施形態における代替経路移行部３７１および代替経路移行部４５１により新たに加わった処理である。
【０２４５】
一方、受信パケットが失敗による逆方向への転送パケット（’Ｄ’フィールド、’Ｆ’フィールド共に’１’）であった場合（ステップＳ１１００の’Ｙ’）、転送ノードは、’Ｃｕｒｒｅｎｔ  Ｏｆｆｓｅｔ’フィールドにより、参照すべきローカルＩＤをチェックし、当該転送ノードは代替経路へと移行できる分岐点であり、かつ代替経路が未使用かどうかを判定する（ステップＳ１１０２）。具体的には、前記ローカルＩＤ（’Ｌｏｃａｌ  ＩＤ＃ｎ’）中の’Ａｌｔ’フィールドが’０’以外であり、かつ’Ｕ’フィールドが’０’であるかを判定する。
【０２４６】
前記判定の結果、未使用の代替経路の分岐点となっていると判定できた場合（ステップＳ１１０２の’Ｙ’）、転送ノードは、経路情報ヘッダ（代替経路を使用している場合は代替経路情報ヘッダ）から、当該転送ノードが参照するローカルＩＤから、前記’Ｂ’（ＢｒｏｋｅｎＬｉｎｋ）フィールドが’１’に設定されたローカルＩＤまでの一連のローカルＩＤを読み出し、これを図２５に示した転送失敗経路情報テーブルのエントリとして登録する。
【０２４７】
上記ステップＳ１１０３の処理は、本発明の第２の実施形態における代替経路移行部３７１および代替経路移行部４５１により新たに加わった処理である。
【０２４８】
次に転送ノードは、代替経路へパケットを転送するために、経路情報ヘッダ、代理情報ヘッダの各フィールドに適切な値を設定する（ステップＳ１１０４）。具体的な設定内容は、図１６のＳ３０２と同様であるため、ここでは省略する。前記設定が完了した後、代替経路転送判定処理は終了となる。
【０２４９】
一方、前記の条件が満たされなかった場合、つまり代替経路への分岐点ではないか、あるいは分岐点ではあるが、分岐先の代替経路が、既に当該パケットを転送したことのある経路であった場合（ステップＳ１１０２の’Ｎ’）、転送ノードは、現在参照しているのが代替経路情報ヘッダであり、その中で最初の経路情報（ローカルＩＤ）を参照しているかどうかを判定する（ステップＳ１１０５）。ここで、代替経路情報ヘッダを参照しているかどうかは、経路情報ヘッダの’Ａｌｔ’フィールドを参照すれば判定できる。また、最初かどうかは代替経路情報ヘッダの’Ｃｕｒｒｅｎｔ  Ｏｆｆｓｅｔ’が’０’かどうかで判定できる。
【０２５０】
前記判定の結果、代替経路の最初の経路情報でない、つまり、自ノードが代替経路の起点でないと判定した場合（ステップＳ１１０５の’Ｎ’）、代替経路転送判定処理は終了となる。
【０２５１】
前記判定の結果、代替経路の最初の経路情報と判定した場合、つまり、自ノードが代替経路の起点であると判定した場合（ステップＳ１１０５の’Ｙ’）、転送ノードは、元経路への復帰処理を実行する。前記元経路への復帰処理は、現在参照対象としている代替経路情報ヘッダ中の’Ｆｒｍ’フィールドの値を、経路情報ヘッダの’Ａｌｔ’フィールドにコピーすることで行う。
【０２５２】
次に、本発明の第２の実施形態における境界転送ノード３０１での復帰用設定処理と、図１５の第１の実施形態における復帰用設定処理（ステップＳ２０６）との相違点を説明する。
【０２５３】
本発明の第１の実施形態における復帰用設定処理（図１５のステップＳ２０６）では、代替経路への分岐点（自転送ノードが分岐点のケースもありえる）となる転送ノードまで受信パケットを戻す処理が実施されるように、経路情報ヘッダの各フィールドが適切に設定するものである。具体的には、経路情報ヘッダの’Ｄ’および’Ｆ’フィールドを共に’１’に設定している。
【０２５４】
これに対し、本発明の第２の実施形態の復帰用設定処理では、上記に加え、転送結果記録部３８１により、結果として失敗に終わった転送を行う際に参照したローカルＩＤ情報の’Ｂ’フィールドを’１’に設定する処理が行われる。
【０２５５】
続いて、本発明の第２の実施形態の内部転送ノード４０１での復帰用設定処理と、第１の実施形態の復帰用設定処理（図１７のステップＳ４０６）との相違点を説明する。
【０２５６】
本発明の第１の実施形態の復帰用設定処理（図１７のステップＳ４０６）は、代替経路への分岐点（自転送ノードが分岐点のケースもありえる）となる転送ノードまで受信パケットを戻す処理が実施されるように、経路情報ヘッダの各フィールドを適切に設定するものである。具体的には、経路情報ヘッダの’Ｄ’および’Ｆ’フィールドを共に’１’に設定している。
【０２５７】
これに対し、本発明の第２の実施形態の復帰用設定処理では、上記に加え、転送結果記録部４６１により、結果として失敗に終わった転送を行う際に参照したローカルＩＤ情報の’Ｂ’フィールドを’１’に設定する。
【０２５８】
続いて、図２９のシーケンス図を参照して、ＩＰノードである通信ノード１００ａが境界転送ノード３００ａにパケットを送信し、それが順次転送され、最終的にＩＰノードである通信ノード１００ｂに届くまでの処理の説明を行う。
【０２５９】
ただし、ここでは、本発明の第２の実施形態をよりわかりやすく説明するため、次のようにパケットが送信されたものとして説明する。
【０２６０】
まず、最初のパケットの転送途中に転送失敗が発生し、当該パケットを代替経路への分岐点となる転送ノード（ここでの例では境界転送ノード３００ａ）まで戻した後に、代替経路で転送する。
【０２６１】
次に、同じように通信ノード１００ａから通信ノード１００ｂに送られたパケットを境界転送ノード３００ａが受信した場合、当該パケットの失敗が予測されるため、境界転送ノード３００ａは、基本経路ではなく、ただちに代替経路での転送を行う。
【０２６２】
図２９を参照すると、通信ノード１００ａから送信されたＩＰパケットが境界転送ノード３００ａに届くと（ステップＳ１２００）、前記ＩＰパケットを受信した境界転送ノード３００ａが、経路管理サーバ５００から経路情報を取得し、前記ＩＰヘッダに経路情報ヘッダを付与する処理を実行する（ステップＳ１２０１）。
【０２６３】
以下第１の実施形態と同様に、各ノードの接続状況が図１３に示したネットワークトポロジのようになっているものとし、以下のように、基本の経路情報のほかに、１つの代替経路を取得できたものとして説明する。
基本の経路情報（代替経路ではない経路）：
ＩＤ＝１のノード  −＞  ＩＤ＝１０のノード  −＞  ＩＤ＝８のノード  −＞  １９２．１６８．０．２０のノードという経路。
第１の代替経路情報：
基本経路のＩＤ＝１のノードを分岐点として、ＩＤ＝１のノード  −＞  ＩＤ＝１０のノード  −＞  ＩＤ＝５  −＞  ＩＤ＝６  −＞  ＩＤ＝８のノード  −＞  １９２．１６８．０．２０のノード  という経路。
【０２６４】
このとき、基本経路、第１の代替経路のローカルＩＤの並びは以下となる。
基本経路  ：１（第１の代替経路への分岐有り），２，０
第１の代替経路：２，１，３，０
【０２６５】
この結果、前記受信したＩＰパケットには、経路情報ヘッダに加え、代替経路開始位置情報ヘッダ、そして１つの代替経路情報ヘッダが付与される。
【０２６６】
前記基本情報ヘッダにおいて、ローカルＩＤ＝１を参照する転送ノード（境界転送ノード３００ａ）が第１の代替経路への分岐点となっているので、これらのローカルＩＤは、図２６下段の拡張された（’Ｅ’＝’１’）ローカルＩＤとなり、そして前記ローカルＩＤ中の’Ａｌｔ’フィールドには、分岐先の代替経路の番号が設定される。
【０２６７】
次に境界転送ノード３００ａは、付与した経路情報ヘッダに従い、転送すべきローカルＩＤ（リンク識別子）で示されるリンクに接続された通信インタフェースからパケットを送出する（ステップＳ１２０２）。このとき、境界転送ノード３００ａは、代替経路への分岐点を持つので、経路情報ヘッダの’Ｅｘ’フィールドがインクリメントされ’１’となる。
【０２６８】
この後、内部転送ノード４００ａ（ＩＤ＝１０）にパケットが転送される。次に、経路情報ヘッダが付与されたパケットを受信した内部転送ノード４００ａは、図１７に示すフローチャートに従い転送処理を実施し、リンク識別子＝２に接続された通信インタフェースからパケットを送出する（ステップＳ１２０３）。
【０２６９】
ここで、内部転送ノード４００ａにてパケット転送失敗を検出したものとする（図１７のステップＳ４０４の‘Ｎ’）。このとき、ステップＳ１２０４では、代替経路の有無が確認される。経路情報ヘッダの’Ｅｘ’フィールドが’０’でない（’１’）ため、当該転送ノードまでの経路に代替経路が存在していると判定される。
【０２７０】
その結果、当該パケットの経路情報ヘッダに代えて、代替経路により当該パケットを転送するため、分岐点までパケットを逆方向に転送する設定が行われる（ステップＳ１２０４）。具体的には、経路情報ヘッダの’Ｄ’フィールド、’Ｆ’フィールドがともに’１’に設定される。
【０２７１】
さらに、ここでは失敗した転送を行う際に参照したローカルＩＤの’Ｂ’フィールドも’１’に設定される。なお、ここでの例ではローカルＩＤ＝’２’となるローカルＩＤの’Ｂ’フィールドが’１’に設定される。
【０２７２】
前記処理の結果、内部転送ノード４００ａは、当該パケットを逆方向に転送する（ステップＳ１２０５）。
【０２７３】
前記逆方向へ転送されたパケットを受信した境界転送ノード３００ａは、図１５に示す境界転送ノードの転送処理のとおり、まずステップＳ２００の代替経路転送判定処理を実行する（ステップＳ１２０６）。この結果、逆方向転送、かつ転送失敗（’Ｄ’フィールド＝１、’Ｆ’フィールド＝１）であり、さらに未使用の代替経路がある（第１の代替経路）ため、代替経路へ移行することが決定される。
【０２７４】
このとき、図２８のステップＳ１１０３にて、図２５の転送失敗経路情報テーブルにエントリが追加される。この例の場合、追加されたエントリには、｛１，２｝という転送失敗経路が記述される。この後、ステップＳ１１０４で代替経路への移行処理が実施される。
【０２７５】
具体的には、経路情報ヘッダの’Ｄ’フィールド、’Ｆ’フィールドは’０’に設定される。そして’Ａｌｔ’フィールドには、ローカルＩＤの’Ａｌｔ’フィールドがコピーされ、結果として’１’が設定される。また、前記ローカルＩＤ中の’Ｕ’フィールドが’１’に設定される。この後は、図１５のステップＳ２０１以降の処理に従い、第１の代替経路情報ヘッダを使って受信パケットの転送処理が行われる。そして、当該パケットはこれまで説明した手順により複数の転送ノード間を転送されていき、最終的に通信ノード１００ｂまで送られる（ステップＳ１２０７）。
【０２７６】
その後、通信ノード１００ａから通信ノード１００ｂに送信された別のＩＰパケットが境界転送ノード３００ａに届いた場合（ステップＳ１２０８）、境界転送ノード３００ａは、前記ステップＳ１２０１と同様に経路管理サーバ５００に転送経路に問い合わせ、経路情報を取得する。ただし、ステップＳ１２０１で取得した経路情報をキャッシュとして保持しておくことで、宛先ＩＰアドレス等が同様の値となるＩＰパケットを受信した際には、前記キャッシュの情報を使い経路管理サーバ５００への問い合わせを省略することとしても構わない。いずれにせよ、ここでもステップＳ１２０１と同じ経路情報が取得でき、前記経路情報を使って構成した経路情報ヘッダ、代替経路開始位置情報ヘッダ、代替経路情報ヘッダがＩＰパケットに付与されたものとする。
【０２７７】
前記ヘッダが付与された後、境界転送ノード３００ａは、図１５のフローチャートに従って転送処理を実行するが、まずはステップＳ２００で代替経路転送判定処理が実施される（ステップＳ１２０９）。
【０２７８】
ここでの代替経路転送判定処理は、図２８に示すフローチャートに示す流れとなる。前記ヘッダが付与されたパケットは、順方向であり、転送失敗もしていないので、図２８のステップＳ１１００では’Ｎ’に進み、ステップＳ１１０１が処理される。ステップＳ１１０１では前記したように、前記パケットの経路情報ヘッダと図２５の転送失敗経路情報テーブルのエントリとが比較され、一致したエントリが無いかどうかが調べられる。
【０２７９】
前記したように、転送失敗経路情報テーブルには、転送失敗経路が｛１，２｝であるエントリが存在する。一方、前記パケットに付与された経路情報ヘッダ中の転送経路情報のうち、当該境界転送ノード３００ａが転送時に参照するローカルＩＤを起点とした場合のローカルＩＤの並びは、｛１，２，０｝である。
【０２８０】
前記比較の結果、｛１，２｝の部分が一致するため、前記のステップＳ１１０１では’Ｙ’に進みステップＳ１１０４が処理される。すなわち、受信パケットを内部転送ノード４００ａに転送すること無く、転送経路を直ちに代替経路に切り替えることができ、高効率な転送することができる。当該パケットは代替経路により最終的に通信ノード１００ｂへと送られる（ステップＳ１２１０）。
【０２８１】
以上の本発明の第２の実施形態によれば、第１の実施形態の効果に加えて、転送失敗が予測される経路情報ヘッダが付与されたパケットを受信した際には、即座に代替経路に転送することが可能になる。結果として、サービス途絶時間を抑制するだけでなく、無駄な転送を回避し、リンクの帯域や処理能力を有効に使うことが可能となる。
【０２８２】
以上、本発明の好適な実施形態を説明したが、本発明は、上記した実施形態に限定されるものではなく、本発明の基本的技術的思想を逸脱しない範囲で、更なる変形・置換・調整を加えることができる。例えば、上記した各実施形態では、リンクの両端の近隣ノード間で共有しているリンクＩＤを用いるものとして説明したが、ローカルＩＤとして、通信インタフェースの識別子を用いることも可能である。
【０２８３】
またさらに、リンクＩＤや通信インタフェースの識別子に代えて、第３のローカルＩＤを採番し、これをリンクＩＤや通信インタフェースに紐付けておく変形構成も採用可能である。
【０２８４】
また、例えば、上記した実施形態では、個々の転送ノードがローカルＩＤ決定部を備えて、それぞれローカルＩＤを決定するものとして説明したが、経路管理サーバにて各転送ノードの構成情報を入手可能である場合には、経路管理サーバがローカルＩＤを決定し、それぞれの記録部に転送テーブルを記憶させる構成も採用可能である。この場合、個々の転送ノードのローカルＩＤ決定部を省略することができる。またさらに、経路管理サーバが各転送ノードの接続関係も入手可能であり、隣接するノード同士が重複しないようにローカルＩＤを設定可能である場合には、個々の転送ノードの近隣情報通知部も省略することが可能である。
【０２８５】
また、上記した実施形態の経路管理サーバ５００は、非特許文献１のオープンフローコントローラにて実現することができ、この場合、転送ノードは、オープンフロースイッチにて実現することができる。
【０２８６】
また、上記した実施形態の経路管理サーバ５００は、専用のサーバとして実現することもでき、転送ノードとしては、上記オープンフロースイッチのほか、ＩＰ網におけるルータ、ＭＰＬＳ網におけるＭＰＬＳスイッチにて実現することができる。その他、サーバがネットワーク内の転送ノードを集中管理するようなネットワークであれば、本発明を適用することが可能である。
【産業上の利用可能性】
【０２８７】
データセンタなどの商用ネットワークでは、ＱｏＳ（Ｑｕａｌｉｔｙ  ｏｆ  Ｓｅｒｖｉｃｅ）や、負荷分散のため、宛先アドレス、送信元アドレス、使用プロトコルといった様々な条件により、パケットの転送経路を厳密に制御する必要がある。本発明によれば、経路情報を増やすことなくパケットのオーバヘッドを抑制しつつ、転送経路を厳密に指定することを可能とする。また、リンクに障害が発生した際にも、サービスを継続することが重要となる。本発明の通信システムは、経路情報を増やすことなくパケットのオーバヘッドを抑制しつつ、転送経路を厳密に指定することを可能とするとともに、特定のリンクに障害が発生した場合でも、ヘッダに格納した幾つかの代替経路を使ってパケットの転送ができ、耐障害性、可用性に優れたネットワークシステムを構築することが可能となる。
したがって、本発明はデータセンタなどの商用ネットワークへ好適に適用可能である。
なお、本発明の全開示（請求の範囲を含む）の枠内において、さらにその基本的技術思想に基づいて、実施形態ないし実施例の変更・調整が可能である。また、本発明の請求の範囲の枠内において種々の開示要素の多様な組み合わせないし選択が可能である。すなわち、本発明は、請求の範囲を含む全開示、技術的思想にしたがって当業者であればなし得るであろう各種変形、修正を含むことは勿論である。
【０２８８】
最後に、本発明の特許請求の範囲に繰り込み可能な発明を付記する。
【０２８９】
［付記１］
上記した通信システムにおいて、
前記転送結果記録部は、パケット内の前記転送失敗した転送ノードが使用した通信インタフェースまたは隣接ノードとの間に張られたリンクを識別するための識別子を用いて、前記転送失敗が発生した転送経路情報を生成し、記録する通信システム。
［付記２］
上記した転送ノードにおいて、
さらに、パケット内の複数の転送経路情報のうちのどの転送経路情報を使うかを示す経路選択情報を参照して、前記パケット転送処理に用いる転送経路情報を決定する転送ノード。
［付記３］
上記した転送ノードにおいて、
パケットに含まれる、１つの転送経路から、別の転送経路へと分岐可能な転送ノードを判別するための情報を用いて、転送経路を異なる転送経路に切り替える転送ノード。
［付記４］
上記した転送ノードにおいて、
パケットに含まれる、転送処理の結果により更新される前記転送結果情報を参照して、転送に失敗していない転送経路情報を選択する転送ノード。
［付記５］
上記した転送ノードにおいて、
転送処理に失敗した場合、当該パケットに含まれる、当該パケットを受信した転送ノードまで至る転送経路上における現在の転送経路から異なる転送経路へと分岐可能な転送ノードの数を示す分岐点情報を減らし、前記分岐点情報を用いて当該パケットを破棄するか否かを決定する転送ノード。
［付記６］
上記した転送ノードにおいて、
転送失敗が発生した転送経路情報を記録する転送結果記録部を備え、
パケットを受信した際に、当該パケットに格納された転送経路情報と前記記録された転送失敗が発生した経路情報とを比較し、その結果、転送失敗が予測される場合、別の転送経路に切りかえる転送ノード。
［付記７］
上記した転送ノードにおいて、
前記転送結果記録部は、パケット内の前記転送失敗した転送ノードが使用した通信インタフェースまたは隣接ノードとの間に張られたリンクを識別するための識別子を用いて、前記転送失敗が発生した転送経路情報を生成し、記録する転送ノード。
［付記８］
上記した転送ノードにおいて、
さらに、前記転送経路情報を含まないパケットを受信した場合、経路管理サーバに問い合わせることで取得した、前記パケットを通信相手まで到達させ得る複数の転送経路情報を用い、前記パケットに前記複数の転送経路情報を格納する転送ノード（境界転送ノード）。
【符号の説明】
【０２９０】
１００、１００ａ、１００ｂ  通信ノード
２００  転送ノード
３００、３００ａ、３００ｂ、３０１、３０１ａ、３０１ｂ  境界転送ノード
３１０  通信インタフェース
３２０  パケット転送部
３３０  ヘッダ操作部
３４０  ローカルＩＤ決定部
３５０  近隣情報通知部
３６０  経路取得部
３７０、３７１  代替経路移行部
３８０、３８１  転送結果記録部
３９０、３９１  記録部
４００  内部転送ノード
４１０  通信インタフェース
４２０  パケット転送部
４３０  ローカルＩＤ決定部
４４０  近隣情報通知部
４５０、４５１  代替経路移行部
４６０、４６１  転送結果記録部
４７０、４７１  記録部
５００  経路管理サーバ
５１０  通信インタフェース
５２０  経路情報収集部
５３０  経路要求処理部
５３１  経路計算部
５４０  経路情報記録部
６００  データ転送ネットワーク
７００  外部ネットワーク
【図１】
0005935913.tif 000002
【図２】
0005935913.tif 000003
【図３】
0005935913.tif 000004
【図４】
0005935913.tif 000005
【図５】
0005935913.tif 000006
【図６】
0005935913.tif 000007
【図７】
0005935913.tif 000008
【図８】
0005935913.tif 000009
【図９】
0005935913.tif 000010
【図１０】
0005935913.tif 000011
【図１１】
0005935913.tif 000012
【図１２】
0005935913.tif 000013
【図１３】
0005935913.tif 000014
【図１４】
0005935913.tif 000015
【図１５】
0005935913.tif 000016
【図１６】
0005935913.tif 000017
【図１７】
0005935913.tif 000018
【図１８】
0005935913.tif 000019
【図１９】
0005935913.tif 000020
【図２０】
0005935913.tif 000021
【図２１】
0005935913.tif 000022
【図２２】
0005935913.tif 000023
【図２３】
0005935913.tif 000024
【図２４】
0005935913.tif 000025
【図２５】
0005935913.tif 000026
【図２６】
0005935913.tif 000027
【図２７】
0005935913.tif 000028
【図２８】
0005935913.tif 000029
【図２９】
0005935913.tif 000030
【図３０】
0005935913.tif 000031