关于 Loop-Protection 的描述先看下华为官方 PPT 的描述:
在启动了环路保护功能后,如果根端口或Alternate端口长时间收不到来自上游设备的BPDU报文时,则向网管发出通知信息(此时根端口会进入Discarding状态),而阻塞端口则会一直保持在阻塞状态,不转发报文,从而不会在网络中形成环路。直到根端口或Alternate端口收到BPDU报文,端口状态才恢复正常为Forwarding状态。
✿首先 长时间究竟是多长?
✿其次 偶然间看到了另一个说法,原处已无法查询。大致是说部署了 Loop-Protection 后无法 收到 BPDU 一定时间后并不会立即进入 Discarding 状态,而是要多等 2个 Forward Delay 后重新收敛,改变端口角色。
为此才有了下面的实验
拓扑说明:全部分别启用 STP 和 RSTP 分2次测试,LSW1 STP 优先级 4096 作为根桥。LSW1 LSW3 之间用 Hub 连接,模拟 LSW3 根端口无法收到 BPDU 的方法是关闭 LSW1 连接 Hub 的端口 e0/0/2,这样并不会使 LSW3 连接 Hub 的端口 e0/0/2 Down 掉。
直接上图,图一是 STP 的效果;图二是 RSTP 的效果。
根据下边 WireShark 的实时抓包(都是抓 LSW3 的根端口 e0/0/2),可以看见从 LSW3 根端口 e0/0/2 无法收到根桥发送的 BPDU 到触发 Loop-Protection 进入 Discarding 状态的时间间隔都基本是 20秒。回答了第一个问题,那个长时间应该就是这个 20秒。
图一 STP 模式下
因为是 STP,端口接收 BPDU 的超时时间就是 Max Age 20秒。所以第二个问题说明子虚乌有。
图二 RSTP 模式下
因为 RSTP 端口接收 BPDU 的超时时间不再看 Max Age 而是2个 Hello Timer 4秒。如果是这样那就说明问题一那个 长时间=4秒+16秒。这样看上去似乎此时问题一的那个长时间就应该是 4秒,后边的16秒应该是说 4秒超时后不会立刻进入 Discarding 状态,而是要多等一个时间。由于误差的存在可以认为是1个 Forward Delay 15秒。
所以 RSTP 模式下似乎两个问题都有了答案。
可以看出来如果 RSTP 是 2倍 Hello+Timer 超时后再等一个 Forward Delay 后再进入 Discarding 状态就同 STP 的现象发生了冲突。所以还要进一步探讨。
为了对比又在 Pnet 上以 Cisco 设备重现上述操作
全部运行 MSTP,SW1 是根桥,SW3 上开启 loopguard。由于 Pnet 设备间实际是隐藏了一个 Hub ,所以 SW1 接口关闭并不会导致 SW3 接口也 down。
当我在 SW1 的 e0/1 上 shutdown时。时间是 16:49:58.355
在 SW3 上原根端口 e0/1 上触发 loopguard 的时间:16:50:00,时间间隔将近 2秒而已
可见2个厂商的区别还是很明显的。不过经过这次对比实验我个人较为倾向于开篇华为官方 PPT 上的说法,就是等待一个长时间后直接进入 Discarding 状态,而且要直到重新收到 根桥的 BPDU才会解除 Discarding 状态。而不是等待一个长时间后再多等一个额外的特定时间才能进入 Discarding状态。
重新做的实验,等了足够长的时间发现那个时间差不多是 100秒