丁 俏 馮 勇 李宇桐
(昆明理工大學云南省計算機應用技術重點實驗室 云南 昆明 650500)
隨著城鎮化進程加快,越來越多人生活在城市中,構建智能感知城市成為給人們提供舒適和便利環境的必要條件[1]。物聯網(IoT)是實現感知城市的基礎,它不僅能靈活地支持各種應用需求,還能夠便捷地管理基礎設施[3,5-6]。軟件定義網絡(SDN)是一種新興的網絡模式,它能夠通過滿足特定端到端需求的方式,靈活地支持和管理網絡中大量的數據傳輸,允許快速靈活地配置基于流的路由,實現網絡組件的重新組合,尤其適用于具有數據流變化[2]的網絡。SDN技術與物聯網的結合引起學術界和工業界的關注,軟件定義的物聯網(SD-IoT)已經用于智能感知城市的建設[3-4]。
在軟件定義的物聯網網絡中,數據傳輸常常會出現延遲問題,這會影響用戶的生活體驗。如何提高網絡中數據傳輸的效率、降低數據傳輸延遲,是當前學者們研究的一個重要方向。許多學者對SD-IoT網絡數據傳輸延遲問題進行了研究。Craig等[7]提出了一種通過修改軟件定義網絡控制器中的實時鏈路成本將流量負載平衡應用于多播流量的方法。Zhang等[8]提出了一種構建多播機制的方法,其中多播流在到達最終用戶之前由網絡功能虛擬化處理。Shen等[9]為SDN提出一種新的可靠多播樹,因為最短路徑樹(SPT)寬帶效率不高。
上述研究主要是通過平衡多播流、虛擬化處理數據和運用多播樹等方式,有效地減少了網絡資源消耗,降低了網絡中數據傳輸延遲。這雖然在一定程度上降低了網絡數據傳輸延遲,卻增加了網絡數據傳輸的成本,且它們對網絡中數據傳輸效率的提高并不顯著,更重要的是不能對網絡中的數據傳輸進行動態調整,容易造成網絡負載不均衡,網絡資源利用率低。針對此問題,在軟件定義物聯網中,本文提出一種數據傳輸方法,該方法是基于蟻群算法[10],依據選取數據轉發路徑的概率大小,將被轉發數據按概率分布到各個路徑上,概率值大的路徑轉發的數據多,概率值小的路徑轉發的數據較少,實現數據流被合理均衡地分配到可行的多路徑上。該方法能夠對數據流的轉發路徑進行動態調整,使網絡中數據傳輸達到負載均衡,避免數據傳輸擁塞,使得數據流能高效地傳輸到服務器端。本文主要關注的是SD-IoT中數據轉發平面上[11]的數據傳輸問題。仿真實驗結果顯示該方法有很好的效果。
SDN技術與物聯網的結合正在引起學術界和工業界的關注,軟件定義的物聯網(SD-IoT)已經用于智能感知城市的建設。如圖1所示,一個典型的軟件定義的物聯網系統[12]從邏輯上可以分成:感知數據系統、感知數據傳輸系統(即數據轉發平面)和感知數據處理系統三個子系統。當參與的移動傳感器節點(例如行人和車輛)到達空間事件的可感知區域內時,會異步感知城市環境中的空間事件,然后產生感知數據來描述該事件。感知數據可以從傳感器設備中讀取(例如加速度指針、陀螺儀)[13]。移動傳感器節點可以通過蜂窩網絡(3G/4G)立即和網關進行通信,將感知數據卸載到網關上,即卸載到數據轉發平面上,SDN控制器通過基于蟻群算法的數據傳輸方法,為感知數據計算出從網關到數據服務器間的多條路徑,感知數據通過多路徑上傳到數據服務器端,以進一步聚合找到事件的真相。這些感知數據從多個網關通過多個路徑異步傳輸到數據服務器端的過程被稱為異步多點對點(M2P)的數據傳輸[14],后面討論的M2P數據傳輸均是異步的。這里感知數據[13]和感知數據處理[15]均不在本文的研究范圍內,并且本文認為SDN中只部署一個控制器[16]。

