翻译经典之《Cisco Lan Switching》第六章(五):Three Steps of Initial STP Convergence

【版权声明:原创翻译文章,翻译水平有限,错误在所难免,翻译作者对文章中存在的错误或遗漏所造成后果不承担任何责任,请谨慎转载。转载请保留本声明及出处:blog.csdn.net/shallnet ,下载该书英文版


这一节讲述生成树协议在一个逻辑无环拓扑上的初始化收敛,虽然生成树协议初始化收敛涉及很多方面,不过也可以分解为下面简单三步:
  1. 选择根网桥
  2. 选择根端口
  3. 选择指定端口
        当网络首次启动,所有网桥都发出无组织的BPDU信息,网桥会立即开始执行上一节讲述的四步比较原则,这样最终在整个网络上最终形成唯一的一棵树。根网桥被选出来作为网络的唯一中心(第一步),剩下的所有网桥选出根端口(第二步)和指定端口(第三步)已建立无环的拓扑图。你可以把这个拓扑图想象成车轮,根网桥是轴心,活跃着的无环路径(车辆辐条)向外辐射。在网络状况稳定的网络上,只有根网桥在网络上向外发送BPDU。
       上面三步处理完成后,网络就在无环拓扑上面收敛完成了,后面其他的拓扑变化由拓扑改变程序来处理,这个主题将在“Topology Change Process”一节进行说明。

        为了讨论后面的章节,我们提供如图6-6所示三个网桥/交换机的布局的网络作为讨论模板。
Figure 6-6. Model Network Layout for Discussion of Basic STP Operations
技术分享
技术分享
        
        上图网络由三个连接成环的网桥组成,每个网桥指定一个与其设备名称对应的MAC地址(例如,Cat-A使用MAC地址AA-AA-AA-AA-AA-AA)。

第一步:选择根网桥
        所有交换机需要通过寻找最小网桥ID(BID)来选择一个唯一的根网桥。记住,在“STP经济学”里面,最小BID获胜!选择最小BID网桥的过程常常伴随着一个令人兴奋的标题名字“夺根大战”<译者注原文:Root War>。
        提示:
                许多文档在讨论夺根之战时使用术语“最高优先级”,而网桥拥有最高优先级也确实拥有最小值,为了避免混淆,这篇文站始终引用“值”来描述相关问题。

        正如之前讨论的网桥ID一样,一个BID是由网桥优先级和MAC地址组成的8字节标识符,从图6-6中你可以看到Cat-A有一个默认值为32768.AA-AA-AA-AA-AA-AA的BID。注意这里十进制和16进制是混合使用的,虽然这看起来有些奇怪,但这种表达可以使你清晰看到BID的格式每一部分。记住:最小BID获胜!

        类似的,Cat-B假定了其默认BID是32768.BB-BB-BB-BB-BB-BB,Cat-C是32768.CC-CC-CC-CC-CC-CC。因为所有的网桥使用相同的默认优先级32768,那么最小的MAC地址AA-AA-AA-AA-AA-AA在优先级相同的情况下击败其他网桥,进而Cat-A称为根网桥。这个过程图6-7以图例分析如下:
Figure 6-7. The Network Must Select a Single Root Bridge
技术分享
技术分享
        那么网桥是如何发现Cat-A拥有最小的BID呢?其实是通过交换BPDU来完成的。之前讲过,BPDU是一种特殊的数据包,各个网桥之间使用这种数据包来相互交换拓扑和生成树信息,默认情况下BPDU会每2秒发送一次。BPDU是网桥与网桥之间的沟通数据通道,他们不会涉及终端用户信息(如,Doom或e-mail)。图6-8图示了BPDU的基本结构布局(BPUD格式详细描述在“Two Types of BPDUs”一节 )
