IP : IP スイッチング

Cisco Express Forwarding(CEF)におけるプレフィクスの不一致のトラブルシューティング

2003 年 12 月 1 日 - ライター翻訳版
その他のバージョン: PDFpdf | 機械翻訳版 (2013 年 8 月 21 日) | 英語版 (2005 年 8 月 10 日) | フィードバック

目次


概要

この資料では、分散型Cisco Express Forwarding(CEF)が稼働するCisco 7500および12000シリーズ ルータ上で新しく使用可能になったConsistency Checkerについて説明します。Consistency Checkerは、Cisco IOS® ソフトウェアRelease 12.0(15)Sおよびその他のリリース トレインから導入され、ライン カードおよびルート プロセッサ(RP)上の転送情報の同期が失われた状況を検知します。Checkerが問題を検知すると、IOSは次のようなログ メッセージを出力します。

 %FIB-4-RPPREFIXINCONST2: RP missing prefix for 133.160.0.0/16 (present in routing table)
   %FIB-4-RPPREFIXINCONST2: RP missing prefix for 133.160.0.0/16 (present in routing table)
   %FIB-4-LCPREFIXINCONST2: Slot 1 missing prefix entry for 64.0.17.0/32
  

この資料では、CEFで発生する不一致のトラブルシューティング方法について説明します。

CEFフォワーディング テーブル

Consistency Checkerが何をチェックするのかを理解するためには、まず、CEFフォワーディング テーブルについて良く知っておく必要があります。

CEFは、ルータが入力インターフェイスから出力インターフェイスにパケットを転送するための高速スイッチング メカニズムです。CEFでは、ルータ メモリに保管された次の2種類のデータ構造(テーブル)が使用されます。

  • Forwarding Information Base(FIB) - 転送先の決定に使用する情報のデータベースです。概念的にはルーティング テーブルまたはルート キャッシュと似ていますが、実装方法が異なります。

  • Adjacency(隣接関係) - ネットワーク上の2つのノードが、リンク レイヤを通して互いにシングル ホップで到達できる場合、それらのノードは隣接しているといいます。

FIBテーブルは、次のいずれかの状況が発生すると更新されます。

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

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

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

Cisco 7500および12000シリーズ ルータは、分散型CEF(dCEF)をサポートしています。dCEFでは、ライン カードはRPと同じFIBテーブルおよび隣接関係テーブルのローカル コピーを使用して、パケットの転送先を決定します。これらのテーブルは、RPとライン カードの間で常に同期している必要があります。RPのテーブルに変更があった場合には、その変更をライン カードに転送する必要があります。

Inter-Process Communication(IPC)は、分散型パケット転送をサポートするルータが使用するプロトコルです。CEFアップデートは、IPCメッセージ内のeXternal Data Representation(XDR)情報として符号化されます。次の図に、CEFデータ構造の分散メカニズムを示します。

Diagram

不一致とは何か?

不一致には次の2タイプがあります。

  • ライン カード上の情報の欠落(特定のプレフィクスの欠落など)

  • ライン カード上の情報の食い違い(異なるネクスト ホップIPアドレスなど)
router#show ip cef 24.20.84.32
  24.16.0.0/13, version 833173, cached adjacency to POS6/0
  0 packets, 0 bytes
  Flow: AS 6172, mask 13
  via 4.24.234.153, 0 dependencies, recursive
  next hop 4.24.234.153, POS6/0 via 4.24.234.152/30
  valid cached adjacency
router#execute-on all sh ip cef 24.20.84.32
  ========= Line Card (Slot 1) =======
  24.16.0.0/13, version 408935, cached adjacency 0.0.0.0
  0 packets, 0 bytes
  Flow: AS 6172, mask 13
  via 157.130.213.1, 0 dependencies, recursive
  next hop 157.130.213.1, POS1/0.500 via 157.130.213.0/30
  valid cached adjacency
  ========= Line Card (Slot 2) =======
  24.16.0.0/13, version 13719, cached adjacency 0.0.0.0
  0 packets, 0 bytes
  Flow: AS 6172, mask 13
  via 157.130.213.1, 0 dependencies, recursive
  next hop 157.130.213.1, POS1/0.500 via 157.130.213.0/30
  valid cached adjacency
  

CEFの不一致は、次の例のように、show cef linecardコマンド出力の [CEF-ver] カラムの値が異なることで示されます。


  
7505-2A#show cef linecard
  CEF table version 35, 11 routes                                               
  Slot CEF-ver    MsgSent    XDRSent  Window   LowQ   MedQ  HighQ Flags         
  1          0          0          0 LC wait      0      0      0 disabled      
  2         31         95        422      24      0      0      0 up, sync      
  3         34        105        544      24      0      0      0 up, sync
  

次の条件が成立していれば、show ip cef summaryコマンドの出力では、RPでもLCでも、ルート数および隣接の数が同じになるはずです。

  • すべてのライン カードが [up, sync] ステートである。

  • RPおよびLCのXDRキューが空白である(RPに関してはshow cef linecardコマンド出力の [LowQ/MedQ/HighQ] カラム、ライン カードに関してはshow cef linecardコマンド出力の [RP messages to be processed] データ)。

