王 文 龍
(喀什大學 計算機科學與技術學院,新疆 喀什 844008)
網絡中的路由器通過路由選擇協議進行路由選擇,其核心是路由選擇算法。路由選擇協議依據作用范圍分為內部網關協議(IGP)和外部網關協議(EGP),而內部網關協議中,RIP和OSPF是廣泛使用的協議。而RIP的最大度量值為15跳,從而限定了使用RIP的網絡的大小,一般只適用于小型網絡,對于中型網絡都難以滿足。因此,為彌補RIP的不足,改善其在網絡擴展方面的嚴重不足,OSPF使用鏈路狀態及路徑開銷(cost)作為路由選擇算法的基礎,沒有限制跳數,所以從理論上說,OSPF適用于所有規模的網絡[1]。
對于OSPF路由問題,已經有了一些研究[2-17],有一定的局限性。為對OSPF路由有較深入的研究,本文在Cisco Packet Tracer和GNS3仿真環境下,設計簡單的網絡拓撲,對單區域OSPF和多區域0SPF等OSPF路由進行設計、配置,并通過抓包分析路由選擇情況,以期對路由器使用OSPF進行路由選擇進行較深入的分析研究,并能應用到實踐中。
開放式最短路徑優先協議(Open Shortest Path First,OSPF)是內部網關協議中最流行、應用最廣泛的一種路由協議,它是一種分層的、基于鏈路狀態的路由選擇協議,克服了RIP協議和其他基于距離向量的路由選擇協議的缺點。OSPF路由計算的一般過程:
(1) 路由器間通過發送hello報文確定鄰居關系,然后通過交換LSA(鏈路狀態通告)達到鄰居路由器間的LSDB(鏈路狀態數據庫)同步,從而建立鄰接關系;
(2) 區域中每個網段的路由器通過洪泛法進行hello報文的交互,選舉本網段的DR(指定路由器)/BDR(備用指定路由器),本網段中每個路由器將自身的LSA發給所在網段的DR/BDR,再由DR/BDR將LSA以組播的方式發給網段中所有的非DR/BDR路由器;
(3) 當路由器初始化或網絡結構發生變化時,路由器采用洪泛法在區域中交換LSA,用來交換鏈路狀態數據并更新自己的數據庫,直至達到穩定;
(4) 當網絡穩定下來,即OSPF收斂后,每個路由器根據自身的鏈路狀態數據庫的信息,采用SPF(最短路徑優先)算法計算并創建路由表(包括到達每個可以到達目的地的Cost(開銷)及到達該目的地所要轉發的下一個路由器(next-hop));
(5) 當網絡鏈路狀態動態變化時,路由器需要通過上面的過程進行通告,并維護自身的路由信息,若鏈路狀態未發生變化,每隔30 min進行自動更新路由信息。
在Cisco Packet Tracer下,構建如圖1所示網絡拓撲及配置。為R1、R2配置OSPF路由,主要的配置步驟和結果如下:
R1(config)#route ospf 1
R1(config-router)#network 192.168.1.0 0.0.0.255 area 1
R1(config-router)#newwork 202.1.1.0 0.0.0.255 area 1
R2(config)#route ospf 1
R2(config-router)#network 192.168.2.0 0.0.0.255 area 1
R2(config-router)#network 202.1.1.0 0.0.0.255 area 1
R1#show ip route
O 192.168.2.0/24 [110/2] via 202.1.1.2, 00:01:25, FastEthernet0/0
R2#show ip route
O 192.168.1.0/24 [110/2] via 202.1.1.1, 00:01:35, FastEthernet0/0

圖1 單區域OSPF網絡拓撲圖
此時R1的路由表中有一條到達192.168.2.0/24網絡的cost為2、下一跳為202.1.1.2的OSPF路由,R2的路由表中有一條到達192.168.1.0/24網絡的cost為2、下一跳為202.1.1.1的OSPF路由。此時由PC1pingPC2:
PC>ping 192.168.2.2
Reply from 192.168.2.2: bytes=32 time=0ms TTL=126
對ping進行抓包分析:PC1發出的封裝了ICMP的IP包到達路由器R1后,R1轉發給R2,R2轉發給PC2,PC2將響應包轉發給R2,R2將響應包轉發給R1,R1將響應包轉發給PC1,使得PC1 ping通PC2。
接下來進行抓包分析,R1和R2會定期(每隔10 s)發送hello包,該包封裝在IP包中,隨后封裝到Ethernet II幀中進行發送。當網絡穩定下來,即網絡收斂下來后,查看R1發給R2的hello包的Inbound PDU Details信息,主要內容如表1所示,而R2發給R1的hello包主要內容如表2所示。
從表1看出,R1發給R2的hello包,主要向R2通告了R1的RID為202.1.1.1,所屬的AREA ID為0.0.0.1(即1),R1的f0/0端口所在的網段202.1.1.0/24的DR為202.1.1.2,BDR為202.1.1.1,R1的鄰居路由器的RID為202.1.1.2。表2的含義與表1類似,不再贅述。
表1R1發給R2的hello包表2R2發給R2的hello包

