ファストパス

$Date: 2012/04/24 02:28:30 $

RTX2000、RTX1500、RTX1200、RTX1100、RTX1000、RTX810、RT107e、SRT100、NVR500、RT58i、RT57i、RTV700 では、パケット転送を高速に行なうためにファストパスと 呼ばれる技術が利用されています。ファストパスでは、パケット転送を高速に 行なえますが、その代わりに一部の機能に制約があります。この文書ではファス トパスとその特徴について解説しています。

[ページの先頭に戻る] [概要] [仕組み] [実装] [コマンド] [パケットの条件] [制限]

ファストパスの概要

ファストパスの実装は利用しているCPUによってそれぞれ異なります。ファ ストパスを実装しているRTシリーズでは以下のようなCPUを利用しており、 それぞれの機種は3つのグループに分けることができます。この文書では、 それぞれ以下のように呼ぶことにします。

呼称 RTX2000系 RTX1500系 RTX1000系
機種 RTX2000 RTX1500 RTX1200 RTX1100 RTX1000 RTX810 RT107e SRT100 NVR500 RT58i RT57i RTV700
CPU Intel IXP1200 ADI AD6846 MIPS Brecis MSP2000 ARM MIPS ARM XScale MIPS
ファストパス 最初から Rev.7.01系 最初から
IPv4 over IPv4 最初から Rev.8.03.37以降 最初から Rev.8.00.66以降 Rev.8.00.69以降
IPv6 最初から Rev.8.03.37以降 最初から Rev.8.03.42以降 最初から

ファストパスの仕組み

ファストパスとは、パケット転送を高速に処理するための仕組みです。 ファストパスを使わずにパケットを転送する処理は、ノーマルパス、あ るいはスローパスと呼んでいますが、どちらも同じ意味です。

ファストパスでは、パケットを高速に処理するために特別なテーブルを 持っています。

フローテーブル

RTX1000系、RTX1500系ではすべての場合で、RTX2000系では後述する独自 経路テーブルで扱えない場合には、ルータが処理するパケットを種類別 に分類して、フローとして扱います。フローとして分類する際に利用す る情報は以下の通りです。

フローの先頭のパケットはノーマルパスで処理しますが、その際にフロー をどのように処理するかをフローテーブルに記録しておきます。この時 フローテーブルに記録するのは、パケットをフィルタで落すかどうか、 NAT/IPマスカレード変換したならばどのように書き換えるか、パケット を送信するポートとその時のL2ヘッダ、などがあります。

フローの後続のパケットは、フローテーブルに記録されている情報を参 照してファストパスで処理を行ないます。ノーマルパスで必要な、経路 テーブルの参照、フィルタの適用、NAT/IPマスカレードテーブルの参照、 L2ヘッダの構築などがフローテーブル一つですべて処理できるためにノー マルパスに比べて圧倒的に高速な処理が可能になっています。

フローテーブルのサイズは有限で、 別表 のようになっています。1つのセッションでは方向別に2つのフローを必 要とするので、同時に管理できるセッションはそれぞれ約半分となりま す。これ以上のセッションについては、ノーマルパスで処理されること になります。

ファストパス独自経路テーブル

RTX2000系では、ファストパス独自の経路テーブルを持っています。以下 の条件にすべて合致する場合には、独自の経路テーブルに従ってパケッ トをファストパス処理することができます。

複数のゲートウェイを持つ経路とは、以下の経路のことです。

RTX2000系のRev.7.00系ファームウェアでは複数のゲートウェイを持つ経 路は利用できません。複数のgateway句を持つip routeコマンドはエラー となりますし、OSPFのイコールコストマルチパス経路でもそのうちの1つ だけが経路テーブルに登録されます。Rev.7.01系のファームウェアでは、 複数のゲートウェイを持つ経路が利用できるようになりますが、複数の ゲートウェイを持つ経路がある場合には、フローテーブルを用いた処理 となります。

これらの条件に合致しない場合には、前述のフローテーブルを用いた処 理を行ないます。また、RTX2000系以外の機種では、ファストパス独自の 経路テーブルを持っていませんので、ファストパスは常にフローテーブ ルを用いる処理になります。

[ページの先頭に戻る] [概要] [仕組み] [実装] [コマンド] [パケットの条件] [制限]

ファストパスの実装

機種によってファストパスの実装方法が異なりますので、それぞれにつ いて説明します。

RTX1000系のファストパス

RTX1000系では、CPUとして特別なものを搭載しているわけではなく、パ ケット転送処理はファストパス、ノーマルパスとも一つのCPUで処理され ます。RTX1000系では、ファストパスとノーマルパスの処理の優先度を変 えることで高速転送を可能にしています。