Figure 6-8. Basic BPDU Layout
技术分享
技术分享
        因为这里是选出根网桥,所以暂时只关心Root BID和发送者的BID域(真实命名稍后给出)。网桥每2秒产生一个BPDU,其中Root BID就是他当前时刻认为的根网桥BID,Sender BID域就是其自己的BID。
       提示:
                记住Root BID是当前根网桥的网桥ID,但Sender BID是本地网桥或交换机的的网桥ID。
        
        打个比方,一个网桥就好像人一样,一刚刚来到世上这个世界就都围着你转,换句话说,就是当一个网桥第一次启动,BPUD的Root BID和Sender BID字段都填入其自己的BID。假设Cat-B第一次启动,开始每2秒发送BPUD并伴随着宣称自己就是根网桥。几分钟之后,Cat-C启动了也大言不惭的宣称其自己是根网桥,当Cat-C的BPDU传送到Cat-B,Cat-B丢弃该BPDU,因为在Cat-B的端口上有更小的BID(Cat-B自己的BID)。一旦Cat-B发送的BPDU,Cat-C接收到之后发现他之前假设自己为根网桥的是不正确的,这个时候,Cat-C发送的BPDU就以Cat-B的BID为 Root BID,Cat-C的BID为Sender BID,这样就对Cat-B为网络中的根网桥达成一致意见。
 
第二步:选择根端口
        这就是在残酷夺根大战之后的工作了,交换机接着开始选择根端口。离根网桥最近的端口就是网桥的根端口,每个非根网桥必须选择一个根端口。
        之前讲到过,网桥通过开销的概念来判断距离,网桥记录所谓的根路径开销,其值为到根网桥每条链路的累计开销。图6-9说明通过多个网桥的该值如何计算和根端口的选择过程。
Figure 6-9. Every Non-Root Bridge Must Select One Root Port
技术分享
技术分享
        当Cat-A(根网桥)发送BPDU,其包含一个值为0的Root Path Cost(第一步)。当Cat-B接受到该帧时,其对接收到的BPDU包含的Root Path Cost加上Port 1/1的路径开销。假设当前网络使用Catalyst 5000平台交换机且版本大于2.4,那么图6-9中所有三条链路都是快速以太网,所以Cat-B接收到值为0的Root Path Cost再加上Port 1/1的开销值19(第二步)。Cat-B然后从Port 1/2发送使用Root Path Cost值为19的BPDU(第三步)。
        当Cat-C接收到从Cat-B发送过来的BPDU(第四步),其将增加Root Path Cost的值到38(19+19)。然而,Cat-C也在Port 1/1上接收到从根桥发送过来的BPUD,其路径开销值是0,Cat-C增加该值到19(第五步)。这时候Cat-C需要做一个决定:必须选择一个根端口,且端口离根桥为最近。Cat-C发现Port 1/1上的Root Path Cost为19,Port 1/2上的Root Path Cost为38,所以Port 1/1成为根端口(第六步)。之后Cat-C开始告知其下游交换机其Root Path Cost为19。
        虽然在图6-9中没有详细描述,Cat-B也做一系列的类似计算:Cat-B 在Port 1/1上到根桥的开销为19,Port 1/2上开销为38,所以Port 1/1成为Cat-B的根端口。要注意的是开销在接收到BPDU的端口上时会增加。
        提示:
                记住STP的开销是在端口接收到BPDU时增加,而不是在发送出去的时候。
        比如,BPDU到达Cat-B的Port 1/1时开销为0,然后在Cat-B内部增加到19。这一点更详细的讨论在“Mastering the show spantree Command”一节。

       提示:
要知道路径开销和根路径开销之间的差异。
路径开销是一个指定给每个端口的值,当在端口上接收到BPDU时加上该值以计算根路径开销。
根路径开销是网桥到根网桥的累计开销。在BPDU传输中,Root Path Cost域的值就是该值。在网桥中,该值是通过累加所有接收到BPDU的端口的路径开销值到BPDU中Root Path Cost域而得到的。
        
