动态路由 OSPF详解
ospf RFC2328 簡介
- 開放式最短路徑優先(Open Shortest Path
First,OSPF)是廣泛使用的一種動態路由協議,它屬于鏈路狀態路由協議,具有路由變化收斂速度快、無路由環路、支持變長子網掩碼(VLSM)和匯總、層次區域劃分等優點。在網絡中使用OSPF協議后,大部分路由將由OSPF協議自行計算和生成,無須網絡管理員人工配置,當網絡拓撲發生變化時,協議可以自動計算、更正路由,極大地方便了網絡管理。但如果使用時不結合具體網絡應用環境,不做好細致的規劃,OSPF協議的使用效果會大打折扣,甚至引發故障。 - OSPF協議是一種鏈路狀態協議。每個路由器負責發現、維護與鄰居的關系,并將已知的鄰居列表和鏈路費用LSU(Link State
Update)報文描述,通過可靠的泛洪與自治系統AS(Autonomous
System)內的其他路由器周期性交互,學習到整個自治系統的網絡拓撲結構;并通過自治系統邊界的路由器注入其他AS的路由信息,從而得到整個Internet的路由信息。每隔一個特定時間或當鏈路狀態發生變化時,重新生成LSA,路由器通過泛洪機制將新LSA通告出去,以便實現路由的實時更新實現
動態路由 概念相關
一個自治系統就是處于一個管理機構控制之下的路由器和網絡群組。它可以是一個路由器直接連接到一個LAN上,同時也連到Internet上;它可以是一個由企業骨干網互連的多個局域網。在一個自治系統中的所有路由器必須相互連接,運行相同的路由協議,同時分配同一個自治系統編號。
在 OSPF 協議中,用于 OSPF 路由器之間發送及同步連接狀態數據庫的部分。
指網絡的拓撲結構發生變化后,路由表重新建立到發送再到學習直至穩定,并通告網絡中所有相關路由器都得知該變化的過程。也就是網絡拓撲變化引起的通過重新計算路由而發現替代路由的行為。
OSPF路由器類型
路由器類型
DR:指定路由器。
BDR:備份的指定路由器。
DR和BDR是由同一網段中所有的路由器根據路由器優先級、RouterID通過HELLO報文選舉出來的,只有優先級大于0的路由器才具有選取資格。
在一個OSPF網絡中,選舉一個路由器作為指定路由器DR。所有其他路由器只和它一個交換整個網絡的一些路由更新信息,再由它對鄰居路由器發送更新報文。這樣節省網絡流量。再指定一個備份指定路由器BDR,當DR出現故障時,BDR起著備份的作用,確保網絡的可靠性。
DRohter
要和DR以及BDR形成完全鄰接關系full,只有完全鄰接關系full才能互相通告同步數據庫,DRother之間鄰居關系只能到達2-WAY狀態(雙向鄰居狀態)在2-WAY狀態下不能同步數據庫
選舉規則:
比較優先級,優先級數值最大的為DR,其次大的為BDR(優先級默認為1,最大為255,當優先級為0時,則說明該路由器沒有選舉資格)
若優先級相同時,則比較路由器的Router id,最大的為DR,其次大的為BDR。
目的:為了減少在同一個ospf中lsa(鏈路狀態通告)的重復發送,在ospf協議內通過hello機制選舉產生dr和bdr,在同一個ospf區域中,每個路由器都和dr,bdr相連,這樣,當區域內的某一個路由器進行更新時,發送一個lsa到dr,再從dr發送到各個路由器,包括發送lsa給dr的源路由器,這樣,有效的利用了網絡帶寬資源。
內部路由器(Internal Router):
該類路由器的所有接口都屬于同一個OSPF區域。這些路由器不與其他區域相連接,并且只維護其所在的區域的LSDB。
區域邊界路由器****ABR(Area Border Routers):
該類路由器可以同時屬于兩個以上的區域,但其中一個必須是骨干區域(area 0)。
ABR用來連接骨干區域和非骨干區域,可以是實際連接,也可以是虛連接。
骨干路由器(Backbong Routers)
該類路由器屬于骨干區域(area 0)。只維護骨干區域的LSDB!
OSPF中,所有非骨干區域之間的信息都要通過骨干區域進行中轉。
因此,所有的ABR和位于Area0的內部路由器都是骨干路由器。
自治系統邊界路由器****ASBR(AS Boundary Routers)
與其他AS交換路由信息的路由器稱為ASBR。 使用了多種路由協議!
只要一臺OSPF路由器引入了外部路由的信息,他就稱為了ASBR,
它有可能是ABR,區域路由器,不一定位于AS邊界。
OSPF區域類型
標準區域 Normal Area
標準區域可以接收任何鏈路更新信息和路由匯總信息。
骨干區域 Backbone Area(AREA 0 )
主干區域是連接各個區域的傳輸網絡,其他區域都通過主干區域交換路由信息。主干區域擁有標準區域的所有性質。
非骨干區域 (非AREA 0)
末梢區域(Stub Area)
末梢區域也被稱為Stub區域,當一個非0常規區域只有單一的出口(例如該區域只有一個ABR),或者區域內的路由器不需要根據特定的外部路由來選擇離開區域的出口時,該區域可以被配置為Stub區域。
當一個區域被配置為Stub區域后,這個區域的ABR將阻擋Type-5
LSA進入該區域(禁止外部路由被發布到該區域),通過這種方式可減少區域內所泛洪的LSA數量,同時該區域的ABR自動下發一條使用Type-3
LSA描述的默認路由,使得區域內的路由器能夠通過這條默認路由到達域外,因此既減小了區域內網絡設備的路由表規模,又保證了其訪問外部網絡的數據可達性。
在一個大量引入外部路由的OSPF網絡中,將適當的區域配置為Stub區域可以極大地減小該區域內路由器的路由表規模,從而降低設備的資源消耗。另外,對于Stub區域而言,到達OSPF域內其他區域的路,由依然能夠被注入,即ABR依然會將描述區域間路由的Type-3
LSA注入到Stub區域中。
Area 1被配置為Stub區域,這樣Area 1的ABR(CO-SW1及Co-sw2)便不能再將Type-5 LSA注入這個區域。由于Type-5
LSA無法進入該區域,因此Type-4LSA也就沒有必要再在該區域內泛洪,所以Co-sw1及Co-sw2也就不會再向該區域內注入Type-4 LSA,進而,
Router-X的路由表將不會再出現到達省公司(OSPF域外)的具體路由,路由表的規模減小了,設備的資源消耗也就降低了。當然, Router-
X訪問省公司的需求還是存在的,為了讓Router-X發往省公司的流量能順利到達目的地, ABR會自動向Areal中注入默認路由,該條默認路由使用Type-3
LSA描述, co-SW1及CO-Sw2都會下發默認路由,網絡管理員可以通過把控默認路由的Cost從而控制Routerx選擇的出口。Router-
X發往省公司的流量能夠通過該默認路由先到達co-sW1或co-sw2,再通過它們轉發到省公司。
設置末梢區域后ASBR生成Type-5 LSA無法進入,ABR也沒有必要生成描述ASBR位置的Type-4
LSA,取而代之的是ABR生成一條描述外部路由的默認路由Type-3
LSA,讓stub里的路由器轉發發往外部網絡的數據時把數據都發給ABR,由ABR統一轉發。減小stub區域里的路由器的路由表大小。
所有連接到stub區域的路由器,對于該區域的stub屬性要有一致的認知,否則OSPF鄰居關系的建立將會出現問題。
還可以在ABR上配置,進一步阻擋描述區域間路由的Type-3
LSA進入,區域內的路由器訪問區域外的網絡時,統一把數據發給ABR。這樣,這個區域內只有Type-1 LSA、Type-2
LSA及描述默認路由的Type-3
LSA存在,這意味著區域內路由器的路由表都將只有到達區域內部的路由,以及指向ABR的默認路由,路由器的路由表被極大程度地精簡了。這種特殊區域也被稱為完全末梢區域(Totally
Stub Area)
配置Stub區域時需要注意下列幾點:
完全stub區域:
不接受自治系統以外的路由信息,也不接受自治系統內其他區域的路由匯總信息,發送到本地區域外的報文使用默認路由0.0.0.0。完全stub區域是Cisco定義的,是非標準的。
非完全末梢區域(Not-So-Stubby Area)
NSSA (Not-So-Stubby Area)即非完全末梢區域,可以理解為Stub區域的變種,它擁有Stub區域的特點—阻擋Type-4及Type-5
LSA進入,從而在一定程度上減少區域內泛洪的LSA數量,同時它還有另一個特點,那就是允許該區域的路由器將少量外部路由引入OSPF,被引入的外部路由,以Type-7
LSA描述,并且這些Type-7
LSA只能夠在當前的NSSA內泛洪,不允許直接進入Area0,為了使這些被引入NSSA的外部路由能讓OSPF域內的其他區域學習到,
NSSA的ABR會將Type-7 LSA轉換成Type-5 LSA然后注入Areao,從而泛洪到整個OSPF域。
Area 1被配置成了NSSA。這樣Area 1的ABR將阻擋Type-5 LSA進入這個區域。另一方面, Router-
X連接到一個RIP網絡,它將路由表中的RIP路由引入OSPF,這些被引入的外部路由以Type-7 LSA描述,這些LSA在Area
1內泛洪,并且禁止進入Area 0.co-sW1及CO-SW2作為NSSA的ABR, 自然也是能收到這些Type-7
LSA的,它們能夠根據這些LSA計算出到達RIP網絡的路由。
另外它們也負責將Type-7 LSA轉換成Type-5 LSA并將后者注入Area 0,這樣這些外部路由便能夠被整個OSPF域中的路由器學習到。另一方面,
CO-SW1及CO-SW2會向NSSA內下發一條Type-7 LSA的默認路由,使得Router-X能夠通過這條默認路由到達省公司。
配置NSSA區域時需要注意下列幾點:
骨干區域不能配置成NSSA區域。
如果要將一個區域配置成NSSA區域,則該區域中的所有路由器都要配置NSSA區域屬性。
虛連接不能穿過NSSA區域。
在NSSA區域中,可能同時存在多個ABR,為了防止路由環路產生,邊界路由器之間不計算對方發布的缺省路由。
與Totally Stub區域類似,為了進一步減少NSSA區域中LSA的數量,OSPF還定義了Totally NSSA區域。
OSPF網路類型
點對點類型網絡
廣播型多路訪問類型
非廣播型多路訪問類型
點對多點類型
? 接口的網絡類型為NBMA或使用本命令將接口的網絡類型手工改為NBMA時,必須使用命令peer來配置鄰接點。
點對點類型網絡
廣播型多路訪問類型
非廣播型多路訪問類型
點對多點類型
? 接口的網絡類型為NBMA或使用本命令將接口的網絡類型手工改為NBMA時,必須使用命令peer來配置鄰接點。
五大數據包類型:
hello 包
| Network Mask | 32比特 | 發送Hello報文的接口所在網絡的掩碼。 |
| HelloInterval | 16比特 | 發送Hello報文的時間間隔。 |
| Options | 8比特 | 可選項 |
| Checksum | 16 | 用于對報頭和報文體的摘要信息用于校驗,它能夠校驗該報文的完整性和正確性,同時也會對lsa的新舊程度產生影響 |
| auType認證類型 | 16 | 0:不認證,1:簡單認證,2:MD5 |
| authentication | 32 | 表示認證密碼或者摘要信息,當autype=0時,該字段為空 |
| E: | 允許Flood AS-External-LSAs | |
| MC: | 轉發IP組播報文 | |
| N/P: | 處理Type-7 LSAs | |
| DC: | 處理按需鏈路 | |
| Rtr Pri | 8比特 | DR優先級。默認為1。如果設置為0,則路由器不能參與DR或BDR的選舉。 |
| RouterDeadInterval | 32比特 | 失效時間。如果在此時間內未收到鄰居發來的Hello報文,則認為鄰居失效。 |
| Designated Router | 32比特 | DR的接口地址。 |
| Backup Designated Router | 32比特 | BDR的接口地址。 |
| Neighbor | 32比特 | 鄰居,以Router ID標識。 |
1、子網掩碼(華為特有)發送hello包接口的源ip地址及其掩碼
2、Hello time、dead time --和ospf的接口網絡類型有關
3、認證字段 --保證更新安全
4、區域ID --要求區域間存在ABR
5、末梢區域標記 --特殊區域
DBD 包
Init = 1 代表是第一個DD報文;Init = 0 代表不是第一個DD報文 More 0 代表后面沒有DD報文;1代表后面還有DD報文 M/S 表示Master、SlaveLSR LSU LSACK
LSR 用于請求鄰居的LSA
LSU 用于發送LSA具體信息給鄰居,或者用于洪泛LSA,或者用于隱式回應LSU報文。
LSAck用于回應LSU報文。
LSA: Type 1、Type 2 、Type 3 、Type 4、Type 5、Type 7
https://en.wikipedia.org/wiki/Link-state_advertisement
OPSF狀態 機:
Down:鄰居會話的初始階段。表明沒有在鄰居失效時間間隔內收到來自鄰居設備的Hello報文。除了NBMA網絡OSPF路由器會每隔PollInterval時間對外輪詢發送Hello報文,包括向處于Down狀態的鄰居路由器(即失效的鄰居路由器)發送之外,其他網絡是不會向失效的鄰居路由器發送Hello報文的。
Attempt:這種狀態適用于NBMA網絡,鄰居路由器是手工配置的。鄰居關系處于本狀態時,路由器會每隔HelloInterval時間向自己手工配置的鄰居發送Hello報文,嘗試建立鄰居關系。
Init:本狀態表示已經收到了鄰居的Hello報文,但是對端并沒有收到本端發送的Hello報文,收到的Hello報文的鄰居列表并沒有包含本端的Router ID,雙向通信仍然沒有建立。
2-Way:互為鄰居。本狀態表示雙方互相收到了對端發送的Hello報文,報文中的鄰居列表也包含本端的Router ID,鄰居關系建立。如果不形成鄰接關系則鄰居狀態機就停留在此狀態,否則進入ExStart狀態。DR和BDR只有在鄰居狀態處于這個狀態或者更高的狀態才會被選舉出來。
ExStart:協商主從關系。建立主從關系主要是為了保證在后續的DD報文交換中能夠有序的發送。鄰居間從此時才開始正式建立鄰接關系。
Exchange:交換DD報文。本端設備將本地的LSDB用DD報文來描述,并發給鄰居設備。
Loading:正在同步LSDB。兩端設備發送LSR報文向鄰居請求對方的LSA,同步LSDB。
Full:建立鄰接。兩端設備的LSDB已同步,本端設備和鄰居設備建立了完全的鄰接關系。
建立鄰接關系→鏈路狀態數據庫→最短路徑數→路由表
LSA
泛洪機制
在拓撲穩定的場合下,每份存放在LSDB中的LSA間隔30min都會被周期產生的新LSA刷新。泛洪機制把LSA向區域中的每條鏈路通告,不論LSA從哪條鏈路泛洪到當前路由器,備由器的LSDB中僅保存一份最新的LSA。若路由器收到多份相同“ID”的LSA,則僅比較序列號、Checksum及LSAAge,來判定是否繼續泛洪該LSA,還是終止泛洪。
如果收到的LSA本地數據庫中沒有,則接收該LSA 并繼續泛洪。
如果收到的LSA本地有,但收到的LSA比自己當前已有的LSA 要新,則更新LSDB并泛洪新的LSA。
如果自己已有的LSA比收到的LSA新 ,則不接收該LSA。
如果收到的LSA和自己路由器的LSA一樣新,則忽略,并終止泛洪。如果收到的LSA損壞,比如 Checksum錯誤,則不接收該LSA。
判斷LSA新舊的規則:
序列號越大代表越新。
若序列號相同,則Checksum數值越大代表越新。
上述一致的情況下,繼續比較Age.
若LSA的Age 為 MaxAge,即 3600s,則該LSA被認定更“新”。
若LSA間Age差額超過15min.則 Age小的LSA被認定更“新”。
若LSA Age差額在15min 以內,則二者視為相同“新”的LSA,只保留先收到的一份LSA。
LSDB 中LSA的超時機制:
LSDB中 LSA都有Age,最大是3600s,超過該值,則該LSA會從LSDB中被清除。
LSDB中LSA被清除的場景:
超過MaxAge 被路由器自動清除;
LSA起源路由器產生MaxAge的LSA并向區域中泛洪,收到的路由器用其更新自己LSDB中的LSA。泛洪 MaxAge 的LSA,其作用相當于“毒化”路由。
OSPF區域間環路及防環方法
OSPF在區域內部運行的是SPF算法,這個算法能夠保證區域內部的路由不會成環。然而劃分區域后,區域之間的路由傳遞實際上是一種類似距離矢量算法的方式,這種方式容易產生環路。
為了避免區域間的環路,OSPF規定直接在兩個非骨干區域之間發布路由信息是不允許的,只允許在一個區域內部或者在骨干區域和非骨干區域之間發布路由信息。因此,每個ABR都必須連接到骨干區域。
假設OSPF允許非骨干區域之間直接傳遞路由,則可能會導致區域間環路。如圖5所示,骨干區連接到其他網絡的路由信息會傳遞至Area 1。假設非骨干區之間允許直接傳遞路由信息,那么這條路由信息最終又被傳遞回去,形成區域間的路由環路。為了防止這種區域間環路,OSPF禁止Area 1和Area 3,以及Area 2和Area 3之間直接進行路由交互,而必須通過骨干區域進行路由交互。這樣就能防止區域間環路的產生。
OSPF缺省路由
缺省路由是指目的地址和掩碼都是0的路由。當設備無精確匹配的路由時,就可以通過缺省路由進行報文轉發。由于OSPF路由的分級管理,Type3缺省路由的優先級高于Type5或Type7路由。
OSPF缺省路由通常應用于下面兩種情況:
由區域邊界路由器(ABR)發布Type3缺省Summary LSA,用來指導區域內設備進行區域之間報文的轉發。
由自治系統邊界路由器(ASBR)發布Type5外部缺省ASE LSA,或者Type7外部缺省NSSA LSA,用來指導自治系統(AS)內設備進行自治系統外報文的轉發。
OSPF缺省路由的發布原則如下:
OSPF路由器只有具有對區域外的出口時,才能夠發布缺省路由LSA。
如果OSPF路由器已經發布了缺省路由LSA,那么不再學習其它路由器發布的相同類型缺省路由。即路由計算時不再計算其它路由器發布的相同類型的缺省路由LSA,但數據庫中存有對應LSA。
外部缺省路由的發布如果要依賴于其它路由,那么被依賴的路由不能是本OSPF路由域內的路由,即不是本進程OSPF學習到的路由。因為外部缺省路由的作用是用于指導報文的域外轉發,而本OSPF路由域的路由的下一跳都指向了域內,不能滿足指導報文域外轉發的要求。
虛擬鏈路
Virtual Link(虛鏈路):OSPF規定網絡中存在多區域必須部署骨干區域Area0,如未連接LSA泛洪就會出現問題,當遇到網絡不易做大的變動但是此網絡必須連接到Area0時就可以使用Virtual Link,它是一種虛擬的,邏輯的鏈路,被部署兩臺OSPF兩臺路由器中間,注意Stub區域千萬不能部署Virtual link。
虛連接(Virtual link)是指在兩臺ABR之間通過一個非骨干區域建立的一條邏輯上的連接通道。
-
根據RFC 2328,在部署OSPF時,要求所有的非骨干區域與骨干區域相連,否則會出現有的區域不可達的問題。但是在實際應用中,可能會因為各方面條件的限制,無法滿足所有非骨干區域與骨干區域保持連通的要求,此時可以通過配置OSPF虛連接來解決這個問題。
-
Area 2沒有連接到骨干區Area 0,所以RouterA不能作為ABR向Area 2生成Area 0中Network1的路由信息,所以RouterB上沒有到達Network1的路由。此時可以考慮部署虛連接來解決這個問題。
-
通過虛連接,兩臺ABR之間直接傳遞OSPF報文信息,兩者之間的OSPF設備只是起到一個轉發報文的作用。由于OSPF協議報文的目的地址不是這些設備,所以這些報文對于兩者而言是透明的,只是當作普通的IP報文來轉發。
-
虛連接相當于在兩個ABR之間形成了一個點到點的連接,因此,虛連接的兩端和物理接口一樣可以配置接口的各參數,如發送Hello報文間隔等。為虛連接兩端提供一條非骨干區域內部路由的區域稱為傳輸區域(Transit Area)。配置虛連接時,必須在兩端同時配置方可生效。
-
然而,虛連接的存在增加了網絡的復雜程度,而且使故障的排除更加困難。因此,在網絡規劃中應該盡量避免使用虛連接。虛連接僅是作為修復無法避免的網絡拓撲問題的一種臨時手段。虛鏈路可以看作是一個標明網絡的某個部分是否需要重新規劃設計的標志。
OSPF路由聚合
路由聚合是指ABR可以將具有相同前綴的路由信息聚合到一起,只發布一條路由到其它區域。
區域間通過路由聚合,可以減少路由信息,從而減小路由表的規模,提高設備的性能。
OSPF有兩種路由聚合方式:
ABR聚合
- ABR向其它區域發送路由信息時,以網段為單位生成Type3 LSA。如果該區域中存在一些連續的網段,則可以通過命令將這些連續的網段聚合成一個網段。這樣ABR只發送一條聚合后的LSA,所有屬于命令指定的聚合網段范圍的LSA將不會再被單獨發送出去。
- ASBR聚合
配置路由聚合后,如果本地設備是自治系統邊界路由器ASBR,將對引入的聚合地址范圍內的Type5 LSA進行聚合。當配置了NSSA區域時,還要對引入的聚合地址范圍內的Type7 LSA進行聚合。
如果本地設備既是ASBR又是ABR,則對由Type7 LSA轉化成的Type5 LSA進行聚合處理。
OSPF路由過濾
OSPF支持使用路由策略對路由信息進行過濾。缺省情況下,OSPF不進行路由過濾。
-
OSPF可以使用的路由策略包括route-policy、訪問控制列表(access-list)和地址前綴列表(prefix-list)。
-
OSPF路由過濾可以應用于以下幾個方面:
路由引入
- OSPF可以引入其它路由協議學習到的路由。在引入時可以通過配置路由策略來過濾路由,只引入滿足條件的路由。
引入路由發布
- OSPF引入了路由后會向其它鄰居發布引入的路由信息。
- 可以通過配置過濾規則來過濾向鄰居發布的路由信息。該過濾規則只在ASBR上配置才有效。
路由學習
- 通過配置過濾規則,可以設置OSPF對接收到的區域內、區域間和自治系統外部的路由進行過濾。
- 該過濾只作用于路由表項的添加與否,即只有通過過濾的路由才被添加到本地路由表中,但所有的路由仍可以在OSPF路由表中被發布出去。
區域間LSA學習
- 通過命令可以在ABR上配置對進入本區域的Summary LSA進行過濾。該配置只在ABR上有效(只有ABR才能發布Summary LSA)。
- 區域間LSA學習和路由學習之間的差異在于:區域間LSA學習直接對進入區域的LSA進行過濾;路由學習不是對LSA進行過濾而是對LSA計算出來的路由是否添加本地路由表進行過濾,學習到的LSA是完整的。
區域間LSA發布
- 通過命令可以在ABR上配置對本區域出方向的Summary LSA進行過濾。該配置只在ABR上配置有效。
OSPF多實例
- OSPF支持多進程,在同一臺路由器上可以運行多個不同的OSPF進程,它們之間互不影響,彼此獨立。不同OSPF進程之間的路由交互相當于不同路由協議之間的路由交互。
路由優先級
-
使用非骨干區域的區域內路徑始終是最優選。
-
其他路徑、區域內骨干路徑和跨區域區域路徑,具有相同的優先級。
總結
以上是生活随笔為你收集整理的动态路由 OSPF详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 断网检测判断
- 下一篇: 阿里云URL转发类问题排查