圖1 IoT-SDN框架圖
然而通常在軟件定義的物聯網網絡中,數據傳輸具有一定的延遲性。如何提高網絡中數據傳輸的效率是當前研究學者們急需解決的問題。現有的提高SD-IoT網絡數據傳輸效率的方法主要有兩種類型:一是通過提高數據卸載效率,以節省不必要的時間,實現節能且經濟的數據傳輸[17-18];二是通過減小SD-IoT網絡中控制器端數據流請求負載,提高數據轉發效率,進而降低數據傳輸延遲。
Mehmeti等[17]對延遲卸載提出了一個排隊分析模型,得出平均延遲、卸載效率和其他指標,作為關鍵網絡參數。Zhou等[19]通過考慮時間社會接觸模式,討論網絡中的數據傳輸。Zhang等[20]定義了與提高卸載效率相關的效用函數,以定量描述用戶在價格方面的滿意度與等待Wi-Fi連接延遲之間的權衡。上述研究工作主要是通過提高數據上傳網關的效率,節省不必要的數據卸載時間,從而提高數據傳輸效率,降低數據傳輸延遲。Song等[21]提出ORSIN(軟件定義物聯網中一種請求方法)方法,將來自同一個感知事件的異步請求批量分組到控制器端,形成事件-網關表,通過減小控制器端的負載,以提高網絡數據傳輸效率。
然而上述研究均未考慮數據轉發平面上的數據上傳延遲問題。如圖2所示,在數據轉發平面上,假設有A和B兩種不同的數據流,它們分別來自兩個不同的感知事件,它們需要被上傳到同一個數據服務器端,控制器分別給A和B規劃了a(g1到ds1)和b(g3到ds1)兩條不同的傳輸路徑。假如A數據流比較大,B數據流比較小,一段時間后,a路徑會產生嚴重擁塞,b路徑上可能會出現空載,這將會導致網絡負載不均衡,此時整體網絡數據傳輸時間會增大,整體數據傳輸效率會降低。如果此時考慮動態調整a、b兩路徑上數據流,使a路徑中的數據一部分分流到b路徑上,則可以提高整體網絡數據傳輸效率,降低數據傳輸延遲。

圖2 數據轉發平臺
因此,在軟件定義物聯網中,本文提出一種數據傳輸方法(DTMSIN)。基于蟻群算法,依據選取數據流轉發路徑的概率值大小,將被轉發數據按概率分布到各個路徑上,概率值大的路徑轉發的數據多,概率值小的路徑轉發的數據較少,實現將流量合理均衡動態地分配到可行的多路徑上。和其他方法相比,本文方法重點關注的是SD-IoT中數據轉發平面上的延遲問題,這是導致整體網絡中數據傳輸產生延遲的重要原因;在數據轉發平面上,對數據流的轉發路徑進行動態規劃,數據流能高效傳輸到服務器端,其他方法則是一種靜態的路徑規劃,很容易造成網絡擁塞,網絡數據傳輸效率不高。
為了后文對數據傳輸方法的研究,先分析了軟件定義物聯網中多個感知事件下的多點對點(M2P)的路由問題。
通常不止一個感知事件將通過數據轉發平面傳輸來自它們的感知數據,而數據轉發平面中的交換機具有有限的轉發表,來自多個事件的感知數據將競爭數據平面中有限的資源,此時路徑選擇模式將在很大程度上影響網絡中數據的傳輸效率。
不同路徑選擇的路由模式如圖3所示。圖3(a)為局部路徑選擇模式,來自事件e1的感知數據首先到達邊緣交換機s1上,感知數據需要傳輸到數據服務器端。SDN控制器為其計算了中間路徑,此路徑的延遲為2。在此示例中,假設每個交換機的轉發表只有一個可用的轉發條目,當來自感知事件e2的感知數據到達邊緣交換機s2上時,感知數據需要傳輸到數據服務器端。SDN控制器為它規劃底部的路徑,此路徑的延遲為20,因為此時中間路徑無效,被從s1到ds1的數據傳輸所占用。圖3(b)展示了一個更有效的路徑選擇模式,它通過評估全局最小的延遲路徑,分別給來自感知事件e1和e2的感知數據計算延遲為4和2的最優路徑。此時,在全局路徑選擇的路由模式下,來自兩個事件的數據傳輸總延遲為6,而在局部路徑選擇的路由模式下,來自兩個事件的數據傳輸總延遲為22。全局路徑選擇路由模式比局部路徑選擇路由模式有明顯的優勢,故本文采用全局路徑選擇的路由模式。

