局域网(LAN,Local Area Network)

局域网通过网桥互连,IEEE 802标准中有两种网桥规范,一种是802.1d定义的透明网桥,另一种是802.5定义的源路由网桥


网桥

桥接器(英语:network bridge),又称网桥,一种网络设备,负责网络桥接(network bridging)之用。根据MAC分区块,可隔离碰撞。桥接器将网络的多个网段在数据链路层(OSI模型第2层)连接起来(即桥接)。桥接器在功能上与集线器等其他用于连接网段的设备类似,不过后者工作在物理层(OSI模型第1层)。桥接器仅仅在不同网络之间有数据传输的时候才将数据转发到其他网络,不是像集线器那样对所有数据都进行广播。对于以太网,“桥接”这一术语正式的含义是指符合IEEE 802.1D标准的设备,即“网络切换”。若有通信频繁的机器,则应置于同区之内,否则性能将降低。桥接器可以分区网段,不似集线器仍是在为同一碰撞域名,所以对带宽耗损较大。因桥接器通过其内之MAC表格,让发送帧不会通过,所以其称之为数据链结层操作之网络组件。交换机实际实际上就是一种多端口网桥,是一种对帧进行转发的技术。


交换机工作原理

生成树STP_生成树

最初开机时MAC地址表是空的,1900交换机最多存放1024个地址,当该网络内的主机A要和网络内的B主机进行通信,当主机A发送数据帧(数据+帧头帧尾,帧头中包含目标站地址,帧尾包含源站地址)经端口E0到达网桥时,网桥通过查找MAC地址表(网络内的所有主机MAC地址)是否有需要转发出去的地址,上图明显有,然后经过端口E1转发给主机B。如果MAC地址表中没有,就会向所有的主机发送广播,但是这样是非常消耗资源的,所以交换机的每一个端口必须MAC地址形成完整的映射关系。MAC地址表默认老化时间300秒,300秒后,MAC地址表会从新刷新学习,这就是交换机的工作原理

可以通过下面命令修改#mac-address-table aging


生成树

生成树网桥属于一种透明网桥,这种网桥可以自动完成路由选择功能,无需用户装入路由表或设置参数,网桥的功能是自己学习获得。


生成树协议(STP, Spanning Tree Protocol),又称扩展树协议,是一基于OSI网络模型数据链路层(第二层)通信协议,用作确保一个无循环的局域网络环境。


基于由Radia PerlmanDEC工作时发明的运算法则,STP让一个网络被设计成包含备用(重复的)连接以当一条运作中的线路失效时,自动提供备用路径,并排除引起桥接器循环、及手动启动、关闭该些备用连接的需要。因此,通过使用STP,可以达到四个效果:1防止环路;2防止mac地址震荡;3防止重复帧的出现;4防止广播风暴的出现。


广播风暴

生成树STP_BPDU_02

备注:

转发机制,由于局域网是分组广播式网络,所以交换机一个端口接收到广播,这个交换机有责任将这个广播通过其他所有的端口转发出去。

如上图所示,当某公寓二楼的小张要和公寓十楼的小王进行通信,汇聚交换机为A,接入交换机左为B,右为C,小张发送的数据经过交换机B,交换机B需要将数据转发给A和C,交换机C接收到数据又会转发给A和B,同样交换机A接收到数据又会转发给B和C,就这样无限的循环下去,所以就形成了如右图所示的一个顺时针转播,一个逆时针转播,当所有的成员同时都进行这样的广播,就形成了广播风暴,这个网络就瘫痪掉了。

为什么我们要添加B交换机和C交换的链路呢?当然是为了安全嘛。如果A交换机和B交换机的链路中间断了,那么A交换机会通过B交换机转发数据而不会受到影响。但是加了这条链路,又会引起广播风暴,如何避免呢?任何事情总会有办法的,那就是我们要说的生成树。网络内一旦发现环路,交换机就会自动运行生成树,堵塞某个端口,来消除环路。


STP的工作过程如下:

首先进行根网桥的选举,其依据是网桥优先级(bridge priority)和MAC地址组合生成的桥ID,桥ID最小的网桥将成为网络中的根桥(bridge root)。在此基础上,计算每个节点到根桥的距离,并由这些路径得到各冗余链路的代价,选择最小的成为通信路径(相应的端口状态变为forwarding--转发),其它的就成为备份路径(相应的端口状态变为blocking--堵塞)。STP生成过程中的通信任务由BPDU完成,这种数据包又分为包含配置信息的配置BPDU(其大小不超过35B)和包含拓扑变化信息的通知BPDU(其长度不超过4B)。


