在上XCIE VIP课程的时候, 我讲到了 ICMP Redirects 会和 FHRP 冲突,不兼容,课后,很多小伙伴在问, 为什么他们会冲突,今天在这里和大家讨论一下!
以上图为例:
首先要明确几个机制:
① ICMP Redirects 产生的机制,当3层转发者收到一个数据包,发现我要将它转发给目的 IP 的路由指向的出接口恰恰就是我收到该数据包的接口,这时就会触发 ICMP Redirects。它会将路由的下一跳地址回复给终端,通知它以后再去往该目的地直接发给这个地址。
( 免费领取模拟器、题库、学习视频等,关注公众号:网络工程师集中营)
② 终端本地的路由:终端本地也会有路由,分为临时和永久。临时路由除非使用命令覆盖、删除或终端重启不然就会一直存在。而对于 ICMP Redirects 回来的就会生成这样一个临时路由。
③ HSRP 之所以可以实现冗余,实现替换,就是因为使用了 Virtual IP 和 Virtual MAC。
冲突产生的过程:
① PC 要发包给 1.1.1.1/32,由于这个目的 IP 与我自身并不在同一个网络,因此我要发包给网关中转。此时 PC 上已经配置了 HSRP 的 Virtual IP 作为网关地址。所以我要先发一个关于 Virtual IP 192.168.10.254 的 ARP 广播,用来解析它对应的 MAC 地址。
② SW2 和 SW3 的 Vlanif 10 都会收到这个 ARP 请求。去掉二层,发现三层目的 IP 是 Virtual IP。这时只有处于 Active 状态的 SW2 会处理,处于 Standby 的 SW3 会直接丢弃。
③ SW2 会使用 Virtual MAC 0000.0ca7.ac0a (因为是 standby 10,10的16进制是 0x0a)作为 ARP 应答单播发回给 PC。
④ 在这一来一回过程中 ASW 都会根据源 MAC 地址详细记录生成对应的 CAM 表项
aabb.cc00.0200 是 SW2 的 e0/0 对应的 MAC
aabb.cc00.0220 是 SW2 的 e0/2 对应的 MAC
aabb.cc00.0300 是 SW3 的 e0/0 对应的 MAC
0000.0c07.ac0a 是 HSRP 组10 的 Virtual MAC
0050.7966.6808 是 PC 对应的 MAC
⑤ PC 收到 ARP 应答就会在本地生成 ARP 表项,192.168.10.254 0000.0ca7.ac0a。
⑥ 此时 PC 就会使用 0000.0c07.ac0a | 0050.7966.6808 | 1.1.1.1 | 192.168.10.1 作为二、三层的目的、源 MAC、IP 发包给网关 192.168.10.254。
⑦ 到达 ASW 后,根据目的 MAC 查表得知要从 e0/0 发走。
⑧ SW2 收到后,发现目的 MAC 是我的 HSRP Virtual MAC 地址,会接收,二层解封装,又发现三层目的 IP 1.1.1.1 可以被我的路由表中的条目匹配到。要从 e0/0 发给 12.1.1.1
以上是正常情况下的转发流程。现在如果 SW2 发现 12.1.1.0/24 这条链路 Down了,由于运行了 EIGRP 所以会学到新的去往 1.1.1.1/32 的路由,要发包给 192.168.10.252
此时
① 如果没有开启 ICMP 重定向,SW2 就会乖乖的将数据包发给 192.168.10.252 即 SW3 的 Vlanif 10 的 IP。然后由 SW3 再发包给 13.1.1.1。
这种情况下,对于 PC 他关于 1.1.1.1/32 的路由并没有改变,依然使用 Virtual IP 作为网关,同时二层使用 Virtual MAC 作为目的MAC。如果 SW3 也挂掉但是 SW2 的上行链路又恢复如初时,PC 去往 1.1.1.1/32 的数据还是会被正常转发。
② 如果开启了 ICMP 重定向,SW2 发现我从 Vianif 10 受到去往 1.1.1.1 的包我还要通过“原”接收接口发走【这里由于多层交换机使用 Vlanif 作为出接口,虽然我们接收发送的真实物理接口可能不一样,但都是 Vlanif 10,所以对于 MLS 来说就会认为是相同接口。】这样就会触发 ICMP 重定向,这时就会使用 SW3 的 Vlanif 地址 192.168.10.252 来做 ICMP Redirects 给 PC。
于是 PC 就会建立一条临时路由:1.1.1.1 192.168.10.252。然后发包给它而不再是 Virtual IP。这样一旦 SW3 挂掉,即使 SW2 上行链路恢复正常 PC 由于这条临时路由的存在就不会再切换回 SW2。从而导致无法通信。