申海杰, 陳靖2, 陳曉范, 田新志
(1.西安思源學院 電子信息工程分院,西安 710038;2.空軍工程大學 信息與導航學院,西安 710077)
SDN(Software-Defined Networking,軟件定義網絡)起源于斯坦福大學Nick McKeown教授的Clean Slate項目,其目標是重新定義網絡體系結構,誕生至今已經快十年。作為一種新的網絡體系結構,SDN已經掀起了一場網絡變革的技術浪潮,對網絡學術界和工業界的發展都產生了巨大的沖擊[1]。SDN是一種基于軟件的網絡架構和技術,支持集中化的網絡控制,實現了底層網絡設備對上層應用的透明,具有靈活的軟件編程能力,采用軟件定義網絡的方式,靈活滿足不同用戶的應用需求[2]。
網絡虛擬化旨在解決現代網絡架構中的僵化問題,核心目標是通過虛擬化技術,將一個物理網絡分割為多個虛擬網絡,或者將多個物理網絡抽象為一個邏輯虛擬網絡,不同的虛擬網絡之間的服務質量能夠得到不同級別的保障,從而為上層的應用提供網絡服務[3]。網絡虛擬化打破了物理設備和邏輯業務層之間的綁定關系,滿足更加復雜的業務需求[4]。隨著軟件定義網絡技術的提出[5][6],SDN 成為網絡虛擬化的一個新思路和新方法[7],已經在全球網絡創新實驗環境(GENI)[8]以及數據中心[9]中開展了研究與應用。如何利用SDN 去實現網絡虛擬化成為一個熱門話題。隨著Openstack、Cloud Stack等開源云計算平臺的出現,云計算得以迅猛發展。在云計算時代,隨著社會對計算需求的不斷擴大,數據中心的規模也在迅速變大。但是,在龐大的數據中心背后,其資源的平均利用率卻相對較低,大部分設備空閑,給數據中心增加巨大的能耗負擔。多租戶是云計算中的一個重要概念,云計算中多租戶概念要求通過虛擬化技術將物理資源池化后,可以按需、動態分配租戶的資源請求,同時這些資源也可以隨時隨地被租戶撤銷。新一代的網絡架構SDN主張控制與轉發分離、控制邏輯集中的思想。通過從全局來管理和優化網絡,SDN 技術在數據中心的應用可以極大提高資源利用率和管理效率。在多租戶數據中心中,SDN 技術可以快速實現多租戶隔離、海量租戶支持和虛擬機無縫遷移等功能[10]。
計算機網絡技術專業具有理論性強和知識更新快的特點,在教學中可以通過實驗來幫助學生理解相關的理論知識并掌握相關的操作。但是筆者在講授SDN及網絡虛擬化相關內容時發現以下問題:
1)SDN交換機設備較貴,難以大規模部署用于實驗教學;
2)SDN 網絡的主要協議Open Flow版本更新頻繁,實驗環境構建與切換較為復雜;
3)SDN及網絡虛擬化實驗內容比較匱乏。
以上因素導致的結果就是學生不能通過實驗理解最新的SDN及網絡虛擬化技術理論知識,更缺乏可實際操作鍛煉動手能力的機會,最終影響相應課程的教學效果和能力的培養[11]。
為解決SDN及網絡虛擬化實驗教學中存在的硬件設備資源不足、設備靈活性不夠和實驗內容匱乏等問題[12],筆者基于Mininet[13]平臺,以Floodlight[14]為控制器,OpenVirteX[15][16]作為中間層,仿真實現了面向多租戶的vSDNs(虛擬SDN網絡),并通過其實現租戶間的網絡隔離。該實驗方案基于Linux多用戶操作系統,可以部署于服務器供多名學生通過局域網遠程登錄同時使用,實驗方案具有價格低廉、貼近現實、配置靈活、擴展性強和具有可重復性的特點,通過該實驗方案學生可以深入理解并掌握計算機網絡技術中SDN及網絡虛擬化技術,并掌握相應網絡設備的操作能力。
目前基于SDN的網絡虛擬化主要方向為基于中間件的網絡虛擬化方案。其主要思想是在SDN設備和控制器之間添加一個虛擬化層,從物理SDN設備來看,網絡虛擬化中間件就是它的控制器;從虛擬網絡的控制器角度來看,控制器所面對的就是一系列虛擬的交換機以及他們之間的虛擬鏈路。FlowVisor和OpenVirteX是采用這種思想實現網絡虛擬化的典型代表。
FlowVisor是建立在OpenFlow之上的網絡虛擬化工具,它能夠將物理網絡劃分為不同的虛擬網絡。FlowVisor部署在標準OpenFlow控制器和OpenFlow交換機之間,成為二者的透明代理。FlowVisor是一個特殊的OpenFlow控制器,所有OpenFlow消息都將透過FlowVisor進行傳送。FlowVisor會根據配置策略對OpenFlow消息進行攔截、修改、轉發等操作。這樣,OpenFlow控制器就只控制其被允許控制的流,并不知道其所管理的網絡被FlowVisor進行過分片操作。相似地,從交換機發出的消息經過FlowVisor也只會被發送到相應的控制器。FlowVisor允許多個控制器同時控制一臺OpenFlow交換機,但是每個控制器僅僅可以控制經過這個OpenFlow交換機的某一個虛擬網絡(即slice切片),從而保證各虛網相互隔離。FlowVisor通過流規則來進行虛擬網絡劃分。FlowVisor網絡的基本要素是網絡切片,切片隔離是FlowVisor虛擬化的重要組成部分。
OpenVirteX(以下簡寫為OVX)是Onlab開發的網絡虛擬化平臺,和FlowVisor一樣也可以實現多租戶的網絡虛擬化。OVX通過使租戶能夠獲取到自己的虛擬拓撲和全網的地址空間來實現網絡虛擬化。前者可以允許租戶自定義網絡拓撲,后者則是用于隔離不同租戶的流量,防止沖突。
與FlowVisor通過切分slice使租戶使用網絡的一部分不一樣的是,OVX通過同一個header space來區分所有租戶的數據。也就是說兩個租戶可以使用同樣的IP、子網掩碼以及傳輸層和應用層的協議,而不會引起沖突,而這在FlowVisor下是不允許的。其實現原理在于OVX做了地址虛擬化,即面向用戶的地址是OVX IP Address,而不是真正的Physical IP Address,OVX把地址從OVX IP Address的地址映射成唯一的Physical IP Address,而這個過程對于租戶的控制器是透明的,從而實現了地址虛擬化。與切分slice原理不一樣的另一點是,以前切分的slice限制在底層網絡的同構子圖中,即用戶的虛擬拓撲實際上是物理真實拓撲的一個同構子圖,也就是說,租戶是可以看到真實的網絡拓撲的。而在OVX中不一樣的是,用戶不需要關心底層的拓撲,而可以任意的定義自己的虛網拓撲,OVX會完成虛網拓撲到物理網絡拓撲的映射,這是OVX區別于FlowVisor的重要特性。Open Virtex的另外一個重要的特性是其對上層的控制器是兼容的,也就是說,與OVX所通信的控制器無須做任何修改,就可以直接對虛擬網絡進行管理。值得注意的一點是,整個OVX的虛擬化過程中都是基于主機只屬于一個虛網的假設的。主機地址的虛擬化是整個網絡虛擬化的核心,同時主機的硬件地址是用來區分租戶的流量的關鍵。基于OVX的網絡虛擬化,如圖1所示。

