今天的CCNA教程是关于生成树协议的,一共包括两个部分,我个人觉得可能先学1的前半部分再去学2的全部再回头学1的后半部分可能会更好。本文也会按照这个思路来讲解。
首先来说一下这种情况,通常我们为了让系统更加可靠,都会做设备的备份,比如双路由器或者双交换机。一旦一台设备发生故障,那么另外一台可以继续保证系统的正常运行。例如下图,假设一个路由器坏了,设备依然可以通过另外一台路由器连接到互联网. 假如图中左侧两台交换机其中一台坏掉了,依然可以保证系统的运行。
那么假设我们只依靠之前学到的只是来看这套系统会出现一定的问题,如下图所示,假如PC1给SW1发送了一个全F的广播帧,那么SW1会把该帧发送到SW2和SW3.而SW2收到后会把该帧发送给PC2和SW3,SW3收到来自SW1的广播帧会发送给PC3和SW1,收到SW2的广播帧会发送给SW1和PC3。当然PC是肯定不会对该帧做回应。但是SW3把广播帧又发给了SW1后,SW1继续转发。等于说最后三台交换机不断的发广播帧。最后的结果就是整个网络带宽都被这些无限循环的广播帧给占用了。
这里要记住一点,之前我们知道IP header有ttl,但是二层帧是没有TTL的,所以这些帧永远再发,如下图所示,无限的ARP风暴。
除了网络拥堵之外,还有一个问题,因为每次收到帧后,交换机会更新自己的mac地址表,但是由于这些广播帧不断发送过来,交换机就得不断的更新,这个现象叫 MAC address flapping,mac 地址抖动
所以如何解决这个问题呢?既能让系统设备备份,又能保证不会出现网络拥堵和mac地址抖动这些问题,那么就引入了今天的主要课题 STP
STP:spanning tree protocol 或者又称之为 "classic spanning tree protocol" "802.1D"
目前所有供应商的交换机都支持STP协议,不仅仅是思科一家。该协议主要把交换机端口分为两种模式,forwarding和blocking。如果forwarding状态的端口失败了,那么blocking的端口立马转换状态开始工作。forwarding的端口可以收发所有数据,而blocking的端口只会收STP信息(也称为BPDUs bridge protocol data units)
首先记住端口状态有五种,除去disabled以外,稳定的状态有两种:blocking和forwarding。而另外两种状态时listening和learning,属于过渡状态。
下面我们来描述一下整个流程,首先系统上电,交换机会从所有端口发送 Hello BPDU,并且在默认情况下,每两秒发送一次。如果某端口接收到Hello BPDU,那么交换机就知道该端口连接到另外一台交换机。没收到的就说明该端口连接到了路由器,PC,打印机等等设备。
那么多台交换机都发送了Hello BPDU,谁才是主呢?刚通电连接好,所有交换机都认为自己权限最大,这时就要查看BPDU中的bridge ID,谁的ID值最小那么谁就是root bridge,也就是root switch。
如下图所示,bridge ID有两部分组成,其中priority默认都是32768,当然也可以手动设置更改。假如两者相同,那么就看MAC地址谁的更小。
这里注意一下:其中bridge priority分成两部分,后面实际是VLAN ID,这一块实际上Cisco使用的是PVST(支持ISL)和PVST+(支持dot1q),Per VLAN STP协议,顾名思义就是每一个VLAN有各自独立的STP。通俗点讲,比如端口Gi0/0在VLAN1中可能是forwarding状态,而到了VLAN100可能就是blocking状态
从下图可以看出来为什么默认是32768,也可以看出来bridge priority增加一次就是4096,变化很大。并且可用的值并没有多少。因为后面的extended system id是VLAN ID,不能更改。
接下来,root switch的所有端口都变成designated端口,处于forwarding状态。而其他交换机必须有一条路径能够达到root switch。所有交换机连接到终端的也变成designated端口,处于forwarding状态。另外,多台交换机融合后,除了root switch以外其他switch都不会发送hello BPDU了。
下一步,除了root switch以外的所有交换机都必须选出自己的root 端口,该端口可以到达root switch。假如有多个端口可以到达root switch,那么哪个端口拥有lowest root cost,哪个端口就变成root port。那么如何计算 root cost呢?从下表来看,从该端口到达root switch之间所有的STP cost加起来的值就是该端口的root port。
举个例子来说,如下图,三台交换机的priority都一样,但是SW1的mac地址更小,因此变成root switch,解析来SW2从G0/1到达SW1的cost是4,而从G0/0端口则是8. 所以SW2会选择G0/1作为它的root port。
但是又有一种特殊情况,那就是交换机两个端口的root cost一样,那么该交换机会选择连接到这两个端口的交换机中bridge ID最小的,也就是说还是先看priority,还是一样就看MAC ID。如下图所示:
那么假如刚好两个端口连接到同一个交换机,因此priority和mac地址都一样,那么就看邻居的port ID,如下图所示,每一个端口其实都有一个port ID,在默认情况下,直接看端口数字,越小说明port ID越小
注意要看的是邻居的port ID 而不是自己的port ID
最后呢,没被选中的路径中其中一个端口将被设置为non-designated,即blocking状态。选择方法就是对比这两个端口,先看谁的root cost最低,如果一样的话就看谁的bridge ID最低。如下图所示,root cost都一样,priority一样,直接看mac地址。
接下来讲一下,端口都被选择后,如何切换状态。
我们回忆一下最初讲了端口的几种状态,默认端口一开始都是blocking状态。
blocking状态下,端口不收发数据,也不学Mac地址,接收但不转发BPDUs。
Listening状态下(默认为15秒),端口不收发数据,不学Mac地址,接收和转发BPDUs
Learning状态下(默认为15秒),端口不收发数据,学Mac地址,接收和转发BPDUs
Forwarding状态下,端口收发数据,学Mac地址,接受和转发BPDUs
如下图所示:
首先来说,non-designated端口肯定是保持在blocking状态。而Designated和Root端口最初也是blocking状态,随后变成listening状态,接下来变成learning状态,最后变成forwarding状态。看下图得知,这个转发延迟就是说的listening和learning,默认情况下各为15秒,这就是为什么当我们连接到一个设备时候,网络并不会马上就通,端口会经历状态的变化,如果看Cisco Pocket Tracker的链路指示灯特别明显。
这里我们看到一个max age,默认是20秒。回忆到刚才,所有的端口都已经通过STP设置为root,designated,或者non-designated,接下来root switch会每2秒发送给所有端口1各Hello BPDU。然后其他交换机在接收到后,除了Root端口和non-designated端口以外,其他的designated端口都会把该Hello BPDU转发出去。
另外,每当一个端口收到一个hello后就会启动max age倒计时,默认是20秒,然后19秒,18秒,然后收到下一个Hello BPDU,又从20秒开始倒计时。
一旦20秒用完后,仍然没收到Hello BPDU,那么该端口会发生状态的变化。根据之前讲过的原则来重新确定各个端口的状态。一旦该端口被选成root端口或者designated端口,那么又需要15秒的listenging和15秒的learning,这样算上之前的20秒可以得出,从non-designated端口变成root或者designated需要50秒。反过来从其他状态到blocking状态则是0秒。
这些时间主要是怕出现循环的问题,为了确保系统不出故障。
基本上STP的整体知识框架就完成了,接下来将一些其他特性,
首先一个终端接到交换机端口也需要15秒listening和15秒learning,能不能把给终端准备的端口关闭这个设置呢?有的,那就是portfast。切记,不能在和交换机连接的端口用该设置。
首先进入端口,interface g0/2
spanning-tree portfast
另外一种设置方法是把所有access端口都开了portfast
spanning-tree portfast default
另外一个命令比较实用叫做BPDU guard,一旦该端口配置了这条命令后,一旦收到BPDU就立马将该端口关闭,这样可以配合上面一个命令使用。
首先进入端口,interface g0/2
spanning-tree bpduguard enable
另外一种设置方法就是把所有开了portfast的端口都开了bpdu guard
spanning-tree portfast bpduguard default
一旦该端口接了交换机收到BPDU,该端口会立刻关闭,当然我们可以通过shutdown 和 no shutdown把端口重新打开,然而如果还是接的交换机,该端口会仍然立刻关闭。
当然还有一些其他命令,比如root guard,假如该端口开了root guard即使它接收到了更低bridge ID的BPDU后,它会把自己关闭。不会去接受其他设备为root switch。
还有loop guard, 假如某端口开启了后,过了20秒还是收不到Hello BPDU,它不会去转换状态,只会把自己关闭。
默认情况下,PVST是打开的,当然也可以手动选择其他模式 mst或者repid pvst
Spanning-tree mode pvst
接下来两个命令很实用,
spanning-tree vlan 1 root primary
该命令可以设置该交换机 bridge id为24576,假如其他交换机的id比这个值低,那么该命令会自动将这台交换机的bridge id 降到比其他的交换机低4096
spanning-tree vlan 1 root secondary
该命令类似于上面的命令,区别就是把这台交换机设置为第二重要的root交换机,默认为28672
例如:以上两个命令可以让两个交换机分别为两个不同VLAN的root switch
spanning-tree vlan 1 priority 4096
该命令则是手动设置ID,至少增加4096,从0到61440
spanning-tree vlan 1 cost
spanning-tree vlan 1 port-priority
上面两个命令可以修改之前提到root cost和port ID
show spanning-tree
这条最关键,查看状态
-------------------------------------------------------分隔符-------------------------------------------------------------------
-------------------------------------------------------分隔符-------------------------------------------------------------------
-------------------------------------------------------分隔符-------------------------------------------------------------------
-------------------------------------------------------分隔符-------------------------------------------------------------------
-------------------------------------------------------分隔符-------------------------------------------------------------------
-------------------------------------------------------分隔符-------------------------------------------------------------------
-------------------------------------------------------分隔符-------------------------------------------------------------------
-------------------------------------------------------分隔符-------------------------------------------------------------------
-------------------------------------------------------分隔符-------------------------------------------------------------------
-------------------------------------------------------分隔符-------------------------------------------------------------------
Day 20 Anki Flashcard下载:https://drive.google.com/file/d/1p5kx0xWLMtxNMT5szSFBsuHWDwymT9BU/view?usp=sharing
Day 21 Anki Flashcard下载: https://drive.google.com/file/d/1bQumOuRyjnbqqXEmZ_IQN0nx-C4Bq0vJ/view?usp=sharing
Day 20 Cisco Packet Tracer 练习题下载:https://drive.google.com/file/d/1wP1bJlP3IhWKV5NBEwSYl3l_LUB_62TR/view?usp=sharing
Day 21 Cisco Packet Tracer 练习题下载: https://drive.google.com/file/d/1t8tttFt60qLoMKztcljcMrQ9JYeFTbNy/view?usp=sharing
Day 20 Cisco Packet Tracer 练习题完成下载:https://drive.google.com/file/d/1GKtq2xIbFKPXAP1pw63njdwKocgqt3Et/view?usp=sharing
Day 21 Cisco Packet Tracer 练习题完成下载:https://drive.google.com/file/d/1EIov7XMAsMgNoBnpvD-5ehsfAbpkbVcS/view?usp=sharing
0 条评论