李春平,葉裴雷,許碧雅,朱婷婷
(廣東白云學院大數據與計算機學院,廣州 510000)
隨著互聯網的迅速發展,互聯網終端用戶呈現爆發式增長,導致傳統的標識互聯網主機的IPv4地址資源緊張[1]。這是由于IPv4網絡協議采用的是32位IP地址結構。一方面,IPv4協議結構中沒有設計專門進行安全性驗證的字段,只有簡單的頭部校驗和驗證,因此IP數據包在傳輸過程中存在安全隱患,容易被截獲和篡改,導致數據完整性失效。解決這些問題的最終辦法是使用新的128位地址結構的IPv6協議替代傳統的IPv4協議[2]。
另一方面,數據包在網絡傳輸過程中,需要尋找最佳途徑將數據包轉發到目的地,擔任轉發任務的通常是路由器或三層交換機之類的三層設備。為了找到最佳路由,在路由器上需要執行路由算法,例如RIP、OSPF、BGP等不同的路由協議[3]。RIP是基于距離矢量的路由協議,由于跳數限制,通常應用在中小規模的網絡中,BGP是一種邊界網關協議[4],通常運行在自治系統邊界路由器上。而OSPF是另一種內部網關協議,它基于鏈路狀態,采用最短路徑優先算法,實現快速收斂,能在大型網絡中部署。目前有兩個常用的版本OSPFv2(OSPF版本2)和OSPFv3(OSPF版本3)。OSPFv2是用來支持IPv4網絡,OSPFv3用來支持IPv6網絡[5]。因為IPv6將在未來代替IPv4協議,因此本文討論基于IPv6的OSPF路由協議。
OSPF有3個主要組件:數據結構、路由協議消息和算法。
(1)數據結構。OSPF路由器數據結構包括鄰接數據庫、鏈路狀態數據庫(LSDB)、轉發數據庫,對應著鄰居表、拓撲表和路由表等3張表。
(2)路由協議消息。OSPF消息通常封裝在IP數據包中,OSPF數據包類型主要由Hello、數據庫描述(DBD)、鏈路狀態請求(LSR)、鏈路狀態更新(LSU)、鏈路狀態確認(LSACK)組成[6]。
(3)算法。OSPF采用SPF(Shortest Path First)算法即最短路徑優先算法計算路由,以達到路由快速收斂的目的。
當路由器運行OSPF路由進程時,它會依次進行以下操作:發現鄰居并與之建立建立鄰接關系;交換路由信息;計算最佳路由;實現收斂。
OSPF在嘗試實現收斂時會進入幾種狀態:Down狀態、Init狀態、Two-Way狀態、ExStart狀態、Exchange狀態、Loading狀態和Full狀態。
(1)建立鄰接關系。當運行了OSPF的相鄰路由器收到一個Hello數據包,路由器會對照自己的鄰居表,檢查這個Hello數據包中的路由器ID,如果鄰居表中沒有存儲這個ID信息,接收路由器將把這個源路由器ID作為鄰居添加到鄰居表中,以此建立鄰接關系。
(2)交換路由信息。在多接入網絡中,OSPF會選擇出一個DR作為所收發LSA的收集與分發點。如果DR發生故障,則會選擇BDR。在Two-Way狀態之后,路由器轉變為數據庫同步狀態。
(3)計算最佳路由。OSPF根據鏈路狀態數據庫里面的內容,利用SPF算法,計算到每一個目的網絡度量值,從中選取最小值作為首選路由,添加到路由表中。
(4)實現收斂。當整個OSPF區域中的所有路由器都對網絡拓撲有了統一的認識,既沒有新的路由器增加,也沒有路由器從中刪除,路由器中所有路由條目都彼此交換完成的過程,這個時候鄰居表、鏈路狀態數據庫和路由表達到穩定,這個過程叫收斂。OSPF能夠實現快速收斂,在小型網絡中,收斂時間一般在5秒內。
OSPF可以使用單區域OSPF或多區域OSPF兩種方式之一進行實施。
如前所述,OSPF路由協議從發現鄰居到交換鏈路狀態信息直至建立路由表,最后達到收斂,是一個完整的過程。OSPF在執行SPF算法和存儲鄰居表、拓撲表、路由表這3張表是以占用路由器CPU和內存資源為代價,這種機制是無法規避的,當網絡規模變得龐大時,路由表也會變大,同時路由器計算量也會增加,路由器資源消耗會越來越大。這將會導致網絡可用性降低,穩定性變差。因此,為了提高網絡的可用性,增強網絡穩定性,在中大型網絡中部署OSPF路由協議時要將路由優化的技術和方法考慮進來[7]。
單區域OSPF如果沒有匯總路由,每臺路由器必須保留關于路由域中的每個網絡的詳細信息,因此路由表會變得非常大。采用多區域OSPF的好處是:路由表減小、鏈路狀態更新開銷降低、SPF計算次數減少,從而帶來路由綜合性能的提升[8]。
路由器ID采用32位結構,格式與IPv4地址相同,它所顯示的形式是x.x.x.x。啟用了OSPF路由進程的路由器使用路由器ID來唯一標識路由器和參與DR的選擇。路由器ID基于以下3個標準之一確定:①使用OSPF router-id rid配置命令明確定義;②如果沒有明確定義router-id,路由器將選擇所有已配置環回接口的最高IPv4地址;③如果未配置環回接口,則路由器會選擇其所有物理接口的最高活動IPv4地址。
為了正確選舉每個區域中的DR,防止在同等優先級的情況下搶占DR權利,導致路由信息在網絡中過多傳播,可自定義路由器ID。
同樣的,在IPv6接口上啟用OSPF之前,OSPFv3需要分配一個32位路由器ID。使用router-id rid命令可以在OSPFv3中定義路由器ID。
在LAN環境中,末節網絡通常不需要接收路由器發來的路由更新通知,以免造成不必要的帶寬資源浪費和安全隱患。為了防止OSPF路由更新通過指定路由器端口發送,向不必要的網絡擴散,可以配置OSPF被動接口來完成指定路由更新通知,以減少LAN的流量。
使用passive-interface路由器配置模式命令防止通過路由器接口傳輸路由消息,但是仍允許通過該接口接收路由信息,并通告給其他路由器。在被動接口上無法建立鄰居鄰接關系。因此,路由器接口一旦配置為被動接口,則該接口通常連接到末節網絡[9]。
包括更改路由器參考帶寬、更改接口帶寬、更改路由開銷,以適應具體的網絡,使路由器與網絡匹配,從而改善網絡綜合性能[10]。
路由重分布的作用是在路由器上轉換路由協議類型和格式,以實現不同的路由協議之間的路由信息交換。例如,在一個運行RIP和OSPF兩種不同路由協議的網絡中,可以將RIP重分布到OSPF協議中。在同時配置有直連路由、默認路由、動態路由的網絡中,可以通過重分布,將直連路由和默認路由傳播到整個網絡中,提高配置效率。
如圖1所示,建立OSPFv3多區域網絡,由area0、area1、area2共3個區域組成內部網絡,其中area0為骨干區域。區域area1、area2分別與骨干區域area0相連。多區域網絡中共有R1、R2、R3、R4共4臺路由器,用ISP路由器模擬外部網絡路由器。內部網絡路由器上運行OSPFv3路由協議,內網與外網之間部署靜態默認路由。

