ipv6 の最長プレフィックス マッチングを実装する最良の方法は何ですか?

StackOverflow https://stackoverflow.com/questions/511903

  •  21-08-2019
  •  | 
  •  

質問

IPv6 ルーターは、最初のルートとして多数のルートを保存します。 n アドレスのビット。2000 年に、研究者は 1500 の ipv6 ルートで異なるプレフィックス長が 14 個だけであることを発見しました。受信パケットは最長プレフィックス一致に基づいて異なる送信ポートにルーティングされるため、パケット x の最初の 8 ビットが 8 ビット ルートに一致するが、同じパケットの最初の 48 ビットが 48 ビット ルートに一致する場合、ルータは48ビットルート。

私のルーターは非常に多くのパケットを処理しているため、ルーティング テーブルへのメモリ検索の速度が制限要因になっています。ルーティング テーブル内で最も長く一致するプレフィックスを見つけるための適切なアルゴリズムは何ですか?

役に立ちましたか?

解決

//en.wikipedia:

トライするまたは<のhref = "HTTPのいずれかを使用します標準の "接頭辞の.org /ウィキ/ Radix_tree」のrel = "noreferrer" 保存する>基数ツリーを"。接尾辞木/配列は、オーバーキル不要です。彼らは、(任意の中置は、接尾辞の接頭辞で、あなたは、いくつかの文字列との間の一致を検索したい場合は、お互いにそれらを連結するという事実を利用して)の挿入辞のの間の一致を見つけるために使用される、とされていませんただプレフィックス間ます。

他のヒント

見つけました クールペーパー と呼ばれるこの主題について ブルームフィルターを使用した最長プレフィックスマッチング.

抽象的な: 最長プレフィックス マッチング (LPM) にブルーム フィルターを使用するために、私たちが認識している最初のアルゴリズムを紹介します。このアルゴリズムは、プレフィックス長によってソートされたプレフィックスのセット内のアドレス プレフィックス メンバーシップを決定するために、メンバーシップ クエリの効率的なデータ構造であるブルーム フィルターに対して並列クエリを実行します。このアルゴリズムをインターネット プロトコル (IP) ルーティング ルックアップに使用すると、検索エンジンが TCAM ベースのアプローチよりも優れたパフォーマンスとスケーラビリティを提供できることを示します。

彼らの基本的なアイデアは、プロセッサの組み込み SRAM (高速) に格納されているブルーム フィルターを使用して、低速だがより豊富なメモリでプレフィックス ハッシュ テーブル ルックアップをガイドすることです。IPv4 の場合、ルーティング テーブルのプレフィックスのほとんどが 24 ビットであるという事実を考慮してアルゴリズムを調整しています。IPv6 の場合、1550 個の BGP エントリで一意のプレフィックス長は 14 個しか見つかりませんでした。

私は、一般的には最長の共通のプレフィックスを計算するための最も効率的な方法はhref="http://en.wikipedia.org/wiki/Suffix_tree" rel="nofollow noreferrer">接尾辞木または接尾辞配列に(ランタイムが前処理した後、プレフィックスの長さに線形です)。

あなたは、いくつかの予備のメモリを持っていますか?

このような構造を作成します:

typedef struct node {
  struct node* table[256];
  Port_type port;
} Node;
Node* root[256];

今、あなたはそうのような検索を行うことができます:

Node* table = root;
for (i=0; table != NULL; i++)
{
   node = table[address_byte[i]];
   table = node->table;
}
destination = node->port;
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top