根桥(Root Bridge)计算发送生成树,根桥的选择通过比较桥ID,桥ID最小的那个即为根桥,桥ID=桥优先级+MAC地址,网桥ID结构如下所示:
生成树STP_STP_03

 

这是8个字节的网桥ID,正常情况下16BITS分配给STP优先级48BITS分配给MAC地址,使用了MAC地址缩减后,原16BITS的两个字节又分为2部分(类似TOS又分为PRESIDENS和DSCP一样),即4BITS的优先级+12BITS的VLANID OR MSTID,用来解决PVST+时本机MAC地址池不足的情况,这就是STP优先级为4096的历史原因;顺带说下,VLANID和MSTID最多为4096就是2^12=4096的意思;12BITS我们不看它,我们只关心优先级4BITS的16进制的变化:

  

 |<4BITS>|<12BITS>|          十六进制                十进制
0000 0000 0000 0000 = 0X0000 = 0
0001 0000 0000 0000 = 0X1000 = 4096
0010 0000 0000 0000 = 0X2000 = 8192
0011 0000 0000 0000 = 0X3000 = 12288
0100 0000 0000 0000 = 0X4000 = 16384
0101 0000 0000 0000 = 0X5000 = 20480
0110 0000 0000 0000 = 0X6000 = 24576
0111 0000 0000 0000 = 0X7000 = 28672
1000 0000 0000 0000 = 0X8000 = 32768(默认优先级)
1001 0000 0000 0000 = 0X9000 = 36864
1010 0000 0000 0000 = 0XA000 = 40960
1011 0000 0000 0000 = 0XB000 = 45056
1100 0000 0000 0000 = 0XC000 = 49152
1101 0000 0000 0000 = 0XD000 = 53248
1110 0000 0000 0000 = 0XE000 = 57344
1111 0000 0000 0000 = 0XF000 = 61440

由于4BITS只有2^4=16种组合,且0XF000=61440,所以STP的优先级从0到61440,共16种.如下面的实例中,我们查看到根网桥的优先级是32769(默认优先级32468+VLANID 1),没有创建vlan,系统会默认为vlan 1,例中交换机的各个端口同属于vlan 1,STP优先级相同,所以MAC地址最小的那个为根网桥。


指定端口(DP):根桥发送STP的端口

根端口(RP):接收根桥发送STP的端口

堵塞端口(BP)

通路费用(cost):网络中的两个站进行通信时,经过网桥端口所需要的费用,如果经过多个网桥,就是经过相关端口的费用和。OSPF的开销(cost)是路由穿越的那些中间网络的开销的累加,其默认公式为开销=10的8次方除以带宽(带宽单位是b/s),也即100M除以带宽。带宽越大,值越小。端口cost为19应该是100M端口的默认生成树的值???和IEEE定义的100M的cost值为1。为什么不一样?
默认情况下10G=1,1G=4,100M=19,10M=100
令牌环网有1M,4M,16M,100M之分,相应的COST是100,25,6.25,1。
T1链路是1.544M,相应的COST是64。
T3链路是45M,相应的COST是2。

可以查看当前OSPF进程的cost值  #show ip ospf interface

R1#en
R1#conf t
Enter configuration commands, one per line.  End with CNTL/Z.
R1(config)#inter e1/0
R1(config-if)#ip ospf cost ?
  <1-65535>  Cost


网桥协议数据单元(BPDU,Bridge Protocol Data Unit),是运行STP的交换机之间交换的消息帧。BPDU内包含了STP所需的路径和优先级信息,STP便利用这些信息来确定根桥以及到根桥的路径。

当一个网桥开始变为活动时,它的每个端口都是每2s(使用缺省定时值时)发送一个BPDU。然而,如果一个端口收到另外一个网桥发送过来的BPDU,而这个BPDU比它正在发送的BPDU更优,则本地端口会停止发送BPDU。如果在一段时间(缺省为20s)后它不再接收到邻居的更优的BPDU,则本地端口会再次发送BPDU。

生成树STP_BPDU_04

