1. 程式人生 > >ospf的基礎與鄰居,鄰接關系 --理論

ospf的基礎與鄰居,鄰接關系 --理論

網絡/安全 路由交換

OSPF 路由協議與鄰接關系

1 ospf 基礎:

技術分享圖片

技術分享圖片

技術分享圖片

技術分享圖片

OSPF路由器根據在AS 中的不同位置,可以分為以下四類:

1. 區域內路由器(Internal Routers) 該類路由器的所有接口都屬於同一個OSPF 區域。

2. 區域邊界路由器ABR(Area Border Routers) 該類路由器可以同時屬於兩個以上的區域,但其中一個必須是骨幹區域。ABR 用來連接骨幹區域和非骨幹區域,它與骨幹區域之間既可以是物理連接,也可以是邏輯上的連接。

3. 骨幹路由器(Backbone Routers) 該類路由器至少有一個接口屬於骨幹區域。因此,所有的ABR 和位於Area0 的內部路由器都是骨幹路由器。

4. 自治系統邊界路由器ASBR(AS Boundary Routers) 與其他AS 交換路由信息的路由器稱為ASBR。ASBR 並不一定位於AS 的邊界,它可能是區域內路由器,也可能是ABR。只要一臺OSPF 路由器引入了外部路由的信息,它就成為ASBR。

2ospf的鄰接關系與鄰居關系

技術分享圖片

???????? OSPF鏈路類型

· 有3種:點到點,廣播型,NBMA p2mp。在3種鏈路類型上擴展出5種網絡類型:點到點,廣播,NBMA,點到多點,虛鏈路。其中虛鏈路較為特殊,不針對具體鏈路,而NBMA鏈路對應NBMA和點到多點兩種網絡類型。
點到點網絡:即Point-to-point(P2P)型網絡,是指該接口通過點到點的方式與一臺路由器相連。此類型網絡不需要進行OSPF的DR、BDR選舉。

當鏈路層協議是PPP或HDLC時,OSPF缺省認為網絡類型是P2P。在此類型的網絡中,OSPF以組播方式(224.0.0.5)發送協議報文。

· 廣播型多路訪問網絡:即Broadcast型網絡,網絡本身支持廣播功能。當鏈路層協議是Ethernet、FDDI時,OSPF缺省認為網絡類型是廣播型。此類型網絡需要進行OSPF的DR、BDR選舉。在該類型的網絡中,OSPF通常以組播方式(224.0.0.5和224.0.0.6)發送協議報文。

· 非廣播型多路訪問網絡:即NBMA(Non-Broadcast Multiple Access)型網絡,雖然從一個接口可以到達多個目的節點,但是網絡本身不支持廣播功能,當鏈路層協議是幀中繼、ATM或X.25時,OSPF缺省認為網絡類型是NBMA。此時OSPF的鄰居需要管理員手工指定。在該類型的網絡中,以單播方式發送協議報文。

· 點到多點網絡:即Point-to-multipoint(P2MP)型網絡,是指該接口通過點到多點的網絡與多臺路由器相連。

P2MP型網絡比較特殊,沒有一種鏈路層協議會被缺省地認為是點到多點類型。點到多點必須是由其他網絡類型強制更改而來。常用做法是將NBMA改為點到多點的網絡。在該類型的網絡中,缺省情況下以組播方式(224.0.0.5)發送協議報文,也可以根據用戶需要,以單播形式發送協議報文。

?

OSPF 報文:

1 HELLO報文(hello packet)???? 周期性的發送給本路由器的鄰居,使用的組播地址224.0.0.5.???? BR和BDR發送和接受報文使用的組播地址是224.0.0.6。HELLO PACKET內容包括一些定時器數值、DR、BDR、以及自己已經知道的鄰居。???? HELLO 時鐘的值與路由收斂速度、網絡負荷大小成正比。 缺省情況下,PTP、BROADCAST類型接口發送HELLO報文的時間間隔的值為10秒;PTMP、NBMA類型接口發送HELLO PACKET時間間隔為30秒;技術分享圖片

2 DD報文(Database description packet) 相鄰路由器直間互發DD報文,

報告對方自己所擁有的路由信息內容包括LSDB中每一條LSA摘要(摘要是指LSA的HEAD,通過改HEAD可以唯一標識一條LSA),這樣做的目的是為了減少路由器之間傳遞信息的量,因為LSA的HEAD只占一條LSA的整個數據量的一小部分。根據HEAD,對端路由器就可以判斷出是否已經有了這條LSA。????? DATABASE DESCRIPTION PACKET 有兩種 (1)空 DD 報文,用來確定MASTER/SLAVE關系。確定MASTER/SLAVE關系後,才發送有路由信息的DD報文 (2)帶有路由信息的DD報文,收到有路由信息的DD報文後,路由器比較自己的數據庫,發現對方的數據庫中有自己需要的數據,則向對方發送LSR(LINK STATE REQUEST)

