(57)【要約】【課題】計算速度とメモリの利用効率を低下させることなく、ネクストポップの検索速度を向上させる。【解決手段】ネクストホップ検索装置１００の経路情報取得部１１１は、ネットワークのツリー構造を各ノード毎のノード情報として表した経路情報を取得する。そして、深さ優先探索部１１２は、各ノードの下流側隣接ノードを優先的に探索する深さ優先探索を行い、ツリー構造を形成する各ノードの処理順序を決定する。そして、ネクストホップ決定部は、決定された処理順序に従いノードを選択し、その選択したノードの親ノードがツリーの起点となるノードか否かを判定し、親ノードであれば、ネクストホップ記録用変数に選択したノードを記憶し、親ノードでなければ、ネクストホップ記録用変数に、選択したノードを記憶せずに、そのネクストホップ記録用変数に記憶した選択したノードをネクストホップとして決定する。【選択図】図１
2011103625.tif 000002
【特許請求の範囲】
【請求項１】
複数のノード間の経路計算を行い経路情報を生成する経路計算装置と接続され、前記経路計算装置から前記経路情報を取得し、データの宛先に対する起点となるノードの次の転送先となるノードであるネクストホップを検索し、前記データを宛先へ転送する前記起点となるノードであるデータ転送装置に前記検索したネクストホップの識別情報を出力するネクストホップ検索装置であって、
前記ネクストホップに関する情報が記憶される記憶手段、前記経路計算装置および前記データ転送装置の間で情報の送受信を行う通信手段、および制御手段を備えており、
前記制御手段は、
前記経路計算装置から、前記複数のノード間の経路情報として示されるツリー構造を、各ノードを一意に識別するノード識別情報と前記ノード識別情報で示される自己のノードに隣接する隣接ノードとからなるノード毎のノード情報として取得する経路情報取得部と、
前記取得したノード毎のノード情報を用いて、前記ツリー構造で示された起点ノードの下流側の隣接ノードを抽出し、前記抽出したノードのさらに下流側の隣接ノードを抽出する処理を繰り返し、前記下流側の隣接ノードがなくなると1つずつ上流側に戻って、前記抽出した下流側の隣接ノードとは別の下流側の隣接ノードを抽出することを続けることにより、前記ツリー構造で示されたノードを走査する順番を決定する深さ優先探索を行う深さ優先探索部と、
前記深さ優先探索部が決定した順番に従って前記ノードを選択し、前記選択したノードが前記ツリー構造で示された起点ノードの下流側の隣接ノードである子ノードか否かを判定し、前記選択したノードが当該子ノードであれば、前記選択したノードを、前記ネクストホップとなるノードを記憶するための変数であるネクストホップ記録用変数として前記記憶手段に格納し、前記選択したノードが当該子ノードでなければ、前記ネクストホップ記録用変数に前記選択したノードを格納せずに、
前記ネクストホップ記録用変数に格納された前記ノードを、前記選択したノードの前記ネクストホップとして決定し、前記決定したネクストホップの識別情報を前記通信手段を介して、前記データ転送装置に出力するネクストホップ決定部と、
を備えることを特徴とするネクストホップ検索装置。
【請求項２】
前記経路情報は、前記自己のノードの隣接ノードとして、前記自己のノードの下流側の隣接ノードである子ノードを用いて前記ツリー構造を記載したノード情報であり、
前記深さ優先探索部は、当該ノード情報に記載された当該子ノードの情報を用いて、前記深さ優先探索を行うこと
を特徴とする請求項１に記載のネクストホップ検索装置。
【請求項３】
前記経路情報は、前記自己のノードの隣接ノードとして、前記自己のノードの上流側の隣接ノードである親ノードを用いて前記ツリー構造を記載したノード情報であり、
前記経路計算装置により、前記深さ優先探索順に前記自己のノードの次に走査するノードの情報を含めたノード情報が生成される場合に、
前記経路情報取得部は、前記経路計算装置から、前記自己のノードの次に走査するノードの情報を含めた当該ノード情報を取得し、
前記深さ優先探索部は、当該ノード情報を用いて前記ノードを走査する順番を決定すること
を特徴とする請求項１に記載のネクストホップ検索装置。
【請求項４】
前記経路情報は、前記自己のノードの隣接ノードとして、前記自己のノードの上流側の隣接ノードである親ノードを用いて前記ツリー構造を記載したノード情報であり、
前記経路計算装置により、前記ノード毎の当該ノード情報を前記深さ優先探索順に配列した配列情報として前記経路情報が生成される場合に、
前記経路情報取得部は、前記経路計算装置から、当該経路情報を取得し、
前記深さ優先探索部は、当該経路情報を用いて前記ノードを走査する順番を決定すること
を特徴とする請求項１に記載のネクストホップ検索装置。
【請求項５】
複数のノード間の経路計算を行い経路情報を生成する経路計算装置と接続され、前記経路計算装置から前記経路情報を取得し、データの宛先に対する起点となるノードの次の転送先となるノードであるネクストホップを検索し、前記データを宛先へ転送する前記起点となるノードであるデータ転送装置に前記検索したネクストホップの識別情報を出力するネクストホップ検索装置に用いられるネクストホップ検索方法であって、
前記ネクストホップ検索装置は、前記ネクストホップに関する情報が記憶される記憶手段、前記経路計算装置および前記データ転送装置の間で情報の送受信を行う通信手段、および制御手段を備えており、
前記制御手段は、
前記経路計算装置から、前記複数のノード間の経路情報として示されるツリー構造を、各ノードを一意に識別するノード識別情報と前記ノード識別情報で示される自己のノードに隣接する隣接ノードとからなるノード毎のノード情報として取得するステップと、
前記取得したノード毎のノード情報を用いて、前記ツリー構造で示された起点ノードの下流側の隣接ノードを抽出し、前記抽出したノードのさらに下流側の隣接ノードを抽出する処理を繰り返し、前記下流側の隣接ノードがなくなると１つずつ上流側に戻って、前記抽出した下流側の隣接ノードとは別の下流側の隣接ノードを抽出することを続けることにより、前記ツリー構造で示されたノードを走査する順番を決定する深さ優先探索を行うステップと、
前記深さ優先探索部が決定した順番に従って前記ノードを選択し、前記選択したノードが前記ツリー構造で示された起点ノードの下流側の隣接ノードである子ノードか否かを判定し、前記選択したノードが当該子ノードであれば、前記選択したノードを、前記ネクストホップとなるノードを記憶するための変数であるネクストホップ記録用変数として前記記憶手段に格納し、前記選択したノードが当該子ノードでなければ、前記ネクストホップ記録用変数に前記選択したノードを格納せずに、
前記ネクストホップ記録用変数に格納された前記ノードを、前記選択したノードの前記ネクストホップとして決定するステップと、
前記決定したネクストホップの識別情報を前記通信手段を介して、前記データ転送装置に出力するステップと、
を実行することを特徴とするネクストホップ検索方法。
【請求項６】
前記経路情報は、前記自己のノードの隣接ノードとして、前記自己のノードの下流側の隣接ノードである子ノードを用いて前記ツリー構造を記載したノード情報であり、
前記ネクストホップ検索装置は、当該ノード情報に記載された当該子ノードの情報を用いて、前記深さ優先探索を行うステップを実行することを特徴とする請求項５に記載のネクストホップ検索方法。
【請求項７】
前記経路情報は、前記自己のノードの隣接ノードとして、前記自己のノードの上流側の隣接ノードである親ノードを用いて前記ツリー構造を記載したノード情報であり、
前記経路計算装置により、前記深さ優先探索順に前記自己のノードの次に走査するノードの情報を含めたノード情報が生成される場合に、
前記ネクストホップ検索装置は、前記経路計算装置から、前記自己のノードの次に走査するノードの情報を含めた当該ノード情報を取得するステップと、
当該ノード情報を用いて前記ノードを走査する順番を決定するステップと、
を実行することを特徴とする請求項５に記載のネクストホップ検索方法。
【請求項８】
前記経路情報は、前記自己のノードの隣接ノードとして、前記自己のノードの上流側の隣接ノードである親ノードを用いて前記ツリー構造を記載したノード情報であり、
前記経路計算装置により、前記ノード毎の当該ノード情報を前記深さ優先探索順に配列した配列情報として前記経路情報が生成される場合に、
前記ネクストホップ検索装置は、前記経路計算装置から、当該経路情報を取得するステップと、
当該経路情報を用いて前記ノードを走査する順番を決定するステップと、
を実行することを特徴とする請求項５に記載のネクストホップ検索方法。
【請求項９】
請求項５ないし請求項８のいずれか１項に記載のネクストホップ検索方法をコンピュータに実行させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、経路情報からデータの宛先に対するネクストホップを検索する、ネクストホップ検索装置、ネクストホップ検索方法およびプログラムに関する。
【背景技術】
【０００２】
コンピュータネットワークでは、データを転送する際、途中に設けられたデータ転送装置（ノード）において、データの宛先に基づき次の転送先にデータを転送する処理が生じる。このとき、データの宛先から次の転送先を検索する処理が存在する。この処理を行うためには、宛先に対する次の転送先を示す情報を作成する必要がある。この情報は、ネットワークのトポロジ情報をもとにデータ転送経路を計算し、その情報から各宛先に対する次の転送先を検索することにより得られる。なお、この次の転送先をネクストホップとよぶ。
【０００３】
データ転送経路を計算するアルゴリズムのうち代表的なものとして、２ノード間の最短経路を計算するダイクストラ法を用いたアルゴリズムがある。このアルゴリズムは、起点ノードが同じ経路を一度に計算できるという特徴をもつ。よって、このアルゴリズムを用いることで、あるノードを起点とし、その他のノードへと到達する複数の経路を一度に計算することができる。
【０００４】
そして、このダイクストラ法を用いた従来の経路計算方法では、計算結果を、リスト構造を用いて、ノードペア毎の経路情報として管理していた。この方式では、宛先に対する起点ノードの隣にあるノード（隣接ノード）の情報を、経路をすべてたどらずに検索することが可能であった。
【０００５】
ただし、この従来の経路計算方法においては、起点となるデータ転送装置（起点ノード）を順次変えてすべてのノードを起点とした経路である最短木（ＳＰＴ：Shortest Path Tree）を計算するため、制御するデータ転送装置の数が増加すると経路計算時間も増加してしまうという問題があった。そこで、ある起点のノードの経路計算結果を他のノードの計算に再利用して計算時間を短縮する方式が提案されている（非特許文献１参照）。
【０００６】
この方式によれば、例えば、図８（ａ）で示した物理トポロジで示されるネットワークにおいて、最初に計算する起点ノード（ノード０）の経路である最短木はダイクストラで計算する（図８（ｂ）参照）。そして、その最短木の下流方向に対しては、最短ツリー構成を保存しておき、以降で計算する起点ノードに、保存される最短ツリー構成をそのまま利用することで計算量を減らし高速化を図る。つまり、図８（ｂ）において、起点ノード０に隣接するノードのうち、ツリーの下流のノード数が多いノード２を次に計算する起点として選択し、計算済みの部分経路（図８（ｂ）のドットで示した経路）を利用することにより、計算量を減らすことができる（図８（ｃ）参照）。
【先行技術文献】
【非特許文献】
【０００７】
【非特許文献１】杉園  幸司他、“機能分散型トランスポートネットワーキングにおける経路計算の高速化に関する検討”、電子情報通信学会総合大会、2009年3月、B-6-132
【発明の概要】
【発明が解決しようとする課題】
【０００８】
前記したように、従来の経路計算方法では、その計算結果としての経路情報を、どのノード（データ転送装置）を経由する経路かを示すリスト構造を用いてノードペア毎に管理していた。この方式では、宛先に対する起点の隣にあるノードの情報は、データを転送する経路上にあるデータ転送装置として示されているため、経路をすべてたどる必要なく検索することが可能であった。
【０００９】
しかし、非特許文献１に記載されたアルゴリズムを用いて、計算済みの部分経路を使用するときに、経路情報を、データを転送するすべてのノードを示したリスト構造で記載すると、部分経路のコピー処理に時間がかかってしまう。これは、経路情報から部分経路の起点を検索し、使用する部分をコピーする処理が発生するためである。このようなアルゴリズムの場合、経路情報はツリー構造で記載することにより計算効率を高めることができる。ただし、ツリー構造で経路情報を記載する場合、宛先となるノードと、そのデータを転送するノードの検索が、ツリー構造を探索することでしか行うことができず、あるデータの宛先のノードに対して、起点ノードの隣に位置する転送先となるノード（ネクストホップ）の情報が、経路のすべてを走査しないとわからなかった。例えば、前記した図８（ｂ）において、起点ノード（ノード０）から、宛先ノード（ノード６）にデータを転送しようとする場合、起点ノードとなるノード０は、ネクストホップの候補が自身の隣に位置するノード１，７，２のどれかはわかっても、実際にどのノードをネクストホップとすべきかの情報を有してない。したがって、経路の走査を順次行って、ノード６への経路を確定した上で、ネクストホップとしてノード２を決定しなれればならない。このような処理を行う必要があることにより、計算速度とメモリの利用効率が低下するという問題があった。
【００１０】
このような背景に鑑みて本発明がなされたのであり、本発明は、計算速度とメモリの利用効率を低下させることなく、ネクストホップの検索速度を向上させることができる、ネクストホップ検索装置、ネクストホップ検索方法およびプログラムを提供することを目的とする。
【課題を解決するための手段】
【００１１】
前記課題を解決するため、請求項１に記載の発明は、複数のノード間の経路計算を行い経路情報を生成する経路計算装置と接続され、前記経路計算装置から前記経路情報を取得し、データの宛先に対する起点となるノードの次の転送先となるノードであるネクストホップを検索し、前記データを宛先へ転送する前記起点となるノードであるデータ転送装置に前記検索したネクストホップの識別情報を出力するネクストホップ検索装置であって、前記ネクストホップに関する情報が記憶される記憶手段、前記経路計算装置および前記データ転送装置の間で情報の送受信を行う通信手段、および制御手段を備えており、前記制御手段が、前記経路計算装置から、前記複数のノード間の経路情報として示されるツリー構造を、各ノードを一意に識別するノード識別情報と前記ノード識別情報で示される自己のノードに隣接する隣接ノードとからなるノード毎のノード情報として取得する経路情報取得部と、前記取得したノード毎のノード情報を用いて、前記ツリー構造で示された起点ノードの下流側の隣接ノードを抽出し、前記抽出したノードのさらに下流側の隣接ノードを抽出する処理を繰り返し、前記下流側の隣接ノードがなくなると1つずつ上流側に戻って、前記抽出した下流側の隣接ノードとは別の下流側の隣接ノードを抽出することを続けることにより、前記ツリー構造で示されたノードを走査する順番を決定する深さ優先探索を行う深さ優先探索部と、前記深さ優先探索部が決定した順番に従って前記ノードを選択し、前記選択したノードが前記ツリー構造で示された起点ノードの下流側の隣接ノードである子ノードか否かを判定し、前記選択したノードが当該子ノードであれば、前記選択したノードを、前記ネクストホップとなるノードを記憶するための変数であるネクストホップ記録用変数として前記記憶手段に格納し、前記選択したノードが当該子ノードでなければ、前記ネクストホップ記録用変数に前記選択したノードを格納せずに、前記ネクストホップ記録用変数に格納された前記ノードを、前記選択したノードの前記ネクストホップとして決定し、前記決定したネクストホップの識別情報を前記通信手段を介して、前記データ転送装置に出力するネクストホップ決定部と、を備えることを特徴とするネクストホップ検索装置とした。
【００１２】
また、請求項５に記載の発明は、複数のノード間の経路計算を行い経路情報を生成する経路計算装置と接続され、前記経路計算装置から前記経路情報を取得し、データの宛先に対する起点となるノードの次の転送先となるノードであるネクストホップを検索し、前記データを宛先へ転送する前記起点となるノードであるデータ転送装置に前記検索したネクストホップの識別情報を出力するネクストホップ検索装置に用いられるネクストホップ検索方法であって、前記ネクストホップ検索装置が、前記ネクストホップに関する情報が記憶される記憶手段、前記経路計算装置および前記データ転送装置の間で情報の送受信を行う通信手段、および制御手段を備えており、前記制御手段が、前記経路計算装置から、前記複数のノード間の経路情報として示されるツリー構造を、各ノードを一意に識別するノード識別情報と前記ノード識別情報で示される自己のノードに隣接する隣接ノードとからなるノード毎のノード情報として取得するステップと、前記取得したノード毎のノード情報を用いて、前記ツリー構造で示された起点ノードの下流側の隣接ノードを抽出し、前記抽出したノードのさらに下流側の隣接ノードを抽出する処理を繰り返し、前記下流側の隣接ノードがなくなると１つずつ上流側に戻って、前記抽出した下流側の隣接ノードとは別の下流側の隣接ノードを抽出することを続けることにより、前記ツリー構造で示されたノードを走査する順番を決定する深さ優先探索を行うステップと、前記深さ優先探索部が決定した順番に従って前記ノードを選択し、前記選択したノードが前記ツリー構造で示された起点ノードの下流側の隣接ノードである子ノードか否かを判定し、前記選択したノードが当該子ノードであれば、前記選択したノードを、前記ネクストホップとなるノードを記憶するための変数であるネクストホップ記録用変数として前記記憶手段に格納し、前記選択したノードが当該子ノードでなければ、前記ネクストホップ記録用変数に前記選択したノードを格納せずに、前記ネクストホップ記録用変数に格納された前記ノードを、前記選択したノードの前記ネクストホップとして決定するステップと、前記決定したネクストホップの識別情報を前記通信手段を介して、前記データ転送装置に出力するステップと、を実行することを特徴とするネクストホップ検索方法とした。
【００１３】
このようにすることで、経路計算装置から、複数のノード間の経路情報として示されるツリー構造を、各ノード毎に、自己のノード識別情報と隣接ノードとからなるノード情報として取得する。そして、このノード情報を用いて、深さ優先探索を行い、ツリー構造で示されたノードを走査する順番を決定する。次に、決定した深さ優先順に従いノードを選択し、選択したノードがツリー構造で示された起点ノードの子ノードか否かを判定する。そして、子ノードであれば、その選択したノードをネクストホップ記憶用変数として記憶手段に格納し、子ノードでなければ、その選択したノードをネクストホップ記録用変数に格納せずに、ネクストホップ記録用変数に格納されたノードを、ネクストホップとして決定する。そして、決定したネクストホップに関する情報をデータ転送装置へ出力する。
【００１４】
よって、本発明によれば、ツリー構造で経路情報を記載した場合においても、経路のすべてを走査することなく、宛先に対する起点の隣に位置する転送先となるノード（ネクストホップ）を決定することができる。従って、経路のすべてを走査する場合に比べ、計算速度とメモリの利用効率を低下させることなく、ネクストホップの検索速度を向上させることができる。
【００１５】
請求項２に記載の発明は、前記経路情報が、前記自己のノードの隣接ノードとして、前記自己のノードの下流側の隣接ノードである子ノードを用いて前記ツリー構造を記載したノード情報であり、前記深さ優先探索部が、当該ノード情報に記載された当該子ノードの情報を用いて、前記深さ優先探索を行うことを特徴とする請求項１に記載のネクストホップ検索装置とした。
【００１６】
また、請求項６に記載の発明は、前記経路情報は、前記自己のノードの隣接ノードとして、前記自己のノードの下流側の隣接ノードである子ノードを用いて前記ツリー構造を記載したノード情報であり、前記ネクストホップ検索装置が、当該ノード情報に記載された当該子ノードの情報を用いて、前記深さ優先探索を行うステップを実行することを特徴とする請求項５に記載のネクストホップ検索方法とした。
【００１７】
よって、本発明によれば、ノード情報として、自己のノードの隣接ノードに子ノードの情報を用いることができる。そして、その子ノードの情報により、深さ優先探索を行うことができる。
【００１８】
請求項３に記載の発明は、前記経路情報が、前記自己のノードの隣接ノードとして、前記自己のノードの上流側の隣接ノードである親ノードを用いて前記ツリー構造を記載したノード情報であり、前記経路計算装置により、前記深さ優先探索順に前記自己のノードの次に走査するノードの情報を含めたノード情報が生成される場合に、前記経路情報取得部が、前記経路計算装置から、前記自己のノードの次に走査するノードの情報を含めた当該ノード情報を取得し、前記深さ優先探索部が、当該ノード情報を用いて前記ノードを走査する順番を決定することを特徴とする請求項１に記載のネクストホップ検索装置とした。
【００１９】
また、請求項７に記載の発明は、前記経路情報が、前記自己のノードの隣接ノードとして、前記自己のノードの上流側の隣接ノードである親ノードを用いて前記ツリー構造を記載したノード情報であり、前記経路計算装置により、前記深さ優先探索順に前記自己のノードの次に走査するノードの情報を含めたノード情報が生成される場合に、前記ネクストホップ検索装置が、前記経路計算装置から、前記自己のノードの次に走査するノードの情報を含めた当該ノード情報を取得するステップと、当該ノード情報を用いて前記ノードを走査する順番を決定するステップと、を実行することを特徴とする請求項５に記載のネクストホップ検索方法とした。
【００２０】
よって、本発明によれば、ノード情報として、自己のノードの隣接ノードに親ノードの情報を用いることができる。そして、経路計算装置から取得した自己のノードの次に走査するノードに関する情報により深さ優先探索を行い、ノード情報の親ノードに関する情報を用いて、ネクストホップを検索することができる。
【００２１】
請求項４に記載の発明は、前記経路情報が、前記自己のノードの隣接ノードとして、前記自己のノードの上流側の隣接ノードである親ノードを用いて前記ツリー構造を記載したノード情報であり、前記経路計算装置により、前記ノード毎の当該ノード情報を前記深さ優先探索順に配列した配列情報として前記経路情報が生成される場合に、前記経路情報取得部が、前記経路計算装置から、当該経路情報を取得し、前記深さ優先探索部が、当該経路情報を用いて前記ノードを走査する順番を決定することを特徴とする請求項１に記載のネクストホップ検索装置とした。
【００２２】
また、請求項８に記載の発明は、前記経路情報が、前記自己のノードの隣接ノードとして、前記自己のノードの上流側の隣接ノードである親ノードを用いて前記ツリー構造を記載したノード情報であり、前記経路計算装置により、前記ノード毎の当該ノード情報を前記深さ優先探索順に配列した配列情報として前記経路情報が生成される場合に、前記ネクストホップ検索装置が、前記経路計算装置から、当該経路情報を取得するステップと、当該経路情報を用いて前記ノードを走査する順番を決定するステップと、を実行することを特徴とする請求項５に記載のネクストホップ検索方法とした。
【００２３】
よって、本発明によれば、ノード情報として、自己のノードの隣接ノードに親ノードの情報を用いることができる。そして、深さ優先順を配列情報として示した配列位置の情報により、深さ優先探索を行い、ノード情報の親ノードに関する情報を用いて、ネクストホップを検索することができる。
【００２４】
請求項９に記載の発明は、請求項５ないし請求項８のいずれか１項に記載のネクストホップ検索方法をコンピュータに実行させるためのプログラムとした。
【００２５】
このようなプルグラムによれば、請求項５ないし請求項８のいずれか１項に記載のネクストホップ検索方法を一般的なコンピュータで実現することができる。
【発明の効果】
【００２６】
本発明によれば、計算速度とメモリの利用効率を低下させることなく、ネクストポップの検索速度を向上させることができる、ネクストホップ検索装置、ネクストホップ検索方法およびプログラムを提供することができる。
【図面の簡単な説明】
【００２７】
【図１】本実施形態に係るネクストホップ検索装置を含むネクストホップ検索システムの構成例を示す機能ブロック図である。
【図２】本実施形態に係る経路計算装置の経路計算部により計算される経路情報をツリー構造で表した図である。
【図３】本実施形態に係るノード情報において、子ノードを用いてツリー構造を表現する図である。
【図４】本実施形態に係る深さ優先探索部が行う深さ優先探索を説明するための図である。
【図５】本実施形態に係るネクストホップ検索装置が行うネクストホップ検索処理の流れを示すフローチャートである。
【図６】本実施形態に係るネクストホップ検索処理の具体例を説明するための図である。
【図７】本実施形態の変形例に係るノード情報において、親ノードを用いてツリー構造を表現する図である。
【図８】計算済みの部分経路を用いて経路計算する方法を説明するための図である。
【発明を実施するための形態】
【００２８】
次に、本発明を実施するための形態（「実施形態」という）について、適宜図面を参照しながら詳細に説明する。
【００２９】
本実施形態に係るネクストホップ検索装置、ネクストホップ検索方法およびプログラムは、ツリー構造で表現されたネットワークの経路情報を用いて、その起点となるノードのネクストホップ（次の転送先となるノード）に関する情報を検索するものである。
【００３０】
図１は、本実施形態に係るネクストホップ検索装置１００を含むネクストホップ検索システム１の構成例を示す機能ブロック図である。
【００３１】
ネクストホップ検索システム１は、ネットワークのトポロジ情報（各ノード間の接続状況等を示す情報）を取得し、各ノード間の経路計算を行う経路計算装置２００と、経路計算装置２００から経路情報を受け取り、データの宛先に対する起点となるノードの次の転送先となるノードであるネクストホップを検索するネクストホップ検索装置１００と、経路計算装置２００から取得した経路情報およびネクストホップ検索装置１００から取得した各ノード毎のネクストホップに関する情報（後記するネクストホップ情報）をもとに、データを転送するデータ転送装置３００とを含んで構成される。
【００３２】
＜経路計算装置＞
経路計算装置２００は、コンピュータ装置であり、制御手段２１０、記憶手段２２０、通信手段２３０、入力手段２４０および出力手段２５０を備えて構成される。制御手段２１０は、例えばＣＰＵ（Central Processing Unit）とメモリによって構成され、トポロジ情報取得部２１１および経路計算部２１２を備えている。
【００３３】
トポロジ情報取得部２１１は、ネットワーク内の各ノード間の接続関係を示す情報であるトポロジ情報を、不図示のネットワーク情報管理サーバ等から通信手段２３０または入力手段２４０を介して取得し、記憶手段２２０に記憶する。また、トポロジ情報取得部２１１は、経路計算時に、計算対象となるネットワークのトポロジ情報を記憶手段２２０から取得し、経路計算部２１２に引き渡す。
【００３４】
また、経路計算部２１２は、トポロジ情報取得部２１１から受け取ったトポロジ情報に基づき、各ノード間の経路計算を行う。この経路計算は、前記した非特許文献１に記載の技術のように、ダイクストラ法や、計算済みの部分経路を用いた経路計算方法により行われる。そして、経路計算部２１２が計算した経路情報は、ツリー構造を各ノード毎のノード情報（後記する図３、図７参照）として表し、記憶手段２２０に記録される。
【００３５】
図２は、本実施形態に係る経路計算装置２００の経路計算部２１２により計算される経路情報をツリー構造で表した図である。図２に示すツリー構造は、ノードｓを起点とする経路情報を表している。このツリーにおける各ノードは、経路が通過する転送ノードであるか、経路の終点となるノードであることを示している。そして、このノード間を結ぶ経路は、起点から終点に線をたどることで検索することが可能となる。
【００３６】
例えば、ノードｓからノードＸまで結ぶ経路について説明する。ツリーをノードｓからノードＸまでたどると、途中のノードＡ，Ｂ，Ｃを順に経由する。これにより、ノードｓからノードＸまで結ぶ経路は、ノードｓ→ノードＡ→ノードＢ→ノードＣ→ノードＸであることがわかる。他のノードまでの経路も、例えば、ノードｓからノードＣまで結ぶ経路は、ノードｓ→ノードＡ→ノードＢ→ノードＣとなる。
【００３７】
図１に戻り、記憶手段２２０は、ＨＤＤ（Hard Disk Drive）等から構成され、トポロジ情報取得部２１１が取得した計算対象となるネットワークのトポロジ情報や、経路計算部２１２が計算した経路情報等が記憶される。
【００３８】
通信手段２３０は、ネクストホップ検索装置１００やデータ転送装置３００と通信するための通信インタフェースや通信ポートから構成される。
【００３９】
入力手段２４０は、経路計算装置２００を操作する管理者が情報を入力する手段であり、例えば、キーボードやマウス等から構成される。
【００４０】
出力手段２５０は、各種情報を出力する手段であり、例えば、液晶ディスプレイやスピーカ等から構成される。
【００４１】
＜ネクストホップ検索装置＞
次に、ネクストホップ検索装置１００について説明する。ネクストホップ検索装置１００は、経路計算装置２００から取得した経路情報に基づき、各ノード毎にデータの宛先に対するネクストホップを計算する装置であり、制御手段１１０、記憶手段１２０、通信手段１３０、入力手段１４０、および出力手段１５０を備えて構成される。ここで、前記した経路計算装置２００と、同様の機能を有する通信手段１３０、入力手段１４０、および出力手段１５０については、同じ名称を付し説明を省略する。
【００４２】
制御手段１１０は、例えばＣＰＵとメモリによって構成され、経路情報取得部１１１、深さ優先探索部１１２、およびネクストホップ決定部１１３を備えている。
【００４３】
経路情報取得部１１１は、経路計算装置２００の経路計算部２１２が計算した経路情報を取得する。ここで経路情報取得部１１１が取得する経路情報について説明する。
【００４４】
経路情報取得部１１１が取得する経路情報は、ツリー構造を各ノード毎のノード情報として表現したものである。そしてそのノード情報は、各ノードを一意に識別するノード識別情報と、自己のノードに隣接する他のノードに関する情報とを含んで構成される。具体的には、以下の２つの方法により、ツリー構造が表現される。
【００４５】
図２に示すように、あるノード（例えば、ノードＡ）に着目したとき、隣接するノードは、経路の上流側のノード（例えば、ノードｓ）と、下流側のノード（例えば、ノードＢ等）に分けられる。以下において、この上流側隣接ノードを親ノード、下流側隣接ノードを子ノードとよぶ。この親ノードと子ノードのそれぞれを用いてツリー構造を表現する方法がある。
【００４６】
まず、各ノード毎のノード情報として子ノードを記載することにより、ツリー構造を表現する方法について説明する。図３は、本実施形態に係るノード情報において、子ノードを用いてツリー構造を表現する図である。
【００４７】
図３に示すように、例えば、ノード２のノード情報には、自己のノードについてのノード識別情報「２」と、子ノードのノード識別情報「３，４」とが記載される。このように、自己のノードのノード識別情報と、子ノードのノード識別情報とをノード情報に含めることで、ツリー構造を表現することが可能となる。一方、自己のノードのノード識別情報と、親ノードのノード識別情報とをノード情報に含めることとで、ツリー構造を表現することができるが、詳細は後記する本実施形態の変形例、具体的には図７において説明する。
【００４８】
経路情報取得部１１１は、このように各ノード毎の子ノードの情報を含むノード情報を、経路計算装置２００の経路計算部２１２から、経路情報として取得する。
【００４９】
図１に戻り、ネクストホップ検索装置１００の深さ優先探索部１１２は、ツリー構造で示された各ノード毎のノード情報を用いて、深さ優先順にノードを走査する順番を決定する。
【００５０】
図４は、本実施形態に係る深さ優先探索部１１２が行う深さ優先探索を説明するための図である。深さ優先探索部１１２は、各ノードのノード情報に記載された子ノードの情報を用いて、深さ優先探索を行う。この深さ優先探索とは、図４に示すように、あるノードを走査した後、次に走査するノードとして、走査中のノードの下流側隣接ノード（子ノード）が存在すれば先に走査し、子ノードがなくなれば、上流側に戻って、上流側における別の下流側隣接ノード（子ノード）を走査する、という順でノードの探索をすることをいう。深さ優先探索部１１２は、ノード情報に記載された子ノードの情報に基づき、ツリーを構成するノードを走査する深さ優先順の順番を決定する。
【００５１】
図１に戻り、ネクストホップ決定部１１３は、深さ優先探索部１１２が決定したノード順に、そのノードを宛先として、その宛先の起点となるノードの次に転送先となるノードであるネクストホップを決定する。
【００５２】
具体的には、まず、ネクストホップ決定部１１３は、深さ優先探索部１１２が深さ優先順に選択したノードについて、その選択したノードの親ノードがツリーの起点となるノードか否かを判定する。つまり、深さ優先順に選択したノードが、ツリーの起点となるノードの子ノードか否かを判定する。ここで、選択したノードの親ノードが、ツリーの起点となるノードであれば、ネクストホップ決定部１１３は、選択したノードのノード識別情報を、ネクストホップとなるノードを記憶するために用意した変数であるネクストホップ記録用変数に記憶する。一方、選択したノードの親ノードが、ツリーの起点となるノードでない場合は、ネクストホップ決定部１１３は、ネクストホップ記録用変数への記憶を行わない。そして、ネクストホップ決定部１１３は、ネクストホップ記録用変数に記憶されているノード識別情報を、その選択したノードにデータを送るためのネクストホップ情報として記憶する。このネクストホップ決定部１１３による処理の詳細は、後記する図５および図６において説明する。
【００５３】
なお、このネクストホップ記録用変数は、記憶手段１２０の記憶領域に予め設けられるものである。
【００５４】
ネクストホップ決定部１１３は、ツリー構造を形成するすべてのノードについて、深さ優先順にネクストホップを決定すると、そのノード毎のネクストホップ情報を、通信手段１３０を介して、データ転送装置３００へ送信する。
【００５５】
次に、記憶手段１２０は、ＨＤＤ等から構成され、経路計算装置２００から取得した経路情報や、ネクストホップ決定部１１３が生成した各ノードのネクストホップに関するネクストホップ情報を記録する。また、記憶手段１２０は、ネクストホップ決定部１１３がネクストホップを決定するために用いる、ネクストホップ記録用変数を記憶する。
【００５６】
＜データ転送装置＞
次に、データ転送装置３００について説明する。データ転送装置３００は、経路計算装置２００から取得する経路情報と、ネクストホップ検索装置１００から取得するネクストホップ情報とを記憶し、他のデータ転送装置３００から受信したデータ（パケット等）を別のデータ転送装置３００に転送する。
【００５７】
データ転送装置３００は、ルータ等のコンピュータ装置であり、制御手段３１０、記憶手段３２０、通信手段３３０、入力手段３４０、および出力手段３５０を備えて構成される。ここで、前記した経路計算装置２００と、同様の機能を有する通信手段３３０、入力手段３４０、および出力手段３５０については、同じ名称を付し説明を省略する。
【００５８】
制御手段３１０は、例えばＣＰＵとメモリによって構成され、経路情報制御部３１１およびデータ転送部３１２を備えている。経路情報制御部３１１は、記憶手段３２０に記憶された経路情報およびネクストホップ情報を用いて、データを宛先に送信するための次の転送先を示す転送先情報を作成し、データ転送部３１２が参照できるように記憶手段３２０に記憶させ、管理する。
【００５９】
データ転送部３１２は、転送すべきデータの入力があった場合、記憶手段３２０に記憶されている転送先情報を参照し、そのデータを次のデータ転送装置３００に転送する。
【００６０】
記憶手段３２０は、ＨＤＤ等から構成され、経路計算装置２００から受信した経路情報、ネクストホップ検索装置１００から受信したネクストホップ情報、経路情報制御部３１１が作成した転送先情報等、データ転送に必要な各種情報を記憶する。
【００６１】
＜ネクストホップ検索方法＞
次に本実施形態に係るネクストホップ検索方法について、図１〜図４を参照しつつ、図５および図６を用いて詳細に説明する。
【００６２】
図５は、本実施形態に係るネクストホップ検索装置１００が行うネクストホップ検索処理の流れを示すフローチャートである。
【００６３】
まず、ネクストホップ検索装置１００の経路情報取得部１１１は、経路計算装置２００から経路情報を取得する（ステップＳ１０１）。経路情報取得部１１１は、この経路情報を、図３で示した、子ノードを用いてツリー構造を記載したノード情報として取得する。
【００６４】
次に、深さ優先探索部１１２は、ステップＳ１０１で取得した経路情報を用いて、ツリーに対して深さ優先探索を行う（ステップＳ１０２）。ここで、深さ優先探索部１１２は、経路情報が子ノードを用いてツリー構造を記載したノード情報の場合は、そのノード情報の子ノードの情報に基づき、前記した深さ優先検索を行い、ツリーを構成するノードを走査する順番を決定する（図４参照）。
【００６５】
そして、深さ優先探索部１１２は、深さ優先探索の結果として得た深さ優先順にノードを１つ選択する（ステップＳ１０３）。
【００６６】
続いて、ネクストホップ決定部１１３は、深さ優先順に選択したノードの親ノードがツリーの起点となるノードか否かを判定する（ステップＳ１０４）。つまり、深さ優先順に選択したノードが、ツリーの起点となるノードの子ノードか否かを判定する。ここで、選択したノードの親ノードが、ツリーの起点となるノードであれば（ステップＳ１０４→Ｙｅｓ）、ネクストホップ決定部１１３は、選択したノードのノード識別情報を、ネクストホップとなるノードを記憶するために用意した変数であるネクストホップ記録用変数に記憶する（ステップＳ１０５）。
【００６７】
なお、ここで、経路計算装置２００から得た経路情報が、子ノードを用いてツリー構造を記載したノード情報である場合には、親ノードに関する情報がノード情報に記載されていないため、選択したノードの親ノードが起点ノードであるか否かをノード情報から判定することができない。そこで、子ノードを用いてツリー構造を記載したノード情報の場合は、再帰関数の引数に走査対象となるノードのノード識別情報を挿入することで親ノードの情報を得ることにより、選択したノードの親ノードが起点ノードか否かを判定する。
【００６８】
一方、ステップＳ１０４において、選択したノードの親ノードが、ツリーの起点となるノードでない場合（ステップＳ１０４→Ｎｏ）、ネクストホップ決定部１１３は、ネクストホップ記録用変数への記憶を行わず、次のステップＳ１０６へ進む。
【００６９】
ステップＳ１０６において、ネクストホップ決定部１１３は、ネクストホップ記録用変数に記憶されているノード識別情報を、その選択したノードにデータを送るためのネクストホップ情報として記憶する。
【００７０】
次に、ネクストホップ決定部１１３は、深さ優先順に設定されたすべてのノードの処理を終えたか否かを判定する（ステップＳ１０７）。そして、処理を終えていないノードがあれば（ステップＳ１０７→Ｎｏ）、ステップＳ１０３へ戻り処理を続ける。一方、すべてのノードの処理を終えていれば（ステップＳ１０７→Ｙｅｓ）、次のステップＳ１０８に進む。
【００７１】
ステップＳ１０８において、ネクストホップ決定部１１３は、記憶された各ノードのネクストホップ情報を、データ転送装置３００へ出力して、処理を終える。
【００７２】
なお、ステップＳ１０２において、深さ優先探索部１１２が深さ優先検索を行い、ツリーを構成するすべてのノードについて順番を決定してから、ステップＳ１０３〜Ｓ１０７のループ処理を行うものとして説明した。しかし、この処理以外にも、深さ優先探索部１１２が、まず、１番目に選択するノードを深さ優先探索で決定し、ステップＳ１０４〜Ｓ１０７を処理を終え、次に深さ優先探索で２番目のノードを決定し、ステップＳ１０４〜Ｓ１０７の処理を行うように、順次深さ優先探索を行うようにしてもよい。
【００７３】
次に、図６を用いて、図５に示したネクストホップ検索処理の具体例を説明する。ここでは、図５のステップＳ１０２において、ネクストホップ検索装置１００の深さ優先探索部１１２により、図６に示す矢印のように、ノード１，２，３，４，５，６の順に、深さ優先によるノードの走査順が決定したものとする。
【００７４】
まず、ネクストホップ決定部１１３は、ノード１が、起点となるノードであるので、深さ優先順で次のノードであるノード２を選択する（ステップＳ１０３）。次に、ネクストホップ決定部１１３は、選択したノード２の親ノードがツリーの起点となるノードか否かを判定する（ステップＳ１０４）。ここで、ノード２の親ノードは起点となるノード１であるため、ネクストホップ決定部１１３は、ネクストホップ記録用変数に自身のノード識別情報である「２」を記憶する（ステップＳ１０５）。次に、ネクストホップ決定部１１３は、ネクストホップ記録用変数に記憶されているノード識別情報「２」を、選択したノード２のネクストホップ情報として記憶する（ステップＳ１０６）。
【００７５】
次に、ネクストホップ決定部１１３は、深さ優先順で次のノードであるノード３を選択する（ステップＳ１０３）。そして、ネクストホップ決定部１１３は、選択したノード３の親ノードがツリーの起点となるノードか否かを判定する（ステップＳ１０４）。ここでノード３の親ノードは、起点となるノード１ではないため、（ステップＳ１０４→Ｎｏ）、ネクストホップ決定部１１３は、ネクストホップ記録用変数への記録（ネクストホップ記録用変数の更新）を行わず、ネクストホップ記録用変数に記憶されているノード識別情報「２」を、選択したノード３のネクストホップ情報として記憶する（ステップＳ１０６）。
【００７６】
このように、ネクストホップ決定部１１３が、選択したノードの親ノードがツリーの起点となるノードでない場合に、ネクストホップ記録用変数を記憶しないことにより、起点ノードの下流側隣接ノード（子ノード）として、それ以前に記憶されたネクストホップ記録用変数がそのまま記憶され、選択したノードの下流側のノードのネクストホップを決定することができる。
【００７７】
ノード３と同様に、深さ優先順で次のノードであるノード４についても、ノード４の親ノードが、起点となるノード１ではないため（ステップＳ１０４→Ｎｏ）、ネクストホップ決定部１１３は、ネクストホップ記録用変数への記録を行わず、ネクストホップ記録用変数に記憶されているノード識別情報「２」を、選択したノード４のネクストホップ情報として記憶する（ステップＳ１０６）。また、次のノード５も同様である。
【００７８】
そして、ノード６については、ネクストホップ決定部１１３は、選択したノードの親ノードがツリーの起点となるノード１であるため（ステップＳ１０４→Ｙｅｓ）、選択したノード６の自身のノード識別情報「６」をネクストホップ記録用変数に記憶する（ステップＳ１０５）。そして、ネクストホップ決定部１１３は、ネクストホップ記録用変数に記憶されているノード識別情報「６」を、選択したノード６のネクストホップ情報として記憶する（ステップＳ１０６）。
【００７９】
このようにすることで、ネクストホップ決定部１１３は、ノード２，３，４，５のネクストホップ情報が「２」であると決定し、ノード６のネクストホップ情報が「６」であると決定する。これにより例えば、ノード４を宛先とするデータについて、ノード４のネクストホップ情報が「２」であることから、起点となるノード「１」の次のノードであるネクストホップがノード２であると決定される。
【００８０】
このように、本実施形態に係るネクストホップ検索装置、ネクストホップ検索方法およびプログラムによれば、起点ノードの隣に位置する転送先となるノード（ネクストホップ）を、経路のすべてを走査することなく決定することができる。
【００８１】
（本実施形態の変形例）
次に、本実施形態に係るネクストホップ検索装置１００の変形例について説明する。
前記において説明した、本実施形態に係るネクストホップ検索装置１００の経路情報取得部１１１は、対象となるネットワークの経路情報を、子ノードを用いてツリー構造を記載したノード情報として、経路計算装置２００から取得した。そして、深さ優先探索部１１２が深さ優先探索を行い、各ノードを走査する順番を決定し、その深さ優先順に従い、ネクストホップ決定部１１３が、各ノードのネクストホップ情報を決定した。
【００８２】
一方、本実施形態の変形例においては、ネットワークの経路情報を、親ノードを用いてツリー構造を記載したノード情報として、経路計算装置２００から取得する。親ノードを用いた経路情報としてノード情報を取得すると、深さ優先探索部１１２は、下流側隣接ノード（子ノード）に関する情報を有さず、このままでは、深さ優先探索を実行することはできない。そこで、経路計算装置２００の経路計算部２１２から得る経路情報に、深さ優先順で走査するノード順に関する情報を含めた経路情報を受信し、深さ優先順を決定する。
【００８３】
図７は、本実施形態の変形例に係るノード情報において、親ノードを用いてツリー構造を表現する図である。図７（ａ）は、親ノードを用いたノード情報に、深さ優先順に走査する際に自身のノードの次に走査するノードのノード識別情報を含める例である。図に示すように、経路計算装置２００から取得したノード情報に、「深さ優先順の次のノード」が情報として含まれている。よって、深さ優先探索部１１２は、図４のステップＳ１０２において、自身で深さ優先探索は行わず、ノード情報に含まれる「深さ優先順の次のノード」に関する情報に基づき、走査順を決定する。図７（ａ）において、ノード２の深さ優先順による次の走査対象となるノードは、ノード情報の「深さ優先順の次のノード」に示されるように、ノード３であることがわかる。
【００８４】
また、図７（ｂ）は、ネットワークのツリー構造を、深さ優先順の配列情報として、ノード情報に記憶させた例を示している。この配列情報では、配列の先頭から深さ優先順の配列の位置にノード情報を格納する。例えば、深さ優先順で７番目の配列の位置にあるノード２のノード情報として、自身のノード識別情報「２」と、親ノードのノード識別情報「１」が格納される。よって、深さ優先探索部１１２は、図４のステップＳ１０２において、自身で深さ優先探索は行わず、経路計算装置２００から取得する、深さ優先順の配列情報を含めた経路情報を取得することで、深さ優先順を決定することができる。
【００８５】
このようにすることで、経路計算装置２００からの経路情報が、親ノードを用いてツリー構造を記載したノード情報である場合においても、深さ優先探索部１１２が、経路計算装置２００から取得した経路情報に含まれる深さ優先順に関する情報を用いて、ノードを走査する深さ優先順を決定し、ネクストホップ決定部１１３が、各ノードのネクストホップを決定することができる。
【００８６】
以上のように、本実施形態に係るネクストホップ決定装置、ネクストホップ決定方法およびプログラムによれば、ネットワークをツリー構造で記載する場合においても、宛先への経路をすべて走査することなく、ネクストホップを決定することができるので、計算速度とメモリの利用効率を低下させることなく、ネクストホップの検索速度を向上させることができる。
【００８７】
なお、本実施形態に係るネクストホップ検索システム１においては、経路計算装置２００、ネクストホップ検索装置１００およびデータ転送装置３００は、別々の筐体の装置として説明したが、このうちの２つの装置を１つの筐体の装置としてもよいし、３つの装置を１つの筐体の装置としてもよい。
【符号の説明】
【００８８】
１      ネクストホップ検索システム
１００  ネクストホップ検索装置
１１０，２１０，３１０  制御手段
１１１  経路情報取得部
１１２  深さ優先探索部
１１３  ネクストホップ決定部
１２０，２２０，３２０  記憶手段
１３０，２３０，３３０  通信手段
１４０，２４０，３４０  入力手段
１５０，２５０，３５０  出力手段
２００  経路計算装置
２１１  トポロジ情報取得部
２１２  経路計算部
３００  データ転送装置
３１１  経路情報制御部
３１２  データ転送部
【図１】
2011103625.tif 000003
【図２】
2011103625.tif 000004
【図３】
2011103625.tif 000005
【図４】
2011103625.tif 000006
【図５】
2011103625.tif 000007
【図６】
2011103625.tif 000008
【図７】
2011103625.tif 000009
【図８】
2011103625.tif 000010