【CEFについて】


このHPはCEFについてまとめたもので す。


1-1 CEFの概要

CEFとは、ルータ(マルチレイヤスイッチ)が入力インターフェイスから出力インターフェイスにパケットを転送するための高速スイッチングメカ ニズム。従来のNetFlowスイッチングが抱えていた弱点を大幅に改善したもので、Ciscoが自社製ルータ用に開発したも の。

CEFでは、ルータ メモリに保管された次の2種類のデータ構造(テーブル)が使用される。

★FIBテーブル

★隣接テーブル

CEFでは、あらかじめコントロールプレーンのルーティングテーブルからデータプレーン上にFIBテー ブルを作成し、ARPテーブルから隣接テーブルを作成する。

コントロールプレーンで構築されたFIBテーブルと隣接テーブルをデータプレーンのTCAMにダウンロードすることにより、パケットの転送をデータプレ ーンのみで完結させて、非常に高速にパケットを転送することができる。






■CEFによって構築されたマルチレイヤスイッチの処置

CEFによって構築されたコントロールプレーン(ルートプロセッサ)の処理は以下が実行される。

●ルーティングテーブルの作成

●ルーティングテーブルに基づいたFIBテーブルの構築

●ARPによるネクストホップアドレスの解決

●ARPキャッシュに基づいた隣接テーブルの構築

●データプレーンで処理できないトラフィックの処理


■CEFによって構築されたデータプレーンの処置

CEFによって構築されたデータプレーンの処置は、以下が実行される

●コントロールプレーンで構築されたFIBテーブルと隣接テーブルのダウンロード

●ハードウェア処理によるフレームおよびパケットのリライト

●マルチレイヤスイッチングによる高速なトラフィック転送

■データプレーンで処理できない例外トラフィック

データプレーンで処理できない例外トラフィックは、以下の様なものがある。

●FIB中にエントリを特定できない

●FIBテーブルが満杯

●802.3イーサネットフレーム

●TTLが失効している

●NATを必要とするIPパケット(NATをハードウェア処理できるCatalyst6500Supervisor720は除く)

●フラグメント処理を必要とするIPパケット

●ICMPリダイレクト処理に関与するIPパケット

●IPヘッダのオプションを使用するパケット

●トンネルインターフェースに転送されたパケット

●IPXやAppleTalk等CEFに対応していないIP以外のパケット



1-2 CEFでのパケット転送

CEFでは、次の2つのテーブルを用いてパケットの転送を行う。

【FIBテーブル】

転送先の決定に使用する情報のデータベース。概念的にはルーティング テーブルまたはルート キャッシュと似ているが、実装方法が異なる。ルーティングテーブルよりも処理効率が良いツリー型の構造で構築され、IPパケットのルーティング 処理で、ロンゲストマッチの原則に従って参照される。

またFIBテーブルには、各エントリごとのネクストホップアドレスも格納し、基本 的にダイナミック(動的)な情報収集が行われ、次のいずれかの状況が発生すると更新される。

●ネクスト ホップに対応するARPキャッシュ エントリが変更、削除、 またはタイムアウトしたとき。

●プレフィクスに対応するルーティング テーブル エントリが変更または削除されたとき。

●ネクスト ホップに対応するルーティング テーブル エントリが変更または削除されたとき。


【隣接テーブル】

FIBテーブルには、個々のエントリごとのレイヤ3ネクストホップアドレスが格納されており、パケッ ト転送を効率化する目的で、対応する個々のネクストホップエントリごとのレイヤ2情報も格納される。


FIBにおけるこの部分は「隣接テーブル」と呼ばれる。隣接テーブルは ARPキャッシュの情報を基にコントロールプレーンで構築され、 データープレーンのTCAM上にダウンロードされる。

隣接テーブルはネクストホップへのレイヤ2情報(MACアドレス)が記載され、イーサネットフレームのあて先MACアド レスをリライトする処理で参照される。 ARPキャッシュの変更は動的に反映する。

FIBテーブルによって、パケットの転送先を判断し、隣接テーブルによって、パケットのレイヤ2ヘッ ダをリライトする。
FIBテーブルには、ルーティングテーブルのネットワークアドレスのエントリはす べて含まれている。そのため 送信先IPアドレスがFIBテーブルのエントリに 一致しないパケットは破棄される。