(a) 局部路徑選擇的路由模式

(b) 全局路徑選擇的路由模式
由上述分析可知,有限的轉發表會導致來自多個感知事件的感知數據對轉發表路由的競爭。如圖4所示,在數據平面中,頂點(交換機)的容量表示轉發表的可用空間。對于每一個感知事件,其輸入的主機的流量數為1個單位。把每個頂點V的容量轉換為具有兩個新容量的頂點vin和vout,并且邊緣具有與原來邊緣相同的容量,這樣就實現對原來頂點的擴容。

(a) 變換之前

(b) 變換之后圖4 頂點容量的變換圖
通常潛在感知事件和M2P數據傳輸之間會產生沖突,因為來自潛在感知事件的感知數據常常會占用網絡資源,這會降低網絡數據傳輸效率。因此本文分析潛在感知事件和M2P數據傳輸的關系,從而避免沖突發生,提高數據傳輸效率,降低網絡中數據傳輸延遲。


(1)

(2)
把從在當前時刻t0后一個時間窗口W期間的兩個事件之間的重疊時間比率定義為重疊率,計算式如下:
(3)
用Oi={Ri,1,Ri,2,…,Ri,m}表示ei和所有感知事件的重疊比率集合,Ri,i等于1。
為了降低計算的復雜度,本文使用了閾值ε過濾了矢量元素,如下所示:
(4)
由此系統可以獲取一個過濾向量集合:
(5)

通過上述對多個感知事件網絡情形下的M2P路由分析,可以將網絡理解為無項加權連通圖G(V,E),V為網絡節點集合,E為任意兩節點之間的鏈路集合。假設任意兩節點之間存在唯一一條鏈路。每條鏈路與QoS度量相關的有:可用寬帶B、時延T、丟包率、成本C和抖動大小等。QoS的特征值定義為:設R為正實數,對于任意無向加權連通圖G中的鏈路設置下列函數:時延D(e)趨向于R;成本C(e)趨向于R;帶寬B(e)趨向于R。權重函數如下所示:
(6)
式中:E、F、G、H分別為各個因素的權重系數,U(e)為選用該路徑的概率大小。權重函數計算的值為啟發式信息,啟發式信息可以避免數據轉發路徑過多,實時反映當前節點鄰居節點的繁忙狀態,與路由表一起決定轉發數據的路由路徑。
假設P(s,j,d)表示選擇路由從源節點s到目的節點d,選取s節點鄰居節點j的概率,設N(s)為節點s的鄰居節點的集合。所有選取當前節點的鄰居節點的概率之和為1,如下所示:

