STP是一个需要众力协作的协议

STP可以切掉交换以太网的环路,然而如果你真的不能容忍任何环路,必须使能所有交换机的STP协议,目前很多的本地以太网都是任意组建的,宗旨在于能用即可,而且很多低端的交换机并不支持STP协议...除了环路问题之外,还有一个比较隐蔽的问题更容易引入很奇怪的现象,毕竟很多以太网并不会连成环路,不需要冗余热备的情况下,几乎没有人故意将网络连成有环的吧。本文考虑这个问题,首先看一个拓扑:


该拓扑之所以连接一个环路,是为了双链路热备,任何时候只有“链路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如此学习到了。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值