ARPキャッシュがオーバーフローするとどうなりますか?


14

少なくとも1つの実装では、ARPテーブルの容量に厳しい制限があります。ARPキャッシュがいっぱいで、キャッシュされていない宛先(またはネクストホップ)でパケットが提供されるとどうなりますか?フードの下で何が起こり、サービス品質にどのような影響がありますか?

たとえば、Brocade NetIron XMRおよびBrocade MLXルーターには、最大構成可能ip-arpシステムがあります。その場合のデフォルト値は8192です。/ 19サブネットのサイズ。これがインターフェイスごとであるかルーター全体であるかはドキュメントから明らかではありませんが、この質問の目的のために、インターフェイスごとであると仮定できます。

意図的にインターフェイス上に/ 19サブネットを構成するネットワーカはほとんどいませんが、そうではありません。コアモデルをシスコモデルからBrocadeに移行していました。シスコとBrocadeの多くの違いの1つは、発信インターフェイスとネクストホップアドレスの両方で定義された静的ルートを受け入れるが、Brocadeはどちらか一方を要求することです。ネクストホップアドレスを削除し、インターフェイスを保持しました。その後、方法の誤りを学び、インターフェイスからネクストホップアドレスに変更しましたが、最初はすべて機能しているようでした。

+----+ iface0    +----+
| R1 |-----------| R2 |---> (10.1.0.0/16 this way)
+----+.1       .2+----+
      10.0.0.0/30

移行前、R1はシスコであり、次のルートがありました。

ip route 10.1.0.0 255.255.0.0 iface0 10.0.0.2

移行後、R1はBrocadeであり、次のルートがありました。

ip route 10.1.0.0 255.255.0.0 iface0

R2はCiscoルーターであり、CiscoルーターはデフォルトでプロキシARPを実行します。これは、ARPキャッシュオーバーフローであることが判明した段階を設定する実稼働環境の(誤った)構成です。

  1. R1は、10.1.0.0 / 16ネットワーク宛てのパケットを受信します。
  2. 静的インターフェイスルートに基づいて、宛先のR1 ARPは iface0
  3. R2は宛先に到達できることを認識し、独自のMACでARPに応答します。
  4. R1は、リモートネットワークのIPとR2のMACを組み合わせたARP結果をキャッシュします。

これは、10.1.0.0 / 16の個別の宛先ごとに発生します。その結果、/ 16がR2を超えて適切にサブネット化され、R1とR2に隣接するリンクに2つのノードしかない場合でも、R1は、すべての65kアドレスが直接接続されているかのように動作するため、ARPキャッシュの過負荷になります。

この質問をする理由は、最終的にはオーバーフローするARPキャッシュにつながったネットワークサービスのトラブルレポート(数日後)を理解するのに役立つことを願っています。StackExchangeモデルの精神で、私はそれを客観的に答えられる鮮明で特定の質問であると信じるものに蒸留しようとしました。

編集1明確にするために、データリンク層内のMAC転送テーブルではなく、データリンク(層2)とネットワーク(層3)の間の接着層の一部について尋ねています。ホストまたはルーターは前者を構築してIPアドレスをMACアドレスにマッピングし、スイッチは後者を構築してMACアドレスをポートにマッピングします。

EDIT 2いくつかの実装がARPキャッシュオーバーフローの影響を受けない理由を説明するためにレスポンダーが行った努力に感謝しますが、この質問がそれらに対処することが重要だと思います。問題は、「ベンダーXは影響を受けやすい」ではなく、「いつ起こるか」です。私は今、具体的な例を説明することによって自分の役割を果たしました。

EDIT 3これは別の質問ですが、「ARPキャッシュがオーバーフローするのを防ぐにはどうすればよいですか?」


MACアドレステーブルまたはARPテーブルのオーバーフローに関する情報をお探しですか?
マイクペニントン

arpテーブルがオーバーフローすると思う方法について詳しく説明していただけますか?これは実際の問題に関連しているのですか、それとも純粋に仮想的なものですか?どちらにしても、どの正確なシナリオに対応しているかについての詳細が必要です
マイクペニントン

