綠油油的草兒,碧澄澄的溪~ 輕飄飄的風兒,迎面吹~ 哞嗨嗨的牛兒,青幽幽的堤~ 樂陶陶的人兒,哼著歌~~~寐~
“白龍馬兒,蹄兒朝西,馱著唐三藏,跟著三徒弟~西天取經不容易,一走就是幾萬里~”那個樂陶陶的人好不自在。
“主公,這個人真的是那人嗎?怎么如此吊兒郎當?”說話的人方臉大耳,膀闊腰圓,一看就是個久經沙場的武將。
“大隱隱于市,交換機,你可莫要小瞧了人家。舉凡智計無雙的奇人異士,縱有通天徹地之能,大都鋒芒內斂,不顯山露水。群英會上戰RIP,本公是親眼所見,此子風采,當真了得!
被喚作主公的那人頭戴侯冠,身披銀甲,內罩白袍,威嚴凜凜。
“嘿嘿,那也未必。主公,當日此子確是舌燦蓮花,但空有理論,說不定難于踐行!闭f話的這人天生一雙鼠目,任誰看了都覺得一臉奸猾相,“我們三人跟在他后面行了這么久,說不定他也只是故弄玄虛,區區一繡花枕頭罷了!
“呵呵,若能求得一賢才,多行一段路又何妨?”那主公見OSPF漸行漸遠,立時催馬揚鞭。并轡二人左右對視一眼,亦隨即而去。
1 訪諸葛三顧茅廬 論運行機制謀治世妙法
“三位跟隨我多日,可悟出了什么?”行至一蔭涼處,OSPF從牛背上跳了下來,對后面跟著的三人說道。
“…….”要是悟出來了,還能來尋你么?那主公心中如此想,但是臉上卻沒表現出來。他翻身下馬,對著OSPF雙手畢恭畢敬道:“先生說笑了,我三人皆是草莽出身,哪能悟得什么?此番前來,也是希望先生能助本公一臂之力,于互聯網上開疆拓土,成不世偉業!
“恩,悟得開了,悟得開了……”OSPF卻似是自說自話一般,裝出一副高人摸樣,心下卻笑開了花。
“哼,黃口小兒,我家主公與你這般客氣,你好生無禮!”交換機早就憋了一股氣,終于忍不住喝道。
“恩,榆木腦袋,悟不開,悟不開……”
“你!”“噯,”那主公攔下了交換機作勢欲揮出去的臂腕,接著對OSPF道:“群英會上,本公聽過先生所說的SPF與LSDB,很是欽佩。若真如先生所描繪那樣,定當互聯網之福,眾網元之福。望先生入我麾下,本公必奉先生為上賓!
“哈哈哈哈,主公謬贊,”OSPF再也不似先前散漫摸樣,既而畢恭畢敬道:“主公身旁兩員猛將當是交換機、路由器,那主公必是攜眾網元開拓繁多網點的網管了。今幸得主公如此禮遇,再推脫就是OSPF的不是了!
“嘿嘿嘿嘿,你這人倒是懂得順坡騎驢,”路由器一臉奸笑,“SPF與LSDB莫不是一紙空談吧?”
“呵呵,無妨,主公請看,”說話間OSPF順手打開隨身帶的幾幅圖,“下山前,師父曾賜與我五行八陣圖,囑我多加揣摩,如今終得其精髓。此圖在手,定能助主公爭霸天下!”
“哈哈!先生快快說與我聽!”網管早已按捺不住,忙對OSPF道。
OSPF見此情景,當下再不廢話,徐徐與他們道來。
此組圖說的,正是OSPF協議的基本運行機制,恰似百尺高樓之基石。其實概括起來,也比較容易理解,包括下面5步:
(1)Hello協議交互-形成鄰居關系 圖1 Hello協議交互-形成鄰居關系
如圖1所示,設備運行OSPF協議后,會從所有啟動OSPF協議的接口上發出Hello數據包。如果兩臺設備共享一條公共數據鏈路,并且能夠互相成功協商他們各自Hello數據包中所指定的某些參數,那么他們就成了鄰居關系。
(2)LSAs的泛洪-通告鏈路狀態信息 圖2 LSAs的泛洪-通告鏈路狀態信息
形成鄰接關系的設備之間就可以交互LSA了,如圖2所示。通過第一篇我們知道,LSA全稱是鏈路狀態通告,它描述了設備所有的鏈路、接口、鄰居及鏈路狀態等信息。設備間正是不斷的泛洪交互這些鏈路信息,來了解整個網絡的拓撲信息。由于鏈路的多樣性,OSPF協議定義了許多LSA類型,后面的篇章會詳細介紹到。
同時我們可以了解到OSPF比RIP的高明之處在于,路由器之間交互的是LSA信息,而RIP協議交互的是路由。也就是說,OSPF協議中,設備的選路是一種“自主行為”,LSA只不過是一種選路的參考信息;而RIP協議中,設備的選路過度的依賴于鄰居設備的路由信息,即使鄰居設備傳達的信息是錯誤的。
(3)LSDB的組建-形成帶權有向圖 圖3 LSDB的組建-形成帶權有向圖
通過泛洪LSA,設備接下來會把收到的LSA匯總記錄在LSDB(鏈路狀態數據庫)當中,最終,所有設備都會形成同樣的LSDB,如圖3所示。LSA是對設備周圍網絡拓撲結構的描述,而LSDB則是對整個自治系統的網絡拓撲結構的描述,LSDB是LSA的匯總。
(4)SPF的計算-形成路由 圖4 SPF的計算-形成路由
如圖4所示,當LSDB同步完之后,每一臺設備都將以其自身為根,使用SPF算法來計算一個無環路的拓撲圖,以描述它所知道的到達每一個目的地的最短路徑(最小的路徑代價),如圖4所示。這個拓撲圖就是SPF算法樹,有了這棵“樹”,事實上路由器就已經知道了到達網絡各個角落的最優路徑。
(5)路由表的維護更新 圖5路由表的維護更新
最終,經過SPF算法得出了最短路徑樹,每臺設備將SPF算法得出的最短路徑裝載進路由表形成指導數據轉發的路由表項,并且實時更新,如圖5所示。同時,鄰居之間交互Hello報文進行Keepalive,維持鄰居/鄰接關系,并且每30min重傳一次LSA。如果網絡拓撲穩定,那么網絡中將不會有什么活動或行為發生。
2 領虎符整飭三軍,設RouterID知己知彼
“先生這妙法如此運用,令本公茅塞頓開,我想再復雜的網點也必能攻的下來。先生若入我帳下,本公愿與你調兵虎符,麾下三軍盡皆任你調遣!”到現在,網管是愈加的對OSPF佩服的五體投地。
“蒙主公抬愛,微臣自當鞠躬盡瘁,死而后已!”
自那日網管三顧茅廬之后,OSPF便隨網管來到了某網點大營之中。借由帳中沙盤,OSPF知道此網點名喚X網點,內里錯綜復雜,地域遼闊。網點內不同網元鱗次櫛比,而且網元間需要交錯相連,任什么路由協議見了,肯定都會頭疼不已。
“軍師,俺叫路由器!”在大營中某一處,一個大頭兵正憨憨的答著OSPF的話。OSPF并未急于攻城掠地,來了之后,便先是熟悉三軍。
“那么你呢?”OSPF持扇輕搖,轉身對另一士兵道。
“軍師,俺也叫路由器!”
“俺也叫路由器!”
“……”
“你叫路由器,你也叫路由器,真是叫我有些暈頭轉向了!監SPF搖頭笑道。
“嘿嘿,軍師,俺們本來就都是路由器啊。何況俺們這些大老粗,名諱也不值幾個錢,哪能與那些有頭有臉的協議比! “不然,知己知彼,方百戰不殆。也莫要小瞧自己,哪個協議離了你們能玩的轉。本軍師要了解整網拓撲,亦要靠你們,”OSPF沉吟半晌,既而肅容道:“眾將聽令!卯時三刻,校場集合,軍師來給你們發Router ID了!”
Router ID就是用于在自治系統中唯一標識一臺運行OSPF的路由器的32位整數。每個運行OSPF的路由器都有一個Router ID。Router ID的格式和IP地址的格式是一樣的,在實際網絡部署中,考慮到協議的穩定,推薦使用路由器Loopback0的IP地址做為路由器的Router ID。 Router ID的選取有兩種方式:
l 通過命令行手動配置。
l 設備自動設定。
如果沒有手動配置Router ID,設備會從當前接口的IP地址中自動選取一個作為Router ID。其選擇順序是:
1、優先從Loopback地址中選擇最大的IP地址作為Router ID。
2、如果沒有配置Loopback接口,則在接口地址中選取最大的IP地址作為Router ID。
只有重新配置系統的Router ID或OSPF的Router ID,并且重新啟動OSPF進程后,才會進行Router ID的重新選取。
3 因地域分四路掠城,攜天威攻萬變賊寇
“9.5.2.7!”
“到!”
“9.5.2.8!”
“到!”
數日過后,三軍陣前校場點兵,上至虎虎將尉,下至大頭小兵,莫不精神抖擻,煥然一新。OSPF心下了然,便開始排兵布陣,準備拿下X網點。而他根據不同的鏈路類型,將三軍分作了四路,每路陣法不盡相同:
1、 廣播(Broadcast)類型
當鏈路層協議是Ethernet、FDDI時,OSPF缺省認為網絡類型是Broadcast。在該類型的網絡中,通常以組播形式(224.0.0.5:含義是OSPF路由器的預留IP組播地址;224.0.0.6:含義是OSPF DR的預留IP組播地址)發送Hello報文、LSU報文和LSAck報文;以單播形式發送DD報文和LSR報文。
![]()
圖7 廣播(Broadcast)類型網絡
2、 NBMA(Non-Broadcast Multi-Access)類型
當鏈路層協議是幀中繼、ATM或X.25時,OSPF缺省認為網絡類型是NBMA。在該類型的網絡中,以單播形式發送協議報文(Hello報文、DD報文、LSR報文、LSU報文、LSAck報文)。
圖8 NBMA(Non-Broadcast Multi-Access)類型網絡
3、 點到多點P2MP(point-to-multipoint)類型。
沒有一種鏈路層協議會被缺省的認為是Point-to-Multipoint類型。點到多點必須是由其他的網絡類型強制更改的。常用做法是將非全連通的NBMA改為點到多點的網絡。在該類型的網絡中,以組播形式(224.0.0.5)發送協議報文(Hello報文、DD報文、LSR報文、LSU報文、LSAck報文)。
圖9 點到多點P2MP(point-to-multipoint)類型類型網絡
4、 點到點P2P(point-to-point)類型
當鏈路層協議是PPP、HDLC和LAPB時,OSPF缺省認為網絡類型是P2P。在該類型的網絡中,以組播形式(224.0.0.5)發送協議報文(Hello報文、DD報文、LSR報文、LSU報文、LSAck報文)。
圖10 點到點P2P(point-to-point)類型網絡
4 拔敵寨遭遇險境,舉能人解廣播/NBMA鄰間困局
“哈哈哈,先生真乃神人也!據探子來報,P2P和P2MP網絡已被攻破。不出五日,X網點將被全部拿下!”網管坐在馬上,撫掌大笑道。
“主公,此話言之尚早,剩下的兩路可不好拿!監SPF一反往日淡然自若,神色中竟帶有一絲隱憂。
“報!”正當時,一探子快馬加鞭至兩人跟前。只見那探子衣衫盡皆血染,滿目疲憊之色,“廣播鏈路久攻不下,如不及時馳援,我軍危矣!”
“什么!怎會如此!”網管身形一顫,險些跌下馬來。
“初時我軍攻敵勢如破竹。但….”探子回話突地一頓,悲戚中難掩一絲憤恨,“但后來路將軍不知與敵賊言語了什么,廣播鏈路上需要連的設備竟越來越多。我軍結兩兩相交之陣,一開始堪堪抵住洶涌來勢,及至最后陣法漸露疲相,我軍亦深陷泥潭!”
OSPF聽罷靜默無言,待心緒稍自平復,忙對來人道:“我問你,陣中那白袍小將安在?”
“這……身披白袍的將士有好些個,卻不知軍師說的是哪一位?”
“就是身邊總有個容貌清秀的小兵圍著他嘰嘰喳喳轉個不停的那一位!
“哦,原來是那一位!”探子恍然大悟,“我知道的!幸有此人一馬當先,不然只怕我軍早已敗下陣來!
“我賜你錦囊一枚,速交于他手!”
“是!”探子接過錦囊,一騎絕塵而去。
“先生,此子是何人物?能替本公拿下這一仗么?”網管言語間很是急切。開始如此順利,現在若停歇下來,可真是功虧一簣了。
“早先我料到可能有此劫,攻打廣播鏈路/NMBA鏈路時便定一計,但需營中素有威名之人相助。此子由眾人推舉而來,原先籍籍無名,現名DR!”
4.1 DR/BDR選舉的原因
在廣播網和NBMA網絡中,任意兩臺路由器之間都要傳遞路由信息。如圖11所示,網絡中有n臺路由器,則需要建立n*(n-1)/2個鄰接關系。這使得任何一臺路由器的路由變化都會導致多次傳遞,浪費了帶寬資源。為解決這一問題,OSPF定義了指定路由器DR。通過選舉產生DR(Designated 路由器)后,所有其他設備都只將信息發送給DR,由DR將網絡鏈路狀態LSA廣播出去。為了防止DR發生故障時,重新選舉DR時會產成業務中斷,除了DR之外,還會選舉一個備份指定路由器BDR。這樣除DR和BDR之外的路由器(稱為DR Other)之間將不再建立鄰接關系,也不再交換任何路由信息,這樣就減少了廣播網和NBMA網絡上各路由器之間鄰接關系的數量。這就是OSPF給那白袍小將的錦囊妙計。
圖11 DR和BDR的選舉
4.2 DR/BDR選舉的原則
在廣播網和NBMA網絡中,為了穩定地進行DR和BDR的選舉,OSPF規定了一系列的選舉規則,遵循三個基本原則:選舉制、終身制、世襲制。下面我們來逐個介紹一下。
1、選舉制 圖12 DR和BDR的選舉-選舉制
如圖12所示,所謂選舉制即DR和BDR不是人為指定的,而是由本網段中所有的路由器共同選舉出來的。路由器接口的DR優先級決定了該接口在選舉DR、BDR時所具有的資格。本網段內DR優先級大于0的路由器都可作為“候選人”。選舉中使用的“選票”就是Hello報文。每臺路由器將自己選出的DR寫入Hello報文中,發給網段上的其他路由器。當處于同一網段的兩臺路由器同時宣布自己是DR時,DR優先級高者勝出。如果優先級相等,則路由器 ID大者勝出。如果一臺路由器的優先級為0,則它不會被選舉為DR或BDR。
2、終身制 圖13 DR和BDR的選舉-終身制
所謂終身制也叫非搶占制。每一臺新加入的路由器并不急于參加選舉,而是先考察一下本網段中是否已有DR存在。如果目前網段中已經存在DR,即使本路由器的DR優先級比現有的DR還高,也不會再聲稱自己是DR了。而是承認現有的DR。因為網段中的每臺路由器都只和DR/BDR建立鄰接關系,如果DR頻繁的更迭,則每次都要重新引起本網段內的所有路由器與新的DR/BDR建立鄰接關系。 這樣會導致在短時間內網段中有大量的OSPF協議報文在傳輸,降低網絡的可用帶寬。終身制有利于增加網絡的穩定性、提高網絡的可用帶寬。實際上在一個多訪問網絡上,最先初始化啟動的兩臺具有DR選舉資格的路由器將成為DR和BDR路由器。
3、世襲制 圖14 DR和BDR的選舉-世襲制
所謂世襲制就是如果DR故障了,那么下一個當選為DR的一定是BDR,其他的路由器只能去競選BDR的位置。這個原則都是為了保證DR是比較穩定的,不會經常進行選舉的,并且DR是有備份的(BDR),一旦DR失效,可以馬上由BDR來承擔DR的角色,由于DR和BDR的數據庫是完全同步的,這樣當DR故障后,BDR立即成為DR,履行DR的職責,而且鄰接關系已經建立,所以從角色切換到承載業務的時間會很短。同時,在BDR成為新的DR之后,還會選舉出一個新的BDR,雖然這個過程所需的時間比較長,但這個已經不會影響路由的計算了。
4.3 DR/BDR選舉的詳細步驟
廣播鏈路或者NMBA鏈路上DR/BDR詳細的選舉過程如下:
(1)接口UP后,發送Hello報文,同時進入到waiting狀態。在waiting狀態下會有一個waiting timer,該timer的長度與dead timer是一樣的。默認值40s,用戶不可自行調整。
(2)在waiting timer觸發前,發送的hello報文是沒有DR和BDR字段的。在waiting階段,如果收到Hello報文中有DR和BDR,那么直接承認網絡中的DR和BDR,而不會觸發選舉。直接離開waiting狀態,開始鄰居同步。
(3)假設網絡中已經存在一個DR和一個BDR,這時新加入網絡中的設備,不論它的Router ID或者DR優先級有多大,都會承認現網中已有的DR和BDR。
(4)當DR因為故障down掉之后,BDR會繼承DR的位置,剩下的優先級大于0的設備會競爭成為新的BDR。
(5)只有當不同Router ID,或者配置不同DR優先級的設備同時起來,在同一時刻進行DR選舉才會應用DR選舉規則產生DR。該規則是:優先選擇DR優先級最高的作為DR,次高的作為BDR。DR優先級為0的設備只能成為DRother;如果優先級相同,則優先選擇Router ID較大的設備成為DR,次大的成為BDR,其余設備成為DRother。
江湖小貼士:
看完這一節之后,小伙伴們是不是已經滿腹疑問?什么是waiting狀態?dead timer又是個什么鬼?不要急,等看了第三篇,再回頭看這里,你就會一目了然。
未完待續…………
|