生成树详解

时间:2014-08-10 19:01:10   收藏:0   阅读:1569

局域网交换技术,也称为层2交换技术,内容主要包括层2交换的工作 原理、网络环路、如何利用Spanning-Tree Protocol 来解决网络环路、VLAN及VTP技术,闲话少说,书归正传。我们在介绍交换技术之前不得不提一下传统的共享以太网的工作方式,了解一下冲突域,广播域以 及网络分段是怎么回事,这些知识在网络基础里大家应该有所了解,我在这里再简单介绍一下:

  大家都知道传统共享以太网使用的是CSMA/CD机制,即载波侦听多路访问/冲突检测。我们来详细分析一下:

bubuko.com,布布扣

  CSMA/CD是一种分布式介质访问控制协议,网络中的各个节点都能独立地决定数据帧的发送与接收。每个节点在发送数据帧之前,首先要进行载波 监听,只有介质空闲时,才允许发送帧。这时,如果两个以上的节点同时监听到介质空闲并发送帧,则会产生冲突现象,这使发送的帧都成为无效帧,发送随即宣告 失败。每个节点必须有能力随时检测冲突是否发生,一旦发生冲突,则应停止发送,以免介质带宽因传送无效帧而被白白浪费,然后随机延时一段时间后,再重新争 用介质,重发送帧。

  最早由Inter,施乐,DEC三家公司提出以太网标准,后来IEEE组织制定了802.3标准规定了以太网的物理层和数据链路层的MAC子 层,主要就是定义了10BASE-2、10BASE-5、10BASE-T、10BASE-F等,规定了介质,带宽,距离等。同时还定义了一个802.2 标准,规定以太网数据链路层的LLC子层,即逻辑链路控制子层,主要是提供了一个数据链路层与网络层的接口,如图所示

bubuko.com,布布扣

  网络层有很多协议,数据链路层提供了很多协议之间的区分,使用网络层的哪一个协议,这就是为什么数据帧要封装一个LLC的头部信息。但传统以太 2帧中不是使用LLC封装而是在数据帧中有一个2个字节的type来表明上网所使用的协议,如下图所使用的网络层协议是ARP。

bubuko.com,布布扣

  下面来看一下冲突域,广播域

  冲突域:共享式以太网中的所有节点在需要与其他节点通讯时是可以发送数据的,但是CSMA/CD的机制却在确保在某个时刻只有一个节点可以发送 数据,那如果肉个同时发送数据了,出现这种情况会导致冲突,那么在这个共享式网络中可能产生冲突的这么一个范围,我们就称为冲突域。

  广播域:广播域是指在一个网络中广播包所能到达的范围。也就是说如果在一个网络上一个节点发送了一个广播包,这个广播包可以到达的范围,我们称为广播域,

  作为一名专业的网络工作人员,具有识别冲突域和广播域的能力是所需要的一项重要技能。第一层设备的加入是扩大了冲突域,只有加入第二层设备或三 层设备才可以分隔冲突域,也就是说如果加入了网桥、交换机和路由器可以将冲突域分割成较小的部分,从面降低对带宽的竞争,减少冲突。路由器还有一个好处, 可以划分更小的广播域。这就叫网络分段。而用二层设备来减少冲突域的范围叫做“微分段”,也就是说不是正真意义的分段。真正意义的分段是网段号不同,不可 能进行直接通讯。所以二层设备可以实现分段,但不能真正将网络进行分段,而路由器是可以实现真正网络分段的。这句话,大家好好理解一下!给出一个表借大家 参考。

bubuko.com,布布扣

  那么咱们的交换技术毫无疑问使用的就是交换机,我们来看一个交换机的功能:

  交换机的三大功能:

  MACA地址的学习

  数据帧的转发或者是数据帧的过滤

  利用生成树协议防止网络环路

  首先我们来看第一个交换机MAC地址的学习功能,交换机是通过MAC表来进行交换转发工作的,所以MAC地址表是交换工作的核心,网络与交换机的不同之处就在于网桥使用软件来创建和管理MAC地址表的,而交换机使用ASIC来创建和管理MAC地址表。

  交换机的MAC地址学习功能:

  交换机初始化时,要学习进入交换机的数据帧的源地址,并且把源地址及其对应的交换机的端口号记录在MAC地址表。在MAC地地址表形成之后,交换机要学习进入交换机数据帧的目的地址,并且与MAC地址表中的条目进行比较,完成相应的转发。