(7)
假設滿足QoS的最小帶寬和滿足QoS的最大時延條件,如式(8)-式(9)所示,C0和D0為兩個常數,對于從源節點s到目的節點d的任意一條路由路徑ri,如果同時滿足這兩個條件,即加入可用路徑集合中。
min{bandwidth(ri),ri∈(s,d)}≥C0
(8)
max{delay(ri),ri∈(s,d)}≤D0
(9)
算法1和算法2分別為前向螞蟻和后向螞蟻構建解算法的偽代碼。前向螞蟻收集途徑鏈路的即時狀態,包括延遲、抖動、丟包率、隊列長度和節點標識信息等鏈路信息,前向螞蟻到達目的節點時就會轉換為后向螞蟻,后向螞蟻按原路返回源節點并更新信息表的相關數據結構。由兩種螞蟻的工作機制可以看出,兩種螞蟻的數據結構相同,均包含路由表、節點狀態信息及路徑標識。螞蟻完成尋路和記錄路徑狀態的數據結構可以分別被定義成一個數據表D(d)和一個堆棧S(d)。D(d)包含源節點s、螞蟻所在當前節點i和目的節點d的節點狀態信息以及路徑節點數n。S(d)包含了從源節點s到目的節點d依次經過的網絡節點的信息An、鏈路狀態信息Bn和各個節點的時延關系Cn。
D(d)=(s,i,d,n)
(10)
S(d)={(s1,A1,B1,C1),(s2,A2,B2,C2),…,
(sn,An,Bn,Cn)}
(11)
算法1前向螞蟻構建尋路解偽代碼
FAB-DCSR(G=(V,E),s,i,d)
//s為源節點
//i為當前節點
//d為目的節點
//初始化狀態
1. 初始化:本地流量模式和路由表
2. 為圖的每個頂點分配一個螞蟻
3. 初始化每條邊的信息素水平
4. for (每個節點i)
5. while (系統時間<模擬時間)
6. If (系統時間>發送螞蟻之間的間隔)
7. 隨機選擇一個d
8. 發送一個前向螞蟻(s,i,d);
9. end if
10. for (每個前向螞蟻)
11. while (i!=d)
12. 使用路由表選擇下一跳節點;
13. 在螞蟻的構建路徑隊列中添加下一跳節點;
14. 移動到下一跳節點;
15. end while
16. end for
17. end while
算法2后向螞蟻更新數據結構偽代碼
BAB-UDS(G=(V,E),s,i,d)
//s為源節點
//i為當前節點
//d為目的節點
1. for (每個后向螞蟻)
2. while (i!=d)
3. 從螞蟻所記錄的路徑中讀取前節點及其包含統計信息作為下一跳節點;
4. 等待在高于數據的優先級隊列中準備被發送到下一跳節點;
5. 移動到下一個節點;
6. 當前節點賦值為下一跳節點;
7. 更新本地流量模型統計信息;
8. 評估信息素釋放大小;
9. 更新信息素表(路由表);
10. end for
11. end while
本文使用路由表和蟻群信息素表同構的原則,這樣路由表就能夠根據信息素表動態適應當前網絡的狀態,路由表的取值是經過信息素表到路由表的冪運算得到的。每個路由器都維護著一張信息素表,信息素表是一個二維矩陣,一個維度表示所要到達的所有目的節點,另一個維度表示路由器的所有鄰居節點。信息素表的取值表示從當前節點到達目的節點時,選擇當前節點的鄰居節點作為下一跳節點的概率,這樣可以避免螞蟻選路陷入局部最優解。當前節點所有的鄰居節點的概率和為1。因為路由表和信息素表同構,所以路由表項的取值表示將數據從本節點轉發到目的節點時,選擇一個鄰居節點作為下一個節點的概率,這樣同樣可以避免數據流路徑規劃陷入局部最優,可以均衡各鏈路的負載,動態選擇路徑,避免路徑擁塞發生。同樣所有鄰居節點的概率值和為1。根據節點間是否為鄰居的關系,可以設定不同的信息素表(路由表)的初始概率,如下所示:
(12)
式中:j為i的鄰居節點;|Ni|表示當前節點i鄰居節點的個數;Ni表示i節點和目的節點d之間的節點;ρ為先驗因子。
路由表與信息素表同構,路由表的取值是經過信息素表到路由表的冪運算得到的,路由表更新規則和信息素表更新一樣。
信息素表更新規則:如果后向螞蟻返回來節點是i節點的鄰居節點,那么i節點下一個節點的概率值按式(13)進行增加,否則該節點下一個節點的概率值按式(14)進行減少。
Pid←Pid+μ(1-Pid)i∈Ni
(13)
Pid←Pid-μ(1-Pid)i∈Ni
(14)
式中:節點i是后向螞蟻過來的節點;節點j是當前節點的鄰居節點;d是目的節點;μ為增強因子。每一次計算之后都要保持當前節點的鄰居節點總概率和為1,這稱為歸一化處理。
增強因子μ∈(0,1),公式如下:
(15)