3 LSR報文(LINK STATE REQUEST PACKET) 兩臺路由器之間互相交換DD報文後,知道對端的路由器有那些LSA是本地LSDB所缺少的或者對端更新的LSA,這時需要發送LSR報文向對方請求所需的LSA。內容包括所需要的LSA摘要。

4 LSU報文(LINK STATE UPDATE PACKET) 用來向對端路由器發送所需要的LSA,內容是多條LSA的集合

5 LSACK報文(LINK STATE ACKNOWLEDGMENT PACKET) 由於沒有使用可靠的TCP協議,但是OSPF包又要求可靠的傳輸,所以就有了LSACK包。它用來對接收到的LSU報文進行確認。內容是需要確認的LSA的HEAD.

ospf的鄰接關系與鄰居關系建立過程:

學習目標: 1. 理解Hello報文的作用

2. 理解OSPF鄰居狀態變換

3. 理解鄰居關系和鄰接關系的建立過程

4. 理解LSDB同步過程

技術分享圖片

字段的解釋:

Network Mask:顧名思義是發送Hello報文的接口的網絡掩碼

HelloInterval:發送Hello報文的時間間隔,單位是秒 Options:標識發送此報

文的OSPF路由器所支持的可選功能。

Rtr Pri:發送Hello報文的接口的Router

Priority,用於選舉DR和BDR。

RouterDeadInterval:宣告鄰居路由器不繼續在該網段上運行OSPF的時間間隔,單

位為秒,通常為四倍HelloInterval。

Designed Router:發送Hello報文的路由器所選舉出的DR的IP地址。如果設置為

0.0.0.0,表示未選舉DR路由器。

Backup Designed Router:發送Hello報文的路由器所選舉出的BDR的IP地址。如果

設置為0.0.0.0,表示未選舉BDR路由器。

Neighbor:鄰居路由器的Router ID列表。表示本路由器已經從該鄰居收到合法的

Hello報文。

驗證一個Hello報文是否合法之前首先需要驗證一個OSPF報文是否合法。 驗證一

個接收到的Hello報文是否合法包括:

1. 如果接收端口的網絡類型是廣播型,點到多點或者NBMA,所接收的Hello報文中

Network Mask字段必須和接收端口的網絡掩碼一致,如果接收端口的網絡類型為點

到點類型或者虛連接,則不檢查Network Mask字段。

2. 所接收的Hello報文中的HelloInterval字段必須和接收端口的配置保持一致。

3. 所接收的Hello報文中的RouterDeadInterval字段必須和接收端口的配置保持一

致。

4. 所接收的Hello報文中的Options字段中的E-bit(表示是否接收外部路由信息)

必須和相關區域的配置保持一致。關於此比特的具體意義將在《OSPF特殊區域》中

詳細解釋。

如果路由器發現所接收的合法Hello報文的鄰居列表中有自己的Router ID,則認為

已經和鄰居建立了雙向連接,表示鄰居關系已經建立。 這是形成鄰居關系的過

程和相關鄰居狀態的變化過程。

Down:這是鄰居的初始狀態,表示沒有從鄰居收到任何信息。在NBMA網絡上,此狀

態下仍然可以向靜態配置的鄰居發送Hello報文,發送間隔為PollInterval,通常

和RouterDeadInterval間隔相同。

Attempt:這個狀態只在NBMA網絡中存在,表示沒有收到鄰居的任何信息,但是已

經周期性的向鄰居發送報文,發送間隔為HelloInterval。如果RouterDeaInterval

間隔內未收到鄰居的hello報文,則轉為Down狀態。

Init:在此狀態下,路由器已經從鄰居收到了Hello報文,但是自己不再所收到的

Hello報文的鄰居列表中,表示尚未與鄰居建立雙向通信關系。在此狀態下的鄰居

要被包含在自己所發送的Hello報文的鄰居列表中。

2-WayReceived:此事件表示路由器發現與鄰居的雙向通信已經開始(發現自己在

鄰居發送的Hello報文的鄰居列表中)。Init狀態下產生此事件之後,如果需要和

鄰居建立鄰接關系則進入ExStart狀態,開始數據庫的同步過程,如果不能與鄰居

建立鄰接關系則進入2-way。

2-way:在此狀態下,雙向通信已經建立,但是沒有與鄰居建立鄰接關系。這是建

立鄰接關系以前的最高級狀態。

1-wayReceived:此事件表示路由器發現自己沒有鄰居發送Hello報文的鄰居列表

中,通常是由於對端鄰居重啟造成的。

DD序列號:每個DD報文都有一個DD序列號,用於DD報文的確認機制。DD序列號是

一個兩字節的值。 主從關系:當兩個路由器之間通過DD報文交換數據庫信息的時

候,首先形成一個主從關系,Router ID大的優先為主,確認主從關系之後,主路

由器發送DD報文,從路由器不能主動發送DD報文,只能回應主路由器發送的DD報文

,回應的時候使用的DD報文的序列號必須和所回應的主路由器發送的DD報文的序列

號一致。 相關的狀態解釋:

