CCNP路由實驗之五 動態路由協議之 OSPF
CCNP路由實驗之五動態路由協議之 OSPF
動態路由協議可以自動的發現遠端網路,只要網路拓撲結構發生了變化,路由器就會相互交換路由資訊,不僅能夠自動獲知新增加的網路,還可以在當前網路連線失敗時找出備用路徑。根據是否在一個自治域內部使用,動態路由協議分為內部閘道器協議(IGP)和(EGP)。這裡的自治域指一個具有統一管理機構、統一路由策略的網路。自治域內部採用的路由選擇協議稱為內部閘道器協議,常用的有RIP、EIGRP、OSPF;主要用於多個自治域之間的路由選擇,常用的是BGP和BGP-4。在一個路由器中,可同時配置靜態路由和一種或多種動態路由。它們各自維護的路由表都提供給轉發程式,但這些路由表的表項間可能會發生衝突。這種衝突可通過配置各路由表的
OSPF簡介
OSPF(Open Shortest Path First)是一個,用於在單一自治系統(autonomous system,AS)內決策路由。是對的一種實現,。鏈路是路由器介面的另一種說法,因此OSPF也稱為介面狀態路由協議。OSPF通過同一個路由域內的路由器之間通告網路介面的狀態來建立鏈路狀態資料庫,生成最短路徑樹,每個OSPF路由器使用這些最短路徑構造路由表。在這裡,路由域是指一個自治系統(Autonomous System),即AS,它是指一組通過統一的路由政策或
OSPF協議主要優點
-
OSPF是真正的LOOP-FREE(無路由自環)路由協議。源自其演算法本身的優點。(鏈路狀態及最短路徑樹演算法)
-
OSPF收斂速度快:能夠在最短的時間內將路由變化傳遞到整個自治系統。
-
提出區域(area)劃分的概念,將自治系統劃分為不同區域後,通過區域之間的對路由資訊的摘要,大大減少了需傳遞的路由資訊數量。也使得路由資訊不會隨網路規模的擴大而急劇膨脹。
-
將協議自身的開銷控制到最小
1)用於發現和維護鄰居關係的是定期傳送的是不含路由資訊的hello報文,非常短小。包含路由資訊的報文時是觸發更新的機制。(有路由變化時才會傳送)。但為了增強協議的健壯性,每1800秒全部重發一次。
2)在廣播網路中,使用組播地址(而非廣播)傳送報文,減少對其它不執行ospf的網路裝置的干擾。
3)在各類可以多址訪問的網路中(廣播,NBMA),通過選舉DR,使同網段的路由器之間的路由交換(同步)次數由 O(N*N)次減少為 O (N)次。
4)提出STUB區域的概念,使得STUB區域內不再傳播引入的ASE路由。
5)在ABR(區域邊界路由器)上支援路由聚合,進一步減少區域間的路由資訊傳遞。
6)在點到點介面型別中,通過配置按需撥號屬性(OSPF over On Demand Circuits),使得ospf不再定時傳送hello報文及定期更新路由資訊。只在網路拓撲真正變化時才傳送更新資訊。
7)通過嚴格劃分路由的級別(共分四極),提供更可信的路由選擇。
8)的安全性,ospf支援基於介面的明文及md5驗證。
OSPF術語
Router-ID:就相當於人的名字,用於路由器之間分不清誰是誰,如果沒有辦法確定各自的身份,那麼通告的鏈路狀態就是毫無意義的,所以必須給每一個OSPF路由器定義一個身份,這就是Router-ID,並且Router-ID在網路中絕對不可以有重名,否則路由器收到的鏈路狀態,就無法確定發起者的身份,也就無法通過鏈路狀態資訊確定網路位置,OSPF路由器發出的鏈路狀態都會寫上自己的Router-ID,可以理解為該鏈路狀態的簽名,不同路由器產生的鏈路狀態,簽名絕不會相同。如果一臺路由器收到一條鏈路狀態,無法到達該Router-ID的位置,就無法到達鏈路狀態中的目標網路。Router-ID只在OSPF啟動時計算,或者重置OSPF程序後計算。每一臺OSPF路由器只有一個Router-ID,Router-ID使用IP地址的形式來表示,確定Router-ID的方法為:
-
手工指定Router-ID。
-
路由器上活動Loopback介面中IP地址最大的,也就是數字最大的,如C類地址優先於B類地址,一個非活動的介面的IP地址是不能被選為Router-ID的。
-
如果沒有活動的Loopback介面,則選擇活動物理介面IP地址最大的。
COST:OSPF使用介面的頻寬來計算,例如一個10 Mbit/s的介面,計算Cost的方法為:將10 Mbit換算成bit,為10 000 000bit,然後用10000 0000除以該頻寬,結果為 10000 0000/10 000000 bit = 10,所以一個10 Mbit/s的介面,OSPF認為該介面的Metric值為10,需要注意的是,計算中,頻寬的單位取bit/s,而不是Kbit/s,例如一個100 Mbit/s的介面,Cost值為 100000000 /100 000 000=1,因為Cost值必須為整數,所以即使是一個1000 Mbit/s(1GBbit/s)的介面,Cost值和100Mbit/s一樣,為1。如果路由器要經過兩個接口才能到達目標網路,那麼很顯然,兩個介面的Cost值要累加起來,才算是到達目標網路的Metric值,所以OSPF路由器計算到達目標網路的Metric值,必須將沿途中所有介面的Cost值累加起來,在累加時,同EIGRP一樣,只計算出介面,不計算進介面。OSPF會自動計算介面上的Cost值,但也可以通過手工指定該介面的Cost值,手工指定的優先於自動計算的值。OSPF計算的Cost,同樣是和介面頻寬成反比,頻寬越高,Cost值越小。到達目標相同Cost值的路徑,可以執行負載均衡,最多6條鏈路同時執行負載均衡。
鏈路狀態(Link-State):鏈路狀態(LSA)就是OSPF介面上的描述資訊,例如介面上的IP地址,子網掩碼,網路型別,Cost值等等,OSPF路由器之間交換的並不是路由表,而是鏈路狀態(LSA),OSPF通過獲得網路中所有的鏈路狀態資訊,從而計算出到達每個目標精確的網路路徑。OSPF路由器會將自己所有的鏈路狀態毫不保留地全部發給鄰居,鄰居將收到的鏈路狀態全部放入鏈路狀態資料庫(Link-State Database),鄰居再發給自己的所有鄰居,並且在傳遞過程中,絕對不會有任何更改。通過這樣的過程,最終,網路中所有的OSPF路由器都擁有網路中所有的鏈路狀態,並且所有路由器的鏈路狀態應該能描繪出相同的網路拓樸。
OSPF區域:OSPF路由器之間會將所有的鏈路狀態(LSA)相互交換,毫不保留,當網路規模達到一定程度時,LSA將形成一個龐大的資料庫,勢必會給OSPF計算帶來巨大的壓力;為了能夠降低OSPF計算的複雜程度,快取計算壓力,OSPF採用分割槽域計算,將網路中所有OSPF路由器劃分成不同的區域,每個區域負責各自區域精確的LSA傳遞與路由計算,然後再將一個區域的LSA簡化和彙總之後轉發到另外一個區域,這樣一來,在區域內部,擁有網路精確的LSA,而在不同區域,則傳遞簡化的LSA。區域的劃分為了能夠儘量設計成無環網路,所以採用了Hub-Spoke的拓樸架構,也就是採用核心與分支的拓樸。區域的命名可以採用整數數字,如1、2、3、4,也可以採用IP地址的形式,0.0.0.1、0.0.0.2,因為採用了Hub-Spoke的架構,所以必須定義出一個核心,然後其它部分都與核心相連,OSPF的區域0就是所有區域的核心,稱為BackBone區域(骨幹區域),而其它區域稱為Normal 區域(常規區域),在理論上,所有的常規區域應該直接和骨幹區域相連,常規區域只能和骨幹區域交換LSA,常規區域與常規區域之間即使直連也無法互換LSA,如上圖中Area 1、Area 2、Area 3、Area 4只能和Area 0互換LSA,然後再由Area 0轉發,Area 0就像是一箇中轉站,兩個常規區域需要交換LSA,只能先交給Area 0,再由Area0轉發,而常規區域之間無法互相轉發。
OSPF區域是基於路由器的介面劃分的,而不是基於整臺路由器劃分的,一臺路由器可以屬於單個區域,也可以屬於多個區域,如果一臺OSPF路由器屬於單個區域,即該路由器所有介面都屬於同一個區域,那麼這臺路由器稱為Internal Router(IR);如果一臺OSPF路由器屬於多個區域,即該路由器的介面不都屬於一個區域,那麼這臺路由器稱為AreaBorder Router(ABR),ABR可以將一個區域的LSA彙總後轉發至另一個區域;如果一臺OSPF路由器將外部路由協議重分佈進OSPF,那麼這臺路由器稱為Autonomous System BoundaryRouter(ASBR),但是如果只是將OSPF重分佈進其它路由協議,則不能稱為ASBR。可以配置任何OSPF路由器成為ABR或ASBR。由於OSPF有著多種區域,所以OSPF的路由在路由表中也以多種形式存在,共分以下幾種:
如果是同區域的路由,叫做Intra-Area Route,在路由表中使用O來表示;
如果是不同區域的路由,叫做Inter-Area Route或Summary Route,在路由表中使用O IA來表示;
如果並非OSPF的路由,或者是不同OSPF程序的路由,只是被重分佈到OSPF的,叫做External Route,在路由表中使用O E2或OE 1來表示。
當存在多種路由可以到達同一目的地時,OSPF將根據先後順序來選擇要使用的路由,所有路由的先後順序為:
Intra-Area — Inter-Area — External E1 — External E2,即 O — O IA — O E1 — O E2。
注:一臺路由器可以執行多個OSPF程序,不同程序的OSPF,可視為沒有任何關係,如需要獲得相互的路由資訊,需要重分佈。每個OSPF程序可以有多個區域,而路由器的鏈路狀態資料庫是分程序和分割槽域存放的
Hello包:用於發現鄰居,在成為鄰居之前,必須對Hello包裡的一些引數進行協商Hello包在鄰居之間扮演著keepalive的角色,允許鄰居之間的雙向通訊、用於在NBMA(Nonbroadcast Multi-access)、廣播網路(乙太網)中選舉DR和BDR。Hello Packet包含以下資訊:
源路由器的RID
源路由器的Area ID
源路由器介面的認證型別和認證資訊
源路由器介面的Hello包傳送的時間間隔
源路由器介面的無效時間間隔
優先順序
DR/BDR介面IP地址
五個標記位(flag bit)
源路由器的所有鄰居的RID
鄰居(Neighbor):鄰居關係是指,當雙方收到對方的hello報文的時候,報文裡面的引數(hello time.deadinterval , area id.authentication ,mask 等)一致的時候,並且鄰居關係為2-way的時候,這樣就是建立了鄰居關係。OSPF只有鄰居之間才會交換LSA,路由器會將鏈路狀態資料庫中所有的內容毫不保留地發給所有鄰居,要想在OSPF路由器之間交換LSA,必須先形成OSPF鄰居,OSPF鄰居靠傳送Hello包來建立和維護,Hello包會在啟動了OSPF的介面上週期性發送,在不同的網路中,傳送Hello包的間隔也會不同,當超過4倍的Hello時間,也就是Dead時間過後還沒有收到鄰居的Hello包,鄰居關係將被斷開。兩臺OSPF路由器必須滿足4個條件,才能形成OSPF鄰居,4個必備條件如下:
Area-id(區域號碼):即路由器之間必須配置在相同的OSPF區域,否則無法形成鄰居。
Hello and Dead Interval(Hello時間與Dead時間)即路由器之間的Hello時間和Dead時間必須一致,否則無法形成鄰居。
Authentication(認證):路由器之間必須配置相同的認證密碼,如果密碼不同,則無法形成鄰居。
StubArea Flag(末節標籤):路由器之間的末節標籤必須一致,即處在相同的末節區域內,否則無法形成鄰居。
鄰接關係建立的4個階段:
-
鄰居發現階段。
-
雙向通訊階段:Hello報文都列出了對方的RID,則BC完成。
-
資料庫同步階段:主從協商;DD交換;LSA請求;LSA傳播;LSA應答。
-
完全鄰接階段: full adjacency。
鄰居關係的建立和維持都是靠Hello包完成的,在一般的網路型別中,Hello包週期性的以秒傳送,有1個例外:在NBMA網路中,路由器每經過一個PollInterval週期傳送Hello包給狀態為down的鄰居(其他型別的網路是不會把Hello包傳送給狀態為down的路由器的).Cisco路由器上PollInterval預設120s Hello Packet以組播的方式傳送給224.0.0.5,在NBMA型別,點到多點和虛鏈路型別網路,以單播傳送給鄰居路由器。鄰居可以通過手工配置或者Inverse-ARP發現。
注:OSPF只能使用介面的Primary地址建立鄰居,不能使用Secondary建立鄰居。路由器雙方介面要麼都為手工配置地址(Numbered),要麼都為借用地址(Unnumbered),否則無法建立鄰居。
鄰接(Adjacency):鄰