(57)【特許請求の範囲】
【請求項１】
パケットを受信すると、受信したパケットのルートを決定するルータ装置において、
パケットの宛先アドレスとルートとの対応関係を表すルーティングエントリが登録されるルーティングテーブルと、
前記ルーティングエントリを用いてすでにルートが決定されたパケットの宛先アドレスとルートとの対応関係を表すキャッシュエントリが登録されるキャッシュテーブルと、
カウンタを備え、前記ルーティングテーブルにルーティングエントリを登録または前記ルーティングテーブルからルーティングエントリを削除すると、前記カウンタのカウント値をインクリメントし、インクリメントされたカウント値を登録または削除されたルーティングエントリに設定する第１の制御部と、
パケットを受信すると、前記パケットの宛先アドレスにヒットするキャッシュエントリがない場合、前記パケットの宛先アドレスにヒットするルーティングエントリのルートを前記パケットのルートに決定して前記キャッシュテーブルにキャッシュエントリを登録するとともに、当該キャッシュエントリのルートの決定に用いられたルーティングエントリのカウント値をキャッシュエントリに設定する第２の制御部とを有し、
前記第２の制御部は、パケットを受信すると、前記パケットの宛先アドレスにヒットするキャッシュエントリがあるが、当該キャッシュエントリのカウント値と当該キャッシュエントリのルートの決定に用いられたルーティングエントリのカウント値とが一致しない場合、当該キャッシュエントリを前記キャッシュテーブルから削除するルータ装置。
【請求項２】
請求項１に記載のルータ装置において、
前記第２の制御部は、パケットを受信すると、前記キャッシュエントリを削除した後、前記パケットの宛先アドレスにヒットするルーティングエントリのルートを前記パケットのルートに決定して前記キャッシュテーブルにキャッシュエントリを登録するとともに、当該キャッシュエントリのルートの決定に用いられたルーティングエントリのカウント値をキャッシュエントリに設定するルータ装置。
【請求項３】
請求項１に記載のルータ装置において、
前記第２の制御部は、パケットを受信すると、前記キャッシュエントリを削除した後、前記パケットの宛先アドレスにヒットするルーティングエントリもない場合、前記パケットを廃棄するルータ装置。
【請求項４】
請求項１から３のいずれか１項に記載のルータ装置において、
前記第２の制御部は、パケットを受信すると、前記パケットの宛先アドレスにヒットするキャッシュエントリがあり、当該キャッシュエントリのカウント値と当該キャッシュエントリのルートの決定に用いられた前記ルーティングエントリのカウント値とが一致する場合、当該キャッシュエントリのルートを前記パケットのルートに決定するルータ装置。
【請求項５】
請求項１から４のいずれか１項に記載のルータ装置において、
前記第２の制御部は、パケットを受信すると、前記パケットの宛先アドレスにヒットするキャッシュエントリおよびルーティングエントリがない場合、前記パケットを廃棄するルータ装置。
【請求項６】
請求項１から５のいずれか１項に記載のルータ装置において、
前記第１の制御部は、前記ルーティングテーブルの管理を行うに際して、前記ルーティングエントリの宛先アドレスを２進数で表して最上位ビットから順番に各ビット位置にて２進木のノードを生成し、生成したノードから分岐させた分岐先に次に生成したノードを配置したツリー構造で管理を行うルータ装置。
【請求項７】
請求項６に記載のルータ装置において、
前記第１の制御部は、前記ルーティングテーブルにルーティングエントリを登録すると、登録されたルーティングエントリだけでなく、当該ルーティングエントリの宛先アドレスと前記ツリー構造上で所定の関係を有する宛先アドレスのルーティングエントリにも前記カウンタのカウント値を設定するルータ装置。
【請求項８】
パケットの宛先アドレスとルートとの対応関係を表すルーティングエントリが登録されるルーティングテーブルと、前記ルーティングエントリを用いてすでにルートが決定されたパケットの宛先アドレスとルートとの対応関係を表すキャッシュエントリが登録されるキャッシュテーブルとを有するルータ装置におけるパケットのルート決定方法において、
前記ルーティングテーブルにルーティングエントリを登録または前記ルーティングテーブルからルーティングエントリを削除すると、所定のカウンタのカウント値をインクリメントし、インクリメントされたカウント値を登録または削除されたルーティングエントリに設定するステップと、
パケットを受信すると、前記パケットの宛先アドレスにヒットするキャッシュエントリがない場合、前記パケットの宛先アドレスにヒットするルーティングエントリのルートを前記パケットのルートに決定して前記キャッシュテーブルにキャッシュエントリを登録するとともに、当該キャッシュエントリのルートの決定に用いられたルーティングエントリのカウント値をキャッシュエントリに設定するステップとを有し、
パケットを受信すると、前記パケットの宛先アドレスにヒットするキャッシュエントリがあるが、当該キャッシュエントリのカウント値と当該キャッシュエントリのルートの決定に用いられたルーティングエントリのカウント値とが一致しない場合、当該キャッシュエントリを前記キャッシュテーブルから削除するステップとを有するルート決定方法。
【請求項９】
請求項８に記載のルート決定方法において、
パケットを受信すると、前記キャッシュエントリを削除した後、前記パケットの宛先アドレスにヒットするルーティングエントリのルートを前記パケットのルートに決定してキャッシュエントリを前記キャッシュテーブルに登録するとともに、当該キャッシュエントリのルートの決定に用いられたルーティングエントリのカウント値を前記キャッシュエントリに設定するステップを有するルート決定方法。
【請求項１０】
請求項８に記載のルート決定方法において、
パケットを受信すると、前記キャッシュエントリを削除した後、前記パケットの宛先アドレスにヒットするルーティングエントリもない場合、前記パケットを廃棄するステップを有するルート決定方法。
【請求項１１】
請求項８から１０のいずれか１項に記載のルート決定方法において、
パケットを受信すると、前記パケットの宛先アドレスにヒットするキャッシュエントリがあり、当該キャッシュエントリのカウント値と当該キャッシュエントリのルートの決定に用いられたルーティングエントリのカウント値とが一致する場合、当該キャッシュエントリのルートを前記パケットのルートに決定するステップを有するルート決定方法。
【請求項１２】
請求項８から１１のいずれか１項に記載のルート決定方法において、
パケットを受信すると、前記パケットの宛先アドレスにヒットするキャッシュエントリおよびルーティングエントリがない場合、前記パケットを廃棄するステップを有するルート決定方法。
【請求項１３】
請求項８から１２のいずれか１項に記載のルート決定方法において、
前記ルーティングテーブルの管理を行うに際して、前記ルーティングエントリの宛先アドレスを２進数で表して最上位ビットから順番に各ビット位置にて２進木のノードを生成し、生成したノードから分岐させた分岐先に次に生成したノードを配置したツリー構造で管理を行うステップを有するルート決定方法。
【請求項１４】
請求項１３に記載のルート決定方法において、
前記ルーティングテーブルにルーティングエントリを登録すると、登録されたルーティングエントリだけでなく、当該ルーティングエントリの宛先アドレスと前記ツリー構造上で所定の関係を有する宛先アドレスのルーティングエントリにも前記カウンタのカウント値を設定するステップを有するルート決定方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、パケットのルートを決定するルータ装置、ルータ装置におけるルート決定方法に関する。
【背景技術】
【０００２】
従来、ルータ装置では、パケットのルートをルーティングテーブルに予め登録し、ルーティングテーブルを検索してパケットのルートを決定している。
【０００３】
ルーティングテーブルの検索方法としては、パケットの宛先ホストアドレスであるＩＰアドレスを検索キーとしてシーケンシャルな検索を行う方法や、２進数で表したＩＰアドレスを２進木のツリー構造で管理し、ツリー検索を行う方法がある。ツリー検索の例としては、トライ、ラディッシュ、パトリシア等がある。
【０００４】
また、ルータ装置では、パケットのＩＰアドレスを基にルーティングテーブルを検索してルートを決定した場合、そのパケットのルートをキャッシュテーブルに登録し、キャッシュテーブルにルートが登録されているパケットについては、以降、キャッシュテーブルを検索してルートを決定している。これにより、ルーティングテーブルの検索を省略することができるため、高速なルートの検索が実現できる。
【０００５】
以下、ルーティングテーブルとキャッシュテーブルを用いる従来のルータ装置について詳細に説明する。
【０００６】
ルーティングテーブルは、パケットの宛先ネットワークアドレスとルートとの対応関係を表すエントリ（ルーティングエントリ）が登録されるテーブルである。
【０００７】
具体的には、表１を参照すると、ルーティングテーブルには、ルーティングエントリごとに、宛先ネットワークアドレス、プレフィックス長、ネクストホップアドレス、送信ＩＦ等が登録される。
【０００８】
【表１】
0004646823.tif 000002
【０００９】
メモリアドレスは、ルーティングエントリの情報が登録されているメモリ領域のメモリアドレスを示している。例えば、宛先ネットワークアドレス“１０．２０．１．０”、プレフィックス長“２４”のルーティングエントリの情報はメモリアドレス“ａ”のメモリ領域に登録されていることを示している。
【００１０】
宛先ネットワークアドレスおよびプレフィックス長は、パケットのルートを表すルート情報を示している。例えば、宛先ネットワークアドレス“１０．２０．１．０”の上位２４ビット部分と一致する宛先ホストアドレスについては、宛先ネットワークアドレス“１０．２０．１．０”、プレフィックス長“２４”のルーティングエントリにヒットしたとみなすことを示している。ヒットしたとみなされたルーティングエントリが複数ある場合は、一致するビット部分のビット長が最も長いものにヒットしたとみなす。この検索方法は、ＬＰＭ（Ｌｏｎｇｅｓｔ  Ｐｒｅｆｉｘ  Ｍａｔｃｈ）と呼ばれている。以降、宛先ネットワークアドレス“１０．２０．１．０”、プレフィックス長“２４”のルーティングエントリは、宛先ネットワークアドレス“１０．２０．１．０／２４”と記述する。
【００１１】
ネクストホップアドレスおよび送信ＩＦもパケットのルートを表すルート情報を示している。例えば、宛先ネットワークアドレス“１０．２０．１．０／２４”のルーティングエントリにヒットしたパケットのルートは、送信ＩＦ“ＩＦ２”を経由したネクストホップアドレス“１０．２０．１．５０”であることを示している。
【００１２】
キャッシュテーブルは、ルーティングテーブルのルーティングエントリを用いてすでにルートが決定されたパケットの宛先アドレスとルートとの対応関係を表すエントリ（キャッシュエントリ）が登録されるテーブルである。
【００１３】
具体的には、表２を参照すると、キャッシュテーブルには、キャッシュエントリごとに、宛先ホストアドレス、ルート情報の登録先等が登録される。
【００１４】
【表２】
0004646823.tif 000003
【００１５】
宛先ホストアドレスは、パケットのパケットプロファイルを示している。例えば、宛先ホストアドレス“１０．２０．１．１”についてはヒットしたとみなすことを示している。
【００１６】
ルーティングエントリへのポインタは、パケットのルートの決定に用いられたルーティングエントリとの関係を示すもので、そのルーティングエントリの情報が登録されているメモリ領域のメモリアドレスを示している。例えば、宛先ホストアドレス“１０．２０．１．１”のキャッシュエントリにヒットするパケットのルートは、メモリアドレス“ｃ”のメモリ領域に登録されていることを示している。
【００１７】
ここで、従来のルータ装置において、パケット受信時に行われるフォワーディング処理について説明する。
【００１８】
ルータ装置は、物理回線からインタフェースを介してパケットを受信すると、まず、パケットのヘッダに付加された宛先ホストアドレスが、キャッシュテーブルのキャッシュエントリのいずれかにヒットするか否かを検索する。
【００１９】
例えば、キャッシュテーブルが表２の状態である時に、宛先ホストアドレス“１０．２０．１．１”を持つパケットを受信した場合、この宛先ホストアドレスにヒットするキャッシュエントリはキャッシュテーブルに存在している。そのため、ルータ装置は、そのキャッシュエントリの情報を基にパケットのルートを決定し、決定したルートにパケットをフォワーディングする。
【００２０】
また、ルーティングテーブルが表１の状態で、キャッシュテーブルが表２の状態である時に、宛先ホストアドレス“１０．１２８．２．１”を持つパケットを受信した場合、この宛先ホストアドレスにヒットするキャッシュエントリはキャッシュテーブルに存在しない。そのため、ルータ装置は、続いて、この宛先ホストアドレスが、ルーティングテーブルのルーティングエントリのいずれかにヒットするか否かを検索する。この宛先ホストアドレスは、表１の最下段の宛先ネットワークアドレス“１０．１２８．２．０／２４”と上位２４ビットが同じであるため、この宛先ネットワークアドレスのルーティングエントリとヒットする。そこで、ルータ装置は、ヒットしたルーティングエントリの情報を基にパケットのルートを決定し、決定したルートにパケットをフォワーディングする。また、ルータ装置は、宛先ホストアドレス“１０．１２８．２．１”とメモリアドレス“ｅ”とを表すキャッシュエントリをキャッシュテーブルに登録する。その結果、キャッシュテーブルは、表３に示すように変更される。
【００２１】
【表３】
0004646823.tif 000004
【００２２】
なお、ルータ装置は、キャッシュテーブルからヒットするキャッシュエントリが検索されず、さらに、ルーティングテーブルからもヒットするルーティングエントリが検索されない場合は、そのパケットを廃棄する。
【００２３】
ところで、ルータ装置では、ルーティングテーブルがルーティングエントリの登録／削除等で変更された場合、キャッシュテーブルからキャッシュエントリを削除することが行われている。
【００２４】
従来のルータ装置では、ルーティングテーブルが変更された場合、下記の（１）、（２）のいずれかの方法でキャッシュテーブルからキャッシュエントリを削除している。
（１）キャッシュテーブルの全キャッシュエントリを削除
（２）キャッシュテーブルの全キャッシュエントリについて、そのキャッシュエントリにヒットする宛先ホストアドレスが、変更したルーティングテーブルのルーティングエントリにヒットするか否かを検索し、検索されたキャッシュエントリのみを削除
しかし、上記の（１）の方法では、キャッシュテーブルから全キャッシュエントリを削除するため、キャッシュエントリを削除する負荷は大きい。
【００２５】
また、（２）の方法では、キャッシュテーブルから一部のキャッシュエントリのみを削除しているものの、キャッシュテーブルの全キャッシュエントリについてルーティングエントリにヒットするか否かを検索して、削除すべきキャッシュエントリを特定する必要があるため、キャッシュエントリを特定する負荷が大きくなってしまうことから、キャッシュエントリを削除する負荷は依然として大きい。
【００２６】
一般に、キャッシュテーブルの容量を大きくすると、キャッシュエントリのヒット率を高めることが可能であるが、キャッシュエントリを削除する負荷が大きい場合、キャッシュテーブルの容量を大きくした分だけキャッシュエントリの削除に要する負荷が大きくなってしまう。他方、キャッシュテーブルの容量を小さくすると、キャッシュエントリのヒット率が低くなってしまう。
【００２７】
そこで、最近、ルーティングテーブルの変更に伴うキャッシュエントリの削除に要する負荷を低減することを目的としたルータ装置が一部で開示されている。
【００２８】
例えば、特許文献１に開示されたルータ装置は、キャッシュテーブルのキャッシュエントリとルーティングテーブルのルーティングエントリとの対応関係を管理するキャッシュ管理部を設け、ルーティングテーブルが変更された場合には、キャッシュ管理部にて管理されている情報を基にして対応関係にあるキャッシュエントリを検索し、そのキャッシュエントリのみを削除することとしている。
【特許文献１】特許第３２３９８３６号明細書
【発明の開示】
【発明が解決しようとする課題】
【００２９】
しかし、特許文献１に開示されたルータ装置は、ルーティングテーブルが変更された場合、キャッシュエントリとルーティングエントリとの対応関係をキャッシュ管理部から検索する必要があり、削除すべきキャッシュエントリを特定するのに負荷がかかるため、キャッシュエントリを削除する負荷は依然として大きい。
【００３０】
そこで、本発明の目的は、ルーティングテーブルの変更に伴ってキャッシュテーブルからキャッシュエントリを削除する場合に、キャッシュエントリを削除する負荷を低減することができるルータ装置、ルータ装置におけるルート決定方法を提供することにある。
【課題を解決するための手段】
【００３１】
上記目的を達成するために本発明は、
パケットを受信すると、前記パケットのルートを決定するルータ装置において、
パケットの宛先アドレスとルートとの対応関係を表すルーティングエントリが登録されるルーティングテーブルと、
前記ルーティングエントリを用いてすでにルートが決定されたパケットの宛先アドレスとルートとの対応関係を表すキャッシュエントリが登録されるキャッシュテーブルと、
カウンタを備え、前記ルーティングテーブルにルーティングエントリを登録または前記ルーティングテーブルからルーティングエントリを削除すると、前記カウンタのカウント値をインクリメントし、インクリメントされたカウント値を登録または削除されたルーティングエントリに設定する第１の制御部と、
パケットを受信すると、前記パケットの宛先アドレスにヒットするキャッシュエントリがない場合、前記パケットの宛先アドレスにヒットするルーティングエントリのルートを前記パケットのルートに決定して前記キャッシュテーブルにキャッシュエントリを登録するとともに、当該キャッシュエントリのルートの決定に用いられたルーティングエントリのカウント値をキャッシュエントリに設定する第２の制御部とを有することを特徴とする。
【００３２】
この構成によれば、キャッシュエントリのカウント値は、キャッシュエントリがキャッシュテーブルに登録された後は不変であるのに対し、ルーティングエントリのカウント値は、ルーティングエントリがルーティングテーブルに登録された後もルーティングエントリの削除によって変更されることになる。
【００３３】
そのため、ルーティングテーブルが変更された場合に、各キャッシュエントリについてルートの決定に用いられたルーティングエントリが変更されたか否かの判断は、両者のカウント値を比較することで簡単に行うことができる。したがって、削除すべきキャッシュエントリを特定する負荷が低減され、その結果、キャッシュエントリを削除する負荷を低減することができる。また、キャッシュエントリを削除する負荷が低減されるため、キャッシュテーブルの容量を大きくすることもでき、その結果、キャッシュエントリのヒット率を高めることができる。
【００３４】
また、前記第２の制御部は、パケットを受信すると、前記パケットの宛先アドレスにヒットするキャッシュエントリがあるが、当該キャッシュエントリのカウント値と当該キャッシュエントリのルートの決定に用いられたルーティングエントリのカウント値とが一致しない場合、当該キャッシュエントリを前記キャッシュテーブルから削除することを特徴とする。
【００３５】
この構成によれば、ルーティングテーブルが変更された場合に、全キャッシュエントリを削除するのではなく、ルートの決定に用いられたルーティングエントリが変更されたキャッシュエントリのみを削除しているため、キャッシュエントリを削除する負荷を低減することができる。また、キャッシュエントリを削除する負荷が低減されることによって、キャッシュテーブルの容量を大きくすることもできることから、キャッシュエントリのヒット率を高めることができる。
【００３６】
なお、前記第２の制御部は、パケットを受信すると、前記キャッシュエントリを削除した後、前記パケットの宛先アドレスにヒットするルーティングエントリのルートを前記パケットのルートに決定して前記キャッシュテーブルにキャッシュエントリを登録するとともに、当該キャッシュエントリのルートの決定に用いられたルーティングエントリのカウント値をキャッシュエントリに設定することとしても良い。
【００３７】
また、前記第２の制御部は、パケットを受信すると、前記キャッシュエントリを削除した後、前記パケットの宛先アドレスにヒットするルーティングエントリもない場合、前記パケットを廃棄することとしても良い。
【００３８】
また、前記第２の制御部は、パケットを受信すると、前記パケットの宛先アドレスにヒットするキャッシュエントリがあり、当該キャッシュエントリのカウント値と当該キャッシュエントリのルートの決定に用いられた前記ルーティングエントリのカウント値とが一致する場合、当該キャッシュエントリのルートを前記パケットのルートに決定することとしても良い。
【００３９】
また、前記第２の制御部は、パケットを受信すると、前記パケットの宛先アドレスにヒットするキャッシュエントリおよびルーティングエントリがない場合、前記パケットを廃棄することとしても良い。
【００４０】
また、前記第１の制御部は、前記ルーティングテーブルの管理を行うに際して、前記ルーティングエントリの宛先アドレスを２進数で表して最上位ビットから順番に各ビット位置にて２進木のノードを生成し、生成したノードから分岐させた分岐先に次に生成したノードを配置したツリー構造で管理を行うこととしても良い。
【００４１】
また、前記第１の制御部は、前記ルーティングテーブルにルーティングエントリを登録すると、登録されたルーティングエントリだけでなく、当該ルーティングエントリの宛先アドレスと前記ツリー構造上で所定の関係を有する宛先アドレスのルーティングエントリにも前記カウンタのカウント値を設定することとしても良い。
【発明の効果】
【００４２】
以上説明したように本発明によれば、第１の制御部において、ルーティングテーブルにルーティングエントリを登録または削除すると、カウンタのカウント値をインクリメントして登録または削除されたルーティングエントリに設定し、第２の制御部において、キャッシュテーブルにキャッシュエントリを登録すると、キャッシュエントリのルートの決定に用いられたルーティングエントリのカウント値をキャッシュエントリに設定する。
【００４３】
ここで、キャッシュエントリのカウント値は、キャッシュエントリがキャッシュテーブルに登録された後は不変であるのに対し、ルーティングエントリのカウント値は、ルーティングエントリがルーティングテーブルに登録された後もルーティングエントリの削除によって変更されることになる。
【００４４】
そのため、ルーティングテーブルが変更された場合に、各キャッシュエントリについてルートの決定に用いられたルーティングエントリが変更されたか否かの判断は、両者のカウント値を比較することで簡単に行うことができる。
【００４５】
したがって、削除すべきキャッシュエントリを特定する負荷が低減され、その結果、キャッシュエントリを削除する負荷を低減することができるという効果が得られる。また、キャッシュエントリを削除する負荷が低減されるため、キャッシュテーブルの容量を大きくすることもでき、その結果、キャッシュエントリのヒット率を高めることができるという効果も得られる。
【発明を実施するための最良の形態】
【００４６】
以下に、本発明を実施するための最良の形態について図面を参照して説明する。
【００４７】
図１を参照すると、本発明の一実施形態のルータ装置は、フォワーディング処理部１０ａ〜１０ｃと、スイッチ部２０と、ルーティングテーブル３０と、第１の制御部４０とを有している。なお、フォワーディング処理部１０ａ〜１０ｃの数は、図１に示したように３つに限定されるものではなく、いくつであっても良い。
【００４８】
フォワーディング処理部１０ａ〜１０ｃは、物理回線からインタフェースを介してパケットを受信した場合に、内部に保持するキャッシュテーブルとルーティングテーブルを順次検索してパケットのルートを決定し、決定したルートにパケットをフォワーディングする。
【００４９】
スイッチ部２０は、フォワーディング処理部で受信したパケットが別のフォワーディング処理部から送信される場合等のスイッチング処理を行う。
【００５０】
ルーティングテーブル３０は、パケットの宛先ネットワークアドレスとルートとの関係を表すエントリ（ルーティングエントリ）が登録されるテーブルである。
【００５１】
第１の制御部４０は、ルーティングテーブル３０を管理し、ルーティングテーブル３０におけるルーティングエントリの登録／削除を行う。
【００５２】
また、第１の制御部４０は、グローバルなアップデートカウンタ（不図示）を備えており、ルーティングテーブル３０のルーティングエントリの登録／削除を行う時に、アップデートカウンタのカウント値をインクリメントし、インクリメントされたカウント値を登録／削除されたルーティングエントリに設定する。
【００５３】
また、第１の制御部４０は、ルーティングテーブル３０の管理を行う際に、ルーティングエントリの宛先ネットワークアドレスを２進数で表して２進木のツリー構造で管理しており、ツリー検索が可能な構成になっているが、詳細は後述する。
【００５４】
また、第１の制御部４０は、ルーティングテーブル３０を変更した場合、フォワーディング処理部１０ａ〜１０ｃ内のルーティングテーブルを変更する制御を行う。このようにして、ルーティングテーブル３０とフォワーディング処理部１０ａ〜１０ｃ内のルーティングテーブルとは、同じ内容になるように制御されている。
【００５５】
図２を参照すると、フォワーディング処理部１０ａ〜１０ｃのそれぞれは、物理回線終端部１１と、ルーティングテーブル１２と、キャッシュテーブル１３と、第２の制御部１４とを有している。
【００５６】
物理回線終端部１１は、物理回線を終端し物理回線を介してパケットの送受信を行う。
【００５７】
ルーティングテーブル１２は、上述したように、ルーティングテーブル３０と同じ内容のテーブルである。
【００５８】
キャッシュテーブル１３は、ルーティングテーブル１２のルーティングエントリを用いてすでにルートが決定されたパケットの宛先アドレスとルートとの対応関係を表すエントリ（キャッシュエントリ）が登録されるテーブルである。
【００５９】
第２の制御部１４は、第１の制御部４０の制御の元でルーティングテーブル１２を変更する。
【００６０】
また、第２の制御部１４は、物理回線からインタフェースを介してパケットを受信した場合に、キャッシュテーブル１３とルーティングテーブル１２を順次検索してパケットのルートを決定し、決定したルートにパケットをフォワーディングする。この際、キャッシュテーブル１３に該当するキャッシュエントリが存在せず、ルーティングテーブル１２に該当するルーティングエントリが存在する場合は、このルーティングエントリを用いてルートが決定されたキャッシュエントリをキャッシュテーブル１３に登録する。
【００６１】
以下、図１および図２に示したルータ装置の動作について説明する。
【００６２】
（ルーティングテーブルの内容）
表４を参照すると、第１の制御部４０は、ルーティングテーブル３０に、ルーティングエントリごとに、宛先ネットワークアドレス、プレフィックス長、アップデートカウント値、ネクストホップアドレス、送信ＩＦ等を登録する。
【００６３】
ルーティングテーブル３０が従来のルーティングテーブルと大きく異なる点は、ルーティングエントリにアップデートカウント値を設定している点にある。ルーティングエントリが登録／削除された時に、第１の制御部４０内のアップデートカウンタのアップデートカウント値がインクリメントされ、そのアップデートカウント値がルーティングエントリに設定される。アップデートカウント値は、フォワーディング処理部１０ａ〜１０ｃ内のキャッシュテーブル１３のキャッシュエントリの有効／無効の判定に用いられる。
【００６４】
【表４】
0004646823.tif 000005
【００６５】
また、第１の制御部４０は、ルーティングテーブル３０のルーティングエントリの宛先ネットワークアドレスを２進数で表し、２進木のツリー構造で管理している。
【００６６】
図３を参照すると、第１の制御部４０は、ルーティングテーブル３０にエントリされている宛先ネットワークアドレスのプレフィックス長分のアドレス（可変長ビット列）を２進木のツリー構造で管理している。このツリーは、２進木のＮｏｄｅ（ノード）の部分と、Ｌｅａｆ（リーフ）と呼ばれる端点の部分と、ＬＰＭによる検索方法を実行するために必要な中間Ｌｅａｆと呼ばれる端点の部分とから構成される。
【００６７】
第１の制御部４０は、このようなツリー構造を管理する際に、宛先ネットワークアドレスのプレフィックス長分のアドレスを２進数で表して最上位ビットから順番に各ビット位置にて２進木のＮｏｄｅを生成し、そのＮｏｄｅから分岐した分岐先に次に生成したＮｏｄｅを配置していく。このとき、分岐に必要のないＮｏｄｅ（Ｎｏｄｅの下にＬｅａｆが存在しないもの）は全て省略するが、中間Ｌｅａｆが存在するＮｏｄｅについては残しておく。
【００６８】
なお、図３には、表４の状態にあるルーティングテーブル３０を管理する例が示されており、上位７ビット、上位８ビット、および上位２２ビットの各ビット位置のＮｏｄｅのみが残されている。上位７ビットおよび上位８ビットの各ビット位置のＮｏｄｅには、中間Ｌｅａｆとして、それぞれ、“１０．０．０．０／７”と“１０．０．０．０／８”が存在する。上位８ビットのビット位置のＮｏｄｅでは分岐が生じ、分岐の一方にはＬｅａｆとして“１０．１２８．２．０／２４”が存在し、分岐の他方には上位２２ビットのビット位置のＮｏｄｅが存在する。上位２２ビットのビット位置のＮｏｄｅでも分岐が生じ、分岐の一方にはＬｅａｆとして“１０．２０．１．０／２４”が存在し、分岐の他方にはＬｅａｆとして“１０．２０．２．０／２４”が存在する。
【００６９】
（ルーティングエントリのアップデートカウント値）
最初に、ルーティングテーブル３０にルーティングエントリを登録する場合の各ルーティングエントリのアップデートカウント値について説明する。ここでは、表４のルーティングテーブル３０を作成するために、“１０．０．０．０／７”、“１０．０．０．０／８”、“１０．２０．１．０／２４”、“１０．２０．２．０／２４”、“１０．１２８．２．０／２４”のルーティングエントリが順番に登録される場合を例に挙げて説明する。
【００７０】
【表５】
0004646823.tif 000006
【００７１】
表５を参照すると、第１の制御部４０は、最初に、“１０．０．０．０／７”のルーティングエントリを登録する。この際、アップデートカウンタのアップデートカウント値を“１”にインクリメントし、“１０．０．０．０／７”のルーティングエントリにアップデートカウント値“１”を設定する。
【００７２】
次に、第１の制御部４０は、“１０．０．０．０／８”のルーティングエントリを登録する。この際、アップデートカウンタのアップデートカウント値を“２”にインクリメントし、“１０．０．０．０／８”のルーティングエントリにアップデートカウント値“２”を設定する。さらに、図３のツリーを、“１０．０．０．０／８”の位置から上の方向に辿り、１つ上に存在する中間Ｌｅａｆ“１０．０．０．０／７”のルーティングエントリにもアップデートカウント値“２”を設定する。
【００７３】
次に、第１の制御部４０は、“１０．２０．１．０／２４”のルーティングエントリを登録する。この際、アップデートカウンタのアップデートカウント値を“３”にインクリメントし、“１０．２０．１．０／２４”のルーティングエントリにアップデートカウント値“３”を設定する。さらに、図３のツリーを、“１０．２０．１．０／２４”の位置から上の方向に辿り、１つ上に存在する中間Ｌｅａｆ“１０．０．０．０／８”のルーティングエントリにもアップデートカウント値“３”を設定する。
【００７４】
次に、第１の制御部４０は、“１０．２０．２．０／２４”のルーティングエントリを登録する。この際、アップデートカウンタのアップデートカウント値を“４”にインクリメントし、“１０．２０．２．０／２４”のルーティングエントリにアップデートカウント値“４”を設定する。さらに、図３のツリーを、“１０．２０．２．０／２４”の位置から上の方向に辿り、１つ上に存在する中間Ｌｅａｆ“１０．０．０．０／８”のルーティングエントリにもアップデートカウント値“４”を設定する。
【００７５】
最後に、第１の制御部４０は、“１０．１２８．２．０／２４”のルーティングエントリを登録する。この際、アップデートカウンタのアップデートカウント値を“５”にインクリメントし、“１０．１２８．２．０／２４”のルーティングエントリにアップデートカウント値“５”を設定する。さらに、図３のツリーを、“１０．１２８．２．０／２４”の位置から上の方向に辿り、１つ上に存在する中間Ｌｅａｆ“１０．０．０．０／８”のルーティングエントリにもアップデートカウント値“５”を設定する。
【００７６】
これにより、ルーティングテーブル３０の各ルーティングエントリのアップデートカウント値は、最終的に、表４に示す値になる。
【００７７】
次に、ルーティングテーブル３０からルーティングエントリを削除する場合の各ルーティングエントリのアップデートカウント値について説明する。ここでは、ルーティングテーブル３０が表４の状態にある時に、“１０．２０．２．０／２４”のルーティングエントリを削除する場合を例に挙げて説明する。
【００７８】
第１の制御部４０は、ルーティングテーブル３０が表４の状態にある時に、“１０．２０．２．０／２４”のルーティングエントリを削除する。この際、アップデートカウンタのアップデートカウント値を“６”にインクリメントし、“１０．２０．２．０／２４”のルーティングエントリにアップデートカウント値“６”を設定する。これにより、ルーティングテーブル３０は、表６に示すように変更される。
【００７９】
【表６】
0004646823.tif 000007
【００８０】
第１の制御部４０は、ルーティングテーブル３０を変更すると、フォワーディング処理部１０ａ〜１０ｃ内のルーティングテーブル１２を変更する制御を行う。これにより、ルーティングテーブル３０とフォワーディング処理部１０ａ〜１０ｃ内のルーティングテーブル１２とは、同じ内容になる。
【００８１】
なお、本実施形態においては、第１の制御部４０は、ルーティングエントリが登録された場合に、ツリーの１つ上のルーティングエントリのみアップデートカウント値を新たに設定しているが、ツリーの上の全てのルーティングエントリのアップデートカウント値を新たに設定しても良い。
【００８２】
また、本実施形態においては、第１の制御部４０は、ルーティングエントリの登録／削除を行った時に、登録／削除により影響を受けた全てのルーティングエントリのアップデートカウント値を一括して同じ値に設定しているが、ルーティングエントリごとに異なるアップデートカウント値に設定しても良い。すなわち、ルーティングエントリの登録／削除により影響を受けたルーティングエントリのアップデートカウント値が新たに設定されれば良い。
【００８３】
また、本実施形態においては、第１の制御部４０は、アップデートカウント値が上限値に達した場合には、アップデートカウント値を“１”に戻す。その際、フォワーディング処理部１０ａ〜１０ｃ内の第２の制御部１４は、キャッシュテーブル１３のすべてのキャッシュエントリを削除する。
【００８４】
（パケット受信時）
次に、フォワーディング処理部１０ａ〜１０ｃにおけるパケット受信時の動作について説明する。
【００８５】
図４を参照すると、ステップ４０１で、物理回線終端部１１が物理回線からインタフェースを介してパケットを受信すると、ステップ４０２で、第２の制御部１４は、パケットのヘッダに付加された宛先ホストアドレスが、キャッシュテーブル１３のキャッシュエントリのいずれかにヒットするか否かを検索する。
【００８６】
ここで、キャッシュテーブル１３は、図５に示すように構成されている。キャッシュエントリは、パケットプロファイルとルーティングエントリへのポインタからなる。第２の制御部１４は、キャッシュエントリの登録時には、宛先ホストアドレスのハッシュ値を計算し、キャッシュテーブル１３のハッシュ値に相当するエントリに登録する。なお、図５に示したキャッシュテーブル１３は、同じハッシュ値に最大４つまで登録可能としている。また、第２の制御部１４は、キャッシュエントリの検索時には、宛先ホストアドレスのハッシュ値を計算して、計算したハッシュ値に相当するエントリにキャッシュエントリが存在するかを検索する。ハッシュ値の計算は、宛先ホストアドレスおよびその他の情報を含むパケットプロファイルから計算しても良い。
【００８７】
ステップ４０２でキャッシュエントリが検索された場合には、ステップ４０３を実行する。ステップ４０３では、第２の制御部１４は、ステップ４０２で検索されたキャッシュエントリのアップデートカウント値と、そのキャッシュエントリのルートの決定に用いられたルーティングエントリのアップデートカウント値とが一致するか判定する。ステップ４０３でアップデートカウント値が一致する場合は、ステップ４０７を実行する。ステップ４０７では、第２の制御部１４は、キャッシュエントリの情報を基に決定されたルートにパケットをフォワーディングする。
【００８８】
また、ステップ４０３でアップデートカウント値が一致しない場合は、ステップ４０４を実行する。ステップ４０４では、第２の制御部１４は、ステップ４０２で検索されたキャッシュエントリを無効と判定し、キャッシュテーブル１３から削除した上でステップ４０５を実行する。また、ステップ４０２でキャッシュエントリが検索されない場合も、ステップ４０５を実行する。
【００８９】
ステップ４０５では、第２の制御部１４は、パケットのヘッダに付加された宛先ホストアドレスが、ルーティングテーブル１２のルーティングエントリのいずれかにヒットするか否かを検索する。
【００９０】
ここで、例えば、図３において、パケットの宛先ホストアドレスが“１０．２０．２．１”であれば、第２の制御部１４は、図３の点線に示すように、ルーティングテーブル１２のツリー検索を行う。すなわち、上位７ビット、上位８ビット、および上位２２ビットの各ビット位置のＮｏｄｅでそれぞれ分岐を行い、最終的に、“１０．２０．２．０／２４”のルーティングエントリにヒットしたとみなす。
【００９１】
また、図３において、パケットの宛先ホストアドレスが“１０．２０．３．１”であれば、第２の制御部１４は、図３の実線に示すように、ルーティングテーブル１２のツリー検索を行う。すなわち、上位７ビット、上位８ビット、および上位２２ビットの各ビット位置のＮｏｄｅでそれぞれ分岐を行うが、上位２２ビットのビット位置のＮｏｄｅの下に存在するＬｅａｆのルーティングエントリにはいずれもヒットしない。そのため、最終的には、最後に通過した上位８ビットのビット位置のＮｏｄｅに存在する中間Ｌｅａｆ“１０．０．０．０／８”のルーティングエントリにヒットしたとみなす。
【００９２】
このように、ツリー検索を行うことにより、最大でも宛先ホストアドレスのビット数分の分岐でＬｅａｆまで辿り着くことができ、また、Ｌｅａｆにヒットしなかった場合でも通過したＮｏｄｅの中間Ｌｅａｆを最後に通過したものから順番に比較していくことでヒットするルーティングエントリを検索できる。
【００９３】
ステップ４０５でルーティングエントリが検索された場合には、ステップ４０６を実行する。ステップ４０６では、第２の制御部１４は、ルーティングエントリを用いてルートが検索されたパケットの宛先ホストアドレスとそのルーティングエントリへのポインタを表すキャッシュエントリをキャッシュテーブル１３に登録する。その際、そのルーティングエントリのカウント値をキャッシュエントリに設定する。また、ステップ４０７では、第２の制御部１４は、ステップ４０５で検索されたルーティングエントリの情報を基に決定されたルートにパケットをフォワーディングする。
【００９４】
また、ステップ４０５でルーティングエントリが検索されない場合には、ステップ４０８を実行する。ステップ４０８では、第２の制御部１４は、パケットを廃棄する。
【００９５】
ここで、図４の動作について、具体例を挙げてさらに詳細に説明する。
【００９６】
まず、ルーティングテーブル１２が表４の状態で、キャッシュテーブル１３にはキャッシュエントリが全く登録されていない状態である時に、宛先ホストアドレス“１０．２０．１．１”、“１０．２０．２．１”、“１０．１２８．２．１”を持つパケットを順番に受信した場合を考える。
【００９７】
この場合、ステップ４０１で宛先ホストアドレス“１０．２０．１．１”を持つパケットを受信した時点で、その宛先ホストアドレスがヒットするキャッシュエントリはキャッシュテーブル１３に存在しない。
【００９８】
そのため、第２の制御部１４は、ステップ４０２で“Ｎｏ”と判定し、続いて、ステップ４０５で、宛先ホストアドレス“１０．２０．１．１”がヒットするルーティングエントリをルーティングテーブル１２から検索する。
【００９９】
ここでは、宛先ネットワークアドレス“１０．２０．１．０／２４”にヒットするため、第２の制御部１４は、ステップ４０５で“Ｙｅｓ”と判定する。
【０１００】
続いて、第２の制御部１４は、ステップ４０６で、宛先ネットワークアドレス“１０．２０．１．０／２４”のルーティングエントリを用いてルートが検索されたパケットの宛先ホストアドレス“１０．２０．１．１”とそのルーティングエントリへのポインタ“ｃ”を表すキャッシュエントリをキャッシュテーブル１３に登録する。その際、宛先ネットワークアドレス“１０．２０．１．０／２４”のルーティングエントリのアップデートカウント値“３”をキャッシュエントリに設定する。そして、ステップ４０７で、宛先ネットワークアドレス“１０．２０．１．０／２４”のルーティングエントリの情報を基に決定されたルートにパケットをフォワーディングする。
【０１０１】
なお、宛先ホストアドレス“１０．２０．２．１”、“１０．１２８．２．１”を持つパケットを受信した場合も上記と同様の処理が行われる。その結果、キャッシュテーブル１３は表７に示すように変更される。
【０１０２】
【表７】
0004646823.tif 000008
【０１０３】
次に、ルーティングテーブル１２が表４の状態で、キャッシュテーブル１３が表７の状態である時に、宛先ホストアドレス“１０．２０．１．１”を持つパケットを受信した場合を考える。
【０１０４】
この場合、ステップ４０１で宛先ホストアドレス“１０．２０．１．１”を持つパケットを受信した時点で、その宛先ホストアドレスがヒットするキャッシュエントリはキャッシュテーブル１３に存在する。
【０１０５】
そのため、第２の制御部１４は、ステップ４０２で“Ｙｅｓ”と判定し、続いて、ステップ４０３で、宛先ホストアドレス“１０．２０．１．１”のキャッシュエントリのアップデートカウント値と、そのキャッシュエントリのルートの決定に用いられた宛先ネットワークアドレス“１０．２０．１．０／２４”のルーティングエントリのアップデートカウント値とを比較する。
【０１０６】
ここでは、宛先ホストアドレス“１０．２０．１．１”のキャッシュエントリのアップデートカウント値と、宛先ネットワークアドレス“１０．２０．１．０／２４”のルーティングエントリのアップデートカウント値とが共に“３”で一致する。
【０１０７】
そのため、第２の制御部１４は、ステップ４０３で“Ｙｅｓ”と判定し、続いて、ステップ４０７で、宛先ホストアドレス“１０．２０．１．１”のキャッシュエントリを基にして決定されたルートにパケットをフォワーディングする。
【０１０８】
次に、ルーティングテーブル１２が表６の状態で、キャッシュテーブル１３が表７の状態である時に、宛先ホストアドレス“１０．２０．２．１”を持つパケットを受信した場合を考える。
【０１０９】
この場合、ステップ４０１で宛先ホストアドレス“１０．２０．２．１”を持つパケットを受信した時点で、その宛先ホストアドレスがヒットするキャッシュエントリはキャッシュテーブル１３に存在する。
【０１１０】
そのため、第２の制御部１４は、ステップ４０２で“Ｙｅｓ”と判定し、続いて、ステップ４０３で、宛先ホストアドレス“１０．２０．２．１”のキャッシュエントリのアップデートカウント値と、そのキャッシュエントリのルートの決定に用いられた宛先ネットワークアドレス“１０．２０．２．０／２４”のルーティングエントリのアップデートカウント値とを比較する。
【０１１１】
ここでは、宛先ホストアドレス“１０．２０．１．１”のキャッシュエントリのアップデートカウント値が“４”であるのに対し、宛先ネットワークアドレス“１０．２０．１．０／２４”のルーティングエントリのアップデートカウント値が“６”である。
【０１１２】
そのため、第２の制御部１４は、ステップ４０３で“Ｎｏ”と判定し、続いて、ステップ４０４で、宛先ホストアドレス“１０．２０．１．１”のキャッシュエントリを無効と判定し、キャッシュテーブル１３から削除した上で、ステップ４０５で、宛先ホストアドレス“１０．２０．１．１”がヒットするルーティングエントリをルーティングテーブル１２から再検索する。
【０１１３】
ここでは、宛先ネットワークアドレス“１０．０．０．０／８”にヒットするため、第２の制御部１４は、ステップ４０５で“Ｙｅｓ”と判定する。
【０１１４】
続いて、第２の制御部１４は、ステップ４０６で、宛先ネットワークアドレス“１０．０．０．０／８”のルーティングエントリを用いてルートが検索されたパケットの宛先ホストアドレス“１０．２０．２．１”とそのルーティングエントリへのポインタ“ｂ”を表すキャッシュエントリをキャッシュテーブル１３に登録する。その際、宛先ネットワークアドレス“１０．０．０．０／８”のルーティングエントリのアップデートカウント値“５”をキャッシュエントリに設定する。そして、ステップ４０７で、宛先ネットワークアドレス“１０．０．０．０／８”のルーティングエントリの情報を基に決定されたルートにパケットをフォワーディングする。その結果、キャッシュテーブル１３は表８に示すように変更される。
【０１１５】
【表８】
0004646823.tif 000009
【図面の簡単な説明】
【０１１６】
【図１】本発明の一実施形態のルータ装置の構成を示すブロック図である。
【図２】図１に示したフォワーディング処理部の構成を示すブロック図である。
【図３】図１および図２に示したルーティングテーブルにエントリされている宛先ネットワークアドレスをツリー構造で管理する一例を示す図である。
【図４】図２に示したフォワーディング処理部におけるパケット受信時の動作の一例を説明するフローチャートである。
【図５】図２に示したキャッシュテーブルの一構成例を示す図である。
【符号の説明】
【０１１７】
１０ａ〜１０ｃ    フォワーディング処理部
１１    物理回線終端部
１２    ルーティングテーブル
１３    キャッシュテーブル
１４    第２の制御部
２０    スイッチ部
３０    ルーティングテーブル
４０    第１の制御部
【図１】
0004646823.tif 000010
【図２】
0004646823.tif 000011
【図３】
0004646823.tif 000012
【図４】
0004646823.tif 000013
【図５】
0004646823.tif 000014