鏈路狀態路由協議只在網絡拓撲發生變化以后產生路由更新.當鏈路狀態發生變化以后,檢測到變化的設備創建LSA(link state advertisement),通過使用組播地址傳送給所有的鄰居設備,然后每個設備拷貝一份LSA,更新它自己的鏈路狀態數據庫(link state database,LSDB),接著再轉發LSA給其他的鄰居設備.這種LSA的洪泛(flooding)保證了所有的路由設備在更新自己的路由表之前更新它自己的LSDB
Types of OSPF Packets OSPF包的5種類型如下: 1.hello:用來建立鄰居關系的包 2.database description(DBD):用來檢驗路由器之間數據庫的同步 3.link state request(LSR):鏈路狀態請求包 4.link state update(LSU):特定鏈路之間的請求記錄 5.link state acknowledgement(LSAck):確認包
OSPF Packet Header Format 5種OSPF包都是直接被封裝在IP包里的而不使用TCP或UDP.由于沒有使用可靠的TCP協議,但是OSPF包又要求可靠的傳輸,所以就有了LSAck包.如下圖所示就是OSPF包在IP包里的形式:
可以使用show ip ospf database命令查看生存周期和序列號,如下: RTC# show ip ospf database OSPF Router with ID (203.250.15.67) (Process ID 10) Router Link States (Area 1) Link ID ADV Router Age Seq# Checksum Link count 203.250.15.67 203.250.15.67 48 0x80000008 0xB112 2 203.250.16.130 203.250.16.130 212 0x80000006 0x3F44 2 (略)
Debug IP OSPF Packet 使用debug ip ospf packet命令對OSPF包進行排錯和驗證,如下: Router# debug ip ospf packet OSPF: rcv. v:2 t:1 l:48 rid:200.0.0.117 aid:0.0.0.0 chk:6AB2 aut:0 auk: (略) 一些輸出的含義如下: v:OSPF版本 t:OSPF包類型,如上是1,幾種數字所代表的意義是:1為hello,2為DBD,3為LSR,4為LSU,5為LSAck l:定義包長度,單位字節 rid/aid:RID/area ID chk:校驗和 aut:驗證類型,0代表不進行驗證,1代表明文密碼,2代表MD5加密 auk:OSPF驗證key keyed:MD5 key ID seq:序列號
式下輸入network [address] [inverse-mask] area [area-id] process-id只是在本路由器有效,所以可以設置成和其他路由器的process-id一樣的號碼 address和inverse-mask為網絡(或接口)地址和wildcard mask
來看一個配置實例,如下圖:
如圖A是采用的網絡地址,而B是采用的接口地址
Verifying OSPF Operation 一些驗證性的命令如下: 1.show ip protocols:顯示基于IP的路由協議信息 2.show ip route ospf:顯示OSPF已知路由條目信息 3.show ip interface:顯示RID,area ID和鄰居信息 4.show ip ospf:顯示RID,計時器和LSA等信息 5.show ip ospf neighbor (detail):顯示鄰居信息包括RID,優先級,鄰接狀態(比如exstart,full等)和dead timer.detail為具體參數.如下 RouterB#show ip ospf neighbor Neighbor ID Pri State Dead Time Address Interface 10.64.1.1 1 FULL/BDR 00:00:31 10.64.1.1 Ethernet0 10.2.1.1 1 FULL/- 00:00:38 10.2.1.1 Serial0 (略) 6.show ip ospf neighbor [type number] [neighbor-id] (detail):顯示接口的鄰居信息的命令.type為接口類型,number為接口號,neighbor-id為鄰居ID
Manipulating OSPF Router ID 關于RID的分配,如下: 1.可以選擇物理接口地址等級最高的做為RID(假如沒有設置回環接口的話),接口不是必須參與OSPF進程,但是它的狀態必須是up.否則將接收到如下錯誤提示: Router(config)#router ospf 1 2wid: %OSPF-4-NORTRID: OSPF process 1 cannot start. 2.假如回環接口存在的話,可以選舉等級最高的設置為RID(因為回環接口永遠不會down掉) 3.可以使用router-id命令進行設置 一旦RID設置了,將不會改變,即使設置為RID的接口down掉了,RID也不會改變,除非路由器重新啟動,或者OSPF進程重啟
設置下次OSPF啟動以后所采用的RID,如下: 1.Router(config)#router ospf [process-id] 2.Router(config-router)#router-id [ip-address] 創建新的RID.注重假如本次設置的新RID只會在下次OSPF進程中啟用.可以重啟路由器或者使用clear ip ospf process命令重啟OSPF進程(這將暫時性的造成網絡不穩定)
要查看RID的信息可以使用show ip ospf命令
Adjacency Behavior for a Point-to-Point Link & Broadcast Network 在點到點鏈路中一般采用PPP或者HDLC的封裝格式,OSPF自動檢測接口類型,并且不需要進行DR/BDR的選舉.鄰居通過對多播地址224.0.0.5進行多播hello包來動態發現鄰居.默認hello包的發送間隔是10秒,dead間隔是40秒在多路訪問(multiaccess)廣播型網絡中(比如以太網和Token Ring),需要進行DR/BDR的選舉,所有的非DR/BDR(即DROTHER)路由器和DR/BDR形成完全鄰接關系,即DROTHER通過DR/BDR交換信息,如下圖:
Electing the DR/BDR 當選舉DR/BDR的時候要比較hello包中的優先級(priority),優先級最高的為DR,次高的為BDR.默認優先級都為1.在優先級相同的情況下就比較RID,RID等級最高的為DR,次高的為BDR.當你把優先級設置為0以后,OSPF路由器就不能成為DR/BDR,只能成為DROTHER