圖1 OVX網絡虛擬化
基于上述的OVX特性,筆者選擇使用OVX來設計網絡虛擬化實驗教學方案。
Mininet是Stanford大學Nick McKeown的研究小組基于Linux Container架構,研發出的一套輕量級軟件定義網絡研發和測試平臺。通過使用Mininet學生可以很容易在PC上模擬測試一個SDN網絡,對基于Openflow、Open vSwitch的各種協議等進行開發驗證,而且幾乎所有的代碼都可以無縫遷移輕松部署到真實的硬件環境中。
本實驗方案中使用VMware軟件建立虛擬機,通過利用虛擬機技術可以進一步降低實驗部署成本,學生可以在自己的筆記本電腦上搭建實驗平臺,另外還可以通過虛擬機鏡像文件架構實現對相關實驗代碼、配置和數據的快速遷移。虛擬機中操作系統使用14.04版Ubuntu系統,并事先已安裝Mininet2.2.2、Oracle JDK1.7、Maven3.3.9、OpenVirteX0.1、Floodlight0.9和Wireshark等工具。 控制器Floodlight啟動腳本位置為/home/ovx/ctrl/start-controllers.sh, 默認系統啟動時已經啟動了3個Floodlight的服務進程實例。3個Floodlight進程默認TCP連接端口為10000、20000和30000,而Web端UI默認端口為10001、20001、和30001。當租戶1 的虛擬網絡啟動后OVX會連接到Floodlight的端口10000建立TCP連接;當租戶2的虛擬網絡啟動后OVX會連接到Floodlight的端口20000建立TCP連接;當租戶3的虛擬網絡啟動后OVX會連接到Floodlight的端口30000建立TCP連接。
2.1 創建物理拓撲
在基于標準的NDDI拓撲[17](該網絡拓撲來源于美國下一代互聯網建設項目Internet2)的網絡中,一共有11個城市,每個城市有1個核心交換機,每個交換機上有4臺主機與之相連。不同城市物理交換機的DPID,如表1所示。

