房海峰 趙亞嬋 檀蓉 韓院彬
摘? 要: SDN的出現(xiàn)開展了計算機(jī)虛擬網(wǎng)絡(luò)模式新的轉(zhuǎn)變,實現(xiàn)了將控制層面與數(shù)據(jù)轉(zhuǎn)發(fā)分離的功能。利用OpenFlow協(xié)議對控制器與交換機(jī)進(jìn)行交流。針對網(wǎng)絡(luò)傳輸?shù)哪芎膯栴},提出虛擬網(wǎng)絡(luò)動態(tài)切換技術(shù),在該系統(tǒng)中虛擬機(jī)之間通信有兩條路徑可供選擇,即光交換機(jī)和電交換機(jī)。通過對交換機(jī)的切換,實現(xiàn)虛擬網(wǎng)絡(luò)流量的整合,減少物理網(wǎng)絡(luò)資源的冗余浪費,從而達(dá)到優(yōu)化數(shù)據(jù)網(wǎng)絡(luò)能耗的目的。通過Ping與Netperf這兩個測試工具測出丟包率、延遲及流量值,這些數(shù)值的變化證明了所提系統(tǒng)可正常運行。
關(guān)鍵詞: 虛擬網(wǎng)絡(luò); 動態(tài)切換; SDN環(huán)境; 流量整合; 系統(tǒng)設(shè)計; 系統(tǒng)測試
中圖分類號: TN915?34; TP393? ? ? ? ? ? ? ? ? 文獻(xiàn)標(biāo)識碼: A? ? ? ? ? ? ? ? ? ? ? ?文章編號: 1004?373X(2020)06?0061?04
Dynamic switching technology of virtual network in SDN environment
FANG Haifeng, ZHAO Yachan, TAN Rong, HAN Yuanbin
(School of Information and Electrical Engineering, Hebei University of Engineering, Handan 056038, China)
Abstract: The emergence of SDN has carried out a new transformation of computer virtual network mode and realized the function of separating control level from data forwarding. The OpenFlow protocol supports the communication of the controller and the switch. In allusion to the energy consumption of network transmission, a virtual network dynamic switching technology is proposed. In this system, there are two paths for communication between virtual machines, namely optical switch and electrical switch. By switching the switch, the integration of virtual network traffic is realized, and the redundancy and waste of physical network resources are reduced, so as to optimize the energy consumption of data network. Ping and Netperf are the system′s test tools, by which the packet loss rates, latency, and traffic value are measured. It proves that the proposed system can run normally.
Keywords: virtual network; dynamic switching; SDN environment; OpenFlow; traffic integration; system design; system test
0? 引? 言
軟件定義網(wǎng)絡(luò)(Software Defined Network,SDN)是計算機(jī)網(wǎng)絡(luò)模式的一種新的架構(gòu),它實現(xiàn)了網(wǎng)絡(luò)結(jié)構(gòu)的虛擬化。SDN的目的是將控制與轉(zhuǎn)發(fā)功能分離,控制器主要負(fù)責(zé)決策,而交換機(jī)只負(fù)責(zé)轉(zhuǎn)發(fā)。SDN架構(gòu)分為三部分,即網(wǎng)絡(luò)應(yīng)用、OpenFlow控制器和OpenFlow交換機(jī)??刂破魇褂玫氖荝YU,RYU是基于組件的SDN框架,支持OpenFlow,且采用Python實現(xiàn)。交換機(jī)使用的Open vSwitch具有可遷移性、對動態(tài)網(wǎng)絡(luò)作出響應(yīng)、維持邏輯標(biāo)簽和硬件集成等優(yōu)點,因此目前已被移植到多個虛擬化平臺上和交換機(jī)的芯片組中,成為很多平臺的默認(rèn)交換機(jī)[1]。網(wǎng)絡(luò)應(yīng)用和控制器通過北向接口通信,控制器和交換機(jī)則通過南向接口傳遞消息,即OpenFlow協(xié)議。
本文對在SDN環(huán)境下虛擬網(wǎng)絡(luò)切換技術(shù)進(jìn)行了介紹,SDN采用數(shù)據(jù)平面與控制平面相分離的架構(gòu),控制器負(fù)責(zé)下發(fā)命令,在交換機(jī)之間傳遞消息。在本系統(tǒng)中,虛擬機(jī)傳輸數(shù)據(jù)設(shè)計了兩條路徑:一條為光交換機(jī);另一條為電交換機(jī)。根據(jù)所設(shè)定的流量閾值區(qū)分大流量與小流量。當(dāng)流量超過閾值時,選擇光交換機(jī);小于閾值時,則選擇電交換機(jī)。
本系統(tǒng)實現(xiàn)了虛擬網(wǎng)絡(luò)路徑切換的功能,但是光交換機(jī)與電交換機(jī)各有優(yōu)缺點,故切換系統(tǒng)的實現(xiàn)大大減少了能源的損耗,提高了資源的利用率,同時可行性很高。
1? 相關(guān)工作
多路徑傳輸機(jī)制(OFMT)[2]通過對流計算路徑,將流量分到多個路徑上,同時通過周期輪詢及動態(tài)調(diào)度實現(xiàn)了均衡負(fù)載的目的,從而提高了網(wǎng)絡(luò)吞吐量并減少了傳輸時間。
文獻(xiàn)[3]是一篇技術(shù)性論文,之前的研究主要是針對延遲、吞吐量和包丟失等網(wǎng)絡(luò)性能。本文主要介紹了在SDN環(huán)境下OpenFlow協(xié)議的流量統(tǒng)計信息的收集特性,通過捕捉和分析控制器收集的請求信息和應(yīng)答消息,計算其他流量工程的參數(shù)。
Opennetmon[4]是基于SDN的網(wǎng)絡(luò)監(jiān)控,監(jiān)控OpenFlow網(wǎng)絡(luò)中吞吐量、延遲和包丟失等流量指標(biāo)的一種方法。OpenFlow提供TE接口,文章提出的方法提供監(jiān)控,支持細(xì)粒度流量工程。Opennetmon通過輪詢邊緣交換機(jī)測量流量,流量減少時,降低自適應(yīng)率及切換CPU,同時提高了測量精度。
OpenTM[5]是用來測量網(wǎng)絡(luò)流量的矩陣系統(tǒng),此系統(tǒng)通過獲取的路由信息選擇交換機(jī)獲取流量。通過比較,發(fā)現(xiàn)OpenTM比OpenFlow協(xié)議提供的用于匹配和查詢交換機(jī)數(shù)量、字節(jié)的函數(shù)更精確。但是本系統(tǒng)對交換機(jī)的要求較高,需要挑選合適的交換機(jī)。
2? 相關(guān)技術(shù)
2.1? SDN
SDN起源于斯坦福大學(xué)在2006年的一個項目,該項目定義了新型的網(wǎng)絡(luò)架構(gòu)。SDN的出現(xiàn)使控制與執(zhí)行轉(zhuǎn)發(fā)分離,簡化了網(wǎng)絡(luò)管理與控制。SDN將控制權(quán)交給了控制器,控制器下達(dá)指令,交換機(jī)只負(fù)責(zé)數(shù)據(jù)包的轉(zhuǎn)發(fā),兩者的分開使網(wǎng)絡(luò)更加智能,更具有靈活性。
SDN分為應(yīng)用層、控制層和基礎(chǔ)設(shè)施層,如圖1所示。應(yīng)用層與控制層使用網(wǎng)絡(luò)應(yīng)用接口,即北向接口進(jìn)行交互,控制層與基礎(chǔ)設(shè)施層使用南向接口進(jìn)行通信,到目前為止,北向接口并沒有明確的定義,南向接口使用OpenFlow協(xié)議進(jìn)行通信。SDN的網(wǎng)絡(luò)應(yīng)用程序在應(yīng)用層中運行,應(yīng)用層通過北向接口告訴控制層自身對網(wǎng)絡(luò)資源的需求以及對網(wǎng)絡(luò)行為的需要,同時通過北向接口從控制器中讀取網(wǎng)絡(luò)的當(dāng)前狀態(tài)與各種統(tǒng)計數(shù)據(jù)。控制層是SDN架構(gòu)中最關(guān)鍵的部分,控制器則在控制層上運行,控制層通過南向接口對基礎(chǔ)設(shè)施層發(fā)送指令,以達(dá)到控制的目的,通過北向接口對網(wǎng)絡(luò)行為及策略進(jìn)行控制[6]。交換機(jī)在基礎(chǔ)設(shè)施層上運行,在本層可以進(jìn)行數(shù)據(jù)交換與處理。
2.2? RYU
RYU[7]是基于組件的SDN控制器,由Python實現(xiàn),同時支持所有版本的OpenFlow協(xié)議,跟其他控制器相比,便于開發(fā)。
RYU架構(gòu)與SDN架構(gòu)相似,SDN APP分為三類,分別是Operator,OpenStack cloud orchestration和User Apps。RYU SDN frame work是RYU的框架層,主要是用于實現(xiàn)控制器流表下發(fā)、拓?fù)浒l(fā)現(xiàn)等功能。OpenFlow switch層包含交換機(jī),支持OpenFlow協(xié)議。
2.3? OpenFlow
控制器與交換機(jī)之間通信靠的是OpenFlow協(xié)議,通過安全信道來傳遞消息。安全信道是將交換機(jī)與控制器連接到一塊的接口。當(dāng)開啟了交換機(jī)后,會向控制器發(fā)起TLS(傳輸層安全)連接,控制器默認(rèn)的TCP接口[1]為6633。
消息傳遞過程為:交換機(jī)收到數(shù)據(jù)包后,對包頭進(jìn)行解析,然后進(jìn)行查表,從流表的第一個記錄開始依次查詢,當(dāng)發(fā)現(xiàn)有匹配的流記錄時,交換機(jī)執(zhí)行相應(yīng)的動作,當(dāng)沒有匹配的流記錄時,將數(shù)據(jù)包通過安全信道發(fā)送packet?in消息給控制器,控制器再給交換機(jī)發(fā)送packet?out消息來反饋相應(yīng)的動作[8]。
2.4? Open vSwitch
OVS(Open vSwitch)是在開源Apache 2.0許可下授權(quán)且具有產(chǎn)品級質(zhì)量的多層虛擬交換機(jī)[9]。該交換機(jī)由Nicira Networks開發(fā),支持標(biāo)準(zhǔn)的網(wǎng)絡(luò)接口和協(xié)議,也支持通過編程擴(kuò)展的大規(guī)模的網(wǎng)絡(luò)自動化。
Open vSwitch很適合在虛擬環(huán)境中運行,基本上是由C語言的獨立平臺編寫,適合很多環(huán)境,便于應(yīng)用。在虛擬機(jī)中,交換機(jī)的作用是傳遞消息,以及與外部環(huán)境通信,接收并執(zhí)行控制器的命令。
3? 系統(tǒng)設(shè)計
本系統(tǒng)實現(xiàn)了兩個虛擬機(jī)在發(fā)送消息時切換路徑的技術(shù)。在傳輸消息時,會出現(xiàn)能耗高、傳輸慢,或者能源浪費的情況。所以當(dāng)流量小時,為節(jié)省成本及時間,應(yīng)選擇電交換機(jī);當(dāng)流量大時,為加快傳輸速率需要切換為光交換機(jī)。SDN交換機(jī)切換拓?fù)鋱D如圖2所示。
圖2中,KVM1與KVM2互相發(fā)送數(shù)據(jù),可以看到有兩條路徑,第一條是通過交換機(jī)1到光交換機(jī)的路徑,光通信速度比較快,但是成本較高,當(dāng)傳輸?shù)臄?shù)據(jù)流量大于控制器設(shè)定的閾值[10]時,應(yīng)采用光交換機(jī)來傳輸數(shù)據(jù),傳輸?shù)臄?shù)據(jù)也就是所謂的大象流[11]。當(dāng)傳輸?shù)牧髁啃∮诳刂破髟O(shè)定的閾值時,應(yīng)選用第二條路徑進(jìn)行數(shù)據(jù)傳輸,也就是虛擬機(jī)1通過電交換機(jī)對虛擬機(jī)2進(jìn)行數(shù)據(jù)傳送。此次傳輸?shù)臄?shù)據(jù)叫作老鼠流。根據(jù)流量傳輸選擇合適的路徑,可以減少能源及時間的浪費。
4? 系統(tǒng)實現(xiàn)
4.1? 系統(tǒng)運行過程
在系統(tǒng)運行之前,需要進(jìn)行環(huán)境準(zhǔn)備。SDN控制器啟動前應(yīng)滿足以下條件:首先,應(yīng)保證不啟動節(jié)點虛擬機(jī),以防產(chǎn)生網(wǎng)絡(luò)流量;其次,虛擬交換機(jī)的流表的初始值應(yīng)為零;最后,要確定物理網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)。
當(dāng)啟動控制器后,根據(jù)物理網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu),進(jìn)行配置。再啟動監(jiān)控線程,檢查端口的狀態(tài)信息,并將虛擬機(jī)信息、虛擬機(jī)交換機(jī)信息、端口信息、物理連接信息、流表連接信息、虛擬機(jī)通信路徑信息、虛擬機(jī)通信路徑中的流表配置計劃信息和vxlan點對物理通路流表配置信息記錄到數(shù)據(jù)庫中。開啟監(jiān)控后,檢查端口的狀態(tài)信息,實現(xiàn)vxlan路徑相關(guān)的流表的配置。根據(jù)流表的配置向指定通信路徑相關(guān)的虛擬交換機(jī)配置流表項,檢查是否存在導(dǎo)致環(huán)路的端口,將其禁用;再激活指定的通信路徑,向指定通信路徑中的入口端虛擬交換機(jī)配置CF流表項,便于捕獲異常包。啟動虛擬機(jī)后,正常運行,如圖3所示。
最后,進(jìn)行兩個測試,即Ping和Netperf。測試完成后,在數(shù)據(jù)庫中導(dǎo)出數(shù)據(jù),進(jìn)行分析。
4.2? 系統(tǒng)切換過程
在初始環(huán)境進(jìn)行配置,使虛擬機(jī)在未啟動狀態(tài),流表為空。然后使SDN控制器啟動,再使SDN控制器啟動流量監(jiān)控[12]來獲取端口狀態(tài)信息,更新路徑信息和ARP信息。啟動虛擬機(jī)后SDN控制器啟動切換監(jiān)控,監(jiān)控器根據(jù)流量閾值判斷是否啟動了切換,若確定啟動切換,則需要重新尋找路徑,如:關(guān)閉路徑1?2,啟動路徑3?4,最后輸出路徑丟包信息完成路徑切換。
切換是本文最重要的部分,如何從1?2路徑切換到3?4路徑,再從3?4路徑切換到1?2路徑是關(guān)鍵的技術(shù)。
要想從1?2路徑切換到3?4路徑,需進(jìn)行如下步驟:
1) 進(jìn)行環(huán)境準(zhǔn)備:before啟動控制器,節(jié)點虛擬機(jī)未啟動,虛擬交換機(jī)流表==0,確定物理網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu);
2) 輸入sudo ryu?manager haifeng_monitor_with_db_
and_websocket_2.py,開啟控制器;
3) 啟動KVM;
4) 啟動切換監(jiān)控查看流量值;
5) When need_switch==ok deactive_path_number=path?(1,2) 沿著path?1?2路徑中的datapath下發(fā)c?flow,刪除原有的flow;沿著path?1路徑中的datapath刪除路徑中間的vxlan流表和ARP信息再禁用端點處datapath中的port;
6) If SDN控制器捕獲到流量包pkt,切換到3?4,即:配置路徑中間的vxlan流表和ARP信息,再向路徑中間的datapath下發(fā)flow,刪除路徑中間的datapath的c?flow,啟用端點處datapath中的port,path?3向源端點處datapath下發(fā)flow并向目端點處datapath下發(fā)flow,path?4向源端點處datapath下發(fā)flow并向目端點處datapath下發(fā)flow,Else return 1;
7) If? KVM可以運行,切換完成,Else? return 1,從path 3?4切換回path 1?2的過程與上述一致。
5? 評? 估
5.1? 準(zhǔn)備測試環(huán)境
本系統(tǒng)測試前需要準(zhǔn)備測試環(huán)境,將Node?1?KVM和Node?2?KVM鏡像備份,再將虛擬機(jī)進(jìn)行快照準(zhǔn)備,運行RYU控制器,將Node?1和Node?2中的Open vSwitch恢復(fù)到初始狀態(tài)。最后對測試前的環(huán)境檢查:確定控制器中安裝了切換程序;網(wǎng)絡(luò)拓?fù)湟雅渲们叶丝谌繂印?/p>
5.2? 開始測試新的KVM的運行情況
啟動Node?1和Node?2,殺死當(dāng)前運行的KVM,再啟用新的KVM。再由Node?1和Node?2分別啟動KVM1和KVM2,且每次測試時都需要重新啟動KVM。啟動控制器,上傳RYU,再啟動RYU。分別進(jìn)入KVM1和KVM2,并運行兩個網(wǎng)絡(luò)測試工具,即Ping和Netperf。最后啟動測試程序,發(fā)起任務(wù)。測試結(jié)束后將數(shù)據(jù)從數(shù)據(jù)庫中導(dǎo)出。
5.3? 測? 試
在測試前,需要在測試界面進(jìn)行相應(yīng)的配置。根據(jù)測試計劃,對本次測試進(jìn)行相關(guān)的描述,在“Test Tools”選擇Ping測試或者Netperf測試,填入測試總時間以及總字節(jié),最后選擇隨機(jī)切換還是固定切換,填入切換的次數(shù),測試配置界面如圖4所示。
5.3.1? Ping測試
Ping是一個通信協(xié)議,主要是用來測試兩個客戶端之間網(wǎng)絡(luò)是否連通[13]。在默認(rèn)情況下,Ping測試默認(rèn)包為64個字節(jié)。Ping測試格式為:Ping+空格+IP地址。
在Ping測試時需要配置IP地址,關(guān)閉KVM1和KVM2的防火墻。當(dāng)進(jìn)行Ping測試時,根據(jù)需要,再調(diào)整參數(shù)。圖5證明KVM1與KVM2 Ping測試成功。
5.3.2? Netperf測試
Netperf是針對TCP/UDP協(xié)議的測試網(wǎng)絡(luò)性能的工具。Netperf的測試結(jié)果展示了一個系統(tǒng)向另一個系統(tǒng)發(fā)送數(shù)據(jù),第一個系統(tǒng)可以以多快的速度傳輸數(shù)據(jù),以及另一個系統(tǒng)可以以多快的速度接收數(shù)據(jù)[14]。Netperf的5種工作模式分別為TCP_STREAM,TCP_RR,UDP_STREAM,UDP_RR,TCP_CRR。
Netperf測試時需關(guān)閉防火墻再進(jìn)行測試,在KVM1(2)輸入“netserver”開啟服務(wù)器,在KVM2(1)中進(jìn)行Netperf測試,如圖6所示,Netperf測試成功。
6? 結(jié)? 論
本文介紹了在SDN環(huán)境下的虛擬網(wǎng)絡(luò)的動態(tài)切換技術(shù),系統(tǒng)路徑分為兩種,兩條路徑分別通過光交換機(jī)和電交換機(jī)??刂破鲉雍蟊O(jiān)控流量,獲取當(dāng)前路徑信息,SDN監(jiān)控器根據(jù)流量閾值判斷是否啟動切換。本系統(tǒng)的出現(xiàn)使虛擬機(jī)在傳輸數(shù)據(jù)時大大減少了能源的損耗,并且用戶在高流量的訪問過程中,可快速訪問網(wǎng)頁。本系統(tǒng)目前僅僅實現(xiàn)了路徑切換,下一步計劃通過測試所得的數(shù)據(jù)建立預(yù)測模型,優(yōu)化系統(tǒng)。
注:本文通訊作者為趙亞嬋。
參考文獻(xiàn)
[1] SIAMAK Azodolmolky.軟件定義網(wǎng)絡(luò):基于OpenFlow的SDN技術(shù)揭秘[M].徐磊,譯.北京:機(jī)械工業(yè)出版社,2014.
[2] 陳鳴,胡慧,劉波,等.一種基于OpenFlow的多路徑傳輸機(jī)制[J].電子與信息學(xué)報,2016,38(5):1242?1248.
[3] HAMAD D J, YALDA K G, OKUMUS I T. Getting traffic statistics from network devices in an SDN environment using OpenFlow [J]. International institute for Tibetan and Asian studies, 2015(16): 951?956.
[4] ADRICHEM N L M V, DOERR C, KUIPERS F A. OpenNetMon: network monitoring in OpenFlow software?defined networks [C]// 2014 IEEE Network Operations and Management Symposium. Krakow: IEEE, 2014: 1?8.
[5] AMIN Tootoonchian, MONIA Ghobadi, YASHAR Ganjali. OpenTM: traffic matrix estimator for OpenFlow networks [C]// International Conference on Passive and Active Network Measurement. Zurich: Springer, 2010: 201?210.
[6] TBOMAS D Nadeau, KEN Gery.軟件定義網(wǎng)絡(luò):SDN與OpenFlow解析[M].畢軍,單業(yè),張紹宇,等譯.北京:人民郵電出版社,2014.
[7] 傅妍芳,李敬偉,馬靜,等.基于Ryu的SDN網(wǎng)絡(luò)動態(tài)路由算法實現(xiàn)[J].西安工業(yè)大學(xué)學(xué)報,2018,38(3):279?285.
[8] 晃通,宮永直樹,巖田淳.圖解OpenFlow[M].李戰(zhàn)軍,薛文玲,譯.北京:人民郵電出版社,2016.
[9] 湯中運,金蓉,李傳煌.支持SDN的高校計算機(jī)網(wǎng)絡(luò)實驗室設(shè)計與實現(xiàn)[J].計算機(jī)應(yīng)用與軟件,2018,35(9):189?194.
[10] 左青云,陳鳴,王秀磊,等.一種基于SDN的在線流量異常檢測方法[J].西安電子科技大學(xué)學(xué)報,2015,42(1):155?160.
[11] AFEK Y, BREMLER?BARR A, FEIBISH S L, et al. Detecting heavy flows in the sdn match and action model [J]. Computer networks, 2017(14): 136.
[12] LI D Y, DAI N Y, LI F, et al. Estimating SDN traffic matrix based on online informative flow measurement method [C]// 2017 Fifth International Conference on Advanced Cloud and Big Data. Shanghai: IEEE, 2017: 75?80.
[13] 常莉.計算機(jī)網(wǎng)絡(luò)中Ping命令的應(yīng)用[J].科技風(fēng),2009(18):207.
[14] 林梅琴,李志蜀,陳黎,等.Netperf的工作原理及應(yīng)用[J].四川大學(xué)學(xué)報(自然科學(xué)版),2006(2):310?314.