教科書には載っていない ネットワークエンジニアの実践技術

第8回 Ciscoのすごい技術─CEF

この記事を読むのに必要な時間:およそ 2.5 分

はじめに

Cisco社のExpress Forwarding技術(以下CEFと呼ぶ)は,インターネットや企業ネットワークなどといった大規模IPネットワークで将来必要となる高度なパフォーマンス要求にもミートするようにデザインされた,拡張性の高い分散型レイヤ3スイッチング・ソリューションです。

出典 URL:http://www.cisco.com/web/JP/product/hs/ios/cef_wp.html

これはCiscoのホームページから抜粋した文章ですが,この説明では何のことやらわかりにくいですね。

私はCiscoが作った技術の中でも一番エクセレントなものがCEFだと思っているのですが,市販されている書籍やWebの説明は技術的すぎてわかりにくく感じるので,今回は,このCEFについて補足してみたいと思います。

ルータは何をやっているのか?

まずルータがIPパケットを転送するときに何をしているか,考えて見ましょう。

最近のルータはQoSやセキュリティ機能などさまざまな仕事をしていますが,もっとも基本的な動作は「IPアドレスに従ってパケットを転送する」ということですよね。このときのステップを大雑把に並べると,以下のようになります。

  1. 到着したパケットから宛先IPアドレスを読む
  2. ルーティングテーブルを検索し,ネクストホップのIPアドレスを知る
  3. ネクストホップへ到達するためのレイヤ2アドレスを調べる
    EthernetであればARPテーブルを参照して調べる。もしARPテーブルに載っていなければ,ARPパケットを飛ばして目的のMACアドレスを取得する。
  4. パケットのL2ヘッダをネクストホップ宛てに書き換える
    Ethernetであれば宛先と送信元のMACアドレスを書き換える,等。
  5. ネクストホップ向けのインターフェースからパケットを出力する

IPパケットが到着するたびに,この動作を繰り返すわけです。

また,②の処理において,ネクストホップのIPアドレスは1回の検索で見つかるとは限りません。たとえば,以下のようにデフォルトルートを設定したとします。

ip route 0.0.0.0 0.0.0.0 192.168.20.1

show ip route をすると,以下のようになりますね。

192.168.20.0/24 is subnetted, 1 subnets
C    192.168.20.0 is directly connected, Ethernet0
S*   0.0.0.0/0 [1/0] via 192.168.20.1

このルータは,宛先IPアドレスをルーティングテーブルで検索し,見つからないとデフォルトルートの宛先である192.168.20.1へ転送しようとします。

そこで,192.168.20.1へ送るにはどうすればよいのか? もう一度ルーティングテーブルを検索すると,Ethernet0のインターフェースに接続されていることがわかります。なので,次はARPテーブルを検索して,Ethernet0のインターフェースに接続されている192.168.20.1のMACアドレスを調べることになります。

つまり,1つのパケットを転送するために,ルーティングテーブルを2回とARPテーブルを1回の,計3回も検索をしなければいけないのです。

このように,ルーティングテーブルを2回以上サーチしなければ宛先が判断できない状況のことを「リカーシブル・ルックアップ」と呼ぶ場合があります。

リカーシブル・ルックアップの状況は複雑なスタティックルートやBGPを使用している場合などに顕著に発生し,ルータの性能を著しく悪化させる原因となります。ですから,どこのメーカでも,リカーシブル・ルックアップを減らして効率化するための工夫を,いろいろと行っているのです。

ファスト・スイッチング

まず,Cisco以外のルータで多く用いられている方法が「ファスト・スイッチング」です(メーカによってさまざまな呼び方をしていますが,Cisco以外のほとんどのルータやL3スイッチが,この方法を用いています)⁠この方法は「キャッシング」を使います。

図1 ファスト・スイッチング

ファスト・スイッチング

たとえば大容量のファイルを転送するような場合,Ethernetの最大フレーム長が1518バイトしかありませんので,たくさんのIPパケットに分割して情報を送る必要があります。

このとき,最初の1パケット目は普通にルーティングテーブルやARPテーブルを参照して処理しますが,その結果をキャッシュメモリに記憶しておいて,後続のパケットは,どうせ同じ相手に転送するのですから,キャッシュに蓄えられた情報を使いましょう,という方法です。

つまり,宛先が同じIPアドレスであれば,ルーティングテーブルを検索せずにキャッシュに残っている情報を使うことで,処理を効率化します。

著者プロフィール

高木圭一(たかぎけいいち)

ネットワーク業界でSEとして22年間の業務を経験した後,現在は独立。IPイノベーションズの専属コンサルタント・インストラクターとして活躍中。ネットワークを活用した新しいライフスタイルを確立し,浸透させることを目標として活動中であり,栃木県に在住。

  • 1986年 富士通ネットワークエンジニアリング(現FNETS)入社
  • 2000年 シスコシステムズへ転職
  • 2007年 独立・IPイノベーションズ専属コンサルタント・インストラクター

URLhttp://www.gogonetpro.com/

コメント

コメントの記入