ROUTERID:202.1.1.1ROUTERID:202.1.1.2AREAID:0.0.0.1AREAID:0.0.0.1DESIGNATEDROUTER:202.1.1.2DESIGNATEDROUTER:202.1.1.2BACKUPDESIGNATEDROUT?ER:202.1.1.1BACKUPDESIGNATEDROUTER:202.1.1.1NEIGHBOR:202.1.1.2NEIGHBOR:202.1.1.1
另外,需要注意,當OSPF的hello包封裝到IP包中時,目的地址并非是路由器的接口地址,而是組播地址。具體的,R1發送的封裝hello包的IP包的主要內容見表3,R2發送的封裝hello包的IP包的主要內容見表4。
表3R1發送的IP包表4R2發送的IP包

SRCIP:202.1.1.1SRCIP:202.1.1.2DSTIP:224.0.0.5DSTIP:224.0.0.5
從表3和表4看出,組播地址均為224.0.0.5,這是OSPF協議規定的非DR/BDR的路由器工作的組播地址,而224.0.0.6是DR/BDR工作的組播地址。
為減少自治系統內部交換LSA的通信量,OSPF允許在自治系統內進行區域劃分,主要有骨干區域、標準區域、末梢區域(Stub)、完全末梢區域(Total Stub或者Stub no-summary)和非純末梢區域(NSSA),每個區域都有一個32位的無符號數值作為區域ID,骨干區域的ID為0。其它非骨干區域必須與骨干區域相連接,或與骨干區域建立虛鏈路(Virtual Link),每個區域內部的路由器只需要知道本區域的鏈路狀態,骨干區域中的區域邊界路由器負責區域間的信息收發。末梢區域禁止外部AS的信息進入本區域,該區域路由器的路由表中有域內路由和域間路由,無域外路由,去往AS以外的域外路由通過缺省路由實現。完全末梢區域禁止外部AS和本AS內的其它區域的信息進入該區域,該區域路由器的路由表中只有域內路由,無域間路由和域外路由,去往域間和域外的路由通過缺省路由實現。非純末梢區域允許使用路由重分布將OSPF自治系統以外的路由通告到OSPF自治系統的內部。
在Cisco Packet Tracer下,構建如圖2所示網絡拓撲及配置。為路由器配置OSPF路由,A0為骨干區域,A1、A2為標準區域,A3為非純末梢區域,A4為完全末梢區域,A5為末梢區域,這6個區域構成一個OSPF自治系統,而由R6和R7構成一個RIP自治系統。A1未與A0直接連接,需在A1的區域邊界路由器R2與A0的區域邊界路由器R3之間建立virtual-link連接,使A1與A0進行邏輯連接。而R6作為兩個自治系統之間的邊界路由器,需配置路由重分布。配置的主要步驟:
R1(config)#route ospf 1
R1(config-router)#network 1.1.1.1 0.0.0.0 area 1
R1(config-router)#network 202.1.1.0 0.0.0.255 area 1
R2(config)#route ospf 1
R2(config-router)#area 2 virtual-link 3.3.3.3
R2(config-router)#network 2.2.2.2 0.0.0.0 area 2
R2(config-router)#network 202.1.1.0 0.0.0.255 area 1
R2(config-router)#network 202.1.2.0 0.0.0.255 area 2
R3(config)#route ospf 1
R3(config-router)#area 2 virtual-link 2.2.2.2
R3(config-router)#network 3.3.3.3 0.0.0.0 area 0
R3(config-router)#network 202.1.2.0 0.0.0.255 area 1
R3(config-router)#network 202.1.3.0 0.0.0.255 area 0
R3(config-router)#network 202.1.5.0 0.0.0.255 area 3
R4(config)#router ospf 1
R4(config-router)#area 4 stub no-summary
R4(config-router)#area 5 stub
R4(config-router)#network 4.4.4.4 0.0.0.0 area 0
R4(config-router)#network 202.1.3.0 0.0.0.255 area 0
R4(config-router)#network 202.1.4.0 0.0.0.255 area 4
R4(config-router)#network 202.1.6.0 0.0.0.255 area 5
R5(config)#router ospf 1
R5(config-router)#area 4 stub no-summary
R5(config-router)#network 5.5.5.5 0.0.0.0 area 4
R5(config-router)#network 202.1.4.0 0.0.0.255 area 4
R6(config)#router ospf 1
R6(config-router)#area 3 nssa
R6(config-router)#redistribute rip subnets
R6(config-router)#network 6.6.6.6 0.0.0.0 area 3
R6(config-router)#network 202.1.5.0 0.0.0.255 area 3
R6(config)#router rip
R6(config-router)#version 2
R6(config-router)#redistribute ospf 1 metric 5
R6(config-router)#network 202.1.7.0
R7(config)#router rip
R7(config-router)#version 2
R7(config-router)#network 7.0.0.0
R7(config-router)#network 202.1.7.0
R8(config)#router ospf 1
R8(config-router)#area 5 stub

