Chinaunix首页 | 论坛 | 博客
  • 博客访问: 921468
  • 博文数量: 276
  • 博客积分: 4182
  • 博客等级: 上校
  • 技术积分: 4486
  • 用 户 组: 普通用户
  • 注册时间: 2012-04-17 21:14
文章分类

全部博文(276)

文章存档

2014年(9)

2013年(132)

2012年(135)

分类:

2012-06-25 13:40:54

4.1.1交换网络环路的产生

图4.1物理拓扑
如图4.1所示,PC1和PC2通过相连。网络初始状态时,PC1与PC2通信过程如下。
(1)      在网络通信最初,PC1的ARP条目中没有PC2的MAC地址,根据ARP原理PC1首先会发送一个ARP广播请求(请求PC2的MAC地址)给交换机SW1.
(2)      当SW1收到ARP的广播请求时,根据交换机转发原理,SW1交换机会将广播帧从除接收端口之外的所有端口转发出去(即该广播会从F0/1和F0/2分别转发给SW2和SW3)。
(3)      SW2收到广播帧后,同样根据交换机转发原理,将广播帧从F0/2和连接PC2的端口转发,同样,SW3收到广播帧后,将其从F0/2端口转发。
(4)      SW2从F0/2端口收到从SW3发送的广播帧后,将其从F0/1和连接PC2的端口转发;同样,SW3收到从SW2发送的广播帧后。将其从F0/1端口转发。
(5)      SW1分别从SW2、SW3收到广播帧。然后将从SW2收到的广播帧转发给SW3,而将从SW3收到的广播帧发给SW2.
SW1、SW2和SW3会将广播帧相互转发,这时网络就形成了一个环路。而交换
机之间并不知道,这将导致广播帧在这个环路中永远循环下去(如图4.2所示)


4.2广播风暴的产生
在实际网络环境中情况要复杂的多,当广播帧经过交换机时,交换机就以指数的形式生成广播帧(交换机从除收到该广播帧之外的所有端口转发广播帧)。这种广播帧会越来越多,最终形成广播风暴,导致网络瘫痪。
        这种广播风暴只有在物理环路消失时才可能停止。
但是环状的物理链路能够的网络提供备份线路,增强网络的可靠性。这在网络设计中是必要的,因此,这就需要一种解决方法,一方面保证网络的可靠性,另一方面还要防止广播风暴的产生。
      STP就是用来解决这个问题。STP并不是断掉物理环路,而是在逻辑上断开环路,防止广播风暴的产生。
4.1.2STP简介
STP就是把一个环形的结构改变成一个树形的结构。STP协议就是用来将物理上存在环路的网络,通过一种算法,在逻辑上阻塞一些端口,来生成一个逻辑上树 形结构。如图4.3所示,对于三台交换机构成环路的网络,在使用STP协议后,交换机SW2与SW3连接链路的一个端口被协议从逻辑上阻塞,这条线路也就 不能再传输数据了,也就是从逻辑上打破了环路。当正常通信的链路发生故障时,被逻辑上阻塞的链路被重新激活,使数据能从这条链路正常传输

图4.3三台交换机STP功能示意1

图4.4三台交换机STP功能示意2
那么STP协议如何实现将环形结构的拓扑变成树形结构呢?STP协议如何知道哪些接口应该阻止,哪些接口应该用来传输数据呢?它依据的算法是什么样的?下面将详细讲解IEEE802.1d STP的工作原理。
4.2STP工作原理
4.2.1生成树算法及验证(STP选举过程)
1.生成树算法
生成树协议运行生成树算法(STA)。生成树算法很复杂,但是其过程可以归纳为以下三个步骤。
(1)      选择根网桥(ROOT BRIDGE)
(2)      选择根端口(ROOT PORTS)
(3)      选择指定端口(DESIGNATED PORTS)
*******************************************************************************
名词解释: 网桥是交换机的前身,由于STP是在网桥基础上开发的,因此现在交换机的网络中仍然沿用网桥这一术语。
******************************************************************************
下面以一个例子来讲解这几个步骤的选择过程,它采用如图4.5所示的网络拓扑。