tsup為參數置信區間的上限:
(16)
式中:γ為置信水平;|Wd|為觀察窗口的大小。
螞蟻在選擇鄰居節點時,可能會遇到以下三種情況,針對這三種情況的處理方法如下:
(1) 若當前節點i相鄰節點中含有目的節點d,螞蟻無條件選擇d。
(2) 若鄰居節點中含有該螞蟻之前沒有走過的鄰居節點,按照式(17)計算新的概率,并按照概率最大值隨機選擇。
(17)
式中:li為啟發式校正系數;Pid為路由概率;α為權重因子;qi為緩沖區隊列長度;|Ni|表示當前節點i鄰居節點的個數。
(3) 若鄰居節點都被以前的螞蟻訪問過,則跳過的之前螞蟻走過的節點(情況(1)除外)繼續下一個鄰居節點,按照式(17)計算新概率,并按照概率中最大值隨機選擇。
轉發數據時,路由表會按概率值隨機選擇下一個鄰居節點作為下一跳節點來選擇數據流的轉發路徑。路由表取值是由信息素表值通過指數函數運算映射到路由表中得到的,指數函數公式如下:
g(x)=xγγ≥1
(18)
通過信息素表到路由表的冪運算取值可以增強優質路徑的被選擇概率,強化函數作用顯而易見,增強高概率減弱低概率值,避免數據從低概率的路徑轉發。由于路由表項的取值反映了所選路徑的質量,所以被轉發數據會按概率分布到各個路徑上,概率值大的路徑轉發的數據多,概率值小的路徑轉發的數據較少,動態地調整數據流的轉發路徑,實現流量合理均衡分配到可行的多路徑上。
本文基于Mininet(2.3.0)+Floodlight(Ubuntu 16.04-desktop-64位)的實驗仿真平臺模擬SDN網絡環境,將本文方法DTMSIN分別與ORSIN[21]、傳統OPENFLOW方法進行比較,使用網絡中數據傳輸平均延遲來評估這三種方法的性能。本文考慮是在多個感知事件情形下,仿真參數設置如表1所示。

表1 實驗參數設置
實驗1在部署5個感知事件和單個數據服務器的網絡情形下,對三種方法進行對比,結果如圖5所示。

(a) 20個交換機

(b) 30個交換機圖5 多個感知事件下不同節點容量下的平均延遲
圖5(a)展示了在擁有20個交換機和隨機鏈路的拓撲網絡情形下三種方法的數據傳輸平均延遲情況。隨著每個交換機容量的增加,三種方法網絡中數據傳輸平均延遲均逐漸減小。這是因為隨著每個交換機的容量增加,交換機上轉發表可用空間逐漸增大,來自一些感知事件的感知數據將被分配到具有較低延遲的轉發路徑上,所以網絡的整體數據傳輸延遲會降低。可以看出,DTMSIN的平均延遲明顯比另外兩種方法平均延遲都低。雖然DTMSIN和ORSIN采用都是全局路徑選擇的路由模式,但是DTMSIN首先考慮了SDN數據轉發平面的擁塞,其次能夠動態地調整數據流的轉發路徑,使整體網絡負載均衡,避免擁塞,而其他兩種方法則是靜態的路徑規劃,很容易造成網絡擁塞,網絡數據傳輸效率不高。
圖5(b)展示了網絡中部署30個網關和隨機鏈路的拓撲網絡情形下,數據傳輸的平均延遲情況。隨著每個交換機容量增加,三種方法數據傳輸平均延遲逐漸減小。DTMSIN的平均延遲比另外兩種方法延遲都低。相比部署20個網關的網絡情景,更大規模的網絡擁有更大的平均延遲,因為更多的交換機轉發數據包,使得整體網絡中的數據流增大,增大了整體網絡數據傳輸平均延遲。
實驗2在部署20個交換機、不同感知事件及部署不同數量數據服務器的網絡環境下,對上述三種方法進行對比,結果如圖6所示。