圖2 多區域OSPF網絡拓撲圖
R8(config-router)#network 8.8.8.8 0.0.0.0 area 5
R8(config-router)#network 202.1.6.0 0.0.0.255 area 5
查看R3、R1、R5、R8路由表,其主要的OSPF路由內容如下:
R3#show ip route
O IA 202.1.1.0/24 [110/2] via 202.1.2.2, 01:35:55, FastEthernet0/1
O IA 202.1.4.0/24 [110/2] via 202.1.3.2, 01:36:21, FastEthernet0/0
O IA 202.1.6.0/24 [110/2] via 202.1.3.2, 01:36:21, FastEthernet0/0
O N2 202.1.7.0/24 [110/20] via 202.1.5.2, 01:36:31, FastEthernet1/0
R1#show ip route
O IA 202.1.3.0/24 [110/3] via 202.1.1.2, 01:12:18, FastEthernet0/0
O IA 202.1.4.0/24 [110/4] via 202.1.1.2, 00:00:13, FastEthernet0/0
O IA 202.1.5.0/24 [110/3] via 202.1.1.2, 00:00:13, FastEthernet0/0
O IA 202.1.6.0/24 [110/4] via 202.1.1.2, 00:00:13, FastEthernet0/0
O E2 202.1.7.0/24 [110/20] via 202.1.1.2, 00:00:13, FastEthernet0/0
R5#show ip route
O*IA 0.0.0.0/0 [110/2] via 202.1.4.1, 01:17:46, FastEthernet0/0
R8#show ip route
O IA 202.1.1.0/24 [110/4] via 202.1.6.1, 01:20:56, FastEthernet0/0
O IA 202.1.2.0/24 [110/3] via 202.1.6.1, 01:21:06, FastEthernet0/0
O IA 202.1.3.0/24 [110/2] via 202.1.6.1, 01:21:26, FastEthernet0/0
O IA 202.1.4.0/24 [110/2] via 202.1.6.1, 01:21:26, FastEthernet0/0
O IA 202.1.5.0/24 [110/3] via 202.1.6.1, 01:21:06, FastEthernet0/0
O*IA 0.0.0.0/0 [110/2] via 202.1.6.1, 01:21:26, FastEthernet0/0
不難看出,A3是非純末梢區域,通過R6的路由重分布,使R3獲得RIP自治系統中202.1.7.0/24的路由。A1通過virtual-link與A0邏輯連接,使R1獲得域間路由和域外路由。A4為純末梢區域,則R5只有一條靜態的OSPF路由。A5為末梢區域,使R8獲得域間路由,而域外路由只有一條靜態路由。相應的抓包分析與單區域情況類似,不再贅述。
在使用OSPF的路由器間通告LSA時,可以采用洪泛法,但洪泛法開銷大,為減少開銷,區域中每個網段的路由器可通過hello報文的交互,選舉本網段的DR/BDR(DR失效時BDR起作用),選舉原則是:(1)路由器接口優先級最高和次高的為DR和BDR;(2)若優先級相同,則路由器的ROUTER-ID最大和次大的為DR和BDR(若未指定路由器的RID,則用路由器回環接口Loopback的IP地址作為RID,若未配置回環接口,則用路由器物理端口中最大的IP地址作為RID)。下面分析使用OSPF的網絡選舉DR/BDR的過程。
在Cisco Packet Tracer下,構建如圖3所示網絡拓撲及配置。以R1為例配置OSPF路由,R2、R3、R4的配置與R1類似。
R1(config)#route ospf 1
R1(config-router)#router ospf 1
R1(config-router)router-id 1.1.1.1
R1(config-router)network 202.1.1.0 0.0.0.255 area 0