圖1 IPv6多區域網絡拓撲圖
設備地址分配如表1所示。

表1 IPv6地址規劃

R2 R3 R4 ISP PC0 PC1 PC2 PC3 SERVER0 G0/0 G0/1 S0/0/0 G0/0 G0/1 G0/0 G0/1 G0/2 S0/0/0 G0/0 NIC NIC NIC NIC NIC 2021:1212::2/64 EUI-64 2021:2323::1/64 EUI-64 2019:2525::1/64 2021:3434::1/64 2021:2323::2/64 2021:3434::2/64 2020:2222::1/64 2020:3333::1/64 2019:2525::2/64 2018:1111::1/64 SLAAC SLAAC SLAAC SLAAC SLAAC N/A N/A N/A N/A N/A N/A N/A N/A N/A N/A SLAAC SLAAC SLAAC SLAAC SLAAC
3.3.1 R1配置
Router(config)#hostname R1
R1(config)#interface g0/0
R1(config-if)#ipv6 address 2021:1212::1/64
R1(config-if)#no shutdown
R1(config-if)#interface t g0/1
R1(config-if)#ipv6 address 2017:1111::1/64
R1(config-if)#no shutdown
R1(config-if)#interface g0/2
R1(config-if)#ipv6 address 2017:1122::1/64
R1(config-if)#no shutdown
3.3.2 R2配置
Router(config)#hostname R2
R2(config)#interface g0/0
R2(config-if)#ipv6 address 2021:1212::2/64
R2(config-if)#no shutdown
R2(config-if)#interface g0/1
R2(config-if)#ipv6 address 2021:2323::1/64
R2(config-if)#no shutdown
R2(config-if)#interface s0/0/0
R2(config-if)#ipv6 address 2019:2525::1/64
R2(config-if)#no shutdown
3.3.3 R3配置
Router(config)#hostname R3
R3(config)#interface g0/0
R3(config-if)#ipv6 address 2021:3434::1/64
R3(config-if)#no shutdown
R3(config-if)#interface g0/1
R3(config-if)#ipv6 address 2021:2323::2/64
R3(config-if)#no shutdown
3.3.4 R4配置
Router(config)#hostname R4
R4(config)#interface g0/0
R4(config-if)#ipv6 address 2021:3434::2/64
R4(config-if)#no shutdown
R4(config-if)#interface g0/1
R4(config-if)#ipv6 address 2020:2222::1/64
R4(config-if)#no shutdown
R4(config-if)#interface g0/2
R4(config-if)#ipv6 address 2020:3333::1/64
R4(config-if)#no shutdown
3.3.5 ISP配置
Router(config)#hostname ISP
ISP(config)#interface g0/0
ISP(config-if)#ipv6 address 2018:1111::1/64
ISP(config-if)#no shutdown
ISP(config-if)#interface s0/0/0
ISP(config-if)#ipv6 address 2019:2525::2/64
ISP(config-if)#no shutdown
3.4.1 規劃OSPF多區域
本實例中,由area0、area1、area2共3個區域組成內部網絡,其中area0為骨干區域。每個常規區域均與骨干區域相連。通過在路由器上執行ipv6 ospf process-id area area-id命令配置路由器所在區域。
3.4.2 重新定義路由器ID
以R1路由器配置為例,多區域網絡中其它路由器可參照R1配置。
R1(config)#ipv6 unicast-routing
R1(config)#ipv6 router ospf 1
R1(config-rtr)#router-id 1.1.1.1
3.4.3 配置被動接口
在路由器連接末節網路的接口上執行passive-interface interface-id,配置被動接口。
R1路由器上的末節網絡配置被動接口:
R1(config-rtr)#passive-interface g0/1
R1(config-rtr)#passive-interface g0/2
R4路由器上的末節網絡配置被動接口:
R4(config-rtr)#passive-interface g0/1
R4(config-rtr)#passive-interface g0/2
3.4.4 更改OSPF度量
以R1路由器配置為例,多區域網絡中其它路由器可參照R1配置。
(1)修改參考帶寬值。
R1(config-rtr)#auto-cost reference-bandwidth 1000
R1(config-rtr)#exit
(2)修改開銷值。
R1(config)#int g0/0
R1(config-if)#ipv6 ospf 1 area 1
R1(config-if)#ipv6 ospf cost 500
(3)修改hello-interval與dead-interval值。
R1(config-if)#ipv6 ospf hello-interval 4
R1(config-if)#ipv6 ospf dead-interval 24
3.4.5 執行路由重分布
(1)配置訪問外網的靜態默認路由。與外網的通信是通過R2路由器連接的,因此在R2上配置靜態路由。
R2(config)#ipv6 unicast-routing
R2(config)#ipv6 route::/0 Serial0/0/0//配置訪問外網的靜態默認路由
(2)傳播靜態默認路由。為了將R2上部署的靜態路由傳播到內網其它路由器上,減少在其它路由器上的重復配置,在R2上執行重分布路由命令。
R2(config)#ipv6 router ospf 2
R2(config-rtr)#router-id 2.2.2.2
R2(config-rtr)#auto-cost reference-bandwidth 1000
R2(config-rtr)#default-information originate//傳播默認路由
(3)重分布直連路由。可在R4上執行重分布直連路由,將area2外的直連路由傳播到其它區域路由器的路由表上。
R4(config)#ipv6 unicast-routing
R4(config)#ipv6 router ospf 4
R4(config-rtr)#router-id 4.4.4.4
R4(config-rtr)#redistribute connected//重 分 布 直 連路由
3.5.1 在R2上查看鄰居建立情況
可以看到R2的鄰居ID分別為1.1.1.1與3.3.3.3,這兩個ID分別是R1、R3路由器的,說明R2與R1、R3相鄰。