表1 DPID編號表
其中DPID的最后6個字節表示主機的MAC地址,MAC地址的最后一個字節表示主機編號。根據下表中城市SFO的物理DPID,那么該城市第三臺主機的MAC地址應是00:00:00:00:02:03。
在該拓撲中連接在每個核心交換機上的主機IP地址分配為10.0.0.1到10.0.0.4,端口為1到4,其他端口一般用于城市間交換機互聯,具體連接情況,如圖2所示。
圖2中連線上的數字表示物理交換機端口號。例如城市EWR交換機6號端口與城市IAD交換機的7號端口相連。

圖2 拓撲圖
本實驗方案中首先選取西雅圖(SEA)和洛杉磯(LAX)兩個城市下的各一臺主機來做創建租戶1的虛擬網絡,主機名分別是h_SEA_1和 h_LAX_2(即洛杉磯交換機上的第二臺主機,因為各交換機下接的4臺主機IP均為10.0.0.1—10.0.0.4,為避免混淆選擇第二臺主機)。最終租戶1的虛擬網絡,如圖3所示。

圖3 虛擬網絡1
接下來選取舊金山(SFO)、華盛頓(IAD)和堪薩斯(MCI)3個城市下的各一臺主機來做創建租戶2的虛擬網絡,主機名分別是h_SFO_1、h_IAD_2和h_MCI_3。最終租戶2的虛擬網絡,如圖4所示。

圖4 虛擬網絡2
創建物理拓撲具體過程如下:
$ wget http://ovx.onlab.us/wp-content/uploads/internet2.py
//下載OVX官網提供的拓撲文件,此腳本中定義的默認控制器為本機的6633端口的控制器。
$ sh OpenVirteX/scripts /ovx.sh
//啟動OVX,默認監聽的端口正是6633.
$ sudo python internet2.py
//啟動Mininet建立拓撲,連接OVX作為其控制器。
物理拓撲建立好后,可以通過ping命令驗證主機h_SEA_1和主h_LAX_2能否互聯、主機h_SFO_1、主機h_IAD_2和主機h_MCI_3能否互聯。由于當前各物理交換機上均沒有收到控制器下發的流表,無法進行有效轉發,導致各主機間均無法ping通。
2.2 創建多租戶虛擬網絡
$ cd OpenVirteX/utils
$ python ovxctl.py -n createNetwork tcp:localhost:10000 10.0.0.0 16
//創建虛擬網絡
$ python ovxctl.py -n createSwitch 1 00:00:00:00:00:00:01:00
$ python ovxctl.py -n createSwitch 1 00:00:00:00:00:00:02:00
$ python ovxctl.py -n createSwitch 1 00:00:00:00:00:00:03:00
//創建虛擬交換機
$ python ovxctl.py -n createPort 1 00:00:00:00:00:00:01:00 1
$ python ovxctl.py -n createPort 1 00:00:00:00:00:00:01:00 5
$ python ovxctl.py -n createPort 1 00:00:00:00:00:00:02:00 5
$ python ovxctl.py -n createPort 1 00:00:00:00:00:00:02:00 6
$ python ovxctl.py -n createPort 1 00:00:00:00:00:00:03:00 5
$ python ovxctl.py -n createPort 1 00:00:00:00:00:00:03:00 2
//創建虛擬端口
$ python ovxctl.py -n connectLink 1 00:a4:23:05:00:00:00:01 2 00:a4:23:05:00:00:00:02 1 spf 1
$ python ovxctl.py -n connectLink 1 00:a4:23:05:00:00:00:02 2 00:a4:23:05:00:00:00:03 1 spf 1
//創建虛擬鏈路
$ python ovxctl.py -n connectHost 1 00:a4:23:05:00:00:00:01 1 00:00:00:00:01:01
$ python ovxctl.py -n connectHost 1 00:a4:23:05:00:00:00:03 2 00:00:00:00:03:02
//連接主機
$ python ovxctl.py -n startNetwork 1
//啟動虛擬網絡
經過以上步驟,租戶1的虛擬網絡已經配置好并啟動了,接著按照類似的方法創建租戶2的虛擬網絡并將其啟動。需要注意的是虛網1中使用的OVX IP Address為1.0.0.0/8,而虛網2中使用的OVX IP Address為2.0.0.0/8。
2.3 仿真結果
在Mininet控制臺,使用ping驗證主機間互通。結果顯示每個租戶的虛擬網絡內部主機間已經可以ping通,而屬于不同租戶虛擬網絡的主機間依舊無法ping通,實現了面向多租戶的vSDNs,如圖5所示。

圖5 連通性測試
也可以通過Floodlight的web界面http://localhost:10001/ui/index.html來觀察租戶1的虛擬網絡的拓撲,如圖6所示。

圖6 虛擬網絡1拓撲
通過Floodlight的web界面http://localhost:20001/ui/index.html來觀察租戶2的虛擬網絡的拓撲,如圖7所示。

