《深入理解Linux网络技术内幕》阅读笔记(十四)

来源:互联网 发布:erp系统是什么软件 编辑:程序博客网 时间:2024/05/21 17:55

这里写图片描述
这里写图片描述
这里写图片描述
这棵树的叶子就是主机。主机链接到所谓的接入网桥上:能把网络连通能力给予主机的网桥。接入网桥主要是用于在连到同一个网桥上的主机间转发流量。
分发层的网桥主要是用于在和一些接入网桥直接相连的主机间桥接流量。(例如,D1会负责搞定A1和A2)
这里写图片描述
STP协议(生成树协议)目标:
已知一个图形以及一个根节点R,要定义出根是R的最佳生成树。但是,一个重要的区别是:该算法不是在单一主机上执行,然后再把结果散布至所有其它主机,恰恰相反,它是一种分布式协议。网络中的所有网桥都必须执行这个协议。执行此协议后,网桥就可以开启它们的某些端口并关闭其它端口,此时所得到的整体拓扑结构就是最佳有根生成树。根节点的选择也是该协议的一部分:主机都同意谁是根节点,然后决定要开启和关闭哪些链路。
所谓最佳生成树就是一个无环路拓扑(树),每个节点到根节点的距离为最小。
STP通过让各个网桥之间交换称为网桥协议数据单元(BPDU)的特殊帧来达到其目的。
1.为每个网桥端口指定一个明确的状态,例如转发或阻塞,以定义该端口是否可接收数据流量。
2.通过对端口状态的设定,从环路拓扑中选择或丢弃适当的链路,以这种方式最终生成无环路拓扑。
这里写图片描述
这里写图片描述
根网桥:
1.根网桥是唯一能产生BPDU的网桥。其他网桥只有在其接收BPDU时才会传输BPDU。
2.当拓扑发生改变时,根网桥确保网络中的每台网桥都知道此事。
注意,端口状态和角色的选择(哪些端口应该开启或关闭),取决于根网桥在拓扑中的位置:这是因为当你先选出一个根网桥,才能据此建立最佳生成树。
虽然每棵树只能有一个根网桥,但是,每个LAN都可以有一个指定网桥,它成为该LAN中所有主机和网桥到达根节点的网桥。指定网桥的选择是根据LAN上哪台网桥通往根网桥的路径开销最低而定。
这里写图片描述
STP端口可以被赋予下列两种角色之一:
根端口:对每台网桥来说,根网桥除外,通往根网桥的路劲开销最低的端口就会被选为根端口。
指定端口:在每个LAN上,通往根网桥的路径开销最小的端口就会被选为指定端口。需要注意的是,一台网桥上的端口连接不同的LAN时,可以有一个以上的指定端口。
网桥ID:每个网桥都会分配一个ID,称为网桥ID。此ID是一个8字节的数,分成两部分。最低的6字节是某个网桥端口的Ethernet MAC地址,而最高的两个字节是一个可以配置的优先级,称为网桥优先级。
端口ID:每个端口都会被指定一个ID。这个ID的一部分代表一个唯一的识别码,称为端口号。设置端口号的方式和具体的协议实现有关,且其值只在网桥本地有意义。端口ID的另一部分称为端口优先级,用于给端口指定优先级(值较低代表较高优先级)。
这里写图片描述
网桥ID中多了一个新元素,称为系统ID扩展。此元素可以设4096个不同值,可以让4096个不同的网桥ID共享同单一MAC地址。
网桥进行协议交换的帧称为BPDU,其内部包含许多信息,足以让这些网桥彼此同意谁才是根网桥,以决定其本地端口的角色和状态。BPDU有两种:
1.配置BPDU:用于定于无环路拓扑。
2.TCN(拓扑变化通知) BPDU:当检测到拓扑变化时,网桥用于通知根网桥。
这里写图片描述
无论网桥是否为根网桥,在下列情况下也会传输一个配置BPDU:
1.当一台网桥接收到一个BPDU,如果其优先级向量低于该网桥在其端口上所用的,那么,网桥会以自己(较高级)的信息应答。
2.当一台网桥接收到一个TCN BPDU时,会立刻发出一个设有特殊标识的配置BPDU作为应答。这样有利于快速传播拓扑中的变化。
不管是因为何原因从某一给定的端口发出一个配置BPDU,STP都会对其速率进行限制:网桥从其任何端口中每秒只能最多传输一个配置BPDU。

