1 写在前面的话:由于网络设备存在固有的滞后,所以交换网络中也存在数据传播延迟。基于上述原因,拓扑变更就可能发生在交换网络中的不同时间和不同的网段。如果2层接口直接从生成树的Blocking切换到Forwading,就可能会出现暂时的数据环路或者暂时的大量数据泛洪。为了缓解这种问题,在开始转发数据帧之前,端口应当等待新的拓扑信息传播到整个交换网络中。
2 STP计时器
STP有三个非常重要的计时器:网络中的生成树拓扑依附于根网桥的计时器,根桥将BPDU中的计时器传递给所有交换机。对于802.1D的STP而言,端口从Blocking到Forwarding通常要30-50s(30s是15+15,也就是两个转发延迟时间,50s即20+15+15)。
3 STP 定义的端口状态如下:关于为什么要定义这么多的端口状态,其实很好理解,拿Learning来说,为什么不让端口一旦被选举为指定端口后立即进入转发状态呢?设想一下,端口激活后,在它上面是没有学习到任何的MAC地址表项的,如果没有Learning状态的话,端口直接进入转发状态,就有可能引发短暂的数据泛洪。
4 STP端口状态转换过程
二、STP拓扑变更
1 STP拓扑变更概述
当网络拓扑发生变化的时候,最先意识到变化的交换机会从根端口发送TCNBPDU(BPDU报文中TYPE字段=0x80),也就是朝着根桥的方向发送TCNBPDU,这个消息会一跳一跳地传递到根交换机。上联的交换机在收到了该交换机发送上来的TCNBPDU后,除了向它自己的上一级交换机继续发送TCN BPDU外,还需回送一个TCABPDU(FLAG字段中TCA位为1的配置BPDU)的确认信息给该交换机。当根桥接收到TCN后意识到了拓扑变化,遂向所有网桥发送TCBPDU(FLAG字段中TC位为1的配置BPDU)。交换机们收到根桥发出来的TCBPDU后,会将自己的MAC地址表的老化时--间由缺省的300s减少为15s(转发延迟计时器的时间),根桥发送的这个TC置位一直会持续35s(20+15)。
在发生以下时间时,交换机发送TCN:
2 TCN BPDUTCN BPDU包含3个字段,它与配置BPDU除了type字段之外的前3个字段完全相同。
3 拓扑变更过程 范例
- 1SwitchA挂掉;
- SwitchB最先检测到拓扑变化,于是产生TCNBPDU并从自己的根端口发送出去(因为根端口是朝着根桥的方向),B将连续发送TCN BPDU直到上游的指定交换机C发送TCNACK进行确认;
- SwitchB收到这个TCN BPDU,回送一个TC ACK位置位的配置BPDU进行确认,同时向自己的根端口转发这个TCNBPDU;
- Root收到这个TCN BPDU,回送一个TC ACK位置位的配置BPDU给C;
- Root修改自己的配置BPDU,以此来通告整个交换网络关于拓扑变更的情况。Root在配置BPDU中设置一段时间的拓扑变更(将配置BPDU中FLAG字段的TC位设置为1),这段时间等于Forward DelayTime + Max Age,默认35s。这个配置BPDU消息会泛洪到整个交换网络;
- 当交换机收到Root发出的这个TC置位的配置BPDU,它们使用转发延迟计时器(默认15s)来更新其MAC地址表中的条目。也就是说条目的寿命由原来的300s的默认值变成15s,这样能保证MAC地址条目更快速的刷新。交换机将持续这个过程,直到不再从Root收到TCBPDU消息为止。
我们会发现当拓扑变更的时候,就会产生TCN,然而有些情况下TCN的过渡泛洪可能会对网络才成不必要的影响,通过在接入层交换机上、连接PC终端设备的接口设置为portfast可以在一定程度上优化网络,防止由于PC的开关机导致的接入交换机端口updown而产生过多的TCN。
4 BPDU Flags
红茶三杯
网络工程 | 项目管理 | 技术培训学习 沉淀 成长 分享微博:http://weibo.com/vinsoney博客:http://blog.sina.com.cn/vinsoney站点:http://ccietea.com