(a) 3個數據服務器

(b) 7個數據服務器圖6 多個感知事件下不同數據服務器數量下的平均延遲
圖6(a)展示了把3個數據服務器作為目的地的網絡情形下三種方法的數據傳輸平均延遲。隨著感知事件的數量的增加,三種方法數據傳輸的平均延遲也在增加。這是因為隨著感知事件數量的增加,移動傳感器節點卸載到網關上的感知數據的數量會增加,此時網絡需要上傳的數據流會增大,而每個交換機上轉發表的空間有限,一些數據轉發將被分配到具有更高延遲的轉發路徑上,網絡數據平均傳輸延遲會增大。而DTMSIN的平均延遲比另外兩種方法延遲都低,因為DTMSIN首先擴大了交換機的容量,使得數據流被分配到具有較低延遲的路徑上,其次對數據轉發平面上數據流進行了動態規劃,使得網絡中數據流分布均衡。
圖6(b)展示了把7個數據服務器作為目的地的情況下三種方法的平均延遲。數據傳輸的平均延遲隨著感知事件數量的增加而增大,DTMSIN的延遲較其他兩種方法的延遲較小。相比3個數據服務器情景下,7個數據服務器情形下數據傳輸延遲較低,這是因為更多的數據服務器可以提高數據的處理效率,提高數據傳輸效率,進而降低網絡數據傳輸延遲。
實驗3在部署5個感知事件、1個數據服務器和30個交換機的網絡環境下,在部署不同數量網關的條件下分別用三種方法進行對比,結果如圖7所示。

圖7 多個感知事件下不同網關數量下的平均延遲
可以看出,隨著網絡中網關的數量增加,三種方法的數據傳輸延遲逐漸減小,這是因為隨著網絡中上傳網關數量增多,移動傳感器節點可以就近把攜帶的感知數據卸載到網關上,減少數據卸載的時間,另外隨著網關數量的增加,感知數據可以通過更多的網關上傳數據到數據服務器端,數據流可以被分配到更多具有低延遲的轉發路徑上,這樣網絡中數據延遲會減小。而DTMSIN相對其他兩種方法具有較低的平均延遲,這是因為對數據轉發平面上的數據流進行了動態規劃,使得網絡中數據流盡可能均勻分布到具有低延遲的路徑上,降低了整體網絡數據傳輸延遲,其他兩種方法則是一種靜態數據傳輸,容易出現數據傳輸擁塞。
本文提出了一種基于蟻群算法的數據傳輸方法,在軟件定義物聯網的數據轉發平面上,依據選取轉發數據流路徑的概率值大小,對數據流的路徑進行動態規劃,實現流量合理均衡分配到可行的多路徑上。而ORSIN和OPENFLOW兩種方法主要通過減少SDN控制器端的請求負載來提高數據傳輸效率,并沒有考慮數據轉發平面上的數據傳輸延遲問題,都不能對網絡中數據流進行動態調整,不能讓網絡達到負載均衡,充分利用網絡資源。仿真實驗結果表明本文方法較其他兩種方法在數據傳輸效率方面有明顯的優勢。本文僅研究在部署單個控制器網絡情形下的數據傳輸延遲問題,未來將在具有多個控制器軟件定義的物聯網中進一步研究數據傳輸延遲問題。