OSPF原理及配置
OSPF(Open Shortest Pass First,開放最短路徑優先協議),是一個最常用的內部網管協議,是一個鏈路狀態協議。
OSPF的特點
- OSPF是一種無類路由協議,支持VLSM可變長子網掩碼。支持IPV4和IPV6.
- 組播地址:224.0.0.5 224.0.0.6。
- OSPF度量:從源到目的所有出接口的度量值,和接口帶寬反比(10^8/帶寬)。
- 收斂速度極快,但大型網絡配置很複雜。
- IP封裝,協議號89
OSPF運行原理
OSPF組播的方式在所有開啓OSPF的接口發送Hello包,用來確定是否有OSPF鄰居,若發現了,則建立OSPF鄰居關係,形成鄰居表,之後互相發送LSA(鏈路狀態通告)相互通告路由,形成LSDB(鏈路狀態數據庫)。再通過SPF算法,計算最佳路徑(cost最小)後放入路由表。
設計要求:1.必須配置骨幹區域0
2.其他區域連接到骨幹區域
好處: 1.減小路由表(通過域間彙總)
2.本地拓撲變化值影響一個區域(也是通過彙總)
3.某些LSA之子本地泛紅,不泛洪到其他區域
注:OSPF區域劃分基於接口而不是設備
OSPF區域及路由器身份
OSPF區域
骨幹區域(區域0):骨幹區域必須連接所有的非骨幹區域,而且骨幹區域不可分割,有且只有一個,一般情況下,骨幹區域內沒有終端用戶。
非骨幹區域(非0區域):非骨幹區域一般根據實際情況而劃分,必須連接到骨幹區域(不規則區域也需通過tunnel或virtual-link連接到骨幹區域)。一般情況下,費骨幹區域主要連接終端用戶和資源。
OSPF身份
DR(Designated Router):指定路由器,OSPF協議啓動後開始選舉而來
BDR(Back-up Designated Router):備份指定路由器,同樣是由OSPF啓動後選舉而來
DRothers:其他路由器,非DR非BDR的路由器都是DRothers。
ABR(Area Border Routers):區域邊界路由器,連接不同OSPF區域。
ASBR(Autonomous System Boundary Router):自治系統邊界路由器,位於OSPF和非OSPF網絡之間。
骨幹路由器:至少有一個藉口連接到骨幹區域(區域0)。
OSPF鄰居建立
鄰居的兩個狀態
Neighbors:鄰居
Adjacency:鄰接
- 鄰居不一定是鄰接,鄰接一定是鄰居,只有交互了LSA的OSPF鄰居才成爲OSPF的鄰接,之交互Hello包的支撐位鄰居,
- 在點對點網絡中,所有鄰居都能成爲鄰接。
- MA(廣播多路訪問網絡,比如以太網)網絡類型中,DR,BDR,DRothers三者關係爲:
DR、BDR與所有的鄰居形成鄰接,DRothers之間只是鄰居而不交換LSA
影響OSPF鄰居建立的原因:
- Hello與Dead Time時間不一致(改Hello的話Dead自動*4,單改Dead的話Hello不變)
- 區域ID必須一致
- 認證(password一致)
- Stub標識一致(與特殊區域有關,之後介紹)
- MTU-攜帶在DBD報文中,兩端口必須一致
- 掩碼,如12.1.1.1/30——12.1.1.2/24 這種情況是可以ping通的,但鄰居關係起不來
(OSPF對環回口,無論掩碼多少位,都按32位處理,所以建議環回口直接/32,或者在環回口下還原真實掩碼) - ACL(是否放行OSPF)
OSPF更新
- OSPF是一種觸發更新的機制。一旦拓撲發生變化便會更新。
- OSPF也有週期性更新(30分鐘一次)
- 當收到一條LSA之後:
首先查看是否在LSDB中,若沒有則假如LSDB,回覆LSACK。繼續泛洪出去,並且通過SPF算法計算最佳路徑並加入路由表。若存在,則比較誰的更“新”(看序號),序號大者新,若本地不如收到的信更新本地LSDB並泛洪,且通過SPF算法計算最佳路徑並加入路由表,若比收到的新,則將本地的泛洪出去。
注:LSA序列號,4字節,16進制
0x80000001-0x7FFFFFFF
OSPF數據包類型
- Hello:10秒發送一次,死亡時間40s,4倍關係,可以修改。
- DBD:Database Description 僅僅是一個對本地數據庫的概念性敘述,供路由器覈對數據庫是否同步
- LSR:Link-State Request 請求鏈路狀態,在數據庫同步過程中使用,請求其他角色發送自己失去的LSA最新版本。
- LSU:Link-State Update 鏈路狀態更新,LSU包括幾種類型的LSA,LSU負責泛洪LSA,和相應LSR。LSA只會發送給之前以LSR請求的LSA的直連鄰居,進行泛洪的時候,鄰居路由負責把收到的LSA信息重新封裝在新的LSU中。
- LSACK:鏈路狀態確認,路由器必須對每個收到的LSA進行LSACK確認,但可以用一個LSACK確認多個LSA。
DR、BDR的選舉
DR、BDR的選舉規則:比較router-id,router-id有以下獲得方式:
- 由工程師指定
- 這臺設備最大的環回口ip
- 沒有環回口的話,物理接口ip地址最大的。
選舉規則:
- 最高優先級值的路由器被選爲DR(默認優先級相同:1),次高優先級的爲BDR
- 若優先級相同,則比較router-id,擁有最高router-id的成爲DR,次高的成爲BDR
- 優先級被設置爲0的不參與選舉
- OSPF系統啓動後,若40s內沒有新設備接入就會開始選舉,所以爲保證DR與BDR的選舉不發生意外,建議優先配置想成爲DR與BDR的設備。
- DR與BDR不可以搶佔
- 當DR小時之後,BDR直升DR,重新選BDR
- 所有DR,BDR,DRothers說的都是接口,而不是設備
- 不同網段間選DR,BDR,而不是以OSPF區域爲單位
OSPF狀態
- Down State
- Init State:發送了Hello包(還沒收到)
- Two-way State:收到了一個Hello包且Hello包中包括自己的router-id(對方回覆的)
- Exstart State:First DBD確認主從關係,router-id大的爲主,先發包
- Exchange State:交互DBD 相互學習
- Loading State:LSR與LSU的交互過程
- Full State:所有交互已經完成
注:DBD只是一個目錄的性質,並且第一個DBD只是用來協商之後的DBD由誰先發送。
基本配置演示
我們用下面的拓撲進行配置演示:
對R1進行配置:
R1>en
R1#conf t
R1(config)#int lo 0
R1(config-if)#ip add 1.1.1.1 255.255.255.255
R1(config-if)#no sh
R1(config-if)#exi
R1(config)#int f0/0
R1(config-if)#ip add 100.1.1.1 255.255.255.0
R1(config-if)#no sh
R1(config-if)#exi
R1(config)#router os 100
R1(config-router)#router-id 1.1.1.1
R1(config-router)#net 1.1.1.1 0.0.0.0 a 0
R1(config-router)#net 100.1.1.0 0.0.0.255 a 0
R1(config-router)#exi
對R2進行配置:
R2>en
R2#conf t
R2(config)#int lo 0
R2(config-if)#ip add 2.2.2.2 255.255.255.255
R2(config-if)#no sh
R2(config-if)#exi
R2(config)#int f0/0
R2(config-if)#ip add 100.1.1.2 255.255.255.0
R2(config-if)#no sh
R2(config-if)#exi
R2(config)#router os 100
R2(config-router)#route
R2(config-router)#router-id 2.2.2.2
R2(config-router)#net 2.2.2.2 0.0.0.0 a 0
R2(config-router)#net 100.1.1.0 0.0.0.255 a 0
R2(config-router)#ex
R3進行配置:
R3>en
R3#conf t
R3(config)#int lo 0
R3(config-if)#ip add 3.3.3.3 255.255.255.255
R3(config-if)#no sh
R3(config-if)#exi
R3(config)#int f0/0
R3(config-if)#ip add 100.1.1.3 255.255.255.0
R3(config-if)#no sh
R3(config-if)#exi
R3(config)#router os 100
R3(config-router)#router-id 3.3.3.3
R3(config-router)#net 3.3.3.3 0.0.0.0 a 0
R3(config-router)#net 100.1.1.0 0.0.0.255 a 0
R3(config-router)#exi
- 對R4進行配置:
R4>en
R4#conf t
R4(config)#int lo 0
R4(config-if)#ip add 4.4.4.4 255.255.255.255
R4(config-if)#no sh
R4(config-if)#exi
R4(config)#int f0/0
R4(config-if)#ip add 100.1.1.4 255.255.255.0
R4(config-if)#no sh
R4(config-if)#exi
R4(config)#int f0/1
R4(config-if)#ip add 45.1.1.4 255.255.255.0
R4(config-if)#no sh
R4(config-if)#exi
R4(config)#router os 100
R4(config-router)#router-id 4.4.4.4
R4(config-router)#net 4.4.4.4 0.0.0.0 a 0
R4(config-router)#net 100.1.1.0 0.0.0.255 a 0
R4(config-router)#net 45.1.1.0 0.0.0.255 a 1
R4(config-router)#exi
R5進行配置:
R5>en
R5#conf t
R5(config)#int lo 0
R5(config-if)#ip add 5.5.5.5 255.255.255.255
R5(config-if)#no sh
R5(config-if)#exi
R5(config)#int f0/1
R5(config-if)#ip add 45.1.1.5 255.255.255.0
R5(config-if)#no sh
R5(config-if)#exi
R5(config)#router os 100
R5(config-router)#router-id 5.5.5.5
R5(config-router)#net 5.5.5.5 0.0.0.0 a 1
R5(config-router)#net 45.1.1.0 0.0.0.255 a 1
R5(config-router)#exi
- 以上就是全部基本配置,我們下面來查看一下基本信息
查看鄰居信息:
R4#show ip ospf neighbor
Neighbor ID Pri State Dead Time Address Interface
1.1.1.1 1 FULL/DR 00:00:38 100.1.1.1 FastEthernet0/0
2.2.2.2 1 FULL/BDR 00:00:34 100.1.1.2 FastEthernet0/0
3.3.3.3 1 2WAY/DROTHER 00:00:33 100.1.1.3 FastEthernet0/0
5.5.5.5 1 FULL/DR 00:00:33 45.1.1.5 FastEthernet0/1
以看見R4這臺路由器一共有四個鄰居,這裏臨界狀態,full就是代表鄰接,我們可以看見區域0中R1是DR,R2是BDR,R3和R4都是DRothers,而區域1中R5是DR。那麼我們可以推測,R4是區域1的BDR,我們在R5上查看:
R5#show ip ospf neighbor
Neighbor ID Pri State Dead Time Address Interface
4.4.4.4 1 FULL/BDR 00:00:36 45.1.1.4 FastEthernet0/1
推測不假,下面查看一下開啓OSPF的接口信息:
R1#show ip ospf interface
FastEthernet0/0 is up, line protocol is up
Internet Address 100.1.1.1/24, Area 0
Process ID 100, Router ID 1.1.1.1, Network Type BROADCAST, Cost: 10
Transmit Delay is 1 sec, State DR, Priority 1
Designated Router (ID) 1.1.1.1, Interface address 100.1.1.1
Backup Designated router (ID) 2.2.2.2, Interface address 100.1.1.2
Timer intervals configured, Hello 10, Dead 40, Wait 40, Retransmit 5
oob-resync timeout 40
Hello due in 00:00:00
Supports Link-local Signaling (LLS)
Cisco NSF helper support enabled
IETF NSF helper support enabled
Index 2/2, flood queue length 0
Next 0x0(0)/0x0(0)
Last flood scan length is 1, maximum is 1
Last flood scan time is 4 msec, maximum is 4 msec
Neighbor Count is 3, Adjacent neighbor count is 3
Adjacent with neighbor 2.2.2.2 (Backup Designated Router)
Adjacent with neighbor 3.3.3.3
Adjacent with neighbor 4.4.4.4
Suppress hello for 0 neighbor(s)
Loopback0 is up, line protocol is up
Internet Address 1.1.1.1/32, Area 0
Process ID 100, Router ID 1.1.1.1, Network Type LOOPBACK, Cost: 1
Loopback interface is treated as a stub Host
可以看見,開啓了OSPF的接口的詳細信息,比如Router-id,區域id,進程id,以及接口是如何加入進入OSPF的(network)
查看OSPF的路由:
R5#show ip route ospf
1.0.0.0/32 is subnetted, 1 subnets
O IA 1.1.1.1 [110/21] via 45.1.1.4, 00:26:31, FastEthernet0/1
2.0.0.0/32 is subnetted, 1 subnets
O IA 2.2.2.2 [110/21] via 45.1.1.4, 00:26:31, FastEthernet0/1
100.0.0.0/24 is subnetted, 1 subnets
O IA 100.1.1.0 [110/20] via 45.1.1.4, 00:26:31, FastEthernet0/1
3.0.0.0/32 is subnetted, 1 subnets
O IA 3.3.3.3 [110/21] via 45.1.1.4, 00:26:31, FastEthernet0/1
4.0.0.0/32 is subnetted, 1 subnets
O IA 4.4.4.4 [110/11] via 45.1.1.4, 00:26:31, FastEthernet0/1
在R5中查看OSPF的路由,發現全部都是O IA標記,這裏O 標識來自OSPF,而IA代表是OSPF其他區域傳來的路由(關於標記在後面講解LSA中還會提到),我們再在R1上查看一下OSPF的路由:
R1#show ip route os
2.0.0.0/32 is subnetted, 1 subnets
O 2.2.2.2 [110/11] via 100.1.1.2, 00:29:28, FastEthernet0/0
3.0.0.0/32 is subnetted, 1 subnets
O 3.3.3.3 [110/11] via 100.1.1.3, 00:29:28, FastEthernet0/0
4.0.0.0/32 is subnetted, 1 subnets
O 4.4.4.4 [110/11] via 100.1.1.4, 00:29:28, FastEthernet0/0
5.0.0.0/32 is subnetted, 1 subnets
O IA 5.5.5.5 [110/21] via 100.1.1.4, 00:28:17, FastEthernet0/0
45.0.0.0/24 is subnetted, 1 subnets
O IA 45.1.1.0 [110/20] via 100.1.1.4, 00:29:28, FastEthernet0/0
可見,區域1的被標識爲O IA,而區域0的則只是O。
以上就是基本的OSPF系統的配置。