1-3 CEFの確認

★FIBテーブルの確認

FIBテーブル全体の内容は、以下のコマンドで確認できる。

♯show ip cef【detail】

このコマンドを実行すると、下記の様な出力が得られる。





@0.0.0.0/32・・・ デフォルトルート用に予約されたFIBエントリ。ネクストホップは未定義のため、この エントリは「receive」とマークされており、パケットは レイヤ3エンジンに送られて、追加処理を受ける。


A192.168.199.0/24・・・ VALN1インターフェイスに割り当てえられたサブネット用のエントリ。直接 VLAN1SVIに接続されているため、「attached」とマークされている。


B192.168.199.0/32・・・ 正確なネットワークアドレス用に予約されているFIBエントリ。ネットワークが直接接続されていない場合、このエントリは当該ネットワークアドレスに送られるパケットの隣接関係を格納されるために使用される。
ここでは隣接関係がないためこのエントリはreceiveとマークされている。


C192.168.199.1/32・・・ VLAN1のSVIのIPアドレス用に予約されたエントリ。これはホストルート(/32) であることが分かる。VLAN1インターフェイス宛のパケットは内部的に処理する必要があるため、このエントリは「receive」と マークされている。


D192.168.199.2/32・・・ VLAN1インターフェイスで検出された隣接マルチレイヤスイッチ用のエントリ。同 じIPアドレスがネクストホップフィールドに表示されているのは、隣接関係が利用可能である ことを示している。


E192.168.199.255/32・・・ 192.168.199.0サブネットのブロードキャストアドレス用に予約されているFIBエントリ。 ルートプロセッサ(レイヤ3エンジン)で全てのダイレクトブロードキャストを処理をする ため、このエントリは「receive」とマークされている。


特定のインターフェイスに関するFIBテーブル情報の全体 を確認したい場合は、以下のコマンドを使用する。


♯show ip cef 【インター フェイスのタイプ】【インターフェイス番号】〔detail〕



★隣接テーブルの確認

隣接テーブルの内容を確認するには、以下のコマンドを使う。

♯show adjacency{【インターフェイスのタイプ】【インターフェイス番号】*【vlan】【VLAN番号】} {summary*datail}

例えば、show adjacency summaryコマンドを使用すると、下記の様に 物理およびVLANインターフェイスにて、既知の隣接関係の総数を確認することができる。

隣接関係は、ローカルスイッチに直結された個々のホストおよび、個々のネクストホップルータについて保持される。





「datail」キーワードを使用すると、下記の様に隣接関係のより詳細な情報を確認することができる。





隣接関係エントリには、直結されたホストのMACアドレスとIPアドレスが取り込まれる。 MACアドレスは、 出力行の先頭6オクテットとして表示される。 隣接関係テーブルの情報は、ARPテーブルを基にして作成される。ただし、ARPエントリが存在しない場合は、FIBエントリに「CEF glean」とマーク付け される。

これは、レイヤ2のネクストホップアドレスが失われていたため、レイヤ3のフォワーディングエンジンは 、ハードウェア的にパケットを転送できなかったという意味。

そうしたパケットについては、レイヤ3エンジンに送られた上で、ARP要求の生成およびARP応答の受信が行われることになる。これが「CEF glean」ステートと呼ばれる状態で、その際にレイヤ3エンジンは、 ネク ストホップのあて先MACアドレスに関する情報収集(gleaning)をする必要がある。



CEF gleanステートに置かれたFIBエントリが、ARPの解決を待機している間、このホストに流入する後続の パケットは全て破棄されるが、これは 入力キューのオーバーフローを防ぎ、過負荷に陥ったレイヤ3に よるARP要求の重複を防止するための措置。

こうした機構は「ARPスロットリング」または「隣接関係のスロットリング」と呼ばれている。

2秒間待機してもARP応答が返されなかった場合は、いったんスロットリングを解除して、次のARP要求が送信される。ARP応答が返された場合は、 スロットリングを解除し、FIBエントリを完成させた上で、ハードウェアにパケットを転送する。