该拓扑之所以连接一个环路,是为了双链路热备,任何时候只有“链路1”和“链路2”中的一条处在工作状态,这是通过vrrp来完成的(本文并不讨论),问题是,vrrp选中的一条链路必须也是STP选中的链路,这需要vrrp和STP协商的联动(本文不讨论),在本拓扑中,SW3和SW4使能STP,SW1和SW2比较低端,不支持STP协议,PC的默认网关指向R0。现象是这样的:
PC起初可以通过R0正常访问外网,然而当链路切换之后,PC将不能访问外网,要等待一段时间后才可以。
为什么会这样的,按照常理分析,我们知道当PC访问外网时,首先会封装目的地址为R0的MAC地址的以太帧,因为R0是下一跳。然而为何数据帧到不了R0呢?明明链路是通的啊!?
问题恰恰就在SW1和SW2不支持STP。STP协议说了,当拓扑改变时,所有参与STP协商的交换机都会将其“端口-地址”映射表的寿命设置为一个很短的时间,使所有的端口-地址映射在拓扑稳定之前全部过期。虽然SW1和SW2不支持STP,但毕竟它们也是标准的以太网Switch,而不是Hub,这就说明SW1和SW2也分别有一张映射表,由于它们都不支持STP,因此映射表内容并不受STP的影响,STP会认为SW1和SW2只是一根导线(双绞线),因此SW1和SW2的映射表并不过期。
起初,假设链路1是工作链路,此时R0的MAC地址在SW2上对应的端口是port1,此时发生了切换,SW4成为根交换机,SW4的port1和port2均成为forwarding状态,而SW3的一个端口将blocking,此时PC机发包了,由于PC机的ARP表中的R0对应的MAC地址并未过期,因此PC机直接发包,目的MAC为R0的MAC,此数据帧到达SW2后,由于端口-地址映射表还是原来的,所以数据帧从port1发出,数据帧在SW3被丢弃...只有待到PC的arp表的R0项到期或者SW2的端口-地址映射表的R0项过期,数据才会通过链路2。SW2的映射表过期自然不必说,如果没有对应的表项,广播之。如果PC的arp对应项过期,需要重新arp,而arp请求本来就是广播的,待到arp回应从链路2回来时,SW2将重新学习到R0对应的端口为port2,至于arp回应如何能在SW1到达SW1的port2,是因为arp请求中已经经过了链路2到达SW1的port2,PC的MAC已经被SW1如此学习到了。
原文链接: https://blog.csdn.net/dog250/article/details/7380580
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;
也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/409172
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!