@MikePenningtonこれは本当の問題です。たとえば、単一のリンクに多数のIPが存在する場合、または存在するかのように動作する場合、ARPキャッシュがオーバーフローする可能性があります。
-neirbowj

Cisco IOSは、ルータ上に設定されたサブネットからARPが送信されない限り、ルータ上のARPをキャッシュしません。私が「本当の問題」と言うとき、私はあなたが抱えている問題を意味します...あなたがイメージングしている問題が起こる可能性はない
マイク・ペニントン

スイッチ(レイヤー2)について考えるとき、ARPテーブルがないので、質問を言い換えてくれてありがとう。ARPはTCP / IPと関係があり、レイヤー2スイッチはそのようなことをしませんが、レイヤー3スイッチングを開始すると、ARPテーブルがあります。ただし、正しく覚えていれば、レイヤ3スイッチのインターフェイスには、ARPテーブルに表示されるIPアドレスが必要です。あなたが最初に言っていたことを本当に理解していませんでした、早朝のゲストは私に荒いです。私のプログラマーは、ARPテーブルがいっぱいになると、新しいARPエントリがクラッシュ、上書き、またはドロップされると考えていますpro
SysEngT

回答:


4

編集2

あなたが言ったように...

ip route 10.1.0.0 255.255.0.0 iface0

に直接接続されているかのように、10.1.0.0 / 16のすべての宛先に対してBrocadeにproxy-arpを強制しますiface0

BrocadeのARPキャッシュの実装についてはお答えできませんが、問題の簡単な解決策を指摘するだけです...ルートを別の方法で構成します。

ip route 10.1.0.0 255.255.0.0 CiscoNextHopIP

これにより、Brocadeが10.1.0.0/16のすべてに対してARPを実行するのを防ぎます(Brocadeの実装によっては、R1とR2間のリンクの番号を10.1.0.0/16の外に変更する必要がある場合があります) 。


元の回答

ほとんど、またはすべての実装で、ARPテーブルの容量に厳しい制限があることを期待しています。

Cisco IOS CPUルーターは、ルーター内のDRAMの量によってのみ制限されますが、通常は制限要因にはなりません。一部のスイッチ(Catalyst 6500など)には、隣接テーブル(ARPテーブルに関連付けられている)に厳しい制限があります。Sup2Tには100万の隣接関係があります。

それでは、ARPキャッシュがいっぱいで、キャッシュされていない宛先(またはネクストホップ)でパケットが提供されるとどうなりますか?

Cisco IOS CPUルーターはARPテーブルのスペースを使い果たしません。これらのARPはDRAMに保存されているためです。あなたがSup2Tについて話していると仮定しましょう。このように考えると、Cat6500 + Sup2Tがあり、技術的にはすべてのVlanを構成したと仮定します。

4094 total Vlans - Vlan1002 - Vlan1003 - Vlan1004 - Vlan1005 = 4090 Vlans

各Vlanを/ 24(したがって252のARPが可能)にし、すべてのVlanを完全にパックすると仮定します。つまり、100万のARPエントリです。

4094 * 252 = 1,030,680 ARP Entries

これらのARPはすべて、ARPテーブル自体の一定量のメモリとIOS隣接テーブルを消費します。私はそれが何であるか知らないが、総ARPオーバーヘッドが10バイトだとしましょう...

つまり、ARPオーバーヘッドに10MBを消費したことになります。それはまだあまりスペースではありません...あなたがそのような低メモリだった場合、あなたは次のようなものを見るでしょう%SYS-2-MALLOCFAIL

そのように多くのARPと4時間のARPタイムアウトがあると、平均で1秒あたり約70のARPを処理する必要があります。100万のARPエントリのメンテナンスにより、ルーターのCPU(潜在的にCPUHOGメッセージ)が消費される可能性が高くなります。

この時点で、ルーティングプロトコルの隣接関係のバウンスを開始し、ルーターのCPUがIPに対してARPを実行するにはビジーであるため、到達不可能なIPを持つことができます。


2