圖7 虛擬網絡2拓撲
結果證明拓撲結構和最初試驗預想一致。
此時各虛擬網絡中的虛擬交換機上已經收到Floodlight控制器下發的流表,再由OVX進行映射后下發到真正的物理交換機,通過觀察物理交換機上的流表信息可以進一步理解SDN中控制轉發相分離的思想:控制器負責給交換機下發流表而交換機負責按照其上面的流表規則進行轉發。另外還可以通過觀察流表中內容理解OVX中的地址虛擬化技術。主機h_SEA_1和主機h_LAX_2間的icmp包轉發過程,如圖8所示。

圖8 物理交換機流表
從以上實驗可以看出,通過使用OpenVirteX,仿真了一個面向多租戶的vSDNs網絡,并實現了租戶間主機的隔離。在該虛擬網絡上通過交互操作調用操作系統和SDN交換機的真實命令學生可以深入理解并掌握SDN及網絡虛擬化技術,對于學生的知識掌握和動手能力都有一定的提升。基于SDN的網絡虛擬化實驗教學方案能夠幫助學生簡便和快速地搭建vSDNs實驗環境,開展面向真實網絡操作的相關實驗課程。另外結合本實驗平臺中Wireshark工具進行抓包分析還可以幫助學生更好地理解計算機網絡相關課程中的各種協議。本實驗平臺解決了SDN及網絡虛擬化實驗教學中存在的硬件設備資源不足、設備靈活性不夠和實驗內容匱乏等問題。筆者后續將進一步完善本文提出的實驗教學方案,使用Mininet連接物理交換機,結合OVS虛擬交換機組建“傳統+SDN”的混合型網絡,擴展該方案的功能以實現更加復雜的實驗。
[1] 楊澤衛,李呈. 重構網絡:SDN架構與實現[M]. 北京:電子工業出版社, 2017.
[2] 李艷,郝志安,李寧,盧冀. 基于Mininet的SDN架構仿真研究[J]. 計算機與網絡,2014(5):57-59.
[3] Chowdhury N. M. K, Boutaba R. A survey of network virtualization, CS-2008-25[R]. University of
Waterloo, Oct. 2008.
[4] 李佟,葛敬國,鄂躍鵬,等. 基于標簽的POF網絡虛擬化技術研究[J/OL]. 計算機應用研究,2017,(02):1-10. (2017-03-15). http://kns.cnki.net/kcms/detail/51.1196.TP.20170315.1537.110.html.
[5] Mc Keown N, et al. Openflow: Enabling Innovation in Campus Networks [J]. ACM SIGCOMM Computer Communication Review, 2008, 38(2): 69-74.
[6] Jin Xin, Gossels J, Rexford J, et al. Co Visor: a compositional hypervisor for software-defined networks[C]. // Proc. of NSDI. 2015: 87-101.
[7] Sherwood R, Chan M, Covington A, et al. Carving research slices out of your production networks with Open Flow[J]. SIGCOMM Comput. Commun. Rev., 2010, 40(1): 129-130.
[8] Berman M., Chase J. S., Landweber L., et al. GENI: A federated testbed for innovative network experiments [J]. Computer Networks, 2014,61(1): 5-23.
[9] Bari M. F., Boutaba R., Esteves R, et al. Data center network virtualization: A survey. IEEE Commun. Surveys & Tutorials[J]. 2013, 15(2): 909-928.
[10] 左成. 基于SDN的多租戶數據中心網絡研究[D].成都:電子科技大學,2016.
[11] 黃家瑋,韓瑞,鐘萍,等. 基于Mininet的計算機網絡實驗教學方案[J]. 實驗技術與管理,2015(10):139-141.
[12] 張連成,奚琪,郭毅,等. 基于Mininet模擬環境的軟件定義網絡實驗課程設計[J]. 計算機教育,2015(6):104-107.
[13] Mininet Team. Mininet Walkthrough. [EB/OL]. (2017-3-21). http://mininet.org/walkthrough/.
[14] Project Floodlight. Documentation. [EB/OL]. (2016-2-7). https://floodlight.atlassian.net/wiki/display/floodlightcontroller/Getting+Started.
[15] Al-Shabibi A, Leenheer M, Gerolay D M, et al. OpenVirteX: a network hypervisor [EB/OL]. (2014--). http: //ovx.onlab.us/wp-content/uploads/2014/04/ovx-ons14. pdf.
[16] Al-Shabibi A, De Leenheer M, Gerola M, et al. OpenVirteX: Make your virtual SDNs programmable[C]. // Proc of the 3rd Workshop on Hot Topics in Software Defined Networking. 2014:25-30.
[17] OVX. OpenVirteX documentation. [EB/OL]. (2015-2-6). http://ovx.onlab.us/documentation/architecture.