周 菲,李昭樺
(1.廣州供電局通信中心,廣東 廣州 510630;2.中國能源建設集團廣東省電力設計研究院,廣東 廣州 510663)
互聯網中,各種應用對網絡的性能要求各有不同,例如,語音/視頻通信要求低時延和低抖動,FTP文件傳輸要求大吞吐量,Web 訪問要求低時延.所以,如何實現網絡服務質量保證(Quality of Service,QoS)一直是研究熱點,傳統(tǒng)的網絡架構下的一些方法都難以滿足要求[1].作為未來網絡架構的主流技術,軟件定義網絡(Software Defined Network, SDN)將網絡設備的邏輯控制層面從數據轉發(fā)層面抽離出來,然后通過單獨的控制器提供接口來實現可編程化,從而集中控制底層硬件[2-5].SDN提供開放應用編程接口,使得它在保證業(yè)務數據流 QoS質量方面有著天然的優(yōu)勢.
因此,本文充分利用SDN的優(yōu)點,通過控制器為各種應用流設置不同帶寬的專有路徑和不同排隊優(yōu)先級的隊列,并為各種應用設計個性化流表,來實現QoS保障.
目前,QoS相關的研究主要有三個模型[6-9],Best-Effort(Best-Effort Services Model)、Int Serv(Integrated Services Model)、Diff Ser(Differentiated Services Model).Best-Effort是一個比較簡單的服務模型,它是網絡的缺省服務模型,在這個模型下可以盡最大的可能性來發(fā)送報文,但是對網絡的性能指標不能提供保證.IntServ模型是一個相對復雜的模型,需要用到RSVP(Resource Reservation Protocol)協議[10],在工作之前,IntServ模型首先通過RSVP信令來構建一條專屬路徑,以到達保證網絡數據流的需求.DiffSer模型的工作原理是將網絡中數據進行分類再標記,不同應用類型進行不同的處理,可以為應用劃分不同的優(yōu)先級,以實現達到QoS保障的目的.Diffser模型是一個基于流的QoS服務模型,是目前應用最廣的一個模型.
本文提出的服務質量保障機制的主要思路如下:首先,SDN控制器分析各種應用的性能要求;SDN控制器通過端口區(qū)分不同的應用類型;根據應用的不同性能需求,SDN控制器為各種應用的流設置不同帶寬的專有路徑和不同排隊優(yōu)先級的隊列;SDN控制器設計個性化的OpenFlow流表,并將流表下發(fā)到SDN交換機.當一個數據包到達SDN交換機,查詢SDN交換機的流表,根據流表轉發(fā)到下一跳.最后,本文為語音通信、視頻通信、Web訪問、FTP文件傳輸等4種常見網絡應用實現QoS保障.
本文所設計的功能可分為五大模塊.分別是拓撲管理模塊、個性化流表模塊、業(yè)務識別模塊、隊列調整模塊、帶寬調整模塊(如圖1所示).
拓撲管理模塊,用于自動構建網絡拓撲,識別控制器與交換機之間、交換機與交換機之間的連接,以及各端口的地址信息.
個性化流表模塊,通過OpenFlow協議流表將下發(fā)到SDN交換機,將匹配的應用流量傳輸到相應的隊列去做轉發(fā).
業(yè)務識別模塊,通過端口區(qū)分當前四種典型的網絡應用.
隊列調整模塊,為不同業(yè)務設置特定隊列,通過REST API 接口去配置OpenvSwitch的端口隊列信息.
帶寬調整模塊,針對不同應用制定合理帶寬,為用戶提供流量保障.
圖1 系統(tǒng)框架圖
2.2.1 網絡應用類型的區(qū)分機制
目前有很多區(qū)分流量應用的方法,其中利用傳輸層的端口是一個既簡單又高效的方法,本文利用以下策略來區(qū)分應用:
Web訪問選用HTTP協議,本文利用80端口作為該應用的標識;
FTP文件傳輸則選用ftp協議,FTP客戶端利用21端口連接到FTP服務器,進行用戶的認證;然后,用20端口傳輸數據文件.本文利用20端口作為該應用的標識.
語音通信通常用H.323協議,本文利用TCP的1720端口作為該應用的標識;
視頻通信通常用RTSP(Real Time Streaming Protocol)協議[11],本文利用TCP的554端口作為該應用的標識.
2.2.2 隊列調整模塊
本文使用OVSDB(Open vSwitch Database Management Protocol,開放虛擬交換機數據庫管理協議)[12],通過REST接口配置SDN交換機的端口隊列,設置不同隊列帶寬.同時,為了對SDN交換機進行有效的操作配置,使用Python語言的一個綁定庫PycURL模塊.其中,QoS有很多種設置隊列的方法,本文使用能確保所有通信流的服務級別的自定義隊列.例如,可以指定系統(tǒng)中網絡體系結構通信流占用的總帶寬為30%,假設TCP應用應該占有的帶寬為20%,那么剩余50%的帶寬用于留給其它應用使用.
本文通過REST接口下發(fā)到SDN交換機上的配置端口隊列,里面指定了端口的最大帶寬速率以及配置了4個隊列,每個隊列對應應用的最大帶寬速率信息.
2.2.3 帶寬調整模塊
本模塊是對隊列調整模塊中隊列對應應用的帶寬進行設置,進行設置的內容主要有:應用類型網絡質量要求差異,怎樣匹配進入相應的隊列,以及SDN交換機連接上來的時候,配置關于QoS的流表信息.
基于Ryu控制器,添加了一個qos_app.py的功能模塊,主要用來實現本文所提出的QoS保障的功能,步驟如下:
首先,定義了一個QosApp的類,繼承自app_maager.在類的開始,指定了要使用的OpenFlow協議的版本,本文使用的openflow協議的版本為1.3.
然后,當SDN交換機連接上來的第一個階段,為了監(jiān)聽這個階段并下發(fā)配置關于QoS的流表信息,在QosApp類中定義了一個switch_features_handler的方法,由set_ev_cls調用這個函數.當接收到交換機的設備信息的時候,就可以獲取數據路徑進而下發(fā)相關的QoS流表.
最后,當控制器收到OpenFlow的消息的時候,控制器定義_packet_in_handler函數處理消息.
本文中,按Web訪問、語音通信、視頻通信、FTP文件傳輸等4種應用分別對應queue1隊列,queue2隊列,queue3隊列,queue4隊列等4個隊列.其中,指定了端口最大帶寬為100Mbps,傳入的4個隊列帶寬依次分配為最大帶寬的10%、25%、25%、40%.
2.2.4 拓撲管理模塊的實現
在Ryu控制器中利用LLDP鏈路發(fā)現協議構建全局網絡拓撲.假設有兩臺OpenFlow交換機(S1和S2)和一臺Ryu控制器進行相連,現以交換機S1如何發(fā)現和S2的連接為例進行說明(見圖2).
圖2 拓撲管理圖
首先,Ryu控制器通過Packet_Out消息向交換機S1的所有端口發(fā)送LLDP數據包,其中,LLDP報文中的Chassis IDTLV和Port IDTLV分別置為交換機S1的dpid和端口號;S1收到Packet_Out消息后,就將從Ryu控制器收到的LLDP數據包轉發(fā)給與它相連的所有端口,本例中是轉發(fā)給交換機S2.
然后,S2會通過一個Packet_In消息將數據包發(fā)送給Ryu控制器.
最后,Ryu控制器會將Packet_In消息中的數據包進行分析,然后在其拓撲信息存儲模塊中創(chuàng)建交換機S1和S2之間的連接關系.
基于Ryu設計拓撲管理模塊的核心在于ryu/topology目錄下的switches.py.通過dumper.py利用_CONTEXTS來實例化switches.py中的核心類Switches,將拓撲發(fā)現的相關信息通過LOG.debug顯示.在Ryu控制器中,輸入參數“-verbose及-observe-links”便可激活dumper.py進行工作,實現拓撲信息發(fā)現功能,構建全局網絡拓撲.
2.2.5 基于流量防抖動的重路由機制
控制器周期性地檢測端到端所有可用路徑的負載,當負載不均衡時,控制器對過載路徑上一些流量進行重路由.重路由的核心思想為:控制器為流計算新的端到端路徑,設計并下發(fā)新流表;新流表的優(yōu)先級低于原流表,從而保證新流表的下發(fā)過程對流的傳輸無影響.由于在流路徑切換的過程中始終有一條連通的路徑,因此能夠保證該流的傳輸過程不丟包,實現對路由的透明切換.因為重路由時無法知道這條流會持續(xù)多長時間,會導致流量抖動,為了防止這種情況,設計了流量防抖動功能,主要思路如下:
(1)收集flow流表項信息時,會以cookie為key記錄每一條流的生存時間戳(記為duration);
(2)防抖動功能以3s為周期循環(huán)檢測duration的值,閾值 limit設置為:(limit = hard_ timeout- 10)s;
(3)如果一條流在 duration < (limit-15)s內沒有數據傳輸,則流表項會由于軟超時而自動刪除,并且通告控制器更新相關信息;
(4)如果一條流在duration > (limit-15)后仍有數據傳輸,則無論此流是長流還是短流,防抖動功能會判定此流還會繼續(xù)傳輸;
(5)當 duration > limit 后會觸發(fā)防抖動功能,獲取此流表項的 ( path, flow_info ) 進行重路由.
本文Mininet+Ryu的實驗環(huán)境對所提方法進行測試,利用Wireshark+IPerf等軟件進行性能分析測試,旨在驗證多種應用的資源競爭時能對業(yè)務流量進行有效合理的分配的正確性.實驗拓撲采用當前數據中心網絡中常用的Fat-Tree結構[7,8](見圖3).
圖3 基于Minin et仿真Fa t-Tree (k=4) 拓撲結構
本實驗在Ubuntu系統(tǒng)下,具體實驗步驟如下:
(1)將qos_app.py和set_config.py兩 個文件放在ryu/ryu/app目錄下;
(2)打開linux中shell終端,然后執(zhí)行以下命令安裝相關庫:
sudo apt-get install libcurl4-openssldev
sudo pip install pycurl
(3)進入ryu/ryu/app目錄下,啟動Ryu控制器并運行指定腳本;
cd ryu/ryu/app
ryu-managerqos_app.pyrest_qos.pyrest_conf_switch.py
其中qos_app.py文件是本文編寫好的相關配置文件,另外兩個rest_qos.py 和rest_conf_switch.py 是用來提供RESTAPI接口配置ovs的隊列等信息,是Ryu控制器里面就有的文件;
(4)進入到存放topo文件的目錄,然后再開啟另一終端啟動網絡拓撲,本實驗就選用Fattree拓撲來進行驗證,執(zhí)行命令,開啟拓撲;
sudomn--controller=remote,ip=127.0.0.1,port=6653--topomytopo--customfattreek=4.py--mac
(5)重新開啟一個終端進入到ryu/ryu/app下運行set_config.py文件;
sudo python set_config.py
(6)在mininet中通過查看流表匹配不同的應用設置不同的queue,queue有設置對應的帶寬.通過iperf工具驗證各應用的服務質量.
(7)通過Wireshark抓包工具分析應用并抓取傳輸過程,通過數據流測試通信質量,包括吞吐量、丟包率、時延、抖動等各項性能指標.
本文實驗設置總帶寬設置為100M,針對語音通信、視頻通信、Web訪問、FTP文件傳輸等4種應用分別設置帶寬為20M/20M/20M/30M,剩余的10M帶寬預留給其他數據流量,亦即,設置5個隊列.
(1)在ryu/ryu/app目錄下使用ryu-managerqos_app.pyrest_qos.pyrest_conf_switch.py啟動.
(2)啟動完成之后再開啟一個終端使用sudomn--controller=remote,ip=127.0.0.1,port=6653--topomytopo--customfattreek=4.py--mac開啟拓撲.
(3)完成之后,等待ryu控制器的日志窗口出現FORWARD的時候重新開啟一個終端進入到ryu/ryu/app下運行sudo python set_config.py,可以看出Ryu控制器隊列設置成功了.圖4顯示了交換機的id,并顯示了從queue0-queue4的5個隊列以及它們對應的帶寬設置.
圖4 隊列設置
圖5 個性化流表
圖6 語音通信的抖動與時延曲線
圖7 視頻通信的抖動與時延曲線
(4)在mininet中通過命令dpctl dumpflows可以查看流表,如圖5所示,不同應用成功地設置了不同的queue,每個queue都設置了對應的帶寬.
3.2.1 語音通信
本文在圖3所示的h1和h5運行VoIP-linphone軟件進行語音通信,并運行Wireshark軟件分析通話過程的時延抖動、丟包率等.實驗結果顯示,通信過程中丟包率為0.14%,平均抖動為16.80ms.同時,圖6顯示通信中的抖動與時延的變化曲線,時延為50ms左右,證明本次通話的通信質量很好,滿足了語音通信對時延和抖動的要求.
3.2.2 視頻通信
本文在圖3所示的h1和h5運行VoIP-linphone軟件進行視頻通信實驗,并運行Wireshark軟件分析通話過程的時延抖動、丟包率等.實驗結果顯示,通信過程中丟包率為0,平均抖動為25.68ms.同時,圖7顯示通信中的抖動與時延的變化曲線.平均時延50ms左右,由此證明本次通話的通信質量很好,滿足了視頻通信對時延和抖動的要求.
3.2.3 FTP文件傳輸
本文分別在h5運行FileZilla軟件作為客戶端,在h1上運行vsftpd作為服務器,進行FTP文件傳輸的測試.實驗結果表明,端到端吞吐量超過30Mbps,滿足了FTP文件傳輸對吞吐量的要求(見圖8).
圖 8 FTP文件傳輸實驗
3.2.4 Web訪問
本文在h5上通過運行命令python-mSimple HTTPServer80開啟一個Web服務器,在h1通過wget命令可以連接到開啟的Web服務器.實驗結果顯示,此過程中丟包率為0%,抖動是0.091ms~0.319ms,時延是0.159ms,滿足了Web訪問對時延的要求(見圖9).
本文基于流量分類提出SDN網絡的服務質量保障機制.首先,該機制通過端口區(qū)分識別應用類型;其次,根據各種應用不同的性能需求,SDN控制器為各種應用的流設置不同帶寬的專有路徑和不同排隊優(yōu)先級的隊列,為各種應用設計個性化流表;最后,在Mininet+Ryu的實驗環(huán)境下,針對語音通信、視頻通信、Web 訪問、FTP 文件傳輸等4種應用進行模擬實驗,實驗結果證明所提方法能夠滿足各應用的性能要求.
圖9 Web訪問實驗