STP发展史

一、二层网络

1、本地VLAN数据帧转发

Ethernet二层交换数据帧转发处理流程:

Step1. 查找CAM表:根据以太网帧中的dst MAC,比对CAM表中的MAC

  • 如果dst MAC是广播帧/未知单播帧,则执行2nd

  • 如果dst MAC是已知单播帧,则查询对应的接口,学习src MAC并转发;

Step2. 学习src MAC并泛洪转发:学习提取以太网帧中的src MAC,然后将接收该帧的交换机物理接口和该帧的src MAC的对应关系,存到CAM中,然后将该帧泛洪;

广播帧是指帧内的dst MAC为ffff:ffff:ffff,单播帧是指帧内的dst MAC不为ffff:ffff:ffff。已知单播帧就是CAM中有的且不为广播帧的MAC就是已知单播帧,反之就是未知。

泛洪是指将dst MAC为广播地址的帧发送到除接收接口外的其他接口(同属于一个广播域内)或者将数据帧发送给与接收帧的入站端口所属相同VLAN的所有端口。触发泛洪规则:

  • 接收到广播帧

  • 接收到未知单播帧

2、端到端VLAN数据帧转发

1)802.1q封装

access端口发送ethernet帧到交换机,根据ethernet帧的src MAC所属的VID和设置的PVID判断是否为native VLAN:

  • 是,是否允许通过trunk链路

    • 允许,则802.1q协议不会插入任何tag字段入帧,转发802.1q帧到trunk链路上

    • 不允许,丢弃

  • 否,是否允许通过trunk链路

    • 允许,则802.1q协议插入tag字段入帧(根据ethernet帧中的src MAC所属VID查询),重新计算FCS,转发802.1q帧到trunk链路上

    • 不允许,丢弃

trunk端口运行的802.1q协议负责802.1q帧封装

access端口收到802.1q帧,会将tag忽略并当作普通ethernet帧处理

2)802.1q解封装

对端交换机从trunk链路上收到802.1q帧后,先判断是否允许通过,再判断该帧是否有tag:

  • 有,则根据tag信息判断是哪个VID,然后untag形成ethernet帧,然后根据dst MAC查找CAM表转发。

  • 无,则根据配置的PVID和dst MAC查找CAM表转发。

二、二层冗余网络

现网中对冗余链路和设备都有要求,比如上图,SA、SB作为汇聚层交换机,SC作为接入层交换机,两两之间的链路采用冗余设计(etherchannel)。冗余设计的优点就是避免单点故障,增强网络稳定性。但是二层网络在使用冗余技术的同时,需要考虑到二层环路。

二层环路是如何产生的?主机A需要进行二层通信,但是不知道B的MAC,触发ARP请求B的MAC,封装帧为src MAC=A,dst MAC=ffff:ffff:ffff。该帧到交换机,根据二层交换流程,学习src MAC,查看dst MAC为广播帧,执行泛洪。帧从SC到SA和SB,而SA执行相同操作,SA发送给SB,SB同理发送给SC,形成二层环路,每到一次交换机,就会复制广播帧,然后发送,不超过几秒后,整个二层网络充斥着广播帧,严重影响网络通信。二层环路会出现三个严重问题:

  • 重复帧问题:SB收到了2个ARP广播请求帧,从SA和SC发来的。

  • 广播风暴问题:SB把这个ARP广播请求帧再次泛洪给了SA,因为广播帧每经过一次泛洪,数量就翻倍。目前交换机转发数据的速率都是微秒级的,所以不到1s两台交换机之间的小型网络就会充斥着上万个数据包,严重影响交换机性能。

  • CAM紊乱:SB从两个接口都收到了源为主机A的MAC地址,它不知道如何记录,该记f0/15对应主机A的MAC还是f0/16对应主机A的MAC地址。尽管现代网络设备的传输效率已经到达微秒级,但是还是会存在时间差。

所以总结二层冗余网络的问题就是能够解决单点故障,提高网络容错性,但是容易出现二层环路。冗余技术并不是问题,问题是出在如何解决二层环路。各厂商和标准化机构研发了生成树协议(spanning-tree protocol,STP)来解决冗余网络的二层环路问题。简单的说STP就是在逻辑上“剪断”了二层环路。

三、生成树协议发展史

CST802.1D)是STP最初的版本,用来在冗余环路中提供无环的网络拓扑,但是只支持单VLAN,且收敛速度慢。CST假设整个二层网络中只有一个生成树实例,CST支持所有VLAN使用同一个生成树实例,优点就是资源消耗低,缺点就是冗余链路中如果一条链路被CST阻塞,那么所有的VLAN都无法利用该链路,同时有收敛速度慢的缺点。

为了解决CST的缺点,Cisco开发了PVST/PVST+解决方案。该方案是为交换网络中的每个VLAN运行一个独立生成树实例,如果VLAN1被链路1阻塞,那么它可以通过链路2过去,这样就解决了冗余链路利用率低的问题了,但是缺点也很明显就是生成树实例过多容易消耗过多的硬件资源。

RSTP802.1W)是CST的升级版,RSTP提高了二层的收敛速度,但是在大网络中仍然因为端口状态转换延迟而出现数据丢失现象。RSTP仍然是所有VLAN共同一个生成树实例,无法按VLAN阻塞冗余链路,RSTP资源消耗中。Cisco仍然是认为每VLAN生成树实例是最好的方案,于是改进开发了RPVST+方案。

后来Cisco意识到RPVST+的不足,于是开发了MISTP。随着MISTP的实施,该协议得到了IEEE的认可,IEEE根据MISTP开发了MSTP802.1S),将多个VLAN对应到一个生成树实例中,拥有良好的负载分担机制,收敛速度也非常快,资源消耗中高。

任何技术的发展都不会因为某项“理想”技术的出现而停滞,生成树协议的发展历程本身就说明了这一点。随着应用的深入,各种新的协议出现了,例如Cisco为数据中心网络开发的vPC、FabricPath、OTV、QinQ技术等。但是生成树技术仍然是这些技术fail掉后的保险方案,使得二层不至于出现环路。