bubuko.com,布布扣

  交换机开机初始化时,MAC地址表是空的,因为MAC地址表是存储在内存中的。

  如果计算机A发送数据帧到计算机C,此时交换机的E0口接收该数据帧,交换机记录下该数据帧的源地址C的对应关系及E0口的对应关系。如图所示:

bubuko.com,布布扣

  由于交换机并不知道C的MAC地址,所以将此数据帧对除了E0口以外的其他端口进行转发。

  如果是计算机D发送数据帧到计算机C,此时交换机的E3口接收该数据帧,交换机记录下该数据帧的源地址D的地址与端口的对应关系。此时交换机仍然不知道C的地址,所以还是要对除了E0口以外的其他端口上进行转发。

bubuko.com,布布扣

  交换机不断记录每个接口上接收到的数据帧的地址,一段时间以后所有的端口所连接的MAC地址都会记录到MAC地址表中。此时计算机A再向计算机C发送数据时,就直接查MAC地址表进行转发即可,不会再转发到其他端口上。

bubuko.com,布布扣

  在这个图中计算机A和计算机B通过HUB连接到Switch的E0口上,所以在MAC地址表中记录两个MAC地址对应同一个端口,此时如果A与B通讯,则交换机不会转发该数据帧,因为源和标MAC都在同一个接口上。这就是交换机的地址学习功能以及数据包的转发过滤。

  交换机的交换方式一般有三种:直通转发、片断转发和存储转发

  直通转发:交换机检测到目录地址后即转发数据帧,也就是说只要读到目标地址以后就开始转发,大家分析一下数据帧的格式就知道了,加上前导位和目 标地址也就是14个字节左右,不需要再往后分析了。这样减少延时,但是不适合高错误率的网络。因为有一些数据碰撞帧,是小于64字节的,也会一起转发!

  片断转发:与直通转发相似,只是在转发的时候会检测帧的前64个字节,这前64个字节中会包含一小部分数据,好处是可以把可以把小于64字节的坏帧抛弃掉,以节约带宽。

  存储转发:这是延时最大的一种转发,在进行数据转发之前要将收到的帧进行完整性校验,确认没有错误才进行转发,如果有错误就不转发。好处是可以丢弃任何小于64字节和受损的数据包,但是缺点是延迟大。

  下面咱看一下网络环路及如何利用Spanning-Tree 协议来解决网络环路。

  网络环路

  大家看下面这个图,

bubuko.com,布布扣

  在这个拓扑图中,交换机就成了一个单点故障,如果交换机坏了,此时的几个模块之间都无法进行正常的工作,客户机不能访问服务器,不能连接 internet,不能访问打印机,反之都一样。所谓单点故障,也就是一点发生故障,则整网络无法正常工作。所以在一般的交换式网络中,我们都需要对交换 机进行冗余,但是引入冗余又会发生一个问题,一个很严重的问题,就是网络环路。下面我们来看看环路对我们的网络到底造成了什么影响,影响主要有三:

  1 Broadcast storms 广播风暴

  2 Multiple Frame Copies  多重复数据帧

  3 MAC Database  Instability  MAC地址表不稳定

  咱们一一来看

  广播风暴:我们看一个图,大家就明白什么是广播风暴了:

bubuko.com,布布扣

  分析:如果主机X希望跟网络上的其他主机通讯,将数据报传给交换机A,但交换机仍然会将此报再一次传给交换机A,依次类似,构成了一个环,而且 这个环后面比较严重,为什么?我们在讲网络基础的时候,我们讲了数据帧的格式,大家可以回忆一下,但在这个格式中,没有类似于三层IP报头中TTL机制, 所以数据帧在网络中将被无限次数的传递,从面造成了广播风暴,如果是单播的数据还要好一些,如果是广播或者组播数据在这样一个环路网络中传递则广播风暴更 加明显。

  多重数据帧:也称为重复数据帧

