由上一章知道,透明桥接(被动学习)是一种简单的地址学习方法,只能用于无环路拓扑上。本章介绍生成树协议(Spanning Tree Protocol STP协议)如何消除环路。
阶层交换式L2拓扑范例:
上图中,1,10,11这些数字表示主机的mac地址。该网络中,任何主机间的流量交换都是用的L2协议。整体的拓扑如图b所示,就是一个扁平的LAN。
生成树协议的基本元素:
STP协议是分布式协议,该算法不是在单一设备上运行然后把结果通知给其他设备,它是一种分布式协议。网络中的所用网桥都执行这个协议。STP通过让各个网桥之间交换网桥协议数据单元(bridge protocol data unit ,BPDU)的特殊帧来达到目的,该帧可以让网桥:①为每个网桥端口指定一个明确的状态,例如转发或阻塞,以定义该端口可否接收数据流量。②通过对端口状态的设定,从环路中选择或抛弃链路,最终生成无环路拓扑。
根网桥:①根网桥是唯一能生产BPDU的网桥,其他设备只能在接收到BPDU后,修改某些字段再传输。②当拓扑变化时,根网桥确保每台设备都知道此事。
指定网桥:指定网桥是该LAN中各主机和网桥到达根节点所要通过的网桥,且到到达根网桥的开销最低。
端口状态:
关闭:不能接收或传输任何流量。
阻塞:端口开启但是被阻塞,不能转发流量。
监听:端口开启,但是不能转发流量
学习:端口开启,不能转发流量,但是可以进行地址学习
转发:可以学习地址,可转发数据。
端口角色:
根端口:除了根网桥,其他通往根网桥的路径开销最小的端口就会被选为根网桥。
指定端口:指定网桥上到达根网桥开销最低的端口。当指定网桥连接不同的LAN时可以有多个指定端口,见图15-2。
网桥ID:每个网桥都会分配一个ID,是一个8字节的数。低6个字节是某个端口的mac地址。高2个字节是优先级。
端口ID:每个端口会指定一个ID。ID的一部分代表一个唯一的标识码,称为端口号。另一部分称为端口优先级。
端口开销:每个端口都会被设定一个开销,若没有明确设置,设备会自己设定一个默认值。
定时器:STP为每个端口都有设定一个定时器。
网桥协议数据单元(BPDU):
BPDU有两种:①配置BPDU,用于定义无环路拓扑。②TCN(Topology Change Notification 拓扑变化通知) BPDU。
下面是配置BPDU各字段的含义:
标识:TC(拓扑变化),TCA(拓扑变化确认)。
根网桥ID:
根路径开销:
网桥ID:
端口ID:
消息生存期:自从根网桥生成该BPDU后已经经过的时间。
最大生存期:配置BPDU的最大生存期。
Hello时间:Hello定时器锁用的时限。
转发延时:Forward Delay定时器所用的时限。
优先级向量:
根网桥ID,根路径开销,网桥ID,端口ID共同构成了优先级向量,值越小,优先级越高。后面以[BR-Root,Cost,BR-ID,Port-ID]表示优先级向量。比较方式,先比较BR-root,若相等再比较Cost,以此类推。
下列情况,网桥会从其指定端口传输配置BPDU:
根网桥会运行一个Hello定时器,到期后传输BPDU。只有根网桥能产生BPDU,但是一个网桥上电启动后就会认为自己是根网桥,然后启动hello定时器。
非根网桥只有接收到BPDU后,才能修改并传输BPDU。
注意,网桥从其任何端口每秒只能传输一个BPDU。
选择根网桥:
网桥首次启动时,不知道当前的拓扑结构,会认为自己就是根网桥,因此在其所用端口上不断广播BPDU。这样,每个网桥都会收到BPDU,从而通过比较优先级向量确定真正的根网桥。
选择根端口:
选择指定端口:
定时器:
STP为每个网桥和端口都设有定时器。有些定时器用户无法配置,有些定时器共享相同的配置。
网桥使用的定时器:
Hello:用于定期产生BPDU。只有根网桥使用该定时器。
TCN:由检测到拓扑变化而且必须通知根网桥的网桥使用。
TC:根网桥使用,以便记住要在其配置BPDU中设置一个标识。此标识用来通知其他网桥拓扑变化。
Aging:用于从转发数据库中清除无效的地址。网桥使用,无论是否启用STP。
端口使用的定时器:
Message Age:只要端口接收到一个BPDU,就会对它的消息生存周期和配置的最大生存周期比较,以它们的差值作为定时器时间。定时器到期后,该端口会重新启动。
Forward Delay:该定时器负责状态转移,从监听到学习到转发。
Hold:必要时,在传输BPDU的端口上运行,来限制BPDU的速率,保证,每个端口每秒一个BPDU。
消除临时环路:
根端口和指定端口是唯一处于转发状态的端口,当一个端口被分配为指定端口或者根端口时,不会立即进入转发状态,会先经过两个中间态。这是为了减少网络收敛为一个稳定的无环路拓扑时形成临时环路的风险。
以上图为例,当一台网桥端口首次启动时,都会设为指定端口并进入阻塞状态。之后,每个端口变为监听状态,并启动Forward Delay定时器。然后,发出BPDU。BR1和BR2通过BPDU的优先级向量确定根网桥,根端口和指定端口。特别地,BR2既不是根端口也不是指定端口,因此它被阻塞,且关闭他的Forward Delay定时器。当每个端口上的Forward Delay定时器到期后,端口变化learning 状态,Forward Delay定时器再次到期后,又变为forward状态。
拓扑变化:
拓扑变化:①非转发态的网桥端口变成转发态或相反。②根网桥换成了另一台设备。③网桥端口上收到了TCN拓扑变化通知。
当拓扑发生变化时,探测到拓扑变化的网通知根网桥,然后根网桥再通知其他网桥。具体过程如下所述:
检测到拓扑变化的网桥会启动TCN定时器,不断发出TCN BPDU到指定网桥,直到指定网桥发出确认BPDU(即在发出的BPDU中设置一个TCA标识)。之后指定网桥又会重复同样的事,直到TCN BPDU到达根网桥。根网收到拓扑变化的通知后,会在发出的BPDU中设置TC标识来通知其他网桥。
BPDU传输逻辑:
BPDU帧的目的mac地址是01:80:C2:00:00:00,网桥通过该地址识别出BPDU帧。
每个端口的Hold定时器会对速率进行限制:每秒一个BPDU。当一个BPDU传输后,该定时器就会启动。
入口配置BPDU:
快速生成树协议(RSTP)和多重生成树协议(MSTP)在STP基础上做了一些改进。不是本章重点,懒得写了。