注: 例外として、Cisco 12000シリーズEngine 2 LCでは、パケット スイッチングASIC(PSA)によって追加のルートがインストールされ、それによってACLが実装されます。

IOS 12.0(22)Sには、show ip cef inconsistency nowコマンドを実行して問題の有無を調べることができる、CEF Consistency Checker v2(IOS 12.1Eに含まれる)が組み込まれる予定です。

Inconsistency Checkerの概要

RPおよびライン カード上のルーティング データベースが更新されていくにつれ、これらのデータベースの分散メカニズムの非同期性に起因して、両者に食い違いが生じることがあります。CEFは、独立的に運用できる各種の受動的(パッシブ)および能動的(アクティブ)なConsistency Checkerをサポートしています。 次の表で、これらの機能について説明します。

検出メカニズム 動作対象 説明
Lc-detect ライン カード ライン カード上で動作し、FIBテーブルから欠落しているIPプレフィクスがないかどうかをチェックします。IPプレフィクスが欠落していると、ライン カードはそれらのアドレスにパケットを転送できません。この場合、Lc-detectは、確認のためRPにIPプレフィクスを送信します。RPに該当するエントリがあれば、不一致とみなされ、エラー メッセージが表示されます。さらにRPはライン カードに対し、そのIPプレフィクスが不一致であることを確認する信号を送り返します。
Scan-lc ライン カード ライン カード上で動作し、FIBテーブルを設定された時間だけスキャンして、次の n 個のプレフィクスをRPに送信します。RPは正確な突き合わせを行います。欠落しているプレフィクスが見つかると、RPは不一致を報告します。最後に、RPはライン カードに対し、確認メッセージを送り返します。
Scan-rp ルート プロセッサ (scan-lcとは逆に)RP上で動作し、FIBテーブルを設定された時間だけスキャンして、次の n 個のプレフィクスをライン カードに送信します。ライン カードが正確な突き合わせを行います。欠落しているプレフィクスが見つかると、ライン カードは不一致を報告し、最後にRPに対し、確認信号を送信します。
Scan-rib ルート プロセッサ すべてのRP上で動作し(非分散型)、RIBをスキャンして、それらのプレフィクス エントリがRPのFIBテーブルにあるかどうかを確認します。

イネーブルに設定したConsistency Checkerおよび関連する変数を設定するには、次のコマンドを使用します。

  • ip cef table consistency-check type <type> [period <seconds>] [count <count>] - Checkerの一般的なパラメータを制御します。

  • ip cef table consistency-check - サポートされているタイプをイネーブルまたはディセーブルにし、スキャンを実行する時間、およびスキャン対象のプレフィクスを制御します(lc-detectを除く)。Consistency Checkerは、デフォルトではディセーブルに設定されています。

CEFの不一致のトラブルシューティング

不一致は本来、発生してはならないものです。不一致が発見された場合は、詳しく調査する必要があります。次のCEF debugコマンドおよびshowコマンドを使用して、トラブルシューティングを行います。

  • show ip cef inconsistency records detail - 検出メカニズムの統計情報を表示します。また、確認された何種類かの(現在は4種類の)不一致について、詳細情報を記録します。

  • show ip cef inconsistency - ステータスのサマリーを表示します。

    Table consistency checkers (settle time 15s)
           lc-detect: running
            0/0/0 queries sent/ignored/received
           scan-lc: running [100 prefixes checked every 60s]
            0/0/1053 queries sent/ignored/received 
           scan-rp: running [100 prefixes checked every 60s]
            1053/0/0 queries sent/ignored/received
           scan-rib: running [1000 prefixes checked every 60s]
            81/0/81 queries sent/ignored/received
          Inconsistencies: 0 confirmed, 0/4 recorded

  • show ip cef inconsistency records - 記録されている不一致をダンプするには、recordsキーワードを使用します。

  • show ip cef inconsistency records detail および execute-on slot <problem slot>
    router#exec slot 2 show ip cef inconsistency records detail
        ========= Line Card (Slot 2) =======
      
        Table consistency checkers (settle time 65s)
          lc-detect: running
           0/0/0 queries sent/ignored/received
          scan-lc: running [100 prefixes checked every 60s] 
           1289156/0/0 queries sent/ignored/received
          scan-rp: running [100 prefixes checked every 60s] 
           0/0/1068308 queries sent/ignored/received
          scan-rib: running [1000 prefixes checked every 60s] 
           0/0/0 queries sent/ignored/received
        Inconsistencies: 340 confirmed, 1/4 recorded
        Test table insert mode: normal
        Test table remove mode: normal
        -------- Inconsistency record 0 --------
        Prefix entry for 192.168.3.10/32 present on RP, missing on slot 2
        Detected at 00:01:46.736 by scan-rp
        Event log entries relevant for 192.168.3.10:
        +00:00:00.000: *.*.*.*/*          New FIB table           [OK]
          0x403FA4E8 0x403FA530 0x4009C1FC 0x4009C1E8
        +00:00:03.092: *.*.*.*/*          Flush ADJ table        [OK]
          0x404000B0 0x4040EEC0 0x4040F100 0x40401F64 0x404021AC 0x4040229C
        0x404029C8 0x4009C1FC 0x4009C1E8
        +00:00:03.100: *.*.*.*/*          Flush FIB table        [OK]
          0x404039D0 0x40401F4C 0x404021AC 0x4040229C 0x404029C8 0x4009C1FC
      0x4009C1E8
        +00:00:03.124: *.*.*.*/*          New FIB table          [OK]
          0x404039D8 0x40401F4C 0x404021AC 0x4040229C 0x404029C8 0x4009C1FC
      0x4009C1E8
        First event occurred at 00:00:07.600 (2w5d ago) 
        Last event occurred at 00:00:10.724 (2w5d ago)

