导读 在面试时,比如被问到HSRP的主备切换时间时多久,STP几个状态的停留时间,自己知道有这些东西,但在工作中不会经常用到,就老是记不住,觉得可能还是自己基础不够牢固,知识掌握不够全面。

充分而彻底地了解一个协议,是记住它的关键!

Spanning tree(802.1d)收敛过程

天下群雄纷起(switch power on),个个都默认是老大(root bridge),但都还比较谦虚,保持静默15秒(listening,unable forwarding end user traffic),用于收集情报(other switch BPDU),最早进入静默状态的山大王(最先启动的交换机)等的不耐烦了(listening timeout),因为他没有收集到任何消息,开始散发传单(it's own BPDU),2秒一次(BPDU interval ),大言不惭称帝(root bridge)。

各地土匪由于武力不敌(BPDU priority 低),只好俯首称臣(non root bridge),只敢乖乖地接收皇帝的圣旨(BPDU configuration ),然后再 relay 一下皇帝的圣旨到下游郡王…

大枭雄(BPDU priority 最高)醒来的晚(power on),看到如此情形不愿意了,一个小虾米竟然充大尾巴狼,于是发出了自己的挑战书(BPDU),从自己的各个城门散发出去,意思是:小崽子,快快滚下台去!

收到挑战书的郡王们(switch ) 意识到新的皇帝登场了,于是改玄易辙纷纷以新皇帝为中心,重新选择自己的rootport ;收到挑战书,旧皇帝倒也遵守游戏规则,很配合地俯首称臣,至此,天下大势已定,大枭雄称帝(root bridge ),于是皇城所有城门选为designated port。

各个郡国选择离皇城最近的城门做自己的朝圣门(root port) ,如果有相同距离(path cost)的两个城门,则哪个城门上游的城门(port priority ) 优先级高则选为朝圣门(root port ) 。

各个郡国之间的城门则根据距离皇城的远近(path cost ) ,谁近则谁的城门选做 designated 城门(designated port),输者则为 ( non designated port)。

于是一个以皇帝为中心的权利树(Spanning Tree)生成了…

各个城门角色选好,先登记(learning,unable forwarding end user traffic) 一下平民(host/end user)住址信息( MAC Address — Port Number),周期15秒,完成这个过程,天下太平( 网络收敛)。

所有非 non-designated城门可以允许平民自由双向流动(bi-directional end user traffic )。

皇城,所有城门可以发圣旨(BPDU),也可以接收来自下手郡国的奏折( BPDU Topolology Change Notification)。

皇上的圣旨包含有:

皇帝的国号 ( Root Bridge ID) (Priority + MAC) 皇帝驾崩观望等待周期 20 秒( max-age) 皇帝颁布圣旨的时间间隔 2 秒 ( BPDU Hello)城门静默时间 15 秒 ( forward -delay )登记平民住址时间 15 秒 (forward-delay)

皇帝驾崩观望周期超时(Root Bridge 崩溃重启,死机,通往root bridge uplinkdown) ,即郡王如果20 秒没有收到圣旨(RootBridge BPDU),下属郡王可以自行选择新的皇帝(root bridge)。

其它郡国的所有城门都可以接收圣旨,但只会把从朝圣门(root port)收到的圣旨relay 到下游郡国。

如果郡国有什么风吹草动(topology change,Link down ,凡是在这个link下游的MAC Address Entry 要快速超时,否则会造成长时间的流量黑洞),需要及时上奏皇上(BPDU Notification),也是通过朝圣门( root port) 一级级上报给皇上(TC,Topology Change),上游郡国可自行发确认信号(TCA,Topology Change Acknowledge),然后皇上会发一个国家进入紧急状态圣旨(BPDU configure with TC bit set ) ,接收到此圣旨的郡王纷纷将缺省的平民(host ) 的地址数据库 ( MAC Address Table ) 超时时间由 5 分钟缩短为20 秒(max-age)。

记住一点:圣旨(BPDU Configure)只能由皇帝(root bridge) 一个人向下发,即单向流动,用于管理国家,告诉郡王(non root bridge)如何保持同步。可以称之为 上游 —> 下游控制流量。

奏折(BPDU notification )由各个郡王向上发,通知皇上地方有暴乱(topology change)。可以称之为下游 —> 上游 报告流量。

数据传输过程

1 属于同一个郡国(same accessswitch)平民交流

平民(host )之间走亲串友(end user traffic ) ,如果属于同一个郡国(access switch),则他们之间的走动(bi-directionaltraffic)只局限于郡国之内,这种流量最节省资源。不会干扰上游郡国(aggregate switch),以及皇帝(core switch) 。

2 不同郡国(different accessswitch)的平民之间的交流,则有二种情况:

2.1 相同的上游郡国(same aggregate switch )

流量需要经过3个郡国,源郡国(access switch)、上游郡国(aggregate switch)、目的郡国(access switch),需要耗费更多的带宽资源。

2.2 不同的上游郡国(different aggregate switch )

流量需要经过5个郡国,源郡国(access switch)、上游郡国(aggregate switch)、皇城(core switch),另一个分支的上游郡国(aggregate switch)、目的郡国(access switch),需要耗费更多的带宽资源、以及5台switch硬件处理资源。

由于皇帝都是坐北朝南的,我们称凡是途径皇城的流量为南北流量(South-North Traffic),而不途径皇城的流量为 东西流量(West-EastTraffic )。

过去的10年,公司的流量大多为访问公司服务器、互联网的流量,它们需要途径皇城,途径皇城(RootBridge/Core Switch)南北流量占大多数,采用三层架构(access/aggregate/core)更利于网络扩展。

而随着虚拟(Virtual Host)计算的不断普及,更多的是东西流量,不需要途径皇城,则流量由aggregate switch 使用 大二层技术(big layer 2 ) , 如 VxLAN 进行扩展,途径 core switch 的南北流量越来越少,现在的网络架构慢慢演变成大二层的扁平架构。


上图中最下方为Access switch, 新的名称:Leaf,用于连接 host , server 。

上方为Aggregate switch ( VTEP, MP-BGP EVPN),新的名称:Spine,用于本地二层(locallayer 2)的交换,大二层的交换 ( remote layer 2 ),同时还负责三层的路由。

读者一定发现一个规律,我总是把Root Bridge / Core Switch 合二为一,为什么CoreSwitch 一定要做Root Bridge? 或者反过来说,为何 Root Bridge一定要做 Core Switch?

古代大多选长安作为首都皇城,可以更好管理国家,距离上也适中,而如果选择一个边缘地区(edge switch)如海南岛、黑龙江,则不利于经济、交通的往来。

Core Switch 一般位于网络的中心,距离谁也不会太远(2hop),而且数据吞吐能力超强,一般不会是流量的瓶颈,所以选择它做Root Bridge 是最合理不过。

作为网络设计者,需要防止任何 非core switch 的 闲杂人员自说自话做Root Bridge,一般需要将 core switch 的值设为最小 4096 (值越小越优先),那4095 不是更小吗?为何不设成4095?

那是因为 Priority 占据16位中的高4位,最小值即为0001 0000 0000 0000 ,4096 为最小值。

此外需要 access switch 配置 Port Fast ,BPDU Guard,Port Fast可以让端口不需要经过 listening 、learning 痛苦而漫长的过程,可以直接进入 end user traffic forwarding 状态。后者可以防范非法软件发送高优先级的BPDU,一方面由于Enable Port Fast ,disable spanning tree functionality on this port,造成环路;另一方面 如果抢占了 Root Bridge 这个皇帝角色,那将是一个灾难,因为途径皇城(RootBridge )的流量全部被吸引了过来,用户电脑将流量全被默默地扔了,造成流量黑洞…

HSRP/VRRP

HSRP:Hot Standby Redudant Protocol

VRRP:Viritual Routing Redudant Protocol

称它们二者为FHRP,即第一跳冗余协议。 HSRP是cisco公司私有协议,后来IETF觉得它挺不错,就依葫芦画瓢打造一个业界标准协议,VRRP,用于不同公司的产品之间的消息交换。

对于用户电脑/服务器来说,缺省网关就是第一跳路由器,换句话说,所有非本地的流量都需要缺省网关来转发,如果缺省网关挂了,那是不是本网段的所有主机、服务器都和互联网隔绝了?既然缺省网关如此重要,那就需要提供备份路由器来进行备份。主缺省网关(primary)和 备份路由器(secondary )之间需要一种消息机制(keepalive 3秒一次)来发现对方,还需要依靠priority大小来选出谁是 primary,谁是secondary? 同时最好有身份验证(authentication)机制认证彼此。

Primary RouterCrash / LAN Link Down

Primary无法发送keepalive 消息,keepalive 3秒一次,备份路由器连续3次没有接收到keepalive,则认为自己可以担当主路由器。

这里有两个关键词:

VIP: Virtual IP

VMAC: Virtual MAC

谁担任primary router, 谁的网络接口就绑定VMAC/VIP,假设 VIP=10.1.1.1 /24,VMAC= xxxxxx.000001,那么VIP就是10.1.1.0/24网段的缺省网关。如果有host ARP request 10.1.1.1 的MAC地址是多少?则担任primary router 路由器用VMAC=xxxxxx.000001来 ARP reply。

如果主路由器crash、接口down,就无法发送keepalive消息,keepalive 3秒一次,如果备份路由器连续三次没有接收到keepalive,则认为自己可以担当主路由器。

Primary Router WANLink Down

Primary失去了Internet access ,主动降低自己的priority,使自己的priority < 备份路由器 Priority,则备份路由器认为自己可以担当主路由器。

如果原来的primary router WAN 又UP了,并且稳定了一段时间,可以将自己的priority恢复正常,可以恢复自己primary 的地位。

原文来自:http://network.51cto.com/art/201901/590700.htm

本文地址:https://www.linuxprobe.com/stp-hsrp.html编辑:圆蛋,审核员:逄增宝

Linux命令大全:https://www.linuxcool.com/

Linux系统大全:https://www.linuxdown.com/

红帽认证RHCE考试心得:https://www.rhce.net/