元NWエンジニアが語るブログ

NWエンジニアの思いの丈サイト

cef (Cisco Express Forwarding)

 cefとは、Cisco Express Forwardingの略でCiscoが独自開発したスイッチング技術のひとつです。通常のルーティングであるならば、下記の流れでルーティングを行います。

 

1.受け取ったパケットから宛先のIPアドレスを取得

2.ルーティングテーブルの中から宛先IPアドレスを探し、ネクストホップのIPアドレスを取得

3.ネクストホップへ到達するためのL2アドレス(MACアドレス)を取得

 →ARPテーブルを参照して調べる。ARPテーブルにない場合は、ARPリクエストを送信し、目的のL2アドレスを調べる。

4.①で受け取ったパケットの宛先L2アドレスを③で取得したアドレスに書き換え、送信元L2アドレスを出力するI/Fのアドレスに書き換える。

5.I/Fからパケットを送信する。

 

この動作はパケットを受け取ったら毎回実行されるルータの処理になります。

 

ここで、②で宛先IPアドレスがルーティングテーブルになかった場合はどうなるでしょうか。

その場合は、デフォルトルートに送信することになります。そのため、もう一度ルーティングテーブルを検索し、出力I/Fを調べその後に③の処理をするためにARPテーブルを検索します。

このように、一つのパケットを受取っただけでルーティングテーブルを2回、ARPテーブルを1回、計3回テーブルを検索しなければならない場合があります。これは、ルータにとっては、結構負荷がかかる処理となります。

 

そのため、開発されたのが、「Cef」技術です。

 

■Cefは、ルーティングテーブルを元に作ったFIB(Forwarding Information Base)というテーブルと、ARPテーブルを元にアジャセンシー(ajacency)テーブルを作成します。

 

FIBテーブルの中身は、ポインタと呼ばれるジャンプ先の情報が記載されています。

アジャセンシ―テーブルには、L2ヘッダ情報が記載されています。

 

■Cefの処理方法は、例えば下図のようなNWの場合、宛先IPが「C」のパケットを受信したとします。その際、FIBテーブルを検索し「C」を探し、その中に入っているポインタを取得します。そのポインタは、アジャセンシ―テーブルの「RBに到達するためのL2ヘッダ」情報へジャンプするようになっています。そのポインタで取得した情報を元に最初に受信したパケットを書き換え、適切なI/Fから送信します。

 

f:id:choco_1120:20141010111344j:plain

 

この結果、3回テーブルを検索していた通常の処理に比べて、Cefの場合は「1回」で処理を完了することができるため、ルーティングの処理が高速に行うことができます。