


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