圖3 選舉BD/BDR網絡拓撲圖
查看R2的鄰居信息,R1、R3、R4與R1類似。
R2#show ip ospf neighbor
Neighbor ID Pri State Dead Time Address Interface
3.3.3.3 1 FULL/BDR 00:00:35 202.1.1.3 FastEthernet0/0
4.4.4.4 1 FULL/DR 00:00:31 202.1.1.4 FastEthernet0/0
1.1.1.1 1 2WAY/DROTHER 00:00:35 202.1.1.1 FastEthernet0/0
不難看出,202.1.1.0/24網段已經選舉出R4為DR,選舉出R3為BDR,二者是該網段中RID最大的路由器。此時進行抓包分析,路由器依次以洪泛法向其它所有路由器發送含有本路由器RID的hello包,每個路由器經過比較收到的hello包中的RID,最終選舉出本網段中的DR/BDR。
上述情況是所有路由器的接口優先級均采用默認優先級(值為1),現將R1的f0/0端口優先級改為2,并重新啟動所有路由器的OSPF進程,查看R2的鄰居信息,結果如下。
R1(config)#interface FastEthernet0/0
R1(config-if)#ip ospf priority 2
R2#show ip ospf neighbor
Neighbor ID Pri State Dead Time Address Interface

圖4 路由分布網絡拓撲圖
1.1.1.1 2 FULL/DR 00:00:34 202.1.1.1 FastEthernet0/0
3.3.3.3 1 2WAY/DROTHER 00:00:34 202.1.1.3 FastEthernet0/0
4.4.4.4 1 FULL/BDR 00:00:37 202.1.1.4 FastEthernet0/0
此時,優先級為2的R1選為DR,其余優先級為1的RID最大的R4選為BDR。在選舉DR/BDR時,還需考慮路由器OSPF進程啟動的順序,若網段的DR/BDR尚未選舉出來,進程已全部啟動,則按照優先級和RID進行選舉;若DR/BDR已經選舉出來,則后啟動OSPF進程的路由器不會改變已經選舉出的DR/BDR。
在某些情況下,OSPF路由器不希望學習從某個指定接口接收來的LSA中的某個網段的路由信息,則可以通過對該路由器進行路由分布配置,禁止學習從指定接口接收來的LSA中的某個網段的路由信息。
在GNS3下,構建如圖4所示網絡拓撲及配置。為路由器配置單區域OSPF路由,R1、R2、R4的配置與單區域配置類似,而R3的配置如下:
R3(config)#access-list 1 deny 202.1.1.0 0.0.0.255
R3(config)#access-list 1 permit any
R3(config)#router ospf 1
R3(config-router)#network 202.1.2.0 0.0.0.255 area 0
R3(config-router)#network 202.1.3.0 0.0.0.255 area 0
R3(config-router)#distribute-list 1 in fastEthernet0/0
通過上述配置,使得R3禁止從其f0/0接口學習202.1.1.0/24網段的路由信息,查看R3、R4的路由表,結果如下:
R3#show ip route
C 202.1.2.0/24 is directly connected, FastEthernet0/0
C 202.1.3.0/24 is directly connected, FastEthernet0/1
R4#show ip route
O 202.1.2.0/24 [110/20] via 202.1.3.1, 00:00:19, FastEthernet0/0
C 202.1.3.0/24 is directly connected, FastEthernet0/0
O 202.1.1.0/24 [110/30] via 202.1.3.1, 00:00:19, FastEthernet0/0
不難發現,R3的路由表中沒有202.1.1.0/24網段的路由信息,已被禁止學習,而R4中學習到了該網段的路由信息。因此,路由分布僅僅本地有效,不影響其他路由器學習。
在使用OSPF時,骨干區域會獲取所有網段的路由通告,當AS較大時,會造成骨干區域路由器路由表龐大,而若某個網段不穩定,又會造成LSA的洪泛。為解決這些問題,可以將網段地址進行匯總,即路由匯總,從而減少路由器路由表的大小,減少LSA洪泛。而域間路由匯總在ABR上實現,外部路由匯總在ASBR上實現。
在GNS3下,構建如圖5所示網絡拓撲及配置。在配置OSPF路由時,R1、R2構成area0,R2、R3、R4、R5構成area1,R1、R3、R4、R5的配置與多區域配置類似,而區域邊界路由器R2的配置如下。
R2(config)#router ospf 1
R2(config-router)#network 212.1.1.0 0.0.0.255 area 0
R2(config-router)#network 202.1.1.0 0.0.0.255 area 1
R2(config-router)#area 1 range 202.1.0.0 255.255.248.0