图4.5STP收敛过程示例拓扑图
要将图所示的网络结构变成一个无环的拓扑,首先,STP要选择根网桥,前面讲过,STP是将一个环形的拓扑变成一个树状的拓扑结构,因此选择根网桥实现上就是为网络选出一个树根,那么选择根网桥的依据是什么呢?
1) 选择根网桥


选择根网桥的依据是网桥ID,网桥ID是一个八字节的字段,其组成结构如图4.6所示,前面两个字节的十进制数称为网桥优先级,后六个字节是网桥的MAC地址。 
网桥优先级是用于衡量网桥在生成树算法中优生级的十进制数,取值范围为0~65535,默认值是32768.
网桥ID中的MAC地址是交换机自身的MAC地址,可以使用命令 show version 在交换版本信息中查看交换机自身的MAC地址,显示如下:
Base Ethernet MAC address :    00:0D:28:00:B1:00
      按照生成树算法的定义,当比较那个STP参数的两个取值时,值小的优先级高。因此,在选择根网桥的时候,比较的方法是看哪台交换机的网桥ID的值最小,优先级小的被选择为根网桥,在优先级相同的情况下,MAC地址小的为根网桥。
在如图4.5所示的拓扑中,SW2的优先级为4096,SW1与SW3的优先级为默认值32768,因此,SW2被选为根网桥,如图4.7所示。
图4.7收敛过程选择根网桥

如果SW2的优先级也是32768时,三台交换机的优先级相同。比较三台交换机的MAC地址,SW2的MAC地址最小,所以SW2被选为根网桥。
2) 选择根端口
选出了根网桥之后,网络中的每台交换机必须和根网桥建立关联,因此,STP将开始选择根端口的过程。根端口存在每个非根网桥上,需要在每个非根网桥上选择一个根端口。
选择根端口的依据按照顺序依次如下。
到根网桥最低的根路径成本。
直连的网桥ID最小
端口ID最小
根路径成本是两个网桥间的路径上所有链路的成本之和,也就是一个网桥到达根网桥的中间所有链路的路径成本之和,如图4.8所示

                       图4.8根路径成本与路径成本
路径成本用来代表一条链路带宽的大小,见表4-1,一条链路的带宽越大,它的传输数据的成本也就越低。

4-1 带宽与路径成本的关系
端口ID是一个二字节的STP参数,由一个字节的端口优先级和一个字节的端口编号组成,如图4.9所示。

端口优先级是一个可配置的STP参数,在基于IOS的交换机上,端口优先级的十进制取值范围是0~255,默认值是128。
端口编号是catalyst用于列举各个端口的数字标识符。在基于IOS的交换机上,可以支256个端口。端口编号不是端口号,但是端口号低的端口,端口编号值也较小。

在STP选择根端口的时候,首先比较交换机端口的根路径成本,根路径成本低的为根端口,当根路径成本相同的时候,比较连接的交换机的网桥ID值,选择网桥ID值小的作为根端口;当网桥ID相同的时候,比较端口ID值,选择较小的作为根端口。
*******************************************************************************
注意啦:在比较端口ID时,比较的是接收到的对端的端口ID值
****************************************************************************
在如图4.10所示的拓扑中,已经选出了根网桥,那么下一步就需要在SW1和SW3上各选择一个根端口,在本例中,所有的链路都是100MB/S的,那么 下一步就需要算出在SW1和SW3上直接与SW2 相连的接口的根路径成本是19,而SW1 与SW3之间连接的端口,其根路径成本应该是19+19=38;因此,在SW1与SW3上,直连SW2的端口被选为根端口,如图4.10

              图4.10 STP收敛过程选择根端口