ノーマルパスによる処理の場合は、LANインタフェースから受信したパケッ トを、いったんLANドライバソフトが受信した後にOSを通じてノーマルパ スを処理するソフトに引き渡すのに対して、ファストパスではLANドライ バソフト内で処理をすべて終えてしまいます。LANドライバソフトは割り 込みコンテキストで動作しているのでパケットを受信したら最優先で処 理されるのに対し、ノーマルパスはOSによって管理されるタスクコンテ キストでの処理なので、パケットを処理中でも他のタスクや割り込みコ ンテキストによって処理が遅れることがあります。

  ┌───────────┐ ┌───────┐ ┌───────┐
  │ ノーマルパスタスク │ │ 他のタスク │ │ 他のタスク │
  └───────────┘ └───────┘ └───────┘
     ↑   │
     │   │                  タスクコンテキスト
  ───────────────────────────────────
     │   │
  ┌─────────┐
  │   OS    │
  └─────────┘
     │   │
  ───────────────────────────────────
     │   │                 割り込みコンテキスト
     │   ↓
  ┌─────────┐
  │  ↑   │  │
  │  │   ↓  │
  │ LANドライバ │
  │  │   │  │
  │  ├─→─┤  │  ← ファストパス処理
  │  ↑   ↓  │
  └─────────┘
     ↑   │
     │   ↓
 ┌────────────┐
 │ LANインタフェース │
 └────────────┘

RTX1500系のファストパス

RTX1500系は、CPUとしてADI AD6846を利用しています。このAD6846はメ インCPUとしてMIPS系RISC CPUを1個、パケット転送や暗号化処理などを 行なうための専用のアクセラレータプロセッサと呼ばれるサブCPUを5個 搭載しています。5個あるアクセラレータプロセッサの内訳は、3つある LANインタフェースにそれぞれ1つずつ、暗号化専用に1つ、バッファ管理 などの汎用の目的に1つとなります。RTX1500系のファストパスでは、メ インCPUを使わず、アクセラレータプロセッサだけでパケットを転送しま す。

   ┌────────┐
   │ メインCPU │   ← ノーマルパス処理
   └────────┘
     ↑   │
     │   ↓
  ┌──────────┐
  │  ↑   │   │
  │  │   ↓   │
  │ アクセラレータ  │
  │  プロセッサ   │
  │  │   │   │
  │  ├─→─┤   │  ← ファストパス処理
  │  ↑   ↓   │
  └──────────┘
     ↑   │
     │   ↓
 ┌────────────┐
 │ LANインタフェース │
 └────────────┘

アクセラレータプロセッサはパケット処理専用に設計されたCPUであり、 通常のCPUのような複雑な処理を行なうことはできません。その代わりに 高速にパケット処理ができるようにさまざまな工夫が施されています。 また、それぞれのアクセラレータプロセッサは並列に動作できるため、 複数のLANインタフェースからの入力を同時に扱ってもスピードが落ちる ことがありません。

RTX2000系のファストパス

RTX2000系は、CPUとして Intel IXP1200 を利用しています。このIXP1200はメインCPUとしてStrongARMを1個、パ ケット転送専用のマイクロエンジンと呼ばれるサブCPUを6個搭載してい ます。RTX2000系のファストパスでは、メインCPUを使わず、マイクロエ ンジンだけでパケットを転送します。

   ┌────────┐
   │ メインCPU │   ← ノーマルパス処理
   └────────┘
     ↑   │
     │   ↓
  ┌──────────┐
  │  ↑   │   │
  │  │   ↓   │
  │ マイクロエンジン │
  │  │   │   │
  │  ├─→─┤   │  ← ファストパス処理
  │  ↑   ↓   │
  └──────────┘
     ↑   │
     │   ↓
 ┌────────────┐
 │ LANインタフェース │
 └────────────┘
    

マイクロエンジンはパケット処理専用に設計されたCPUであり、通常の CPUのような複雑な処理を行なうことはできません。その代わりに高速に パケット処理ができるようにさまざまな工夫が施されています。また、 6個あるマイクロエンジンは個々が並列に動作できるのみならず、1個あ たり最大4つのスレッドをハードウェア的に切替えながら同時に走らせる ことができます。そのため、多くのLANインタフェースからの入力を同時 に扱ってもスピードが落ちることがありません。

[ページの先頭に戻る] [概要] [仕組み] [実装] [コマンド] [パケットの条件] [制限]

ファストパス関連のコマンド

以下のコマンドで、ファストパスを動作させるかどうかを選択できます。

[ページの先頭に戻る] [概要] [仕組み] [実装] [コマンド] [パケットの条件] [制限]

ファストパスで処理されるパケットの条件

ノーマルパスで処理される条件

以下のような条件に該当するパケットは必ずノーマルパスで処理されま す。

静的/動的フィルタ、NAT/IPマスカレード

IPv4およびIPv6の静的/動的フィルタ、IPv4のNAT/IPマスカレードの処理 では、TCPとUDPだけがファストパスで処理されます。ただし、フローの先 頭のパケットだけはフィルタの適用結果やNATの変換方法をファストパス 用のキャッシュであるフローテーブルに記録する必要があるため、ノーマ ルパスでの処理となります。同じフローの後続のパケットはフローテーブ ルを利用しながらファストパスで処理します。

VPNトンネル

IPsecによるVPNのトンネルでは、以下の条件を満たすものはファストパ スで処理します。

注: RT57i、RT58i、NVR500はIPsecの機能を持っていません。

