OSPF的三张表(链路状态公告)
OSPF詳解
?
OSPF定義
OSPF(Open Shortest Path First,開放最短路徑優先)是IETF(Internet Engineering Task Force,互聯網工程任務組)組織開發的一個基于鏈路狀態的自治系統內部網關協議。目前針對IPv4協議使用的是OSPF Version 2。ospf直接工作在ip層之上,ip協議號89,ospf以組播方式發送協議包!
鏈路狀態路由協議使用SPF最短路經優先算法(shortest path first spf)計算和選擇路由,這類路由協議只關心網絡中鏈路或接口的狀態(up down ip地址,掩碼帶寬,利用率和時延等),每個路由器將已知的鏈路狀態信息向該區域的其他路由器通告,通過這種方式,網絡上的每臺路由器對網絡結構都會有相同的認識,隨后路由器以其為依據,使用spf算法計算和選擇路由
spf算法是以自身為根節點計算出一棵最短路徑樹,在這棵樹上由根到各節點的累計開銷最小
即由根到各節點的路徑在整個網絡中都是最優的,這樣也就獲得了由根去往各個節點的路由。
ospf引入router id概念,ospf區域內的每臺路由器的行為都能很好的被跟蹤
OSPF協議基本原理
工作過程:鄰居發現、路由交換、路由計算、路由維護
1、鄰居表:記錄所有建立了鄰居關系的路由器,包括相關描述和鄰居狀態。會定期的相互發送hello報文來維護,若在一定的周期內沒有收到領居回應的hello報文,則認為鄰居路由器失效,將它從鄰居表中刪除
2、鏈路狀態數據庫表(LSDB):此表里包含了網絡拓撲中鏈路狀態的通告。。每臺路由器在同一個區域內LSDB表一樣
3、路由表:在獲得完整LSDB表后,進行SPF算法,形成最優路由加入路由表
OSPF路由器間組播
ospf是以組播地址發送協議包,只有加入了ospf區域的接口地址才會接受和發送組播地址發送的ospf報文(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接口),只會剝離到二層,而不會進一步處理,也就省去了很多資源浪費)。 )
OSPF支持的網絡類型
根據路由器所連接的物理網絡不同,OSPF將網絡劃分為四種類型:廣播多路訪問型(Broadcast multiAccess)、非廣播多路訪問型(None Broadcast MultiAccess,NBMA)、點到點型(Point-to-Point)、點到多點型(Point-to-MultiPoint)。
廣播多路訪問型網絡如:Ethernet、Token Ring、FDDI。NBMA型網絡如:Frame Relay、X.25、SMDS。Point-to-Point型網絡如:PPP、HDLC。
指派路由器(DR)和備份指派路由器(BDR)
在多路訪問網絡上可能存在多個路由器,為了避免路由器之間建立完全相鄰關系而引起的大量開銷,OSPF要求在區域中選舉一個DR。每個路由器都與之建立完全相鄰關系。DR負責收集所有的鏈路狀態信息,并發布給其他路由器。選舉DR的同時也選舉出一個BDR,在DR失效的時候,BDR擔負起DR的職責。
點對點型網絡不需要DR,因為只存在兩個節點,彼此間完全相鄰。 協議組成OSPF協議由Hello協議、交換協議、擴散協議組成。本文僅介紹Hello協議,其他兩個協議可參考RFC2328中的具體描述。
當路由器開啟一個端口的OSPF路由時,將會從這個端口發出一個Hello報文,以后它也將以一定的間隔周期性地發送Hello報文。OSPF路由器用Hello報文來初始化新的相鄰關系以及確認相鄰的路由器鄰居之間的通信狀態。
對廣播型網絡和非廣播型多路訪問網絡,路由器使用Hello協議選舉出一個DR。在廣播型網絡里,Hello報文使用多播地址224.0.0.5周期性廣播,并通過這個過程自動發現路由器鄰居。在NBMA網絡中,DR負責向其他路由器逐一發送Hello報文。
區域
OSPF協議引入“分層路由”的概念,將網絡分割成一個“主干”連接的一組相互獨立的部分,這些相互獨立的部分被稱為“區域”(Area),“主干”的部分稱為“主干區域”。每個區域就如同一個獨立的網絡,該區域的OSPF路由器只保存該區域的鏈路狀態。每個路由器的鏈路狀態數據庫都可以保持合理的大小,路由計算的時間、報文數量都不會過大。
共有五種區域的主要區別在于它們和外部路由器間的關系:
標準區域: 一個標準區域可以接收鏈路更新信息和路由總結。
主干區域(傳遞區域):主干區域是連接各個區域的中心實體。主干區域始終是“區域0”,所有其他的區域都要連接到這個區域上交換路由信息。主干區域擁有標準區域的所有性質。
存根區域(stub Area):存根區域是不接受自治系統以外的路由信息的區域。如果需要自治系統以外的路由,它使用默認路由0.0.0.0。
完全存根區域:它不接受外部自治系統的路由以及自治系統內其他區域的路由總結。需要發送到區域外的報文則使用默認路由:0.0.0.0。完全存根區域是Cisco自己定義的。
不完全存根區域(NSAA): 它類似于存根區域,但是允許接收以LSA Type 7發送的外部路由信息,并且要把LSA Type 7轉換成LSA Type 5。
OSPF鏈路狀態公告類型
OSPF路由器之間交換鏈路狀態公告(LSA)信息。OSPF的LSA中包含連接的接口、使用的Metric及其他變量信息。OSPF路由器收集鏈接狀態信息并使用SPF算法來計算到各節點的最短路徑。LSA也有幾種不同功能的報文,在這里簡單地介紹一下:
LSA TYPE 1:router LSA由每臺路由器為所屬的區域產生的LSA,描述本區域路由器鏈路到該區域的狀態和代價。一個邊界路由器可能產生多個LSA TYPE1。
LSA TYPE 2:network LSA由DR產生,含有連接某個區域路由器的所有鏈路狀態和代價信息。只有DR可以監測該信息。
LSA TYPE 3:summary LSA由ABR產生,含有ABR與本地內部路由器連接信息,可以描述本區域到主干區域的鏈路信息。它通常匯總缺省路由而不是傳送匯總的OSPF信息給其他網絡。
LSA TYPE 4:Summary LSA由ABR產生,由主干區域發送到其他ABR, 含有ASBR的鏈路信息,與LSA TYPE 3的區別在于TYPE 4描述到OSPF網絡的外部路由,而TYPE 3則描述區域內路由。
LSA TYPE 5:AS External LSA由ASBR產生,含有關于自治域外的鏈路信息。除了存根區域和完全存根區域,LSA TYPE 5在整個網絡中發送。
LSA TYPE 6:multicast OSPF LSA,MOSF可以讓路由器利用鏈路狀態數據庫的信息構造用于多播報文的多播發布樹。
LSA TYPE 7:Not-So-Stubby LSA由ASBR產生的關于NSSA的信息。LSA TYPE 7可以轉換為LSA TYPE 5。
OSPF的三張表
1、 鄰居列表:列出每臺路由器全部已經建立鄰接關系的鄰居路由器
2、 鏈路狀態數據庫:列出網絡中其他路由器的信息,由此顯示了全網的網絡拓撲
3、 路由表:列出通過SPF算法計算出到達每個相連網絡的最佳路徑
OSPF鄰居的有限狀態機
1、 down:初始狀態,沒有收到來自鄰居的hello包,在NBMA網絡中pollinterval時間發送一次he1lo給鄰居。
2、 attempt:只用于NBMA網絡,鄰居有效(收到鄰居的hello)后,hellointerval取代pollinterval來發送hello包。
3、 init: (收到了來自鄰居的he1lo)標識著自身鄰居表創立完成。
4、 2way: (在鄰居的hello包中看見了自己的RID)多路訪問網絡選取DR/BDR才能往下進行,其他網絡無條件往下繼續。標識著鄰居的鄰居表建立完成。
5、 exstart: (協商主從后才能往下進行) RID大的為master,確定DBD的序列號。主先發DBD,從后發DBD。
6、 exchange:交換DBD,也向鄰居發送LSR來請求新的LSA。 DBD交換完。
7、 loading:發送LSR請求最新LSA,收到新的LSA,對比LSA的序列號(如果LSDB相同往下)
8、 full:完全鄰接。同步完成計算最短路徑,加載入路由表。
導致鄰接關系建立不起來的可能原因
1、 卡在EDOWN,網絡類型與二層網絡類型條件不匹配、有ACL阻擋、he1lo和dead時間不-一致、區域ID不-致、認證錯誤、特殊區域類型不一-致、RID相同。
2、 卡在2way,多路訪問網絡不能選舉DR/ BDR,就是priority 都為0。
3、 卡在exstart,鏈路兩端MTU設置不同,二層MTU,三層MTU。 可以ip ospf mtu-i gnore忽略. 卡在exchange, 11. 0和12.3IOS的LSA格式不兼容。
4、 建立一一個鄰接關系
在鄰接關系建立過程中0SPF需要使用3種類型的數據包LSR/LSU/DBD。
DBD數據包非常重要,它攜帶了源路由器LSDB中的所有LSA的描述信息(頭部)。這些信息可以讓路由器判定LSDB中LSA是否最新,是否完整。
DBD數據包中有3個重要位I (initial)位M(more)位MS (master/slave)位
a) I位:置1說明發送的是第一個DBD包。
b) M位:置1說明發送的不是最后一個DBD包。
c) M/S位:置1說明源路由器為主,0為從。
更新數據包傳送的所有LSA必須單獨進行確認,確認后從鏈路狀態重傳列表刪除它們。
a) 顯式確認:回送發送-一個LSAck來確認收到那個LSA包。
b) 急式確認:回送包含那個LSA拷貝信息的更新數據包。
主路由器控制著數據庫的同步過程。
由于從路由器必須確認每個收到的DBD數據包,因此從路由器總是最先得知同步完成。
OSPF協議報文
OSPF路由的計算過程和鄰接關系的建立與維持
OSPF協議路由生成過程
1、生成LSA描述自己的接口狀態
每臺路由器都根據自己周圍的接口狀態生成LSA(接口狀態up或down)、鏈路開銷、IP地址/子網掩碼鏈路開銷與接口帶寬成反比
2、同步ospf區域內的每臺路由器的LSDB
ospf路由器通過交換LSA來實現LSDB的同步
3、使用spf計算路由
ospf路由器用spf算法以自身為根節點計算出一棵最短路徑樹
如果通過SPF算法發現到達同一目標的路徑cost值相同,就將兩條路由同時加入路由表,形成等價路由
一,DR的選舉
DR選舉過程:
1,本網段的ospf路由器
2,本網段priority>0的ospf路由器
3,所有的priority>0的ospf路由器都認為自己是DR
4,選priority值最大的,若priority值相等,選route-id最大的
DR選舉特點:
1,DR是各路由器選出來的,而非人工指定的。
2,DR一旦當選,除非路由器故障,否而不會更換,即便新加入一臺優先級比DR搞得路由器,也不換。
3,DR選出的同時,也選出BDR來
二,鄰接關系的形成與維持
通過hello報文形成鄰接關系
鄰居建立后,還需要hello報文進行鄰居關系的維持,有兩個定時器來進行這項工作:
1,hello time:缺省10s(nbma網絡30s)
2,dead time:缺省40s
鄰居關系和鄰接關系的建立:
1、鄰居發現與維護
a、兩臺路由器以組播的方式(224.0.0.5)發送ospf協議的hello報文(Router ID、相關參數協商信息)。組播地址224.0.0.5表示所有運行ospf路由器都能收到該報文。(224.0.0.5是DR和BDR發送報文給DRother時用,224.0.0.6是DR和BDR監聽DRother時用(實驗表明都是用224.0.0.5))
b、兩臺路由器根據收到的報文,進行參數協商,如果驗證、區域等參數都設置一致,則認為發現鄰居
c、發現鄰居后,進行維護。鄰居之間周期性(10s)的交互hello報文
在一定時間內,內收到鄰居發來的報文,認為鄰居正常,反則認為失效。
d、ospf定時器:
hello定時器(10s):接口向鄰居發送hello報文的間隔。鄰居之間定時器要保持一致,且與路由的收斂速度、網絡負荷大小成反比
鄰居失效時間 (40s):在鄰居失效時間內,如果接口還沒有收到hello報文,則宣告鄰居無效非廣播網絡中,每隔30秒發送一次,保持時間120秒
2、鄰居和鄰接
ospf路由器啟動后,便會通過ospf接口向外發送hello報文。收到報文的ospf路由器且報文中參數一致,則雙方形成鄰居關系
形成鄰居關系的路由器不一定都能形成鄰接關系,要根據網絡類型,只要雙方成功交互DD報文,交換LSA并達到LSDB的同步之后,才能真正成為鄰接關系
DR、BDR之間為鄰接關系(full)(LSA和DD報文)
DR、BDR與DRother之間為鄰接
DRother之間為鄰居關系(2-way)(hello報文)
3、鄰居關系的建立:
?
i:RTA發送hello報文將DR為置成0.0.0.0,鄰居表為空
ii:看對方鄰居表是否有自己,沒有,將RTA放入鄰居表狀態設為Init狀態,然后比較RouterID,發現自己的比RTA大,將DR設為自己,發給RTA
iii:RTA檢查RTB的hello報文,發現鄰居表有自己狀態設為2-way,并將RTB加入自己的鄰居表,再發送hello給RTB
iv:RTB收到RTA的hello報文檢查,發現鄰居表里有自己,直接將鄰居表里RTA狀態設為2-way
鄰接關系的建立:
如果RTA和RTB有一個是DR或者BDR還要繼續建立鄰接關系
?
i:RTA將鄰居表里的RTB狀態設為Exstar狀態,并且發送一個不包含LSA的DD報文,進行主從協商,(Maste路由器的作用是在交換DD報文時,主動發送DD報文的作用)
Seq:序列號,由主設定,第一個包RTA認為自己是主,序列號設為X
I:置為1,表示是RTA發送的初始化的包
M:置為1,表明這不是最后一個包
MS:置為1,表明自己是主
ii:RTB收到DD報文,將鄰居表里的RTA設為Exstar狀態。比較Router ID,由于自己的比RTA大,所以認為自己是主,序列號置為Y,MS置為1,,I和M也置為1
iii:RTA收到后,比較Router ID確實比自己大,認為RTB為主,并將鄰居表RTB的狀態設為Exchange狀態,并采用RTB設置的序列號Y發送一個帶有LSA摘要的DD報文
iv:RTB收到后,也將鄰居表RTA的狀態設為Exchange狀態,并回一個序列號為Y+1的帶有LSA摘要的DD報文和RTA交換LSA摘要信息
v:雙方收到帶有LSA摘要的DD報文后,進行比較,RTB發現RTA的LSA摘要所對應的LSA自己都有,則將鄰居表里的RTA設為Full。
?
vi:RTA發現RTB發來的LSA摘要所對應的LSA自己有缺少的,將鄰居表中RTB狀態設為Loading,并發送一個LSR報文(包含自己缺少的LSA摘要)。
vii:RTB收到后,將RTA所請求的LSA,以一條或多條LSU報文發給RTA
viii:RTA將收的LSA放入自己的LSDB表中,知道之前請求的所有LSA都獲得。
5、ospf鄰居狀態機:
?
i:Down:在上一個鄰居失效時間內,沒有收到任何hello報文
ii:Attempt:只存在于NBMA網絡中,當一臺設備試圖聯系自己鄰居時,沒有收到回應報文時,就會將鄰居狀態設置為Attempt
iii:Init:表示一臺路由器收到另一臺路由器的hello報文,但是報文中的鄰居表里沒有自己的RouterID
iv:2-way:表示一臺路由器收到另一臺路由器的hello報文,報文的鄰居表中有自己的RouterID
v:Exstart:在協商主從時,確定DD報文的序列號,比較MTU。(MTU不一樣時停在此狀態)ospf mtu-enable //開啟MTU比較
vi:Exchange:在交換LSA摘要時
vii:Loading:對方的LSA摘要和自己的LSDB比較后,發現LSA摘要中存在LSDB中沒有的
vii:Full:收到的LSA摘要和自己的LSDB表一致
三,LSDB的更新:
?
- 老化時間:LSDB里面的LSA都設定了老化時間,默認為1h,如果1h內LSA沒有被更新,LSA在LSDB表中將會被移除。LSDB每隔0.5h刷新一次所有的LSA,LSA的序列號都會加一
- 序列號越大,表示LSA越新;老化時間越小,表示LSA越新,默認每0.5h進行一次LSA的泛洪。
注意:校驗和是不能體現LSA的新舊。
?
(1)、RTA發現鏈路狀態發生改變后,以組播地址為(224.0.0.6)將LSU報文發送給RTC和RTD。組播地址224.0.0.6表示只有DR和BDR能夠接收到這個報文
(2)、RTC作為DR,收到報文后,發送LSAack報文確認,同時使用組播地址為224.0.0.5將LSU報文發送給所有OSPF的路由器。
?
骨干區域與虛連接
OSPF劃分區域之后,并非所有的區域都是平等的關系。其中有一個區域是與眾不同的,它的區域號是0,通常被稱為骨干區域。骨干區域負責區域之間的路由,非骨干區域之間的路由信息必須通過骨干區域來轉發。對此,OSPF有兩個規定:
· 所有非骨干區域必須與骨干區域保持連通;
· 骨干區域自身也必須保持連通。
在實際應用中,可能會因為各方面條件的限制,無法滿足上面的要求。這時可以通過配置OSPF虛連接予以解決。
(2) 虛連接(Virtual Link)
虛連接是指在兩臺ABR之間通過一個非骨干區域而建立的一條邏輯上的連接通道。它的兩端必須是ABR,而且必須在兩端同時配置方可生效。為虛連接兩端提供一條非骨干區域內部路由的區域稱為傳輸區(Transit Area)。
總結
以上是生活随笔為你收集整理的OSPF的三张表(链路状态公告)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: httpd服务配置
- 下一篇: mysql存储kv_图数据库的优点有什么