上帝視角
OSPF出現(xiàn)背景
如上圖就是一張簡單的OSPF協(xié)議網(wǎng)絡(luò),那么為什么會出現(xiàn)OSPF協(xié)議呢?
開放式最短路徑優(yōu)先OSPF(Open Shortest Path First)協(xié)議是IETF定義的一種基于鏈路狀態(tài)的內(nèi)部網(wǎng)關(guān)路由協(xié)議。
為什么會出現(xiàn)OSPF?:因為RIP是一種基于距離矢量算法的路由協(xié)議,存在著
收斂慢;
易產(chǎn)生路由環(huán)路;
可擴(kuò)展性差,最大只能支持15跳。
?OSPF的出現(xiàn)很好地解決了上述3個問題,那么OSPF是如何解決上述3個問題的呢?我們一起來看下。
什么是OSPF協(xié)議?
OSPF是一種基于鏈路狀態(tài)的路由協(xié)議,它從設(shè)計上保證了無路由環(huán)路。
那么什么是鏈路狀態(tài)協(xié)議?
如果說距離矢量路由協(xié)議提供的是路標(biāo),那么鏈路狀態(tài)路由協(xié)議提供的就是地圖。每個運行鏈路狀態(tài)協(xié)議的路由器上都有一張完整的網(wǎng)絡(luò)圖。
就好比你有一張地圖怎么還會迷路?運行鏈路狀態(tài)協(xié)議的每一臺路由器都會有一張地圖庫從而避免了環(huán)路。
鏈路狀態(tài)協(xié)議工作原理
?每臺運行鏈路狀態(tài)路由協(xié)議的路由器都了解整個網(wǎng)絡(luò)的鏈路狀態(tài)信息(地圖),這樣才能計算出到達(dá)目的地的最優(yōu)路徑。
1、LSA泛洪:
運行鏈路狀態(tài)路由協(xié)議的路由器都會進(jìn)行鏈路狀態(tài)公告LSA (Link State Advertisement)泛洪,LSA中包含了路由器已知的接口狀態(tài)、接口IP地址、掩碼、開銷和網(wǎng)絡(luò)類型等信息。
通俗點講就是每臺路由器都會將一些關(guān)于自己,關(guān)于本地直連鏈路以及這些鏈路的狀態(tài)和關(guān)于所有直連鄰居的信息傳送給相鄰的其他路由器。
2、建立LSDB:
收到LSA的路由器都可以根據(jù)LSA提供的信息建立自己的鏈路狀態(tài)數(shù)據(jù)庫LSDB(Link State Database)。
通俗點講就是每臺路由器都會收到網(wǎng)絡(luò)中其他的路由器發(fā)送過來的LSA信息,這些所有的LSA信息構(gòu)成了LSDB。這里需要注意的是當(dāng)網(wǎng)絡(luò)穩(wěn)定后,網(wǎng)絡(luò)中的所有設(shè)備應(yīng)該是有相同的LSDB的。
3、建立最短路徑樹:
運行OSPF協(xié)議的路由器在LSDB的基礎(chǔ)上使用SPF算法進(jìn)行運算,建立起到達(dá)每個網(wǎng)絡(luò)的最短路徑樹。
4、路由計算:
通過最短路徑樹得出到達(dá)目的網(wǎng)絡(luò)的最優(yōu)路由,并將其加入到IP路由表中。
常見的鏈路狀態(tài)協(xié)議有:
OSPF:開放式最短路徑優(yōu)先協(xié)議
IS-IS:中間系統(tǒng)到中間系統(tǒng)協(xié)議
OSPF協(xié)議特點
OSPF支持區(qū)域的劃分,區(qū)域內(nèi)部的路由器使用SPF最短路徑算法保證了區(qū)域內(nèi)部的無環(huán)路;
A、為什么劃分區(qū)域?
劃分OSPF區(qū)域可以縮小路由器的LSDB規(guī)模,減少網(wǎng)絡(luò)流量。
區(qū)域內(nèi)的詳細(xì)拓?fù)湫畔?/b>不向其他區(qū)域發(fā)送,區(qū)域間傳遞的是抽象的路由信息,而不是詳細(xì)的描述拓?fù)浣Y(jié)構(gòu)的鏈路狀態(tài)信息。
每個區(qū)域都有自己的LSDB,不同區(qū)域的LSDB是不同的。路由器會為每一個自己所連接到的區(qū)域維護(hù)一個單獨的LSDB。由于詳細(xì)鏈路狀態(tài)信息不會被發(fā)布到區(qū)域以外,因此LSDB的規(guī)模大大縮小了。
B、OSPF是如何劃分區(qū)域的呢?
1、路由器的每個接口可以被劃分在一個區(qū)域,一個路由器可以同時屬于多個區(qū)域。
2、Area 0為骨干區(qū)域,其他區(qū)域為非骨干區(qū)域。每個非骨干區(qū)域都必須連接到骨干區(qū)域。
3、運行在區(qū)域之間的路由器叫做區(qū)域邊界路由器ABR(Area Boundary Router),它包含所有相連區(qū)域的LSDB。
自治系統(tǒng)邊界路由器ASBR(Autonomous System Boundary Router)是指和其他AS中的路由器交換路由信息的路由器,這種路由器會向整個AS通告AS外部路由信息。
C、為什么SPF算法可以保證區(qū)域內(nèi)無環(huán)路?
SPF算法將每一個路由器作為根(ROOT)來計算其到每一個目的地路由器的距離,每一個路由器根據(jù)一個統(tǒng)一的數(shù)據(jù)庫會計算出路由域的拓?fù)浣Y(jié)構(gòu)圖,該結(jié)構(gòu)圖類似于一棵樹,在SPF算法中,被稱為最短路徑樹。樹形是無環(huán)路的。
OSPF利用區(qū)域間的連接規(guī)則保證了區(qū)域之間無路由環(huán)路。
為了避免區(qū)域間路由環(huán)路,非骨干區(qū)域之間不允許直接相互發(fā)布路由信息,所有的非骨干區(qū)域間通信都需要借助骨干區(qū)域。因此,每個區(qū)域都必須連接到骨干區(qū)域。
OSPF通過LSA(Link State Advertisement)的形式發(fā)布路由;
OSPF依靠在OSPF區(qū)域內(nèi)各設(shè)備間交互OSPF報文來達(dá)到路由信息的統(tǒng)一;
OSPF報文封裝在IP報文內(nèi),可以采用單播或組播的形式發(fā)送;
OSPF支持觸發(fā)更新,能夠快速檢測并通告自治系統(tǒng)內(nèi)的拓?fù)渥兓?/b>
OSPF協(xié)議router id
Router ID
Router ID是一個32位的值,它唯一標(biāo)識了一個自治系統(tǒng)內(nèi)的路由器,可以為每臺運行OSPF的路由器上可以手動配置一個Router ID,或者指定一個IP地址作為Router ID。
如果沒有手動配置Router ID,運行OSPF協(xié)議的路由器如何選取Router ID?
1、如果設(shè)備存在多個邏輯接口地址,則路由器使用邏輯接口中最大的IP地址作為Router ID;
2、如果沒有配置邏輯接口,則路由器使用物理接口的最大IP地址作為Router ID。
注意:
1、在為一臺運行OSPF的路由器配置新的Router ID后,需要在路由器上通過重置OSPF進(jìn)程來更新Router ID。
2、通常建議手動配置Router ID,以防止Router ID因為接口地址的變化而改變。
OSPF協(xié)議鄰居/鄰接
鄰居(Neighbor):
OSPF路由器啟動后,便會通過OSPF接口向外發(fā)送Hello報文用于發(fā)現(xiàn)鄰居。
收到Hello報文的OSPF路由器會檢查報文中所定義的一些參數(shù),如果雙方的參數(shù)一致,就會彼此形成鄰居關(guān)系。
鄰接(Adjacency):
形成鄰居關(guān)系的雙方不一定都能形成鄰接關(guān)系,這要根據(jù)網(wǎng)絡(luò)類型而定。
只有當(dāng)雙方成功交換DD報文,并能交換LSA之后,才形成真正意義上的鄰接關(guān)系。
OSPF協(xié)議網(wǎng)絡(luò)類型
OSPF協(xié)議支持四種網(wǎng)絡(luò)類型,分別是點到點網(wǎng)絡(luò),廣播型網(wǎng)絡(luò),NBMA網(wǎng)絡(luò)和點到多點網(wǎng)絡(luò)。
1、點到點網(wǎng)絡(luò)是指只把兩臺路由器直接相連的網(wǎng)絡(luò)。一個運行PPP的64K串行線路就是一個點到點網(wǎng)絡(luò)的例子。
2、廣播型網(wǎng)絡(luò)是指支持兩臺以上路由器,并且具有廣播能力的網(wǎng)絡(luò)。一個含有三臺路由器的以太網(wǎng)就是一個廣播型網(wǎng)絡(luò)的例子。
OSPF可以在不支持廣播的多路訪問網(wǎng)絡(luò)上運行,此類網(wǎng)絡(luò)包括在hub-spoke拓?fù)渖线\行的幀中繼(FR)和異步傳輸模式(ATM)網(wǎng)絡(luò),這些網(wǎng)絡(luò)的通信依賴于虛電路。
OSPF定義了兩種支持多路訪問的網(wǎng)絡(luò)類型:非廣播多路訪問網(wǎng)絡(luò)(NBMA)和點到多點網(wǎng)絡(luò)(Point To Multi-Points)。
3、NBMA:在NBMA網(wǎng)絡(luò)上,OSPF模擬在廣播型網(wǎng)絡(luò)上的操作,但是每個路由器的鄰居需要手動配置。NBMA方式要求網(wǎng)絡(luò)中的路由器組成全連接。
缺省情況下,OSPF認(rèn)為幀中繼、 ATM的網(wǎng)絡(luò)類型是NBMA。
4、P2MP:將整個網(wǎng)絡(luò)看成是一組點到點網(wǎng)絡(luò)。對于不能組成全連接的網(wǎng)絡(luò)應(yīng)當(dāng)使用點到多點方式。
注意:
現(xiàn)網(wǎng)中遇到的大部分屬于點到點網(wǎng)絡(luò)和廣播型網(wǎng)絡(luò),因為幀中繼、 ATM網(wǎng)絡(luò)基本已經(jīng)淘汰了。
DR&BDR選舉
為減小廣播型網(wǎng)絡(luò)和NBMA網(wǎng)絡(luò)中OSPF流量,OSPF會選擇一個指定路由器(DR)和一個備份指定路由器(BDR)。
選舉DR&BDR的條件:
每一個含有至少兩個路由器的廣播型網(wǎng)絡(luò)和NBMA網(wǎng)絡(luò)都有一個DR和BDR。在點到點網(wǎng)絡(luò)和P2MP不需要選舉DR&BDR。
DR&BDR的工作原理
1、當(dāng)指定了DR后,所有的路由器都與DR建立起鄰接關(guān)系,DR成為該廣播網(wǎng)絡(luò)上的中心點;
2、BDR在DR發(fā)生故障時接管業(yè)務(wù),一個廣播網(wǎng)絡(luò)上所有路由器都必須同BDR建立鄰接關(guān)系。
為什么需要選舉DR&BDR?
1、DR和BDR可以減少鄰接關(guān)系的數(shù)量,從而減少鏈路狀態(tài)信息以及路由信息的交換次數(shù),這樣可以節(jié)省帶寬,降低對路由器處理能力的壓力。
2、一個既不是DR也不是BDR的路由器只與DR和BDR形成鄰接關(guān)系并交換鏈路狀態(tài)信息以及路由信息,這樣就大大減少了大型廣播型網(wǎng)絡(luò)和NBMA網(wǎng)絡(luò)中的鄰接關(guān)系數(shù)量。
DR&BDR的選舉
在鄰居發(fā)現(xiàn)完成之后,路由器會根據(jù)網(wǎng)段類型進(jìn)行DR選舉。
1、在廣播和NBMA網(wǎng)絡(luò)上,路由器會根據(jù)參與選舉的每個接口的優(yōu)先級進(jìn)行DR選舉。
優(yōu)先級取值范圍為0-255,值越高越優(yōu)先。缺省情況下,接口優(yōu)先級為1。如果一個接口優(yōu)先級為0,那么該接口將不會參與DR或者BDR的選舉。
2、如果優(yōu)先級相同時,則比較Router ID,值越大越優(yōu)先被選舉為DR。
為了給DR做備份,每個廣播和NBMA網(wǎng)絡(luò)上還要選舉一個BDR。BDR也會與網(wǎng)絡(luò)上所有的路由器建立鄰接關(guān)系。
為了維護(hù)網(wǎng)絡(luò)上鄰接關(guān)系的穩(wěn)定性,如果網(wǎng)絡(luò)中已經(jīng)存在DR和BDR,則新添加進(jìn)該網(wǎng)絡(luò)的路由器不會成為DR和BDR,不管該路由器的Router Priority是否最大。如果當(dāng)前DR發(fā)生故障,則當(dāng)前BDR自動成為新的DR,網(wǎng)絡(luò)中重新選舉BDR;如果當(dāng)前BDR發(fā)生故障,則DR不變,重新選舉BDR。這種選舉機制的目的是為了保持鄰接關(guān)系的穩(wěn)定,使拓?fù)浣Y(jié)構(gòu)的改變對鄰接關(guān)系的影響盡量小。
例子:
在沒有DR的廣播網(wǎng)絡(luò)上,鄰接關(guān)系的數(shù)量可以根據(jù)公式n(n-1)/2計算出,n代表參與OSPF的路由器接口的數(shù)量。
如圖所示,所有路由器之間有6個鄰接關(guān)系。本例中使用DR和BDR將鄰接關(guān)系從6減少到了5,RTA和RTB都只需要同DR和BDR建立鄰接關(guān)系,RTA和RTB之間建立的是鄰居關(guān)系。
此例中,鄰接關(guān)系數(shù)量的減少效果并不明顯。但是,當(dāng)網(wǎng)絡(luò)上部署了大量路由器時,比如100臺,那么情況就大不一樣了。
OSPF協(xié)議5種報文
OSPF直接運行在IP協(xié)議之上,使用IP協(xié)議號89。
運行OPSF協(xié)議的路由器通過5種報文的交互從鄰居狀態(tài)達(dá)到鄰接狀態(tài),完成LSA的泛洪,使網(wǎng)絡(luò)的路由器LSDB達(dá)到一致,每個路由器按照自己LSDB根據(jù)SPF算法計算路徑,生成最優(yōu)路由加入路由表。
下面我們一起看下這個五種報文類型,每種報文都使用相同的OSPF報文頭。
1、Hello報文:
最常用的一種報文,用于發(fā)現(xiàn)、維護(hù)鄰居關(guān)系。
在廣播和NBMA(None-Broadcast Multi-Access)類型的網(wǎng)絡(luò)中選舉指定路由器DR(Designated Router)和備份指定路由器BDR(Backup Designated Router)。
2、DD報文:
兩臺路由器進(jìn)行LSDB數(shù)據(jù)庫同步時,用DD報文來描述自己的LSDB。
DD報文的內(nèi)容包括LSDB中每一條LSA的頭部(LSA的頭部可以唯一標(biāo)識一條LSA)。LSA頭部只占一條LSA的整個數(shù)據(jù)量的一小部分,所以,這樣就可以減少路由器之間的協(xié)議報文流量。
3、LSR報文:
兩臺路由器互相交換過DD報文之后,知道對端的路由器有哪些LSA是本地LSDB所缺少的,這時需要發(fā)送LSR報文向?qū)Ψ秸埱笕鄙俚腖SA,LSR只包含了所需要的LSA的摘要信息。
4、LSU報文:用來向?qū)Χ寺酚善?b>發(fā)送所需要的LSA。
5、LSACK報文:用來對接收到的LSU報文進(jìn)行確認(rèn)。
OSPF協(xié)議狀態(tài)機
運行OPSF協(xié)議的路由器通過5種報文的交互從鄰居狀態(tài)達(dá)到鄰接狀態(tài),中間可能會經(jīng)歷以下8種狀態(tài):
Down:這是鄰居的初始狀態(tài),表示沒有從鄰居收到任何信息。
Attempt:此狀態(tài)只在NBMA網(wǎng)絡(luò)上存在,表示沒有收到鄰居的任何信息,但是已經(jīng)周期性的向鄰居發(fā)送報文,發(fā)送間隔為HelloInterval。如果RouterDeadInterval間隔內(nèi)未收到鄰居的Hello報文,則轉(zhuǎn)為Down狀態(tài)。
Init:在此狀態(tài)下,路由器已經(jīng)從鄰居收到了Hello報文,但是自己不在所收到的Hello報文的鄰居列表中,尚未與鄰居建立雙向通信關(guān)系。
2-Way:在此狀態(tài)下,雙向通信已經(jīng)建立,但是沒有與鄰居建立鄰接關(guān)系。這是建立鄰接關(guān)系以前的最高級狀態(tài)。
ExStart:這是形成鄰接關(guān)系的第一個步驟,鄰居狀態(tài)變成此狀態(tài)以后,路由器開始向鄰居發(fā)送DD報文。主從關(guān)系是在此狀態(tài)下形成的,初始DD序列號也是在此狀態(tài)下決定的。在此狀態(tài)下發(fā)送的DD報文不包含鏈路狀態(tài)描述。
Exchange:此狀態(tài)下路由器相互發(fā)送包含鏈路狀態(tài)信息摘要的DD報文,描述本地LSDB的內(nèi)容。
Loading:相互發(fā)送LSR報文請求LSA,發(fā)送LSU報文通告LSA。
Full:路由器的LSDB已經(jīng)同步
OSPF協(xié)議詳細(xì)工作原理
結(jié)合OSPF協(xié)議的5種報文和8種鄰居狀態(tài)機來一起看下OPSF的工作過程:
1、鄰居發(fā)現(xiàn):
?運行OSPF協(xié)議的路由器會發(fā)送Hello報文,用來發(fā)現(xiàn)和維持OSPF鄰居關(guān)系;
Hello報文結(jié)構(gòu):
Hello報文中的重要字段解釋如下:
Network Mask:32比特,發(fā)送Hello報文的接口的網(wǎng)絡(luò)掩碼。
HelloInterval:16比特,發(fā)送Hello報文的時間間隔,單位為秒。默認(rèn)是10S。
Options:8比特,標(biāo)識發(fā)送此報文的OSPF路由器所支持的可選功能。
可選項:
E:允許Flood AS-External-LSAs
MC:轉(zhuǎn)發(fā)IP組播報文
N/P:處理Type-7 LSAs
DC:處理按需鏈路
Router Priority:8比特,發(fā)送Hello報文的接口的Router Priority,用于選舉DR和BDR。默認(rèn)為1。如果設(shè)置為0,則路由器不能參與DR或BDR的選舉。
RouterDeadInterval:32比特,失效時間。如果在此時間內(nèi)未收到鄰居發(fā)來的Hello報文,則認(rèn)為鄰居失效;單位為秒,通常為四倍HelloInterval。默認(rèn)是40S。
Designated Router:32比特,發(fā)送Hello報文的路由器所選舉出的DR的IP地址。如果設(shè)置為0.0.0.0,表示未選舉DR路由器。
Backup Designated Router:32比特,發(fā)送Hello報文的路由器所選舉出的BDR的IP地址。如果設(shè)置為0.0.0.0,表示未選舉BDR。
Neighbor:32比特,鄰居的Router ID列表,表示本路由器已經(jīng)從這些鄰居收到了合法的Hello報文。
如果路由器發(fā)現(xiàn)所接收的合法Hello報文的鄰居列表中有自己的Router ID,則認(rèn)為已經(jīng)和鄰居建立了雙向連接,表示鄰居關(guān)系已經(jīng)建立。
驗證一個接收到的Hello報文是否合法包括:
1、如果接收端口的網(wǎng)絡(luò)類型是廣播型,點到多點或者NBMA,所接收的Hello報文中Network Mask字段必須和接收端口的網(wǎng)絡(luò)掩碼一致,如果接收端口的網(wǎng)絡(luò)類型為點到點類型或者是虛連接,則不檢查Network Mask字段;
2、所接收的Hello報文中Hello Interval字段必須和接收端口的配置一致;
3、所接收的Hello報文中Router Dead Interval字段必須和接收端口的配置一致;
4、所接收的Hello報文中Options字段中的E-bit(表示是否接收外部路由信息)必須和相關(guān)區(qū)域的配置一致。
2、LSDB數(shù)據(jù)庫同步:
路由器在建立完成鄰居關(guān)系之后,便開始進(jìn)行LSDB數(shù)據(jù)庫同步。
路由器使用DD報文來進(jìn)行主從路由器的選舉和數(shù)據(jù)庫摘要信息的交互。DD報文包含LSA的頭部信息,用來描述LSDB的摘要信息。
具體過程如下:
主從路由器的選舉:
1、鄰居狀態(tài)變?yōu)?b>ExStart以后,RTA向RTB發(fā)送第一個DD報文,在這個報文中,DD序列號被設(shè)置為X(假設(shè)),RTA宣告自己為主路由器。
2、RTB也向RTA發(fā)送第一個DD報文,在這個報文中,DD序列號被設(shè)置為Y(假設(shè))。RTB也宣告自己為主路由器。
由于RTB的Router ID比RTA的大,所以RTB應(yīng)當(dāng)為真正的主路由器。
數(shù)據(jù)庫摘要信息的交互:
3、RTA發(fā)送一個新的DD報文,在這個新的報文中包含LSDB的摘要信息(LSDB的摘要信息可以類比成一本書的目錄),序列號設(shè)置為RTB在步驟2里使用的序列號(表示承認(rèn)RTB為真正的主路由器),因此RTB將鄰居狀態(tài)改變?yōu)?b>Exchange。
4、鄰居狀態(tài)變?yōu)?b>Exchange以后,RTB發(fā)送一個新的DD報文,該報文中包含LSDB的描述信息,DD序列號設(shè)為Y+1(上次使用的序列號加1)。
5、即使RTA不需要新的DD報文描述自己的LSDB,但是作為從路由器,RTA需要對主路由器RTB發(fā)送的每一個DD報文進(jìn)行確認(rèn)。所以,RTA向RTB發(fā)送一個內(nèi)容為空的DD報文,序列號為Y+1。
3、建立完全鄰接關(guān)系:
6、發(fā)送完最后一個DD報文之后,RTA將鄰居狀態(tài)改變?yōu)?b>Loading;鄰居狀態(tài)變?yōu)長oading之后,RTA開始向RTB發(fā)送LSR報文,請求那些在Exchange狀態(tài)下通過DD報文發(fā)現(xiàn)的,而且在本地LSDB中沒有的鏈路狀態(tài)信息。
RTB收到最后一個DD報文之后,改變狀態(tài)為Full(假設(shè)RTB的LSDB是最新最全的,不需要向RTA請求更新)。
7、RTB收到LSR報文之后,向RTA發(fā)送LSU報文,在LSU報文中,包含了那些被請求的鏈路狀態(tài)的詳細(xì)信息。RTA收到LSU報文之后,將鄰居狀態(tài)從Loading改變成Full。
8、RTA向RTB發(fā)送LSACK報文,用于對已接收LSA的確認(rèn)。
此時,RTA和RTB之間的鄰居狀態(tài)變成Full,表示達(dá)到完全鄰接狀態(tài)。
OSPF協(xié)議5種報文頭格式
OSPF用IP報文直接封裝協(xié)議報文,協(xié)議號為89。OSPF分為5種報文,Hello報文、DD報文、LSR報文、LSU報文和LSAck報文。
OSPF報文頭格式:
OSPF這五種報文具有相同的報文頭格式,長度為24字節(jié)。
1、Type:?1字節(jié) ,表示OSPF報文的類型,有下面幾種類型:Hello報文;DD報文;LSR報文;LSU報文;LSAck報文。
2、Packet length?:2字節(jié),OSPF報文的總長度,包括報文頭在內(nèi),單位為字節(jié)。
3、Router ID?:4字節(jié),發(fā)送該報文的路由器標(biāo)識。
4、Area ID: 4字節(jié) ,發(fā)送該報文的所屬區(qū)域。
5、Checksum?:2字節(jié),校驗和,包含除了認(rèn)證字段的整個報文的校驗和。
6、AuType?:2字節(jié) ,驗證類型值有如下幾種表示, 0表示不驗證;1表示簡單認(rèn)證;3表示MD5認(rèn)證。
7、Authentication :8字節(jié) ,鑒定字段,其數(shù)值根據(jù)驗證類型而定。當(dāng)驗證類型為0時未作定義;類型為1時此字段為密碼信息;類型為2時此字段包括Key ID、MD5驗證數(shù)據(jù)長度和序列號的信息。MD5驗證數(shù)據(jù)添加在OSPF報文后面,不包含在Authenticaiton字段中。
OSPF Hello報文格式
Hello報文是最常用的一種報文,其作用為建立和維護(hù)鄰接關(guān)系,周期性的在使能了OSPF的接口上發(fā)送。報文內(nèi)容包括一些定時器的數(shù)值、DR、BDR以及自己已知的鄰居。
報文的字段解釋上一章解已經(jīng)介紹過:5種報文、8種鄰居狀態(tài)機詳解OSPF工作原理
OSPF DD 報文格式
兩臺路由器在鄰接關(guān)系初始化時,用DD報文(Database Description
Packet)來描述自己的LSDB,進(jìn)行數(shù)據(jù)庫的同步。報文內(nèi)容包括LSDB中每一條LSA的Header(LSA的Header可以唯一標(biāo)識一條LSA)。
LSA?Header只占一條LSA的整個數(shù)據(jù)量的一小部分,這樣可以減少路由器之間的協(xié)議報文流量,對端路由器根據(jù)LSA Header就可以判斷出是否已有這條LSA。
在兩臺路由器交換DD報文的過程中,一臺為Master,另一臺為Slave。由Master規(guī)定起始序列號,每發(fā)送一個DD報文序列號加1,Slave方使用Master的序列號作為確認(rèn)。
1、Interface MTU:?16比特 ,在不分片的情況下,此接口最大可發(fā)出的IP報文長度。
2、Options:?8比特 ,可選項
3、DD sequence number?:32比特 DD報文序列號。主從雙方利用序列號來保證DD報文傳輸?shù)目煽啃院屯暾浴?/p>
4、LSA Headers :可變 ,該DD報文中所包含的LSA的頭部信息。
OSPF LSR報文格式
兩臺路由器互相交換過DD報文之后,知道對端的路由器有哪些LSA是本地的LSDB所缺少的和哪些LSA是已經(jīng)失效的,這時需要發(fā)送LSR報文(Link State Request Packet)向?qū)Ψ秸埱笏璧腖SA。內(nèi)容包括所需要的LSA的摘要。
LSR報文格式如下圖所示,其中LS type、Link State ID和Advertising Router可以唯一標(biāo)識出一個LSA,當(dāng)兩個LSA一樣時,需要根據(jù)LSA中的LS sequence number、LS checksum和LS age來判斷出所需要LSA的新舊。
1、LS type:32比特,LSA的類型號。
2、Link State ID:32比特,根據(jù)LSA中的LS Type和LSA description在路由域中描述一個LSA。
3、Advertising Router:32比特,產(chǎn)生此LSA的路由器的Router ID。
OSPF LSU報文格式
用來向?qū)Χ薘outer發(fā)送其所需要的LSA或者泛洪自己更新的LSA,內(nèi)容是多條LSA(全部內(nèi)容)的集合。
LSU報文(Link State Update?Packet)在支持組播和廣播的鏈路上是以組播形式將LSA泛洪出去。為了實現(xiàn)Flooding的可靠性傳輸,需要LSAck報文對其進(jìn)行確認(rèn)。對沒有收到確認(rèn)報文的LSA進(jìn)行重傳,重傳的LSA是直接發(fā)送到鄰居的。
Number of LSAs:32比特,LSA的數(shù)量。
OPSF LSAck報文格式
用來對接收到的LSU報文進(jìn)行確認(rèn)。內(nèi)容是需要確認(rèn)的LSA的Header(一個LSAck報文可對多個LSA進(jìn)行確認(rèn))。
LSAck(Link State Acknowledgment Packet)報文根據(jù)不同的鏈路以單播或組播的形式發(fā)送。
LSAs Headers:可變,通過LSA的頭部信息確認(rèn)收到該LSA。