充分而徹底地了解一個(gè)協(xié)議,是記住它的關(guān)鍵!
Spanning tree(802.1d)收斂過(guò)程
天下群雄紛起(switch power on),個(gè)個(gè)都默認是老大(root bridge),但都還比較謙虛,保持靜默15秒(listening,unable forwarding end user traffic),用于收集情報(other switch BPDU),最早進(jìn)入靜默狀態(tài)的山大王(最先啟動(dòng)的交換機)等的不耐煩了(listening timeout),因為他沒(méi)有收集到任何消息,開(kāi)始散發(fā)傳單(it's own BPDU),2秒一次(BPDU interval ),大言不慚稱(chēng)帝(root bridge)。
各地土匪由于武力不敵(BPDU priority 低),只好俯首稱(chēng)臣(non root bridge),只敢乖乖地接收皇帝的圣旨(BPDU configuration ),然后再 relay 一下皇帝的圣旨到下游郡王…
大梟雄(BPDU priority 最高)醒來(lái)的晚(power on),看到如此情形不愿意了,一個(gè)小蝦米竟然充大尾巴狼,于是發(fā)出了自己的挑戰書(shū)(BPDU),從自己的各個(gè)城門(mén)散發(fā)出去,意思是:小崽子,快快滾下臺去!
收到挑戰書(shū)的郡王們(switch ) 意識到新的皇帝登場(chǎng)了,于是改玄易轍紛紛以新皇帝為中心,重新選擇自己的rootport ;收到挑戰書(shū),舊皇帝倒也遵守游戲規則,很配合地俯首稱(chēng)臣,至此,天下大勢已定,大梟雄稱(chēng)帝(root bridge ),于是皇城所有城門(mén)選為designated port。
各個(gè)郡國選擇離皇城最近的城門(mén)做自己的朝圣門(mén)(root port) ,如果有相同距離(path cost)的兩個(gè)城門(mén),則哪個(gè)城門(mén)上游的城門(mén)(port priority ) 優(yōu)先級高則選為朝圣門(mén)(root port ) 。
各個(gè)郡國之間的城門(mén)則根據距離皇城的遠近(path cost ) ,誰(shuí)近則誰(shuí)的城門(mén)選做 designated 城門(mén)(designated port),輸者則為 ( non designated port)。
于是一個(gè)以皇帝為中心的權利樹(shù)(Spanning Tree)生成了…
各個(gè)城門(mén)角色選好,先登記(learning,unable forwarding end user traffic) 一下平民(host/end user)住址信息( MAC Address — Port Number),周期15秒,完成這個(gè)過(guò)程,天下太平( 網(wǎng)絡(luò )收斂)。
所有非 non-designated城門(mén)可以允許平民自由雙向流動(dòng)(bi-directional end user traffic )。
皇城,所有城門(mén)可以發(fā)圣旨(BPDU),也可以接收來(lái)自下手郡國的奏折( BPDU Topolology Change Notification)。
皇上的圣旨包含有:
皇帝的國號 ( Root Bridge ID) (Priority + MAC) 皇帝駕崩觀(guān)望等待周期 20 秒( max-age) 皇帝頒布圣旨的時(shí)間間隔 2 秒 ( BPDU Hello)城門(mén)靜默時(shí)間 15 秒 ( forward -delay )登記平民住址時(shí)間 15 秒 (forward-delay)
皇帝駕崩觀(guān)望周期超時(shí)(Root Bridge 崩潰重啟,死機,通往root bridge uplinkdown) ,即郡王如果20 秒沒(méi)有收到圣旨(RootBridge BPDU),下屬郡王可以自行選擇新的皇帝(root bridge)。
其它郡國的所有城門(mén)都可以接收圣旨,但只會(huì )把從朝圣門(mén)(root port)收到的圣旨relay 到下游郡國。
如果郡國有什么風(fēng)吹草動(dòng)(topology change,Link down ,凡是在這個(gè)link下游的MAC Address Entry 要快速超時(shí),否則會(huì )造成長(cháng)時(shí)間的流量黑洞),需要及時(shí)上奏皇上(BPDU Notification),也是通過(guò)朝圣門(mén)( root port) 一級級上報給皇上(TC,Topology Change),上游郡國可自行發(fā)確認信號(TCA,Topology Change Acknowledge),然后皇上會(huì )發(fā)一個(gè)國家進(jìn)入緊急狀態(tài)圣旨(BPDU configure with TC bit set ) ,接收到此圣旨的郡王紛紛將缺省的平民(host ) 的地址數據庫 ( MAC Address Table ) 超時(shí)時(shí)間由 5 分鐘縮短為20 秒(max-age)。
記住一點(diǎn):圣旨(BPDU Configure)只能由皇帝(root bridge) 一個(gè)人向下發(fā),即單向流動(dòng),用于管理國家,告訴郡王(non root bridge)如何保持同步?梢苑Q(chēng)之為 上游 —> 下游控制流量。
奏折(BPDU notification )由各個(gè)郡王向上發(fā),通知皇上地方有暴亂(topology change)?梢苑Q(chēng)之為下游 —> 上游 報告流量。
數據傳輸過(guò)程
1 屬于同一個(gè)郡國(same accessswitch)平民交流
平民(host )之間走親串友(end user traffic ) ,如果屬于同一個(gè)郡國(access switch),則他們之間的走動(dòng)(bi-directionaltraffic)只局限于郡國之內,這種流量最節省資源。不會(huì )干擾上游郡國(aggregate switch),以及皇帝(core switch) 。
2 不同郡國(different accessswitch)的平民之間的交流,則有二種情況:
2.1 相同的上游郡國(same aggregate switch )
流量需要經(jīng)過(guò)3個(gè)郡國,源郡國(access switch)、上游郡國(aggregate switch)、目的郡國(access switch),需要耗費更多的帶寬資源。
2.2 不同的上游郡國(different aggregate switch )
流量需要經(jīng)過(guò)5個(gè)郡國,源郡國(access switch)、上游郡國(aggregate switch)、皇城(core switch),另一個(gè)分支的上游郡國(aggregate switch)、目的郡國(access switch),需要耗費更多的帶寬資源、以及5臺switch硬件處理資源。
由于皇帝都是坐北朝南的,我們稱(chēng)凡是途徑皇城的流量為南北流量(South-North Traffic),而不途徑皇城的流量為 東西流量(West-EastTraffic )。
過(guò)去的10年,公司的流量大多為訪(fǎng)問(wèn)公司服務(wù)器、互聯(lián)網(wǎng)的流量,它們需要途徑皇城,途徑皇城(RootBridge/Core Switch)南北流量占大多數,采用三層架構(access/aggregate/core)更利于網(wǎng)絡(luò )擴展。
而隨著(zhù)虛擬(Virtual Host)計算的不斷普及,更多的是東西流量,不需要途徑皇城,則流量由aggregate switch 使用 大二層技術(shù)(big layer 2 ) , 如 VxLAN 進(jìn)行擴展,途徑 core switch 的南北流量越來(lái)越少,現在的網(wǎng)絡(luò )架構慢慢演變成大二層的扁平架構。
上方為Aggregate switch ( VTEP, MP-BGP EVPN),新的名稱(chēng):Spine,用于本地二層(locallayer 2)的交換,大二層的交換 ( remote layer 2 ),同時(shí)還負責三層的路由。
讀者一定發(fā)現一個(gè)規律,我總是把Root Bridge / Core Switch 合二為一,為什么CoreSwitch 一定要做Root Bridge? 或者反過(guò)來(lái)說(shuō),為何 Root Bridge一定要做 Core Switch?
古代大多選長(cháng)安作為首都皇城,可以更好管理國家,距離上也適中,而如果選擇一個(gè)邊緣地區(edge switch)如海南島、黑龍江,則不利于經(jīng)濟、交通的往來(lái)。
Core Switch 一般位于網(wǎng)絡(luò )的中心,距離誰(shuí)也不會(huì )太遠(2hop),而且數據吞吐能力超強,一般不會(huì )是流量的瓶頸,所以選擇它做Root Bridge 是最合理不過(guò)。
作為網(wǎng)絡(luò )設計者,需要防止任何 非core switch 的 閑雜人員自說(shuō)自話(huà)做Root Bridge,一般需要將 core switch 的值設為最小 4096 (值越小越優(yōu)先),那4095 不是更小嗎?為何不設成4095?
那是因為 Priority 占據16位中的高4位,最小值即為0001 0000 0000 0000 ,4096 為最小值。
此外需要 access switch 配置 Port Fast ,BPDU Guard,Port Fast可以讓端口不需要經(jīng)過(guò) listening 、learning 痛苦而漫長(cháng)的過(guò)程,可以直接進(jìn)入 end user traffic forwarding 狀態(tài)。后者可以防范非法軟件發(fā)送高優(yōu)先級的BPDU,一方面由于Enable Port Fast ,disable spanning tree functionality on this port,造成環(huán)路;另一方面 如果搶占了 Root Bridge 這個(gè)皇帝角色,那將是一個(gè)災難,因為途徑皇城(RootBridge )的流量全部被吸引了過(guò)來(lái),用戶(hù)電腦將流量全被默默地扔了,造成流量黑洞…
HSRP/VRRP
HSRP:Hot Standby Redudant Protocol
VRRP:Viritual Routing Redudant Protocol
稱(chēng)它們二者為FHRP,即第一跳冗余協(xié)議。 HSRP是cisco公司私有協(xié)議,后來(lái)IETF覺(jué)得它挺不錯,就依葫蘆畫(huà)瓢打造一個(gè)業(yè)界標準協(xié)議,VRRP,用于不同公司的產(chǎn)品之間的消息交換。
對于用戶(hù)電腦/服務(wù)器來(lái)說(shuō),缺省網(wǎng)關(guān)就是第一跳路由器,換句話(huà)說(shuō),所有非本地的流量都需要缺省網(wǎng)關(guān)來(lái)轉發(fā),如果缺省網(wǎng)關(guān)掛了,那是不是本網(wǎng)段的所有主機、服務(wù)器都和互聯(lián)網(wǎng)隔絕了?既然缺省網(wǎng)關(guān)如此重要,那就需要提供備份路由器來(lái)進(jìn)行備份。主缺省網(wǎng)關(guān)(primary)和 備份路由器(secondary )之間需要一種消息機制(keepalive 3秒一次)來(lái)發(fā)現對方,還需要依靠priority大小來(lái)選出誰(shuí)是 primary,誰(shuí)是secondary? 同時(shí)最好有身份驗證(authentication)機制認證彼此。
Primary RouterCrash / LAN Link Down
Primary無(wú)法發(fā)送keepalive 消息,keepalive 3秒一次,備份路由器連續3次沒(méi)有接收到keepalive,則認為自己可以擔當主路由器。
這里有兩個(gè)關(guān)鍵詞:
VIP: Virtual IP
VMAC: Virtual MAC
誰(shuí)擔任primary router, 誰(shuí)的網(wǎng)絡(luò )接口就綁定VMAC/VIP,假設 VIP=10.1.1.1 /24,VMAC= xxxxxx.000001,那么VIP就是10.1.1.0/24網(wǎng)段的缺省網(wǎng)關(guān)。如果有host ARP request 10.1.1.1 的MAC地址是多少?則擔任primary router 路由器用VMAC=xxxxxx.000001來(lái) ARP reply。
如果主路由器crash、接口down,就無(wú)法發(fā)送keepalive消息,keepalive 3秒一次,如果備份路由器連續三次沒(méi)有接收到keepalive,則認為自己可以擔當主路由器。
Primary Router WANLink Down
Primary失去了Internet access ,主動(dòng)降低自己的priority,使自己的priority < 備份路由器 Priority,則備份路由器認為自己可以擔當主路由器。
如果原來(lái)的primary router WAN 又UP了,并且穩定了一段時(shí)間,可以將自己的priority恢復正常,可以恢復自己primary 的地位。