3) 选择指定端口
         选择完根网桥和每台交换机的根端口后, 一个树形结构已初步形成,但是,所有链路仍连接在一起,并可以都处于活动状态,最后导致形成环路。
       为了消除环路形成的可能,STP进行最后的计算,在每一个网段上选择一个指定端口,选择指定端口的依据有三个。
       根路径成本较低
       所在的交换机的网桥ID值较小
       端口ID较小
   在STP选择指定端口的时候,首先比较同一网段上端口中根路径成本最低的,也就是将到达根网桥最近的端口作为指定端口;当根路径成本相同的时候,比较这个 端口所在的交换机的网桥ID值,选择一个网桥ID值小的交换机上的端口作为指定端口;当网桥ID相同的时候,也就是说,有几个位于同一交换机上的端口时, 比较端口ID 值,选择较小的作为指定端口。

另外,根网桥上的接口都是指定端口,因为根网桥上端口的根路径成本为0

如图4.11所示的拓朴中,首先,作为根网桥的SW2上的端口都是指定端口。那么在SW1 与SW3连接的网段上需要在两个端口之间选出一个指定端口来。
首先比较两个端口的根路径成本,这两个端口的根路径成本的值都是38 (19+19),那么只能比较网桥的ID 了,现在SW1与SW3的网桥优先级相同,SW3的MAC地址小于SW1的MAC地址,因此,SW3的网桥ID小,所以SW3上的端口选作指定端口(如图 4.11所示)。

   STP的计算过程结束,这时,只有在SW1上连接到SW3的端口既不是根端口,也不是指定端口,那么这个端口被阻塞(BLOCK)。被阻塞的端口不能传输数据。

由于SW1上连接SW3的接口被阻塞,所以图4.11所示的拓朴可以等价为图4.12 SW1和SW3之间的链路成为备份链路。

2.生成树算法验证
在了解了生成树协议的选举过程后,下在分别以两台和三台交换机为例,验证生成树选举算法。
两台交换机的生成树协议选举过程
   通过两条速率不等的链路连接的两台交换机的STP选举过程。
按照图4.13所示连接网络(如果没有ethernet端口,可以将fastethernet端口速率改为10Mb/s),其中的交换机设备都有为默认配置,SW1的MAC为001f.caff.1000,SW2的MAC为0021.1ba5.6980.

图4.13两台交换机通过两台链路连接,且两条链路速率不等
按照STP的工作原理来选择根网桥、根端口和指定端口。
      首先,根据网桥ID选择根网桥。由于交换机为默认配置,所以优先级相同,都为32768,在这种情况下选择,MAC地址最小的交换机为根网桥,所以SW1成为根网桥。
然后,根据根路径成本在非根网桥上选择根端口,链路为10M的COST为100,而100M的   COST为19,所以SW2的F0/24端口为根端口。
最后,在每个网络上选择指定端口,由于根网桥交换机的端口都为指定端。所以SW1的F0/23的F0/24成为指定端口,SW2的F0/23端口阻塞。

在交换机上可以使用命令 show spanning-tree查看生成树。
三台交换机的生成树协议选举过程
   按照图4.15所示连接网络,链均为100M链路,其中的交换机设备都为默认配置,
SW1的MAC为001fcaff.1000,SW2的MAC为0021.1ba5.6980,SW3的MAC为0021.d780.7400.

首先,根网桥ID选择根网桥。由于交换机为默认配置,所以优先级相同,都为32768,MAC地址最小的交换机为根网桥,所以SW1成为根网桥。
然后,根据根路径成本在非根网桥上选择根端口,交换机SW2和SW3直接与SW1相连的接口根路径成本最低,所以SW2的F0/24端口为根端口,SW3的F0/23为根端口。
最后,在每个网络上选择指定端口,由于根网桥交换机的端口都为指定端。在SW2和SW3相连的网络上包含两个端口,这两个端口的根路径成本都是38,因此根据网桥ID选择指定端口,所以SW2的F0/23成为指定端口,SW3的F0/24端口阻塞。