圖5 域間路由匯總網絡拓撲圖
通過上述配置,將area1中的202.1.1.0/24、202.1.2.0/24、202.1.3.0/24、202.1.4.0/24四個網段匯總為202.1.0.0/21。查看R1的路由表,結果如下:
R1#show ip route
C 212.1.1.0/24 is directly connected, FastEthernet0/0
O IA 202.1.0.0/21 [110/20] via 212.1.1.1, 00:00:21, FastEthernet0/0
不難發現,經過邊界路由器R2的路由匯總,R1的路由表只有一條匯總后的網段路由信息,并沒有area1中四個網段的路由信息。若沒有R2的路由匯總,則R1的路由表就會有area1中4個網段的路由信息。
本文在Cisco Packet Tracer和GNS3仿真環境下,對OSPF路由進行了較深入的研究。通過設計簡單的網絡拓撲,對單區域OSPF路由、多區域OSPF路由、DR/BDR的選舉、路由分布和域間路由匯總進行配置,并通過抓包分析OSPF的通告情況,從而對路由器使用OSPF進行路由選擇進行較深入的分析研究,形成了明確的分析結論。這些分析和結論既可以作為學習的參考,又可以指導實物環境下路由器的OSPF路由設置,從而解決OSPF路由配置的相關問題。
[1] 李丙春,王文龍,劉 靜,等.路由與交換技術[M].北京:電子工業出版社,2016.
[2] 付承彪,田安紅.兩種動態路由協議分析及其實驗設計與仿真[J].實驗技術與管理,2016(7):140-144.
[3] 馬素剛.路由協議OSPF的研究與仿真[J].計算機系統應用,2016(5):228-231.
[4] 史玉鋒,趙 燕,李 明.解析ospf協議中常用的7類LSA[J].電子測試,2016(1):39-40.
[5] 劉小虎,張玉臣,方青坡,等.半實物網絡仿真動態路由方案設計與實現[J].系統仿真學報,2015(9):2089-2095.
[6] 李 永,甘新玲. 基于Packet Tracer的路由綜合實驗設計與實現[J]. 實驗室研究與探索,2015(9):111-114.
[7] 李林林,孫良旭,吳建勝,等. 單機環境下路由交換技術綜合實驗設計[J]. 實驗室研究與探索,2015(8):115-118.
[8] 曹騰飛,孟永偉,黃建強,等. 西部高校計算機網絡實驗[J]. 實驗室研究與探索,2015(4):129-131,140.
[9] 陳 偉.基于仿真技術的OSPF動態路由的應用研究[J].長江大學學報(自然科學版),2011(9):87-89+9.
[10] 楊振啟,楊云雪.OSPF協議中ABR動態選舉研究[J].計算機工程,2011(13):80-82.
[11] 肖 陽,楊媛媛.OSPF的區域類型、路由類型和末梢區域的配置[J].信息安全與技術,2011(4):21-23+26.
[12] 王 東.OSPF路由協議在多區域中的應用[J].重慶科技學院學報(自然科學版),2010(2):172-174.
[13] 杜宇揚.OSPF協議動態配置技術研究[J].西安郵電學院學報,2010(1):134-138,147.
[14] 柴 晟,羅傳軍,羅惠瓊.自治系統內部路由的仿真實驗分析[J].微計算機信息,2007(18):235-236,229.
[15] 張春青,張宏科.OSPF動態路由協議中的路由計算[J].北方交通大學學報,2003(3):100-103.
[16] 嚴斌宇,盧 葦,黃 銳.OSPF路由選擇協議的研究[J].四川大學學報(自然科學版),2002(3):460-464.
[17] 張春青,張宏科.OSPF動態路由技術的研究與實現[J].通信世界,2002(1):50-51.