ExStart:形成鄰接關系的第一個步驟,鄰居狀態變成此狀態以後,路由器開始向

鄰居發送DD報文。主從關系是在此狀態下形成的;初始DD序列號是在此狀態下決定

的。在此狀態下發送的DD報文不包含鏈路狀態描述。

Exchange:此狀態下路由器相互發送包含鏈路狀態信息摘要的DD報文,描述本地

LSDB的內容。

Loading:相互發送LS Request報文請求LSA,發送LS Update通告LSA。

Full:兩個路由器的LSDB已經同步。

1. 鄰居狀態機變為ExStart以後,RTA向RTB發送第一個DD報文,在這個報文中,DD

序列號被設置為552A(假設的值,實際中可能不一樣),Initial比特置為1表示這

個是第一個DD報文,More比特為1表示後續還有DD報文要發送,Master比特為1表示

RTA宣告自己為主路由器。

2. 鄰居狀態及變為ExStart以後,RTB向RTA發送第一個DD報文,知識序列號被置為

5528(也是假設的值)。由於RTB的Router ID比RTA的大,所以RTB應當為主路由器

,Router ID比較結束後,RTA會產生一個NegotiationDone事件,所以RTA將狀態機

從ExStart改變為Exchang狀態

3. 鄰居狀態機變為Exchange以後,RTA發送一個新的DD報文,在這個新的報文中包

含LSDB的摘要信息,序列號設置為RTB在步驟2裏使用的序列號,More比特為0表示

不需要另外的DD報文描述LSDB,Master比特為0表示RTA宣告自己為從路由器,收到

這樣的一個報文後,RTB會產生一個NegotiationDone的事件,因此RTB將鄰居狀態

改變為Exchange。

4. 鄰居狀態變為Exchange以後,RTB發送一個新的DD報文,該報文中包含LSDB的描

述信息, DD序列號設為5529(上次使用的序列號加1)。

5. 即使RTA不需要新的DD報文描述自己的LSDB,但是作為從路由器,RTA需要對主

路由器RTB發送的每一個DD報文進行確認。所以,RTA向RTB發送一個新的DD報文,

序列號為5529,該報文內容為空。 發送完最後一個DD報文之後,RTA產生一個

ExchangeDone事件,將鄰居狀態改變為Loading;RTB收到最後一個DD報文之後,改

變狀態為Full(假設RTB的LSDB是最新最全的,不需要向RTA請求更新)。 1.

鄰居狀態變為Loading之後,RTA開始向RTB發送LS request報文,請求那些在

Exchange狀態下通過DD報文發現的,而且在本地LSDB中沒有的鏈路狀態信息。 2.

RTB收到LS request報文之後,向RTA發送LS update報文,在LS update報文中,包

含了那些被請求的鏈路狀態的詳細信息。RTA收到LS update 報文之後,將鄰居狀

態從loading改變為full。

3. RTA向RTB發送LS Ack報文,確保信息傳輸的可靠性。

LS ack報文用於泛洪對已接收LSA的確認。 鄰居狀態變成Full,表示達到完全鄰

接狀態。 當有新的LSA生成或收到時,這條新的LSA應當被泛洪。 泛洪新

的LSA時,只需要使用LS update報文和LS ack報文。 1. 當RTA有新的LSA要泛紅

時,RTA向RTB發送一個LS update報文,在這個報文裏包含這條LSA。 2. 收到新

的LSA以後,RTB向RTA泛紅一個LS ack報文進行確認。 當在兩個處於完全鄰接狀

態(鄰居狀態為Full)的路由器之間泛洪新的LSA時,鄰居狀態不受影響。

廣播型網段上,DR和BDR發送LS update報文和LS ACk報文的目的地址是224.0.0.5,

其余路由器發送LS update報文和LS ack報文的目的地址是224.0.0.6 224.0.0.6

指代一個多路訪問網絡中DR和BDR的組播接收地址, 224.0.0.5指代在任意網絡中

所有運行OSPF進程的接口都屬於該組,於是接收所有224.0.0.5的組播數據包。

重點理解好 屬於某一組 和 接收怎樣的組播數據包,

比如 DR/BDR屬於組播地址為224.0.0.6的組(Group),因此它接收目的地址為

224.0.0.6的組播數據包,也就可以理解為何多路訪問通過設置DR/BDR可以防止信

息過多處理(因為屬於某組的接收者(指OSPF接口),只會剝離到二層,而不會進

一步處理,也就省去了很多資源浪費)。

問題:

1. 如何驗證一個Hello報文是否合法?

2. 鄰居狀態變換分為幾個階段?

3. 不能建立鄰接關系的情況下,鄰居穩定工作狀態是什麽?

4. 可以建立鄰接關系的情況下,鄰居穩定工作狀態是什麽?

答: 1. 檢查Network Mask,HelloInterval,RouterDeadInterval以及Options

字段中的E-bit。

2. 兩個階段:鄰居,鄰接

3. 2 way 4

. full

ospf的基礎與鄰居,鄰接關系 --理論