Spanning-tree 基本概念.note
当出现环路时,哪怕没有生成树,也可以根据数据包头的TTL字段进行防环(255跳),(每到达一个设备算为一跳,TTL值减1,255-1)
- 生成树的基本概念:
1.
物理链路冗余,解决了单链路故障问题,但是这样会造成环路,容易形成广播风暴
生成树用于解决这个问题:
· 通过生成树协议,在逻辑上将特定端口进行阻塞,从而实现物理上存在冗余环境,而二层上有阻止环路的产生
· 当拓扑发生变更的时候,生成树协议能够探测到这些变化,并且及时自动调整接口状态,从而适应网络拓扑的变化,实现链路冗余 - Spanning-tree standards:
1.
· 802.1D //STP
· PVST+ //cisco私有协议,每个vlan拥有一颗单独的生成树实例
· 802.1W //RSTP
· 802.1S //MSTP
· PVRST+ //cisco私有,对RSTP的增强版- STP的操作:
1.
1、每个广播域选择一个根桥
2、每个非根桥上选择一个根端口 //根端口就是朝向根的端口(根端口会接收来自根的BPDU)
3、每条链路选择一个指定端口 //指定端口转发从根端口接收到的BPDU
4、将没有身份的端口阻塞STP的选举,微观层面都是根据BPDU报文中的字段进行选举,宏观层面则是优先级,网桥ID等因素
- 每个广播域选择一个根桥:
1.
1、首先比较桥ID(bridge ID):
每个交换机都会有一个 8 个字节的 bridge ID:
桥MAC地址指的不是交换机的端口MAC地址,而是交换机主板的MAC地址
运行 Spanning-tree 的交换机都需要有一个唯一的标识符
bridge ID 会被封装在BPDU中,在网络中进行泛洪
· 选择根桥时,选择交换网络中 bridge ID最小的作为根桥
先比较优先级,优先级越小,越优先,选取最优的作为根桥
优先级相同,则比较MAC地址:
MAC地址按照顺序从左往右比较,数值越小越优先,选取最优的作为根桥- 每个非根桥上选择一个根端口(RP):
1.
根端口可以理解为朝向根的端口(选举完成后不断从根接收BPDU)
1、端口到达根桥的最低路径成本(cost) //根据BPDU报文中的 cost字段
最短路径是沿途的cost累加,而cost是基于链路的速率的
cost值相同,则比较:
2、最低的发送者网桥ID:
(2字节优先级 + 6字节MAC地址)
发送者网桥ID相同,则比较:
3、最低的发送者端口ID:
端口ID:比如 G0/1,G0/2,F1/1 这些
端口也有优先级,范围 0 - 240,默认值 128
端口ID中包含(端口优先级 + 端口ID号)
先比较端口优先级,优先级相等,再比较端口ID号(数值越小越优先)
- 每条连接选择一个指定端口(DP):
1.
根桥上的端口都是指定端口(DP)
1、端口到达根桥的最低路径成本(cost) //根据BPDU报文中的 cost字段
最短路径是沿途的cost累加,而cost是基于链路的速率的
cost值相同,则比较:
2、最低的发送者网桥ID:
(2字节优先级 + 6字节MAC地址)
发送者网桥ID相同,则比较:
3、最低的发送者端口ID:
端口ID:比如 G0/1,G0/2,F1/1 这些
端口也有优先级,范围 0 - 240,默认值 128
端口ID中包含(端口优先级 + 端口ID号)
先比较端口优先级,优先级相等,再比较端口ID号(数值越小越优先)当两台交换机的多个端口连接在一个共享介质(如集线器)上,那么它们之间这个段只会选择出一个指定端口