bubuko.com,布布扣

  分析:主机X准备发一个单播帧给路由器Y,数据报发出后,发现有两条路可以到达路由器Y,一个是直接发过去,还有一条就是通过交换机A转给交换机B,然后再交给路由器Y,此时路由器Y就收到了两位一模一样的数据帧。

  还有一个就是MAC地址表的不稳定:

bubuko.com,布布扣

  分析:还是主机X发送数据帧给路由器Y,路由器的MAC地址表还没有被交换机学习到,数据帧沿链路发送到交换A和交换机B的端口0,那么交换机 A和交换机B都将主机X的MAC地址记录在port 0。因为是通过port 0收到的数据帧,所以会通过两个交换机的port 1向外泛洪,交叉来到相互交换机的 port 1 口,又认为主机X的MAC地址所对应的端口是port1,即从交换机A发出来的数据帧来到了交换机B的port 1端口。然后交换机 B收到后又通过Port 0口再次泛洪,依次类推,数据帧在环路里重复执行上述过程,交换机A和交换机B重复的在port 1 以及 port0上不断的学习主机X的MAC地址,造成MAC地址表的不稳定。

  那么大家可以看到网络环路的问题确实不小,那么解决方法就是利用生成树协议:

  Spanning-Tree Protocol:

  简称为STP,该协议可应用于环路网络,通过一定的算法实现路径冗余,同时将环路修剪成无环路的树型网络,从而避免报文在环路网络中“长生不老”。

  以太网交换所所实现的快速生成树协议RSTP (Rapid Spanning Tree Procotol)是生成树协议的优化版,其“快速”体现在根端口和指定端口进入转发状态的延时在某种条件下大大缩短,从而缩短了网络拓扑稳定所需要的时间。

  MSTP(Multiple Spanning Tree  Procotol)是多生成树协议的缩写,该协议兼容STP和RSTP。

  咱们来详细介绍一下STP:STP是为克服冗余网络中透明桥接的问题而创建的,目的是通过协商一条到根网桥的无环路径来避免和消除网络中的环 路,它通过判定网络中存在环路的地方并动态阻断冗余链路来实现这个目的。通过这种方式,它确保到每个目的地都只有一个路径,所以永远都不会产生环路。

  将环路中的一个次优接口设置在Block(阻止)状态,从而将环路打破。注意,仅仅是该接口设置为Block状态,仅仅是一个状态,而不是真正 的将此接口关闭。因为一旦网络中其他链路出现了问题,这个被block的接口还可以还原为forwarding(转发)状态。如图所示:

bubuko.com,布布扣

  基本思想:在此把每个交换机称为网桥,所以我们在介绍的时候,如果讲到网桥,就知道是指的交换机就可以了。每个交换机在启动的时候,都认为自己 是根桥,那么就讨论开始竞争到底谁当根,大家定义好一个游戏规则,在网桥之间传递特殊的消息BPDU(bridge procotol data unit)网桥协议数据单元,包含足够的信息做以下工作:从网络中的所有网桥中,选出一个作为根网桥,然后再计算本网桥到根网桥的最短路径。而且根桥是每 2秒钟发送一次BPDU。BPDU数据帧中包括了很多内容,如图所示:

bubuko.com,布布扣

  我们在这里只关系网桥ID(包括两个字节的优先级和6个字节的MAC地址)。

bubuko.com,布布扣

  选择根桥的方法是比较每一个交换机的Bridge ID也就是桥ID,这个桥ID的格式是:

bubuko.com,布布扣

  有两部分组成:一个是桥优先级,一个是MAC地址,但是思科的交换机优先级默认都是32768,如果优先级相同,再比较后面的MAC地址,MAC肯定是不同的,所以小的就是根桥,

  在一个网络中,只能有一个根网桥,其他的网桥就称为非根桥;根桥上的每一个端口都称为指派端口,也可以说根桥上的每个端口都是根端口,但是非根桥上的端口叫法就不同的,非根桥有一个端口叫根端口,其他端口叫非指派端口。