第三步:选择指定端口
        STP的环路避免部分工作自然而然就落到了STP初始化收敛的第三步:选择指定端口。网桥网络的每一段链路都必须有一个指定端口,这个端口作为该段链路和根网桥发送接收流量的唯一网桥端口,这个意思就是如果只有一个端口处所有链路流量,那么就不能再环路了。这个在这段链路中包含指定端口的网桥就是这段链路的指定网桥。
        像选择根端口一样,指定端口的选择也是基于到根网桥的累计路径开销值Root Path Cost(如下图6-10)。
Figure 6-10. Every Segment Elects One Designated Port Based on the Lowest Cost
技术分享
技术分享
        为了找出指定端口,需要依次检查每段链路。首先检查第一段链路,即Cat-A和Cat-B之间的这一段,该段链路有2个网桥端口:Cat-A的Port1/1和Cat-B的Port1/1,Cat-A的Port1/1的根路径开销为0(谁让它属于根网桥呢),而Cat-B的Port1/1的根路径开销为19(该值为从Cat-A发送过来BPDU的0上加上Cat-B Port1/1的路径开销19),由于Cat-A:Port1/1有更小的根路径开销,故其成为了这条链路的指定端口。
        现在来看第二段链路(Cat-A到Cat-C),做类似的动作。Cat-A:Port1/1根路径开销为0,而Cat-C:Port1/1根路径开销为19,Cat-A:Port1/1拥有更小的根路径开销成为指定端口。得出结论:根网桥上每一个活动端口都是指定端口,这个结论唯一不适用于根网桥直接物理环路的情况(比如,你使用集线器或交叉线直接连接根网桥的两个端口)。
        接下来第三段链路(Cat-B到Cat-C):Cat-B:Port1/2和Cat-C:Port1/2的根路径开销都为19。一样的值!当遇到相同根路径开销(或其他值一样的情况),STP始终使用之前“Four-Step STP Decision Sequence.”这一节讨论的四步比较原则,回忆一下这四步比较原则如下:
  1. 最小根网桥BID
  2. 最小路径开销
  3. 最小发送者BID
  4. 最小端口ID
        在示例6-10中,所有网桥一致认为Cat-A为根网桥,所以进入下一步计算根路径开销,正如之前所说,Cat-B和Cat-C的根路径开销都为19,因此继续进入下一步比较BID。由于Cat-B的BID为32768.BB-BB-BB-BB-BB-BB比Cat-C的BID32768.CC-CC-CC-CC-CC-CC更小,所有Cat-B:Port1/2成为第三段链路上的指定端口,而Cat-C:Port1/2成为非指定端口。

回顾STP初始化
        在继续讨论之前,我们先在这一小节回顾一下我们刚刚已经讨论过的三步初始化收敛过程:
  1. 选择一个根网桥
  2. 在非根网桥上选择一个根端口
  3. 在每段链路上选择一个指定端口
        第一步,网桥网络选择一个唯一的根网桥;第二步,每个非根网桥选择一个唯一的根端口,该端口里根网桥最近;第三步,每段链路选择一个唯一的指定端口。
        例如,一个包含15台交换机和146段链路(每个交换机端口只属于一段链路)的网络,每个STP组成的数量如表6-2。
Table 6-2. STP Components in a 15 Switch and 146 Segment Network

STP Component

Number

根网桥

1

根端口

14

指定端口

146

并且,所有的选择都是基于如下四步比较原则:
  1. 最小根网桥BID
  2. 最小路径开销
  3. 最小发送者BID
  4. 最小端口ID
每个端口已接收到的每个BPDU会和其他另外的BPDU(也包括发送出去的)进行比较,只有最优(或更优)的BPDU会被保存,记住“最优的”也就是值最小的(例如,最小的BID成为根网桥,最小开销用于选择根端口和指定端口)。端口发现有更好的BPDU时将停止发送BPDU。

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。