当交换机启动时,每个网桥都会申明自己是根网桥,并且把以上信息广播给所有与它相连的LAN,一个LAN中只有一个地址值最小的标识符,地址值最小的网桥可坚持自己的申明,其他的网桥则放弃申明。根桥根据收到的信息,计算生成树,实质上是计算每个节点到根桥的距离,并由这些路径得到各冗余链路的代价,选择最小的成为通信路径,并且将生成树发送给非根网桥,生成树的结构是通过BPDU协议发送的,非根网桥接收到生成树,就会决定自己的端口是什么状态(DP、RP、BP)


实战演练

生成树STP_生成树_05


如图所示: 创建三台交换机,当连接成功后,端口f0/3会自动变成堵塞状态,这就是生成树的功效了~~


查看A交换机的生成树#sh spanning-tree

生成树STP_STP_06

注释:

Switch#sh spanning-tree
VLAN0001
  Spanning tree enabled protocol ieee
  Root ID    Priority    32769                            //根网桥的优先级32769
             Address     0001.9789.8B41                //MAC地址
             This bridge is the root                        //显示这个网桥是跟网桥
             Hello Time  2 sec  Max Age 20 sec  Forward Delay 15 sec           

  Bridge ID  Priority    32769  (priority 32768 sys-id-ext 1)
             Address     0001.9789.8B41                 //本网桥的MAC地址
             Hello Time  2 sec  Max Age 20 sec  Forward Delay 15 sec
             Aging Time  20

Interface        Role Sts Cost      Prio.Nbr Type
---------------- ---- --- --------- -------- --------------------------------
Fa0/1            Desg FWD 19        128.1    P2p   //表明该网桥的两个端口都是指定端口(DP)
Fa0/2            Desg FWD 19        128.2    P2p


查看B交换机的生成树

生成树STP_网桥_07

Switch#sh spanning-tree
VLAN0001
  Spanning tree enabled protocol ieee
  Root ID    Priority    32769                       //根网桥的优先级32769

             Address     0001.9789.8B41           //显示根网桥的MAC地址
             Cost        19                                    //开销值(从跟网桥到本网桥的开销值)
             Port        1(FastEthernet0/1)           //STP是通过根网桥的端口1发送过来的
             Hello Time  2 sec  Max Age 20 sec  Forward Delay 15 sec

  Bridge ID  Priority    32769  (priority 32768 sys-id-ext 1)     //本网桥的优先级+vlanID
             Address     00D0.BAA1.6D7E          //本网桥B的MAC地址
             Hello Time  2 sec  Max Age 20 sec  Forward Delay 15 sec
             Aging Time  20

Interface        Role Sts Cost      Prio.Nbr Type
---------------- ---- --- --------- -------- --------------------------------
Fa0/1            Root FWD 19        128.1    P2p       //显示该端口为根端口(RP),处于转发状态
Fa0/3            Altn BLK 19        128.3    P2p          //显示该端口为堵塞端口(BP)


查看C交换机的生成树

生成树STP_局域网_08

Switch#sh spanning-tree
VLAN0001
  Spanning tree enabled protocol ieee
  Root ID    Priority    32769
             Address     0001.9789.8B41
             Cost        19
             Port        2(FastEthernet0/2)
             Hello Time  2 sec  Max Age 20 sec  Forward Delay 15 sec

  Bridge ID  Priority    32769  (priority 32768 sys-id-ext 1)
             Address     000D.BDC0.2CDB
             Hello Time  2 sec  Max Age 20 sec  Forward Delay 15 sec
             Aging Time  20

Interface        Role Sts Cost      Prio.Nbr Type
---------------- ---- --- --------- -------- --------------------------------
Fa0/2            Root FWD 19        128.2    P2p       //表明该端口为根端口
Fa0/3            Desg FWD 19        128.3    P2p       //表明该端口为指定端口,因为MAC地址比交换机B的小,如果是同一个交换机,比较端口号,来确定是指定端口还是堵塞端口


当A到B的这就链路断了,f0/3端口会自动由堵塞状态变成转发状态

生成树STP_生成树_09

生成树STP_局域网_10

生成树STP_网桥_11

生成树STP_生成树_12

具体形成过程:

网桥之间每2秒(Hello Time 问询时间)发送一次自己的BPDU信息,如果超过了最大生命周期20秒(Max Age)还没有收到,开始监听(Listening)和学习(Learning),这段时间为转发延迟时间(Forward Delay FD),经过从新计算STP,交换机B的端口f0/3由之前的堵塞状态变成转发状态。


文章开头所说还有一种网桥叫源路由网桥,简单的学习下


源路由网桥


未完 待续~