注: inconsistencyレコードにSNMPでアクセスすることはできません。この機能は、今後のIOSリリースで追加される可能性があります。

トラブルシューティング コマンド

コマンド 目的
clear cef linecard <slot> ライン カードからIPプレフィクスが欠落している場合、このコマンドを使用して、ライン カードのFIBにそのプレフィクスを再インストールします。
clear ip route <prefix> RPからプレフィクスが欠落している場合、このコマンドを使用して、RPのFIBにそのプレフィクスを再インストールします。

Consistency Checkerで問題が検出された場合、その問題を正確にトラブルシューティングするには、次のコマンド出力が必要になります。

コマンド 目的
show ip cef <problem prefix> RP上のFIBのエントリを表示します。
exec all show ip cef <problem prefix> ライン カード上のCEF FIBの値を表示します。
show tech cef CEFに関するテクニカル サポート情報を提供します。
show ip cef inconsistency records detail RP上のCEF FIB不一致に関する詳細情報を表示します。
exec slot show ip cef inconsistency records detail ライン カード上のCEF FIB不一致に関する詳細情報を表示します。
no ip cef table consistency-check Checkerをオフにします。
debug ip cef table consistency-checkers クエリーおよびチェック イベントをデバッグします。

Consistency Checkerのリセット方法

CEFの不一致をクリアするには、clear ip cef inconsistencyコマンドを使用します。Consistency Checkerをオフにするには、no ip cef table consistency-checkコマンドを使用します。Consistency Checkerをオフにしても、報告された問題が解決されるわけではないので注意してください。システムは引き続き不一致のある状態で稼働しているので、不測の事態が引き起こされる可能性があります。

実体のない不一致

CEF Consistency Checkerの最初のバージョンでは、稀にですが、実際には不一致が発生していないにもかかわらず不一致が報告されることがあります。この問題は、(特に大規模な更新が行われる際に)CEFデータベースを更新するとき、およびRPからライン カードへ新しい情報を配布するときの、一時的なタイミングのずれによって生じます。このようなメッセージは、非常に限られた確率でしか発生しないためCPUへの悪影響はありませんが、作業の妨げになります。不一致に関する問題をトラブルシューティングするとき以外は、CEF Consistency Checkerをディセーブルにしておくことを推奨します。

更新プロセス中に実体のないプレフィクス不一致をできるだけ検出させないようにするには、検出を遅延させる時間(settle-time)を調節します。ip cef table consistency-check [settle-time <time>] コマンドを使用します。このコマンドでは、イベント ログが存在することが前提になります。イベント ログが存在しなければ、settle-timeは実質的に0です。

RP上で欠落している隣接プレフィクス(ARPエントリの/32)の誤った検出を防ぐために、65秒のデフォルト値が選ばれています。ARP deleteは、RP上で次の2ステップで行われます。

  1. 隣接が不完全であることがマークされ、隣接プレフィクスが削除されます。

  2. 1分間のadjacency walkerによって隣接が削除され、ライン カードにも同じ動作を行うように通知されます。 

隣接プレフィクスがライン カードに存在していてRPにない場合、このプロセスによって、最大60秒のずれが生じます。

注: Consistency Checkerバージョン2.0では、実体のない不一致の問題は解決されています。

既知の問題点

次の表に、CEF Consistency Checkerに関する既知のバグを示します。このリストは必ずしも完全なものとは限りません。ユーザ登録済みのユーザは、ログインすると、ツール情報に記載されているツールを使用して以下のバグを見ることができます。

バグID 説明
CSCdt18447 CEF Event Logger/Consistency CheckerによるCPUの大量消費
CSCuk23390 lc-detectによってmallocに割り込みレベルでエラーが発生する
CSCuk23290 CEF inconsistency event recorderによって記憶域が不正に割り当てられる
CSCdt04645 メモリ リークの問題(c-stat Consistency Checkerプロセスなど、分散型CEFを実行するあらゆるプロセスに影響)を解決


ツール情報

その他の資料については、ルーティング プロトコル テクノロジー関連のTACツールを参照してください。


関連するシスコ サポート コミュニティ ディスカッション

シスコ サポート コミュニティは、どなたでも投稿や回答ができる情報交換スペースです。


関連情報


Document ID: 14540