ARP缓存溢出时会发生什么?


14

在至少一种实施方式中,对ARP表的容量有硬限制。当ARP缓存已满,并且提供的数据包带有未缓存的目标(或下一跳)时,会发生什么情况?幕后情况如何,对服务质量有什么影响?

例如,Brocade NetIron XMR和Brocade MLX路由器具有可配置的ip-arp系统最大值。在这种情况下,默认值为8192。/ 19子网的大小。从文档中不清楚这是每个接口还是整个路由器,但是出于这个问题的目的,我们可以假定它是每个接口。

很少有网络人员会故意在接口上配置/ 19子网,但事实并非如此。我们正在将核心路由器从Cisco型号迁移到Brocade。思科和Brocade之间的众多区别之一是,思科接受使用出站接口和下一跳地址定义的静态路由,但Brocade坚持使用另一种。我们删除了下一跳地址并保留了接口。后来,我们了解了我们的方法的错误,并从接口更改为下一跳地址,但是一切似乎在最初就可以正常工作。

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

在迁移之前,R1是Cisco,并且具有以下路由。

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的链路上只有两个节点,R1也会遭受ARP缓存过载,因为R1会导致R2的行为就像直接连接所有65k地址一样。

我之所以问这个问题,是因为我希望它能帮助我理解导致几天后导致我们溢出ARP缓存的网络服务故障报告(几天后)。本着StackExchange模型的精神,我试图将其提炼为我认为是一个可以客观回答的明确而具体的问题。

编辑1要清楚,我要问的是数据链路(第2层)和网络(第3层)之间的粘合层的一部分,而不是数据链路层中的MAC转发表。主机或路由器将前者构建为将IP地址映射到MAC地址,而交换机将后者构建为将IP地址映射为端口。

编辑2尽管我感谢响应者付出的努力来解释为什么某些实现不受ARP高速缓存溢出的影响,但我觉得解决这个问题很重要。问题是“什么时候会发生”,而不是“供应商X容易受到影响”。现在,我通过描述一个具体示例来完成自己的任务。

编辑3这不是另一个问题是“如何防止ARP缓存溢出?”


您是否在寻找有关mac地址表或ARP表溢出的信息?
Mike Pennington

您能否详细说明一下arp表将如何溢出?这与一个真正的问题有关,还是纯粹是假设的?无论哪种方式,我们都需要详细了解我们所要应对的具体情况
Mike Pennington

@MikePennington这是一个真正的问题。如果,例如,单个链路上存在大量IP,或者它们的行为就好像它们存在一样,则ARP缓存可能会溢出。
neirbowj

除非ARP来自路由器上配置的子网,否则Cisco IOS不会在路由器上缓存ARP。当我说“真正的问题”时,是指您遇到的问题...不是您想像的问题可能发生
Mike Pennington

感谢您改写这个问题,因为当我想到交换机(第2层)时,您没有ARP表。ARP与TCP / IP有关,而第2层交换机却没有这样的想法,但是当您进入第3层交换机时,您可能会有ARP表。但是,如果我没记错的话,第3层交换机上的接口必须具有IP地址才能显示在ARP表中。起初我真的不明白您在说什么,清晨的客人对我很刻薄。在我的程序员认为,一旦ARP表已满,要么崩溃,改写或删除任何新的ARP表项的亲
SysEngT

Answers:


4

编辑2

如你所说...

ip route 10.1.0.0 255.255.0.0 iface0

强制Brocade为10.1.0.0/16中的每个目的地代理代理服务器,就好像它直接连接到iface0

对于Brocade的ARP缓存实现,我无法回应,但我只是指出解决您问题的简单方法...以不同的方式配置您的路由:

ip route 10.1.0.0 255.255.0.0 CiscoNextHopIP

这样,可以防止Brocade对所有10.1.0.0/16进行ARP-ing(请注意,根据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都打包了...即一百万个ARP条目。

4094 * 252 = 1,030,680 ARP Entries

这些ARP中的每一个都会在ARP表本身以及IOS邻接表中消耗一定数量的内存。我不知道这是什么,但可以说ARP总开销是10字节...

这意味着您现在已经消耗了10MB的ARP开销。它仍然不是很多空间...如果您的内存不足,则会看到类似的信息%SYS-2-MALLOCFAIL

有了那么多的ARP和4个小时的ARP超时,您平均必须平均每秒要服务近70个ARP。维护100万个ARP条目很可能会耗尽路由器的CPU(可能是CPUHOG消息)。

此时,您可以开始退回路由协议的邻接关系,并且由于路由器CPU太忙而无法使用ARP来获取IP,因此IP无法访问。


2

我只有这种情况的实际经验是在C3550交换机上(2-8k MAC限制,取决于sdm模板),它从表中删除了最早的条目。


1
听起来您正在谈论的是MAC转发表,而不是ARP缓存。请看我的编辑。
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(条目> = tbl-> gc_thresh3'||”行开始)和“ net / ipv4 / arp.c”。
在Linux中,您似乎需要有三个完整级别

  1. gc_thresh1-在被击中之前什么也没做
  2. gc_thresh2-这可以被瞬间击中
  3. gc_thresh3-不能超过此大小

当gc_thresh3尝试超过该值时,它将尝试强制运行垃圾回收,除非它最近已经运行过。垃圾回收似乎删除了不再引用的条目,因此并不意味着最旧或最新,但是gc_staletime超出似乎是取消引用条目的一种方法,这又转换为最旧的条目。
如果垃圾收集无法运行,则不会添加新条目。所有这些gc_threshN和定期垃圾收集间隔都可以调整。
该代码与地址族(ipv4,ipv6)无关,因此IPv6 ND和IPv4 ARP表由完全相同的代码路径而非重复路径处理。


1

IP地址会将它存储在表中,并且根据具体实现,应删除最旧的条目。对性能的影响取决于(如果这种情况很少发生)影响不大,但这是一种攻击媒介,因此有人可以发送大量会影响处理器利用率的arp


1

交换机将使用ARP来获取该目标IP的MAC地址(该MAC地址还将用响应填充CAM表)。ARP请求广播到所有端口。这需要CPU并涉及该ARP Input过程。如果ARP请求针对同一IP,则由于ARP表频繁溢出,交换机应将ARP速率限制为每两秒一次。如果请求是足够频繁地随机分配IP,则CPU可能会飙升,因为该CPU参与了ARP请求和响应。


您在哪里找到“每两秒钟一次”的限制?
Marco Marzetti

“对同一IP地址的ARP请求的速率限制,以一个请求每两秒钟” - cisco.com/en/US/products/hw/routers/ps359/...
generalnetworkerror

它不是C7500的特定值吗?例如,C6500可以使用“ mls qos协议arp Police <bps>”命令或CoPP。
Marco Marzetti

1

从我在Cisco 3550、3560等交换机上了解到的攻击中,一旦MAC地址限制过载,就可以将它们变成巨型集线器。交换机具有可以存储的MAC地址设置的限制(大约6000),一旦达到该限制,它将会将所有数据泛洪到其接口之外。不记得那是否适用于802.1q数据包,因为我已经很长时间没有这样做了。可能必须在家中启动我的网络实验室才能找到答案。


听起来您在谈论的是MAC转发表,而不是ARP缓存。请看我的编辑。
neirbowj
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.