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