この出来事で実際に経験したのは、C3550スイッチ(sdmテンプレートに応じて2〜8kのMAC制限)のみで、そこで最も古いエントリがテーブルから削除されました。


1
ARPキャッシュではなく、MAC転送テーブルについて話しているようです。私の編集をご覧ください。
-neirbowj

1
あなたの言ってる事がわかります。ただし、この特定のケースでは、これらのスイッチが多数の非常に大きなIPサブネットのL3終端でもあったため、効果は同じでした。最終的にスイッチを交換することで解決しました。L2ではスイッチはMACをキャッシュできないフレームをフラッディングしますが、L3では古いARPエントリやすべてのパケットのARPをドロップする必要があり、それらのCPUはすぐに使い果たされます。

2

IOSとJunOS、およびテストする必要がある他の商用スタックの場合、幸運なことにそれほど難しくはありません。

しかし、linux、freebsd、netbsd、openbsd、uIP、lwIP、およびおそらく他の多くの実装では、動作についてソースコードをチェックするだけで済みます。

Linuxでは、 'net / core / neighbour.c'( 'if(entries> = tbl-> gc_thresh3' || ')行で始まる)および' net / ipv4 / arp.c 'を確認する必要があります。Linuxでは
、 3つのフルレベルがあります

  1. gc_thresh1-これがヒットするまで何も行われない
  2. gc_thresh2-これは瞬間的にヒットする可能性があります
  3. gc_thresh3-このサイズを超えることはできません

gc_thresh3は、既に実行されていない限り、ガベージコレクションを強制的に実行しようと試みます。ガベージコレクトは、もはや参照されていないエントリを削除するように見えるため、最も古いまたは最も新しいことを意味しませんが、gc_staletimeの超過はエントリを逆参照する1つの方法のようです。
ガベージコレクトを実行できない場合、新しいエントリは単に追加されません。これらのgc_threshNと定期的なガベージコレクションの間隔はすべて調整できます。
コードはアドレスファミリ(ipv4、ipv6)に依存しないため、IPv6 NDテーブルとIPv4 ARPテーブルは、重複するパスではなく、まったく同じコードパスで処理されます。


1

IPアドレスがテーブルに保存されると、実装に応じて最も古いエントリが削除されます。パフォーマンスへの影響は、これがあまり発生しない珍しい出来事であるかどうかによって異なりますが、これは攻撃ベクトルであるため、誰かがプロセッサの使用率に影響を与える多くのarpを送信できます


1

スイッチは、その宛先IPに対してARPを実行して、MACアドレスを取得します(これにより、CAMテーブルに応答が追加されます)。ARP要求はすべてのポートにブロードキャストされます。これにはCPUが必要で、ARP Inputプロセスが関係します。ARPテーブルが頻繁にオーバーフローするためにARP要求が同じIPに対するものである場合、スイッチはARPを2秒ごとに1回にレート制限する必要があります。要求が十分な頻度でIPをランダム化する場合、CPUはARP要求と応答の両方に関与するため、CPUが急上昇する場合があります。


「2秒に1回」という制限はどこで見つけましたか?
マルコマルゼッティ

- 「同じIPアドレスに対するARP要求は1つの要求にレート制限は2秒ごとにある」cisco.com/en/US/products/hw/routers/ps359/...
generalnetworkerror

C7500固有の値ではありませんか?たとえば、C6500は「mls qos protocol arp police <bps>」コマンドまたはCoPPを使用できます。
マルコマルゼッティ

1

Cisco 3550、3560などのスイッチで学んだ攻撃から、MACアドレス制限をオーバーロードすると、それらを巨大なハブに変えることができます。スイッチには、保存できるMACアドレスの制限(約6000)が設定されており、その制限に達すると、すべてのデータがインターフェイスにあふれます。私は長い間やらなければならなかったので、それが802.1qパケットに当てはまるかどうか思い出せません。自宅でネットワークラボを起動して確認する必要がある場合があります。


ARPキャッシュではなく、MAC転送テーブルについても話しているようです。私の編集をご覧ください。
-neirbowj
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.