根网桥会运行一个hello定时器,该定时器到期后就会触发配置BPDU的传输。同一个BPDU从根网桥的每一个指定端口传输出去。只有根网桥能产生新的BPDU,但是当一个网桥加点启动时,它会以为自己就是根网桥(因为没有其它优先级向量可以比较),所以,该网桥会将其所有端口都设定为指定角色,启动Hello定时器,然后开始产生BPDU。
非根网桥只有在其根端口收到的BPDU时才会产生BPDU,也就是说,非根网桥会传递BPDU。非根网桥会更新其所接收的BPDU的部分字段:
1.传输者的网桥ID和端口ID会被该网桥自己的信息替换。
2.该网桥会把开销更新为其所接收的开销加上其本地网桥中接收BPDU的(根)端口的开销之和。
3.携带过期信息的BPDU不应该用来建立无环路拓扑。因此,配置BPDU有个称为消息生存期的字段,接收到该BPDU的网桥会拿该BPDU中的另一个字段——最大生存期和其比较。如果该BPDU的生存时间太长且无法相信其优先级向量的话,网桥就会把这些BPDU丢弃掉。
这里写图片描述
这里写图片描述
当网桥首次启动时,并不知道当前的拓扑结构,因此会认为自己就是根网桥。该网桥会把指定角色分配给所有端口,并在这些端口上启用Forward Delay定时器,因此它们最终都会设为转发状态,然后以自己的网桥ID作为BPDU中根Bridge ID字段并且根路径开销设为0,从而开始传输BPDU。这种方式可以很方便地将该BPDU变成广播数据,从而能够将数据尽可能快速地向四处散布,使得自己和其他网桥都可发现真正最佳的根网桥,并让这棵树重新平衡。
当网桥ID就是最佳网桥ID时,它就会不断地在其指定端口上发送BPDU,因为其他网桥都无法声明自己有更高级别的优先级向量,因此,该网桥就会担当起根角色的职务。
如果该网桥ID不是最佳网桥ID,最后它会收到一个配置BPDU,里面包含一个比较高级的根网桥ID,然后:
1.接受并记录这些级别较高的信息(包括根网桥ID和定时器)。
2.相应的更新其端口的状态和角色(也就是所谓的配置更新)。
对每个端口来说,通过管理手段关闭的端口除外,网桥都会保留一份接收自入口的BPDU的最佳优先级向量的副本。这样一来,网桥就知道每个端口到达根网桥的最近路径是多少。
根端口的选择就是遍历所有端口,然后选出拥有最佳优先级向量的那个端口。如果有一个以上的端口恰好有相同的最佳优先级向量,则选择拥有最低端口ID的本地端口作为根端口。
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
当网桥检测到有拓扑变化,必须通知所有网桥,以使其可以用缩短的aging时间来清理他们转发数据库内的过期数据项:
1.探测到拓扑变化的网桥通知根网桥此变化。
2.根网桥通知所有网桥拓扑发生变化。
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
每个端口的HOLD定时器会对速率进行限制:每秒一个BPDU。当一个BPDU传输后,该定时器就会启动。如果再想尝试另一次传输,而此定时器正处于未决状态,则该BPDU不会被传输,并且网桥端口配置块中会设置一个标识。当该定时器到期时,就会检查该标识,然后,如果发现设置了该标识就传输一个配置BPDU。

0 0
原创粉丝点击