文章目錄
CCNP5:OSPF的【不規則、末梢、NSSA】區域、【1、2、3、4、5、7】類LSA、【3、5、7】缺省
一、OSPF的不規則區域:
1、不規則區域:
當我們把一個OSPF的拓撲設計好後,如果有一天又需要加入一個新的區域,而且該區域比較遠,扯一條線過去太貴,將兩個區域合併爲一個區域又太大,會導致網絡卡頓。
因此可以向下面這樣構造不規則區域:
因此要能夠實現OSPF不規則區域的信息傳遞,我們就需要配置不規則區域。
OSPF的不規則區域有兩種:
(1)遠離骨幹的非骨幹區域:
這種區域ABR必須同時工作於區域0,才能進行區域間的路由共享。
(2)不連續骨幹:
從x區域獲取到的路由信息不得發往編號爲x的區域,即便x區域連接了本區域不同的ABR(水平分割)。
2、解決方案:
(1)普通tunnel:
我之前的這篇文章CCNP2:二層技術、PPP、HDLC、GRE(Tunnel)、MGRE技術提到過GRE的技術。
這裏的 tunnel 是在兩臺ABR上建立隧道,然後將 tunnel 宣告在OSPF中。
正常情況下,我們是將 tunnel 宣告在0區域中,但是我們知道,這個tunnel只是虛構的,實際上控制方面的流量走的都是1區域,OSPF本來就是一個佔用資源大的協議,這就導致了area1中的區域會十分卡頓。
缺點:
①佔用資源:週期的保活和更新,觸發的信息均需要通過中間的穿越區域,對中間區域影響較大。
②選路不佳:由於 tunnel 被宣告在了區域0中,那麼area0和area1之間的ABR在選路的時候會優選 tunnel 口,裹報頭就會佔用資源特別大
OSPF隱性規則:OSPF協議若通過不同的區域學習到的相同的路由,優選區域0,若均爲非骨幹,則比較度量值,這就會導致選路不佳。
如果按下面這種方式,左邊的ABR便不會再像上面一樣去糾結是選擇走 area0(tunnel) 還是走area1,因爲兩個均爲非骨幹。但是這樣帶來的問題更爲嚴重,
將tunnel宣告到區域2中,右邊的ABR將不再擁有路由共享資格,就會形成下面這樣:
此時,area1中的設備學習路由時,area2中的網段就會通過 tunnel 然後再經過左邊的ABR,最後才能讓area1學到,但是 tunnel的實際流量還是在area1中,這就更卡了,選路也不佳。
總之這種解決方案很差勁。
(2)虛擬鏈路:
OSPF虛擬鏈路:非骨幹區域間的ABR到骨幹區域的ABR處授權,建立一條虛鏈路。
兩臺ABR都要配置:
R1(config)#router ospf 1
R1(config-router)#area 1 virtual-link 4.4.4.4
area1:中間穿越的區域
4.4.4.4:對端的ABR的RID
因爲沒有新的網段出現,故選路正常,爲了避免週期的信息對中間區域的影響,故停止虛鏈路間的所有周期行爲(保活機制)。這就導致兩臺ABR之間的虛鏈路之間沒有dead time ,這就很不可靠。
DNA:無老化時間,表示去掉 更新時間 和 hello 時間。
因此也不建議去使用。
(3)多進程雙向重發布:
一臺設備上若同時運行多個進程,那麼不同進程擁有不同的RID,生成各自的數據庫,但數據庫不共享。僅將各自計算所得路由加載於同一張路由表內。
若多個進程工作於同一個接口上,僅最早的進程生效(一個接口只能工作一個進程,誰先來誰先工作)
在解決不規則區域時,讓連接兩個非骨幹區域的ABR設備,將不同區域宣告到本地的不同進程下,之後使用重發布技術,進行路由共享即可。
總結:
多進程雙向重發布 | 選路佳、共享路由條目 |
---|---|
tunnel | 選路不佳、佔用資源大 |
虛鏈路 | 選路佳、佔用資源大、不可靠 |
二、減少LSA的更新量:
看到特殊區域時,如果沒有底子,可能會比較混亂需要知道各類LSA,但是先講LSA又不知道什麼是特殊區域。可以將文章前後結合起來看。
1、LSA介紹:
LSA:鏈路狀態通告,或者說是拓撲信息都可以。
鏈路狀態通告=LSA頭部(縮略信息)+ LSA 主體
對於完整的LSA是攜帶完整的拓撲信息的,DBD與LSR攜帶的都是LSA的頭部信息,只有LSU才攜帶完整的LSA信息。
完整的LSA頭部內容包含:
①Type:LSA類型
②LS-ID:連接對象的ID編號
③ADV Router:該LSA的通告路由器
LSA內容應該包含以下:
①鏈路路由前綴
②鏈路掩碼
③鏈路開銷
④連接的鏈路類型
⑤連接的路由器
(1)LSA更新過程:
這個圖解釋的比較形象,首先LSU攜帶了LSA信息。經過一個判斷:條目是否在鏈路狀態數據庫中?
如果是,則比較條條目的序列號,相同的話說明數據庫中的該條目與接收到的該條目是一樣的,那麼就忽略。不一樣的話比較條目的序列號,若該新來的條目的序列號比較新則更新原來的條目,若收到的新來的條目還沒有數據庫裏面的新,那麼將使用LSU發送該數據庫的LSA給剛纔的源,反更新它。
如果否,則會將新來的LSA加載到數據庫中,然後回覆LSack作爲確認。接着洪泛該LSA,讓其它的路由器獲取該未知網段。最後運行SPF計算新的路由表。
(2)LSA的接收和洪泛:
週期洪泛:30分鐘,60分鐘便會老化,之所以維持這麼長時間是爲了更加穩定。
2、手工彙總:
例如下面這樣將area1、area2、area3各匯成一條給area0,它是減少骨幹區域的LSA量。
(1)域間路由彙總(3類):
假設R1是ABR,它有兩個環回,1.1.5.5/24、1.1.6.5/24,彙總之後便是1.1.4.0/22,其所在區域爲area2,area2爲需要彙總的區域。只能在ABR上彙總,彙總之後它會自動產生空接口防環路由。
R1(config)#router ospf 1
R1(config-router)#area 2 range 1.1.4.0 255.255.252.0
注:彙總時是通過該區域的1、2類LSA計算所得路由才能彙總成功
(2)域外路由彙總(5類):
假設R2是ASBR,它有兩個環回,2.1.1.1/24、2.1.2.1/24,彙總之後便是2.1.0.0/22,彙總之後也會自動產生空接口防環路由。。
R2(config)#router ospf 1
R2(config-router)#summary-address 2.1.0.0 255.255.252.0
3、設置特殊區域:
特殊區域不可以爲骨幹區域、設置的區域不能存在虛鏈路
比如說將area1設置爲特殊區域,那麼它就只會學本區域的路由,對於其它區域的,它不會去學習,而是缺省指向與area0相連的ABR,這樣就可以減少非骨幹區域的更新量。
特殊區域分爲兩大類:一類是不存在ASBR,另一類是存在ASBR。
我們先說第一類:不存在ASBR
(1)末梢區域:
要既不是骨幹區域、也不能存在虛鏈路,還不存在ASBR,因此滿足這些條件的只有區域1了。
將area1設置爲末梢區域後,該區域將拒絕4、5類LSA進入,4類是ASBR的位置,5類是域外路由(圖中爲EIGRP),拒絕之後ABR將會自動產生3類缺省發向該區域。
R1(config)#router ospf 1
R1(config-router)#area 1 stub
該區域所有的設備均需要配置,否則鄰居關係就會斷開
(2)完全末梢區域:
上面我們說到,設置爲末梢區域的區域會拒絕4、5類LSA進入,然後自動產生3類缺省,那爲什麼不乾脆進一步拒絕3類LSA,然後保留一條去往區域0的缺省呢?因此這就是完全末梢區域:在末梢區域的基礎上,進一步拒絕3類的LSA,僅保留一條3類的缺省。
配置規則:
先將該區域配置爲末梢區域,然後僅在ABR上定義完全即可
ABR(config-router)#area 1 stub no-summary
接下來要說的是第二類存在ASBR:
(3)NSSA(非完全末梢區域):
圖中的area2就是一個NSSA非完全末梢區域
什麼是非完全?圖中的area2它是一個OSPF的一個末梢,但是它後面又跟了個EIGRP,雖然跟OSPF沒有多大關係,但是這樣area2就不算是完全末梢區域了,因此它就是非完全的了。
該區域拒絕4、5類LSA,不自動產生3類缺省,本地的5類LSA基於7類轉發,通過NSSA區域後轉回5類。
我們知道將area2設置爲非完全NSSA區域後,可以爲骨幹區域減少一條4類LSA,但是4類LSA很少啊,它攜帶的是ASBR的位置,能有很多個ASBR嗎,它的意義是在這嗎?
現在我們回想一下我們的初心,減少骨幹區域的LSA靠的是區域間手工彙總,因此設置NSSA非完全末梢區域的並不在於減少骨幹區域的LSA,它的意義在於它能夠拒絕區域ASBR產生的4、5類LSA,爲了避免環路的出現,默認不自動產生缺省路由,導致無法訪問其他的的域外網段,故在管理員確定無環的情況下,可以手工添加缺省路由。
R4(config)#router ospf 1
R4(config-router)#area 2 nssa
該區域所有設備配置
(4)完全NSSA:
原理:該區域是在NSSA的基礎上進一步拒絕3類LSA,自動產生3類缺省
這個比較好理解,之前是拒絕4、5類LSA,但是沒有拒絕area0的LSA。那麼完全NSSA就是拒絕其它全部區域的LSA,然後產生一條3類缺省。背後的EIGRP,通過7類轉爲5類穿過area2。
配置規則:先將該區域配置爲NSSA,然後僅在ABR上定義完全即可。
R4(config)#router ospf 1
R4(config-router)#area 2 nssa no-summary
接下來我們聊一下出環的事情,這個環是怎麼出的?
我們知道一般末梢區域是不會連ISP的,連接ISP的是區域0,但是當末梢區域要訪問運營商時,會使用缺省指向區域0,由區域0通過缺省發給運營商。因此環也是這樣出的,如果把一個末梢區域連接了ISP,然後區域0訪問ISP時缺省指向該末梢區域,但是該末梢區域由於自動產生了3類缺省又會指向區域0,這樣就出環了。
注:
①ISP所在位置的非骨幹區域不得配置爲任何的特殊區域。
②若ISP連接在其它的協議時,連接該協議的非骨幹區域也不得配置爲任何特殊區域。
三、OSPF的數據庫表:
首先我們知道OSPF協議基於LSU(包、相當於打包在一起)來共享LSA信息。
LSA:描述了路由器所有的鏈路、接口、路由器的鄰居以及鏈路狀態信息。
OSPF會在不同的條件下發出不同類別的LSA
詳細查看某條LSA
R1#show ip ospf database router 1.1.1.1
router:類別名
1.1.1.1:link-id
接下來我要說明的是各種LSA,LSA總共有11種,這裏我只介紹1、2、3、4、5、7類LSA。
我們先宏觀的講:無論哪種類別的LSA必攜帶**以下參數:
參數 | 註解 | 詳細 |
---|---|---|
LS Age | 老化時間 | 週期爲1800歸0,也可觸發歸0,最大老化時間3609秒 |
Option | 選項 | 這裏不做介紹 |
LS Type | 類別名 | 標註此類LSA是屬於哪種LSA |
Link State ID | 在目錄中的編號 | 這個編號是方便我們去打開它 |
Advertising Router | 通告者的RID | |
LS Seq Number | 序列號 | 使用棒棒糖規則,杆和圈(循環階段) |
Checksum | 校驗和 | |
Length | 長度 | |
Number of links | 包含的信息條數 |
LSA1:路由器
首先,我會以下面這張圖爲基礎講解各種LSA。
我們查看一下R1的路由器的LSA,圖中顯示它的通告者就是自己,等信息。
下面這張圖是它攜帶的信息:我們發現都是直連的拓撲。它的傳播範圍是本區域,Link-ID爲通過者的RID,且本區域的所有設備均爲通告者。
(1)LSA1的鏈路類型:
這類LSA存在3種鏈路類型:
①stub:末梢網絡,例如環回
②transit:在傳遞一類LSA時會產生二類LSA描述完整拓撲,通告DR的位置。
③p2p(點到點):串型鏈路中爲該鏈路類型。
LSA2:網絡
這張圖是目錄信息,我們一會兒打開第一個看看。
下圖是R1的網絡LSA,裏面包含了掩碼和這個MA網段所包含的設備的RID。當收到這條LSA的設備,便知道這個MA網段中都包含了哪些設備,它的傳播範圍也是本區域。
除此之外顯示通告者爲2.2.2.2,通過顯示鄰居表發現,R2就是DR,Link-ID爲DR的接口IP地址。
LSA3:網絡彙總LSA
要想出現3類LSA,就需要在上圖添加一個路由器,然後把它劃到區域1
R1上show ip ospf database,我們可以看到出現了3類LSA
我們把它打開其中一條詳細查看一下:
我們發現這其實就是一條路由,裏面包含目標網絡號,還有度量值,傳播的範圍爲整個OSPF域。
這條LSA攜帶的是O IA域間路由,就是去往OSPF其它區域中的網段,通告者是ABR,至於如何到ABR,就用LSA1、2進行計算,在之後其它的ABR收到該條3類LSA之後,便會將通告者修改爲本地。
LSA5:自治系統外部LSA
先將5類LSA,之後引出4類。
我們將上圖再稍加修改,爲R4添加一個環回,然後讓R4運行EIGRP宣告該環回,再通過重發布技術把它發進OSPF域中。
之後R1上就會出現下面這條O E2域外路由
接着我們查看一下OSPF的數據庫表,發現了產生了一個5類的LSA:
我們打開這個目錄,進行詳細的查看:
因此,該類LSA它的傳播範圍爲整個OSPF域,通告者爲ASBR 4.4.4.4,攜帶的信息是 O E 域外路由,Link-ID爲99.0.0.0(目標網絡號)。
注:我們發現它的通告者是4.4.4.4,而不是2.2.2.2,這個不像我們之前提到的LSA3,在經過下一跳ABR的時候會將通告者修改爲本地,它沒有發生改變,這就違背了拓撲算路由。那麼R1、R2是如何找到ASBR 4.4.4.4的位置呢?這就是我接下來要講的LSA4
LSA4:ASBR彙總LSA
將上述環回重發布的時候,4、5類LSA均會同時產生,因此我們直接查看OSPF的數據庫表就會發現4類LSA:
我們解開這條目錄:
它的傳播範圍是除了ASBR所在區域外的整個OSPF域,上面這張圖就說明了Link-ID爲4.4.4.4,通告者爲3.3.3.3,意思就是說要想去4.4.4.4這個網段找3.3.3.3,此時R1、R2、就知道了ASBR的位置了,接着利用LSA5就可以找到目標了。
如果還有其它ABR,那麼在經過下一跳ABR時,也需要將通告者修改爲本地。
LSA7:NSSA外部LSA
7類LSA是指在非完全末梢區域內(not-so-stubby area)由ASBR(由ABR2充當)發出的通告外部區域的LSA,因此圖中的ABR2路由器將把與NSSA區域相連的接口收到的類型7的LSA轉換成類型5的LSA洪泛到整個骨幹區域中去,從而也洪泛擴散到其他的區域中去。.
而這些原本的7類LSA其實就是5類,只不過將區域2設置爲NSSA後,把5類變成了7類,7類透過area2,到達ABR2時,向OSPF其它域通告時,在將它從7類轉爲5類。(這裏可以看文章前面,更詳細)
這張圖與我畫的所有的拓撲都沒關係,看看7類LSA長什麼樣好。
LSA總結:
類別 | 類別名 | 傳播範圍 | 通告者 | 攜帶信息 | Link-ID | 通告者 |
---|---|---|---|---|---|---|
LSA1 | router 路由器 |
本區域 | 本地區域所有設備 | 本地直連拓撲 | 通告者的RID | 本地區域所有設備 |
LSA2 | network 網絡 |
本區域 | DR | MA網段部分的拓撲 | DR的接口IP地址 | DR |
LSA3 | Summary Network 網絡彙總 |
整個OSPF域 | ABR | O IA域間路由 | O IA路由 目標網絡號 |
ABR,在經過下一跳ABR時,修改爲本地 |
LSA4 | asbr-summary ASBR彙總LSA |
除ASBR所在區域外的整個OSPF域 | ABR | ASBR位置 | ASBR的RID | ABR,在經過下一跳ABR時,修改爲本地 |
LSA5 | External 自治系統外部LSA |
整個OSPF域 | ASBR | O E域外路由 | O E路由,目標網絡號 | ASBR(不修改) |
LSA7 | NSSA外部LSA | NSSA區域內 (離開該區域後轉回5類) |
ASBR | O N域外路由 | O N路由,目標網絡號 | ASBR(不修改) |
四、擴展配置:
1、認證:
(1)接口認證:
①接口明文:
//連接鄰居的接口上配置
R1(config)#interface s1/1
// 開啓接口明文認證需要,開啓後本地hello包中認證類型字段被修改,若鄰居間不一致,將無法建立鄰居關係
R1(config-if)#ip ospf authentication
//定義明文認證的祕鑰
R1(config-if)#ip ospf authentication-key cisco
②接口密文
R2(config)#interface s1/1
//開啓密文認證需要
R2(config-if)#ip ospf authentication message-digest
//配置祕鑰及編號
R2(config-if)#ip ospf message-digest-key 1 md5 cisco123
(2)區域認證:
例:在R1上開啓關於區域0的明文或密文認證,實際就是在R1上所有的區域0接口配置了明文或密文的認證需求,修改了認證類型字段而已。
接口的祕鑰還需要到各個接口上逐一匹配
R2(config)#router ospf 1
//區域明文
R2(config-router)#area 1 authentication
//區域密文
R2(config-router)#area 1 authentication message-digest
(3)虛鏈路認證:
明文認證
//開啓明文認證需求
R2(config-router)#area 1 virtual-link 4.4.4.4 authentication
//在配明文認證密碼:cisco
R2(config-router)#area 1 virtual-link 4.4.4.4 authentication-key cisco
密文認證
r2(config-router)#area 1 virtual-link 4.4.4.4 authentication message-digest
r2(config-router)#area 1 virtual-link 4.4.4.4 message-digest-key 1 md5 cisco123
2、被動接口:
被動接口:只接收不發送路由協議信息,僅用於連接用戶的接口,不得用於連接鄰居的接口
R2(config)#router ospf 1
R2(config-router)#passive-interface f0/0
3、加快收斂:
R2(config)#interface s1/1
//修改hello time
R2(config-if)#ip ospf hello-interval 10
//修改dead time
R2(config-if)#ip ospf dead-interval 40
切記:修改本端的hello time,本端的dead time將自動4倍關係匹配,且鄰居間hello 和 dead time必須一致。
4、缺省路由:
OSPF的缺省有3種:分別是3、5、7類缺省,其中5類比較重要。
(1)3類缺省:
3類缺省特殊區域(末梢、完全末梢、完全NSSA)中連接骨幹區域的ABR自動產生3類缺省。
普通的NSSA區域不產生缺省,需要人工添加
(2)5類缺省:
將area1設置爲特殊區域後,ABR會自動下放3類缺省給area1中的設備,此時ASBR也會學到一個3類缺省。接着我們讓該ASBR做重發布,該ASBR會將這條3類缺省發放給area2中的設備。
5類缺省是由重發布產生,前提是本地(ASBR)路由表中已經擁有缺省路由(任何方式獲取均可),滿足前提後,需要專用的重發布命令:
ASBR(config)#router ospf 1
ASBR(config-router)#default-information originate
當把該條命令一敲,它就會把自己路由表中的缺省路由重發布到area2區域內,這樣area2中就會存在一個 O*E2的5類缺省。
默認導入的路由爲類型2(O*E2),不疊加內部度量,種子度量1。
//修改種子度量和類型
R1(config-router)#default-information originate ?
metric OSPF default metric
metric-type OSPF metric type for default routes
如果本地路由表中還沒有缺省路由,又希望強制向area2域內發放缺省路由。
R1(config-router)#default-information originate always
默認導入的路由爲類型2,種子度量1
修改種子度量和類型:
R1(config-router)#default-information originate always ?
metric OSPF default metric
metric-type OSPF metric type for default routes
(3)7類缺省:
這類缺省比較少見,我們知道7類是隻有NSSA區域產生之後纔會出現的缺省。
7類缺省產生的條件是:正常僅在普通的NSSA環境配置,因爲普通的NSSA不自動產生缺省路由,故需要在區域0和NSSA區域間的ABR上,向NSSA區域發佈一條缺省路由。
R1(config-router)#area 1 nssa default-information-originate
默認進入路由爲類型2,種子度量爲1。
修改種子度量和類型:
R1(config-router)#area 1 nssa default-information-originate ?
metric OSPF default metric
metric-type OSPF metric type for default routes
切記:一旦本地爲完全NSSA區域,若再導入7類缺省必然產生環路,只有普通的NSSA區域可以導入。
若一臺設備同時學習到不同類別的缺省路由規則:
內部優於外部:3類優於5、7類
若5、7類相遇,先比管理距離再比較度量,越小越優選;若度量一致,5類優於7類。