關(guān)鍵詞:軟件定義網(wǎng)絡(luò);OpenFlow;負載均衡;實驗教學;Mininet;人才培養(yǎng)
0 引言
為了滿足培養(yǎng)創(chuàng)新型人才的需要,專業(yè)課程實驗教學正經(jīng)歷著從被動到主動、從單一到多層次的演變[1]。在高級計算機網(wǎng)絡(luò)的實驗教學中,迫切需要將課程內(nèi)容與網(wǎng)絡(luò)應(yīng)用技術(shù)相結(jié)合,設(shè)計具有綜合型和創(chuàng)新型的實驗。盡管驗證分析型實驗在幫助學生理解網(wǎng)絡(luò)工作原理方面發(fā)揮著重要作用,但缺少設(shè)計和創(chuàng)新,難以與實際網(wǎng)絡(luò)應(yīng)用有效銜接。綜合設(shè)計型實驗?zāi)軐⒅R的連貫性和靈活多樣性相結(jié)合,幫助學生由淺入深,系統(tǒng)地運用計算機網(wǎng)絡(luò)知識和技術(shù),有利于培養(yǎng)學生解決復(fù)雜工程問題的能力,滿足培養(yǎng)創(chuàng)新型人才的需要[2]。但是,綜合設(shè)計型實驗面向不同應(yīng)用,需要的設(shè)備多且網(wǎng)絡(luò)規(guī)模較大,通信過程較為復(fù)雜。因為網(wǎng)絡(luò)設(shè)備昂貴且更新快,實驗室設(shè)備有限,難以支持學生完成復(fù)雜的綜合設(shè)計型實驗[3]。Mininet 作為一種輕量級的網(wǎng)絡(luò)仿真平臺[4],具有開源性,可以在已有模塊基礎(chǔ)上編程實現(xiàn)新功能。Mininet無須昂貴的硬件平臺,在一臺PC上就能夠模擬一個完整的網(wǎng)絡(luò)系統(tǒng),為開設(shè)綜合設(shè)計型網(wǎng)絡(luò)實驗提供了很好的支持。本文以基于SDN的鏈路負載均衡為例,介紹如何設(shè)計并實施這一綜合設(shè)計型實驗。該實驗涵蓋了路由技術(shù)、OpenFlow協(xié)議、SDN拓撲探測以及性能參數(shù)的測量和計算等多個方面的知識和技術(shù),旨在全面提升學生的網(wǎng)絡(luò)實踐能力和創(chuàng)新意識。
1 相關(guān)技術(shù)
1.1 SDN 技術(shù)
SDN對傳統(tǒng)網(wǎng)絡(luò)架構(gòu)進行重構(gòu),解耦網(wǎng)絡(luò)控制與轉(zhuǎn)發(fā)功能,使數(shù)據(jù)平面與控制平面分離,將分布式控制轉(zhuǎn)換為集中控制[5]。SDN架構(gòu)如圖1所示。
SDN架構(gòu)中,控制器是控制平面的核心組件,控制器通過南向接口獲取和維護數(shù)據(jù)平面的網(wǎng)絡(luò)狀態(tài)信息,并向SDN交換機下發(fā)控制策略,對交換機的轉(zhuǎn)發(fā)行為實施控制??刂破魍ㄟ^北向接口將相關(guān)信息提供給網(wǎng)絡(luò)控制應(yīng)用程序,從而實現(xiàn)不同SDN網(wǎng)絡(luò)應(yīng)用。
根據(jù)上層應(yīng)用與業(yè)務(wù)的不同需求,控制器可以靈活定義數(shù)據(jù)平面SDN交換機的功能,實現(xiàn)對不同數(shù)據(jù)包的解析、路由策略匹配與轉(zhuǎn)發(fā)調(diào)度。通過軟件編程,在邏輯上使SDN交換機具有傳統(tǒng)交換機、路由器和防火墻等網(wǎng)絡(luò)設(shè)備的功能[6]。
1.2 OpenFlow 協(xié)議
OpenFlow是為SDN控制器和交換機之間信息交互而設(shè)計的南向接口協(xié)議[7]。交換機與控制器之間相互發(fā)送HELLO報文協(xié)商OpenFlow版本;通過FEATURE_REQUEST/REPLY 和MULTIPART_REQUEST/REPLY 報文的交互,控制器獲取交換機特征和狀態(tài)信息;交換機將不知如何處理的數(shù)據(jù)包封裝在PACKET_IN報文中發(fā)送給控制器;控制器通過FLOW_MOD報文下發(fā)流表指示交換機進行處理;控制器可以發(fā)送PACKET-OUT報文指示交換機洪泛數(shù)據(jù)包;通過交互ECHO_REQUEST/REPLY報文進行?;睿部梢赃M行時延測量。
OpenFlow將傳統(tǒng)數(shù)據(jù)平面中的MAC地址表和路由表等都抽象成流表。流表是OpenFlow交換機的核心數(shù)據(jù)結(jié)構(gòu),是交換機處理數(shù)據(jù)包的依據(jù)。
1.3 鏈路負載均衡
負載均衡的目標是將流量均勻地分布在多條鏈路上,有效地利用網(wǎng)絡(luò)資源,避免高負載流量導(dǎo)致的網(wǎng)絡(luò)擁塞[8]。
傳統(tǒng)網(wǎng)絡(luò)中存在硬件設(shè)備成本高、架構(gòu)復(fù)雜等問題,實施負載均衡不容易部署。SDN具有集中控制和可編程特點,使控制器能夠動態(tài)收集全局網(wǎng)絡(luò)狀態(tài)信息,制定負載均衡策略,根據(jù)實時網(wǎng)絡(luò)狀態(tài)信息來優(yōu)化路由選擇,通過下發(fā)流表控制負載流量分布,使數(shù)據(jù)包沿著最佳路徑傳輸。
2 實驗設(shè)計
本實驗設(shè)計旨在通過軟件定義網(wǎng)絡(luò)(SDN) 實現(xiàn)鏈路負載均衡。具體而言,實驗涉及網(wǎng)絡(luò)拓撲探測、性能參數(shù)計算以及路由計算3個核心環(huán)節(jié)。
2.1 探測網(wǎng)絡(luò)拓撲
SDN控制器使用鏈路層發(fā)現(xiàn)協(xié)議(Link Layer Dis?covery Protocol,LLDP) 探測網(wǎng)絡(luò)拓撲結(jié)構(gòu)[9]。SDN 控制器將LLDP包封裝在PACKET_OUT報文中發(fā)送給直連交換機A。A洪泛LLDP包,其鄰居交換機B接收到LLDP包后,查找流表,根據(jù)匹配table-miss流表項(其動作是Output=CONTROLLER) 的指定動作將LLDP 包封裝在PACKET_IN 報文中發(fā)送給控制器??刂破魍ㄟ^解析PACKET_IN中的LLDP包,即可獲知一臺交換機A與相鄰交換機B之間的連接拓撲,并將拓撲信息保存起來。如此操作,控制器可以發(fā)現(xiàn)所有交換機的連接情況,從而獲得全局網(wǎng)絡(luò)拓撲,并將拓撲信息存儲到有向圖數(shù)據(jù)結(jié)構(gòu)中。
2.2 性能參數(shù)計算
鏈路帶寬和時延是路由計算的重要依據(jù)。
1) 帶寬計算。SDN 控制器定期向交換機發(fā)送OpenFlow 的PORT_STATISTICS_REQUEST 報文請求交換機的端口信息。交換機將自己端口所接收和發(fā)送的數(shù)據(jù)包數(shù)量、端口接收和發(fā)送的字節(jié)數(shù)等信息封裝在PORT_STATISTICS_REPLY報文中,作為對請求報文的應(yīng)答發(fā)送給控制器。控制器根據(jù)端口信息即可計算鏈路帶寬。
若用B(Pi,t)和B(Pi,t-Δt)分別表示出端口Pi在t 和t-Δt 時刻發(fā)送的總字節(jié)數(shù),用Δt 表示時間間隔,那么pi在t 時刻的實時速率SP(Pi,t)可用公式(1)計算。根據(jù)出端口Pi最大可用帶寬BW(Pi),可以計算pi在t 時刻的剩余帶寬BW(Pi,t),如公式(1)所示。
2) 時延計算。為了獲取交換機s1和s2之間的鏈路時延,控制器c 向交換機s1 發(fā)送帶時間戳的PACKET_OUT報文,交換機s1轉(zhuǎn)發(fā)報文到交換機s2,s2將該報文再發(fā)送給控制器,控制器即可計算c經(jīng)過s1到s2再到c的時延tc_s1_s2_c。類似地,可以得到c經(jīng)過s2到s1再到c的時延tc_s2_s1_c。為了獲取交換機s1到s2 的時延,c向s1發(fā)送時間戳ECHO_REQUEST報文,s1 復(fù)制時間戳到ECHO_REPLY報文中,并發(fā)送給c??刂破骷纯捎嬎鉩到s1的往返時延RTTc_s1。同樣,可以獲取c到s2的往返時延RTTc_s2,用RTTs1_s2表示s1到s2 的往返時延,時間關(guān)系用公式3表示。使用公式4計算交換機s1到s2的時延ts1_s2。
以上計算得到了交換機之間的一段鏈路性能參數(shù),某一路由的剩余帶寬和時延,還需要做進一步計算。一條路由中的最小鏈路剩余帶寬即為該路由的剩余帶寬;將路由中每段鏈路的時延相加即可得到該路由的時延。
2.3 路由計算
Dijkstra是加權(quán)有向圖中計算單源最短路徑的經(jīng)典算法。在傳統(tǒng)計算機網(wǎng)絡(luò)中,把鏈路開銷定義為圖中邊的權(quán)重,使用Dijkstra算法計算自源節(jié)點到所有其他節(jié)點的最低開銷路徑,從而構(gòu)造一棵最短路徑樹。Dijkstra算法只是基于跳數(shù)計算最短路由,并沒有考慮鏈路帶寬、時延等網(wǎng)絡(luò)狀態(tài)信息。若網(wǎng)絡(luò)拓撲不變,則計算的最佳路由將保持不變,這會導(dǎo)致網(wǎng)絡(luò)負載極不平衡,負載量大的時候則可能產(chǎn)生網(wǎng)絡(luò)擁塞。
K最短路徑(K-Short-Path,KSP) 算法把求最短路徑優(yōu)化為求K條最短路徑,基于Dijkstra算法計算最短路徑、次短路徑 …… 第K條最短路徑。本實驗方案使用KSP算法,選擇時延或者帶寬作為鏈路權(quán)重,從K 條最短路由中篩選滿足負載均衡需求的最佳路由。
控制器將負載均衡轉(zhuǎn)發(fā)策略轉(zhuǎn)換為流表項,通過發(fā)送FLOW_MOD報文下發(fā)流表項給SDN交換機。
3 實驗與結(jié)果分析
在虛擬機VMware? Workstation 12 Pro, V12.5.2上安裝Ubuntu 16.04 LTS 操作系統(tǒng)。在虛擬仿真平臺Mininet 2.3.0上進行實驗測試與分析,使用開源控制器RYU v4.34進行集中化網(wǎng)絡(luò)管理,采用OpenFlow作為南向接口協(xié)議。在實驗過程中,要求學生思考分析遇到的問題,找出解決問題的方法,并獨立完成實驗。
3.1 實驗拓撲
在Mininet 網(wǎng)絡(luò)仿真平臺上構(gòu)建胖樹拓撲結(jié)構(gòu)如圖2所示,對數(shù)據(jù)中心網(wǎng)絡(luò)進行模擬。
該網(wǎng)絡(luò)包含1個控制器(c0) 、10個交換機(s1~s10) 和8個主機(h1~h8) ,每個交換機下掛2臺主機。交換機s3 到s5、s4 到s6、s7 到s8、s9 到s10、s1 到s3、s1 到s7、s2到s4、s2到s9以及所有交換機與主機的鏈路帶寬設(shè)置為2Mb/s,時延設(shè)置為2ms。交換機s1到s4、s1 到s9、s2到s3、s2到s7、s3到s6、s7到s10的鏈路帶寬為3Mb/s,時延為3ms。交換機s4到s5、s9到s8的鏈路帶寬為4Mb/s,時延設(shè)置為4ms。主機h1的IP地址設(shè)置為10.0.0.1,主機h2的IP地址為10.0.0.2 …… 以此類推,主機h8的IP地址為10.0.0.8。
3.2 結(jié)果分析
運行命令“ryu-manager sf.py --observe-links --k-paths=2 --weight=bw”啟動RYU控制器。其中,sf.py 為基于RYU開放源碼編寫的程序。
1) 最佳路由選擇分析。使用ping命令進行連通性測試,分別選擇帶寬和時延作為鏈路權(quán)重時,分析最佳路由選擇情況。
當選擇帶寬作為鏈路權(quán)重時,執(zhí)行命令“h1 pingh4”,得到了主機h1到h4的最佳路由為[5, 4, 6]。由網(wǎng)絡(luò)拓撲可知,主機h1到h4有[5, 3, 6]和[5, 4, 6]兩條路由,區(qū)別在于交換機s3到s6之間的路由鏈路帶寬為3Mb/s,交換機s5到s4之間的路由鏈路帶寬為4Mb/s。顯然,轉(zhuǎn)發(fā)策略選擇了鏈路帶寬較大的一條路由作為最佳路由。
當選擇時延為鏈路權(quán)重時,h1 ping h4得到主機h1到h4的最佳路由為[5, 3, 6]。由拓撲可知,主機h1 到主機h4的兩條路由中,[5, 3, 6]路由上交換機s3到s6的鏈路時延為3ms,交換機s5到s4的鏈路時延為4ms。顯然,轉(zhuǎn)發(fā)策略選擇了時延較小的路由作為最佳路由。
2) 鏈路負載均衡策略分析。指定主機h8為服務(wù)器端,兩個客戶端h1和h2主機使用iperf命令一前一后向服務(wù)器端打流,以此觀察路由選擇的變化,驗證是否能根據(jù)鏈路的實際流量進行路由調(diào)整。
選擇鏈路權(quán)重為帶寬時,在服務(wù)器端h8中運行命令“iperf -s -p 6633 -i 1”,以服務(wù)器模式啟動iperf,服務(wù)器使用端口6633,報告回顯時間間隔為1s。在主機h1上運行命令“iperf -c 10.0.0.8 -p 6633 -t 20 -i 1”,以客戶端模式啟動iperf,報告回顯時間間隔為1s。9 秒后,再運行主機h2的iperf命令。測試觀察主機h1 到h8,以及主機h2到h8的最佳路由。剛開始,主機h1 運行iperf命令后,得到主機h1到h8的最佳路由為[5,4, 2, 7, 16]。9秒后,主機h2到主機h8的最佳路由為[5, 4, 2, 7, 16],兩條最佳路由完全相同。負載集中勢必造成鏈路擁塞,根據(jù)負載均衡策略,其中一條路由應(yīng)該調(diào)整轉(zhuǎn)發(fā)策略。主機h1到h8的路由根據(jù)實時網(wǎng)絡(luò)狀態(tài)信息調(diào)整為[5, 4, 1, 7, 16]。由網(wǎng)絡(luò)拓撲可知,這也是最佳路由。
同時,觀察服務(wù)器端主機h8的iperf運行情況。如圖3所示,在前9個時間間隔(即9秒)內(nèi),只有h1發(fā)送數(shù)據(jù);在第9個時間間隔后,由于h2執(zhí)行iperf命令,h2 開始發(fā)送數(shù)據(jù)。在s10與主機h8之間的鏈路最大帶寬為2Mb/s情況下,前9個時間間隔(interval) 的帶寬近似為2Mb/s;第9個時間間隔后,二條路由的帶寬之和近似為2Mb/s,例如,第一條路由在第12個時間間隔時帶寬為1.39Mb/s,此時第二條路由在第3個時間間隔的帶寬為429Kb/s,二者相加為1819Kb/s,近似為2Mb/s。
類似地,當鏈路權(quán)重選擇為時延時,對主機h1、h2 一前一后向h8打流,主機h2向主機h8打流晚10秒鐘??梢杂^察到,h1和h2到h8的路由均為[5, 3, 1, 7,16]。h1根據(jù)實時網(wǎng)絡(luò)狀態(tài)信息調(diào)整轉(zhuǎn)發(fā)策略,到h8 的路由調(diào)整為[5, 3, 1, 9, 16]。這兩條路由的時延相同,都是最佳路由。
實驗過程和結(jié)果表明,實驗方案是有效可行的,能夠?qū)︽溌返膶崟r狀態(tài)信息進行監(jiān)測,并及時對轉(zhuǎn)發(fā)策略做出適當調(diào)整,達到了負載均衡的目的。
4 結(jié)束語
以基于SDN的鏈路負載均衡實驗為例,探討了高級計算機網(wǎng)絡(luò)課程中綜合設(shè)計型實驗的設(shè)計與實施方法。這種實驗?zāi)J降膰L試,提高了實驗教學質(zhì)量,促進了學生綜合能力的提升,培養(yǎng)了學生的創(chuàng)新實踐能力。同時,該模式契合了培養(yǎng)學生探索習慣和解決實際工程問題能力的教學目標。
在以后教學工作中,將繼續(xù)深化和拓展SDN相關(guān)綜合設(shè)計型實驗內(nèi)容,不斷豐富和完善實驗教學體系,進一步優(yōu)化實驗方案的設(shè)計,緊跟網(wǎng)絡(luò)技術(shù)的最新發(fā)展,適應(yīng)新的教學需求,以期培養(yǎng)更多具備實踐技能和創(chuàng)新精神的計算機網(wǎng)絡(luò)專業(yè)人才。