IPIPトンネル

IP over IPトンネルでは、以下の条件を満たすものはファストパスで処 理します。

IPsec、IPIPトンネルをファストパスで処理する条件は以下のようになり ます。

コマンド設定 IPv4 over IPv6 IPv6 over IPv4 IPv4 over IPv4 IPv6 over IPv6
ip routing process ipv6 routing process
fast fast
fast normal × × ×
normal fast × × ×
normal normal × × × ×
◯:ファストパスで処理する
×:ノーマルパスで処理する

[ページの先頭に戻る] [概要] [仕組み] [実装] [コマンド] [パケットの条件] [制限]

ファストパスの制限

ファストパスではパケットの転送を高速に行なうことを主眼としており、 ノーマルパスでの処理を100%再現することはしていません。そのため、 ノーマルパスに対して、以下のような機能の制限があります。

全機種共通の制限

いずれも、ファストパスでパケットが処理された場合だけの制限ですか ら、パケットがノーマルパスで処理される場合にはこれらの機能は正し く働きます。例えば、pass-logフィルタを利用していると、最初の1パケッ トだけはフローテーブルを作るためにノーマルパスで処理されるためロ グに記録されるが、その後のパケットはファストパスで処理されるため 記録されなくなるといった動作になります。

機種毎に異なる制限

フローテーブルのサイズを越えたフローはノーマルパスで処理されるた め、速度が落ちます。フローテーブルのサイズは有限で、各機種毎に以 下の表のようになっています。これは片方向あたりですから、セッショ ン数で言えばそれぞれ約半分となります。これを越える通信はノーマル パスでの処理となるので、ファストパスでの処理に比べて速度が大きく 落ちてしまいます。特に、RTX2000では速度差が大きいので注意してくだ さい。

IPv6のファストパスに対応した機種、ファームウェアでは、IPv4、IPv6 それぞれ別のフローテーブルで管理されます。

RTX2000系 RTX1500系 RTX1000系
RTX2000 RTX1500 RTX1200 RTX1100 RTX1000 RTX810 RT107e SRT100 NVR500 RT58i RT57i RTV700
フローテーブルのサイズ Rev.7.01.29以前
16384
Rev.7.01.34以降
65536
65536 65536 16384 32768 16384

ファストパスで対応する場合は○、そうでない場合は×、その機能がな い場合は−で示します。

機能 RTX2000系 RTX1500系 RTX1000系
RTX2000 RTX1500 RTX1200 RTX1100 RTX1000 RTX810 RT107e SRT100 NVR500 RT58i RT57i RTV700
優先制御、帯域制御 × ○※6 × × × ×
IPsecのESPトンネルのUDPカプセリング ×
TOSフィールドの書き換え機能 × ○※1 ○※1 × × × × × ×
IPsecのESPトンネル IPv4 over IPv4
IPv6 over IPv6 × × ○※3 × ○※2 ×
IPv4 over IPv6 × × ○※3 ○※2
IPv6 over IPv4 × × ○※3 ○※2
IPIPトンネル IPv4 over IPv4 × × ○※1 × ○※4 ○※5
IPv6 over IPv6 × × ○※3 × ○※2 × ×
IPv4 over IPv6 × × ○※3 × ○※2 × ×
IPv6 over IPv4 × × ○※3 × ○※2 × ×

※1 Rev.8.03.24以降
※2 Rev.8.03.42以降
※3 Rev.8.03.37以降
※4 Rev.8.00.66以降
※5 Rev.8.00.69以降
※6 Rev.8.03.90以降

ファストパスで処理する場合は○、そうでない場合は×、その機能がな い場合は−で示します。

パケット RTX2000系 RTX1500系 RTX1000系
RTX2000 RTX1500 RTX1200 RTX1100 RTX1000 RTX810 RT107e SRT100 NVR500 RT58i RT57i RTV700
VRRPを使用している時の通過パケット ○※7 ×
終点IPアドレスが
マルチキャストアドレスのパケット
× ○※7 ×
プライマリとセカンダリ間などの
同一LANインタフェース間の通信パケット
× ×
折り返しパケット ×※8
※7 Rev.8.03系以降
※8 Rev.8.03.92以降

対応する場合は○、そうでない場合は×で示します。

機能 RTX2000系 RTX1500系 RTX1000系
RTX2000 RTX1500 RTX1200 RTX1100 RTX1000 RTX810 RT107e SRT100 NVR500 RT58i RT57i RTV700
rejectフィルタのログ ×
ESPパケットのフィルタリング × ×

RTX1000系、RTX1500系では、rejectフィルタによりパケットを落すと決 めたフローのパケットはノーマルパスに回すようになっていますが、 RTX2000系ではrejectフィルタによりパケットを落すと決めたフローのパ ケットはマイクロエンジン内で破棄してしまい、メインCPUにまで通知し ません。そのため、ログも記録できなくなっています。
またRTX1000系、RTX2000系では、ESPパケットはフィルタリングの処理対象外です。

[ページの先頭に戻る] [概要] [仕組み] [実装] [コマンド] [パケットの条件] [制限]