bubuko.com,布布扣

  刚才我们说了,如果有多个交换机,选择根网桥使用的是bridgeID,那这里在非根桥上我怎么知道哪个是根端口,哪个是非指派端口呢,这里也 有一个准则,就是依次比较每个端口到达根网桥所花代价+优先级+MAC地址+端口号(从左到右依次比较软小者),这里又可以分为是一个交换机的多个端口和 多个交换机的多个端口之间如果选择。

  如果是同一个交换机,那么起决定作用的就是到达根桥代价最小的端口是根端口,关键是这里怎么知道哪个端口代价最小呢,这是根据带宽定义的,我们

bubuko.com,布布扣

  其中这个代价指的就是开销,开销越小就说明连接速率越大,速度越快。我们再看上面的那个图,有两个链路,一个是100BASET,一个是 10BASE-T,一个开销是100,一个开销是19,明显选择上面的那个端口作为根端口。那么下面的那个端口就是非指派端口,就会将它指定为 BLOCK,不可用状态,直到根端口不可用时,它才会“翻身”。但是要注意的是这个端口怎么Block了,不能发送用户数据,但可以继续接收BPDU。

  那么如果是多个非根网桥希望选择一个根端口,则先比较代价,如果代价相同再比较优先级,如果优先级也相同再比较MAC地址,这肯定是不同的。

bubuko.com,布布扣

  针对这个图来说,处理Block状态的端口应该是交换机Y的端口1,因为两边的链路代价是一样的,优先级默认也相同,所以就比较MAC地址,但因为交换机X的MAC地址小,所以它的端口都是forwarding状态。但是交换机y的端口1就Block了。

bubuko.com,布布扣

  以上是我们所分析的根桥以及根端口和指派端口和非指派端口的选择问题。那么一个端口从开机到正常工作会处于四种状态,分别是block,listening,learning,forward,我们来分析一下:

  Block ------为了防止网桥发生loop,所有的端口开始都处于Block状态。如果交换机在其他端口收到了同一个BPDU,那么交换机就认为有另一条链路 可到达根桥,如果生成树决定其他链路是到根桥更好的路径,那么这个端口继续保持block,那么如果本端口被交换机认为是最好的端口,那么进入到下面的状 态。这个时间是20秒,称为最大生存周期。

  listening-----端口从block状态转为listening状态,它利用这段时间来listening是否还有到根桥的其他路 径。在此状态,端口可以倾听到配置消息,但是不能转发或接收用户数据。也不允许端口将它所听到的任何信息放到地址表中,这有15秒的时间。在这一段时间里 的listening状态实际上就是用来说明端口已经准备好进行传输,但是它愿意再倾听一下以确认它不会产生loop.

  learning -------学习状态与倾听状态非常相似,除了端口可以将它所学到的信息添加到地址表这一点之外,它依然不可以发送和接收用户数据。这个过程也是15秒。

  forward -----这个状态意味着可以发送和接收用户数据。

  那么如果一个非根交换机在20秒内没有收到任何配置信息,也就是没有收到BPDU就会认为该端口连接的链路发生了故障,于是就重新计算STP。再一次选择根桥,根端口,指派端口以及非指派端口。

  以上就是关于生成树协议的比较详细的介绍,当然我们哆哩哆嗦的讲了这么多,真正要我们配置的命令并不多,因为思科默认就已经开启了生成树协议,在本节的结尾我会附上相关的实验来验证stp的作用。

  还要注意STP只是针对二层的环路起作用,对于物理层的环路是不起作用的,一层环路可以说纯粹是人为的原因!!!

       

        为什么要有生成树,就是为了避免产生转发的帧在网络中不断的都圈子。

        为了得出反映网络拓扑发生的变化是的生成树,在生成树的根网桥每隔一段时间还要对生成树的拓扑进行更新!

生成树详解,布布扣,bubuko.com

评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!