这似乎是一个简单/愚蠢的问题,但对我来说并非如此。请记住,我不是网络管理员,所以这对我来说并不明显。无论如何,直截了当:
为什么我需要将 ACL 绑定到特定接口?换句话说,为什么我必须这样做:
interface ethernet0
ip access-group 1 in
而不是告诉路由器/交换机对所有传入流量使用 ACL(在我的示例 #1 中)?就个人而言,我只能想到两个原因(如下),但我有一种奇怪的感觉,可能还有其他原因:
a) 优化。例如,如果硬件为每个网络接口使用一些 ASIC,允许在传入流量“进入”控制平面之前过滤掉它。
b) 按照惯例。这是不太可能的。
谢谢。
好吧,我会说他们这样做是为了粒度,实际上是为了让事情更容易理解,所以不会产生任何混淆。当然,为了让真正特定场景的事情变得更容易,思科可以在全局模式下实施某种命令,这可以很容易地让你将“ip access-group 1 in”应用于多个接口,但我认为这也可以很容易地实现使用“接口范围”命令。
此外,您现在可能遇到的场景非常具体,为了获得更多控制,您需要更具体的 ACL,因此适用于入站流量的规则可能不适用于出站流量,同样是与属于您在网络中定义的不同用途区域(WAN、LAN、DMZ 等)的接口非常相似,但流量可以由同一路由器设备路由。
路由器操作系统试图将 CPU 负载保持在尽可能低的水平。因此,即使接口处理器模块没有自己的 ASIC,它们也使用单独的数据包处理 CPU 循环/线程。
当 ACL 过滤掉不感兴趣的数据包时,它们只是默默地跳过,释放数据包队列内存并且不影响 CPU。
事实上,单个 64K 串行链路的数据包处理可能会压倒一个好的 RISC 处理器。我在 Cisco 3662 被 CodeRed 蠕虫攻击时看到过这种情况,它使用精心设计的 TCP 选项字段绕过接口快速数据包交换路径并到达要路由的 CPU,从而导致持续 100% 的负载。