圖2 R2鄰居表信息
3.5.2 查看鏈路狀態數據庫
在R2上執行show ipv6 ospf database時,會顯示出鏈路狀態數據庫即拓撲情況。該信息與實際網絡拓撲相關,信息可能會比較長。本實驗截取部分顯示。

圖3 R2拓撲表信息
3.5.3 查看路由表
通過執行show ipv6 route命令,可以查看路由表情況,IPv6路由表已經建立起來。

圖4 R2路由表信息
3.5.4 連通性測試
在配置了OSPFv3路由協議并進行優化之后,對全網連通性進行測試。在終端PC及服務器上設置好IPv6參數,主機之間通過命令來測試連通性。
PC0 ping PC2,回顯結果如下:
C:>ping 2020:2222::20d:bdff:fe77:64d2
Pinging 2020:2222::20d:bdff:fe77:64d2 with 32 bytes of data:
Reply from 2020:2222::20D:BDFF:FE77:64D2:bytes=32 time=1ms TTL=124
Reply from 2020:2222::20D:BDFF:FE77:64D2:bytes=32 time<1ms TTL=124
Reply from 2020:2222::20D:BDFF:FE77:64D2:bytes=32 time<1ms TTL=124
Reply from 2020:2222::20D:BDFF:FE77:64D2:bytes=32 time=13ms TTL=124
Ping statistics for 2020:2222::20D:BDFF:FE77:64D2:
Packets:Sent=4,Received=4,Lost=0(0%loss),
Approximate round trip times in milli-seconds:
Minimum=0 ms,Maximum=13 ms,Average=3 ms
由上可見,內網是連通的。再測試內網和外網的連通性。
PC0 ping SERVER0,回顯結果如下:
C:>ping 2018:1111::209:7cff:fe49:79c
Pinging 2018:1111::209:7cff:fe49:79c with 32 bytes of data:
Reply from 2018:1111::209:7CFF:FE49:79C:bytes=32 time=12ms TTL=125
Reply from 2018:1111::209:7CFF:FE49:79C:bytes=32 time=1ms TTL=125
Reply from 2018:1111::209:7CFF:FE49:79C:bytes=32 time=1ms TTL=125
Reply from 2018:1111::209:7CFF:FE49:79C:bytes=32 time=1ms TTL=125
Ping statistics for 2018:1111::209:7CFF:FE49:79C:
Packets:Sent=4,Received=4,Lost=0(0%loss),
Approximate round trip times in milli-seconds:
Minimum=1 ms,Maximum=12 ms,Average=3 ms
PC2 ping SERVER0,回顯結果如下:
C:>ping 2018:1111::209:7cff:fe49:79c
Pinging 2018:1111::209:7cff:fe49:79c with 32 bytes of data:
Reply from 2018:1111::209:7CFF:FE49:79C:bytes=32 time=61ms TTL=124
Reply from 2018:1111::209:7CFF:FE49:79C:bytes=32 time=3ms TTL=124
Reply from 2018:1111::209:7CFF:FE49:79C:bytes=32 time=1ms TTL=124
Reply from 2018:1111::209:7CFF:FE49:79C:bytes=32 time=2ms TTL=124
Ping statistics for 2018:1111::209:7CFF:FE49:79C:
Packets:Sent=4,Received=4,Lost=0(0%loss),
Approximate round trip times in milli-seconds:
Minimum=1 ms,Maximum=61 ms,Average=16 ms
通過從不同區域內的主機發送ping包到服務器,均能收到服務器的響應,說明全網已連通。
通過分析當前多區域網絡中運行OSPF協議存在的問題,給出了在IPv6多區域網絡環境下部署OSPF路由協議優化的技術與方法,該方法可解決大規模網絡中部署OSPF存在路由性能降低的問題。給出了一個完整的案例,按文中提出的優化方法進行了實踐部署,并進行了驗證,取得了較好的效果,具有一定的應用和借鑒意義。