在交换机上可以使用命令 show spanning-tree查看生成树。
4.2.2 BPDU(bridge protocol data unit ,桥协议数据单元)
   交换机之间根据网桥ID选择根网桥,根据根路径成本等选择根端口,那么交换机如何获知网络中其他交换机的网桥ID呢?,根路径成要又是怎样计算出来的?
生成树协议(STP)在交换机互相通信时进行操作,数据报文以桥协议数据单元(BPDU)的形式进行交换。
    每隔2秒,BPDU报文便向所有的交换机端口发送一次,以便交换机(或网桥)能交换当前最新的拓扑信息,并迅速识别和检测其中的环路。
BPDU的两种类型
正常情况下,交换机只会从它的Root Port上接收configuration BPDU包,但是绝不会主动发送configuration BPDU包给root bridge。
这里就需要提到第二种类型的BPDU包了,也就是Topology Change Notification(TCN) BPDU。
这样,当一台交换机检测到拓扑变化后,它就可以发送TCN给root bridge,注意TCN是通过root port向root bridge方向发出的.
当交换机从它的designate port接收到TCN类BPDU时,它必须为其做转发,从它自已的root port上发送出去TCN类型的BPDU包,这样一级一级地传到root bridge后,TCN的任务才算完成.
BPDU报文字段

ü         根网桥ID:根信息是由一个2字节优先级和一个6字节ID所组成。这个信息组合标明已经被选定为根网桥的设备标识。
ü         根路径成本:路径成本说明了这个BPDU从根网桥传输了多远,成本是多少。这个字段的值用来决定哪些端口将进行转发,哪些端口将被阻断。
ü         发送网络桥ID:这是发送该BPDU的网桥信息。由网桥的优先级和网桥ID组成。
ü         计时器:计时器用于说明生成树用多长时间完成它的每项功能。这些功能包括报文老化时间、最大老化时间、访问时间和转发延迟。
STP利用BPDU选择根网桥的过程:
    1、当一台交换机第一次启动时,假定自己是根网桥,在BPDU报文中的根网桥字段填入自己的网桥ID,向外发送。

                  交换机假定自己是根网桥并发送BPDU
    2、交换机比较接收到的BPDU报文中根网桥ID与自己的网桥ID的值哪个更小,如果接收到的BPDU中的根网桥ID值小于自己的网桥ID,则用接收到的根网桥ID替换现有的根网桥ID,并向外转发。如此不断反复,最终能够选择出全网公认的唯一一个根网桥。

                       交换机用更小的根网桥ID替换原有的根网桥

    3、收敛以后,如果又一台新的交换机加入进来,则继续比较更网桥ID,选出新的根网桥。

    STP利用BPDU确定端口的跟路径成本:
    1、根网桥发送一个根路径成本为0的BPDU报文。

    2、当离根网桥最近的下一级交换机收到BPDU报文时,就把BPDU所到达的那个端口的路径成本值与根网桥的根路径成本值相加。

    3、邻接交换机再以这个新的累加值作为根路径成本,然后发送出包含此值的BPDU报文。
    4、当邻接交换机下的每一台交换机都收到这个BPDU报文时,再把随后的交换机端口路径成本与这个值相加,依次类推。

   生成树端口的状态:
    禁用(Disabled):强制关闭(实际并不属于端口正常的STP状态的一部分)
    阻塞(Blocking):只接收BPDU,以便能侦听到其他邻接交换机的信息。老化时间20s。
    侦听(Listening):构建“活动”拓扑,为了使该端口加入生成树的拓扑过程,允许接收或发送BPDU报文,延迟时间15s。
    学习(Learning):构建网桥表(转发BPDU报文的同时,学习新的MAC地址,并添加到交换机的地址列表中),延迟时间15s。
    转发(Forwarding):发送/接收用户数据(可以发送和接收数据帧,也可以收集MAC地址加入到它的地址表,还可以发送BPDU报文)
阅读(1245) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~