· 修改端口开销(cost):
1、直接修改端口开销:
int g0/0 //进入接口
spanning-tree cost [自定义开销值]
spanning-tree cost 1
2、通过修改链路带宽以达到修改端口开销:(不建议使用这种方式)
int g0/0 //进入接口
bandwidth [单位 K]
bandwidth 10000 //更改链路带宽为 10000K(10M)· BPDU报文交互:
交换设备接入网络后,(认为自己是根桥)开始发送BPDU报文(配置BPDU)
BPDU报文默认每两秒发送一次(bridge ID被封装在BPDU报文中)
当一台交换机收到BPDU报文后,会查看其中封装的 bridge ID,将其与自己的 bridge ID 进行对比
· 如果自己的 bridge ID 比 BPDU报文 中封装的 bridge ID 要更优先,则将其替换掉,则将自己的 bridge ID 封装进 BPDU报文中,并将其转发(泛洪),继续周期发送BPDU报文
· 如果 BPDU报文 中封装的 bridge 比自己本地的 bridge 要更优先,则不会对其进行修改,将其转发(泛洪),停止周期发送BPDU报文
当网络收敛完后,只有根桥会发送 BPDU报文,其它非根桥设备则通过 根端口 接收根桥的 BPDU报文,并通过指定端口将其转发(这种行为被称为中继行为)· BPDU有两种类型:
1、配置BPDU:
正常情况下,交换机发送的 BPDU报文
2、拓扑变更BPDU:
当网络拓扑发生变更时,交换机发送的 BPDU报文
- 通过 TYPE 字段继续区分:
· type 字段为 0,则表示是配置BPDU
· type 字段为 80,则表示是拓扑变更BPDU
- BPDU报文字段解析:
1.
· 协议 字段:
代表上层协议,值一般为 0
· 版本 字段:
802.1D(STP)版本的值为 0
· TYPE 字段:
type 字段为 0,则表示是配置BPDU
type 字段为 80,则表示是拓扑变更BPDU
· 标志 字段:
LSB最低有效位是1(最左边的一位数)
MSB最高有效位是1(最右边的一位数)
· 根ID 字段:
(两个字节的优先级 和 六个字节的MAC地址)
根网桥的桥 ID
(交换设备接入网络后,都会认为自己是该网络中的根桥,就会对外发送BPDU报文,该BPDU报文的 根ID字段 就是交换设备自身的桥ID)
· 路径开销(cost) 字段:
到达根桥的STP cost
当BPDU从根桥发出时,cost值为0,当交换机接收BPDU报文时,会在BPDU报文中的cost字段上加上自己接收该BPDU报文的端口的cost,然后将其转发
在收敛的过程中,交换机会通过比较从不同接口收到的BPDU报文中的cost字段来判断哪个接口更优,越小则越优
· 网桥ID 字段:
(两个字节的优先级 和 六个字节的MAC地址)
BPDU发送桥的ID
当交换设备转发根桥发送的BPDU报文时,会将BPDU报文中的网桥ID字段,替换成自身的桥ID(类似于转发数据包时替换源MAC地址)
当根桥发送BPDU报文时,根ID字段 和 网桥ID字段 都是根桥的 桥ID
· 端口ID 字段:
BPDU发送网桥的端口ID(端口优先级 + 端口号)
端口优先级 默认128
· 消息寿命(Message age)字段:
本质上是到达根桥的跳数,从根网桥发出BPDU之后的跳数,每经过一个网桥都减 1(类似TTL生存时间)
· 最大寿命(Max age)字段:
当交换机从接口接收到BPDU时,交换机会将接收到的BPDU保存在该接口缓存中,只会保存最优的BPDU,这个BPDU有一个生存时间,默认20秒
当 20秒 没有接收到该链路发送的BPDU时,则认为该接口连接的链路出现故障
· HELLO时间 字段:
根网桥连续发送的 BPDU之间的时间间隔,默认2秒
· 转发延迟 字段:
在监听和学习状态所停留的时间间隔,默认15秒
监听状态15秒
学习状态15秒- 端口开销(cost):
1.
是一个端口量,是STR/RSTP协议用于选择线路的参考值,端口路径开销的默认值及取值范围由选定的路径开销算法决定,路径开销与端口的带宽成反比带宽 | 802.1D(cost) |
10Mpbs | 100 |
100Mpbs | 19 |
1000Mpbs | 4 |
10000Mpbs | 2 |