因為畢業設計的緣故,準備向計算機方向讀研的我偶然結識了sdn與openflow這兩個神奇的傢伙。
sdn的中文名稱為軟體定義網路,然而它的英文拼寫除了正規的文獻和專業人員,幾乎很少被正確地表示出來。
其實我一開始也是這麼以為的(甚至一開始我的解讀是 software definition network),不過玩文字遊戲實在是沒什麼意思:請大家以後不要再拼錯了,sdn的全稱是:software-defined networking!這是來自wikipedia和sdn官方**的定義。
(1)圖演算法——網路拓撲可用圖表示,其中重點涉及到的有最短路徑演算法和遍歷演算法(深度優先和廣度優先);
(2)貪心演算法——構造啟發式演算法的首選,多用於求解最優化問題;
(3)動態規劃——將整個問題分解成若干子問題,子問題的最優解可匯出整體最優解;
(4)排序演算法——流的權重排序,流的頻寬排序等等;
(5)np問題(證明)——最優化問題是否是np-hard。
容易發現,許多文獻中的最優化問題都是np-hard問題,而求證np-hard的原理是退化法,即對模型一步步弱化變數因素,使之退化為乙個已知的np-hard問題。接下來就是證明我所處理的優化問題,可以退化為乙個已知的np-hard問題:ear。
重新列出第一優化目標如下: mi
n(ma
x(∑f
∈fpf
af,l
bl,l
∈l+)
) (1)
第一步退化:令pf
=1,b
l=c 為常數,則優化目標變成: mi
n(ma
x(∑f
∈faf
,l,l
∈l+)
) (2)
第二步退化:用min替換max,則優化目標變成: mi
n(mi
n(∑f
∈faf
,l,l
∈l+)
) (3)
稍微解釋一下這個目標的現實意義:最小化所有鏈路上頻寬最小的那條鏈路的頻寬(其實就是最小化為0)。問題(2)和(3)具有相同的複雜性,如果(2)可解,那麼(3)必定可解。反之,若(3)不可解,則(2)也不可解。
第三步退化:將目標(3)退化成ear問題: mi
n(∑l
∈l+x
l),xl=
0 if there is no flow running on link l (4)
簡單解釋一下ear問題:通過最大程度增加不佔據頻寬的鏈路數量,從而節約能源。它是乙個迭代的問題(3)。
當然,如果問題(4)可解,問題(3)當然也是可解的,因為問題(四)的複雜程度更高。
而根據以下這篇**,可知ear問題是乙個np-hard問題。
f. giroire, d. mazauric, j. moulierac, and b. onfroy. 「minimizing
routing energy consumption: from theoretical to practical results」.
in ieee/acm greencom, 2010
啟發式演算法的嚴格定義可以參照維基百科,鏈結如下:
啟發法-wikipedia
而針對我們要解決的問題,三個優化目標的自然語言描述為:
1.最小化頻寬利用率最大的鏈路上的頻寬利用率
2.最小化記憶體佔用率最大的交換機上的記憶體佔用率
3.最小化跳數最長的流的跳數
其中,第乙個目標為核心目標,另外兩個目標可作為輔助條件。
但是在構造啟發式演算法之前,我們要坐而論道,什麼道呢?
即是,我們為什麼要實現目標?或者,在怎樣的條件下,乙個目標才是值得考慮為優化問題的。
舉個簡單的例子:
假如乙個sdn網路上(某段時間內)流量很小,所有鏈路的頻寬利用率都不到30%,請問,這個時候,有必要去實現優化目標1麼?
再舉個極端的例子:
假如乙個小型的sdn網路所有的鏈路頻寬都比較小,資源十分受限,此時來了一些流,而流的包速率普遍比較快,以至於大部分流速率甚至大於大部分鏈路頻寬(也就意味著大部分流都不能通過該網路),現在該如何使最多的流通過網路呢?
為了方便解決我們提出的優化問題,針對以上兩個例子帶來的啟示,我必須做出如下兩個重要假設:
第一,只有當鏈路利用率超過規定值時才需要進行均衡(或者優化),假設此規定值為u;
第二,通過網路的流有大流(速率高)和小流(速率低),但所有流都能夠經過網路,並且必定存在鏈路過載(即鏈路利用率》u)。
這樣,我們就能夠既服從工程現實的需要,又服從整個優化問題了。
但是,似乎還有一些有價值的問題應當被考慮:
比如,大流和小流有什麼特點?如何區分?
我相信大部分人都聽過2/8定律,其正式名稱為帕累託法則,詳情可參閱維基百科,鏈結如下:
帕累託效應-wikipedia
那麼我們可以考慮,在一段(較長)時間內,通過網路的流,有20%的流承擔了80%的價值,20%的流占用80%的頻寬。那麼佔據80%頻寬的這20%的流就可以當成是大流,其餘流就是小流。
這樣一來我們就可以對大流和小流分別處理,或者是說針對它們涉及不同的演算法,以優化不同的目標。
對於大流來說,它耗得是頻寬;對於小流來說,它耗得是交換機記憶體。
SDN 網路中的路由規則(二)
因為畢業設計的緣故,準備向計算機方向讀研的我偶然結識了sdn與openflow這兩個神奇的傢伙。sdn的中文名稱為軟體定義網路,然而它的英文拼寫除了正規的文獻和專業人員,幾乎很少被正確地表示出來。其實我一開始也是這麼以為的 甚至一開始我的解讀是 software definition network...
kohana中的路由規則
kohana的路由規則是非常強大的。首先必須確認的是路由的匹配原則是有順序,當一條路由規則匹配成功時,就停止匹配,也就是說在其後面定義的路由規則將不再被執行,因此最後的一條路由規則幾乎可以匹配所有的路由規則,它常常類似於下面這樣 在bootstrap.php檔案中 route set default...
CAN網路中的路由
現在汽車快速發展,車上的ecu數目已經達到幾十個,乘用車可能會更多,商用車雖然少些,但是也有二三十個之多,雖然sae j1939協議中對定了使用遮蔽雙絞線最多一路can上可以使用30個ecu,但是在實際使用過程中考慮網路負載和報文延時,一路can上並不會使用太多的節點,一般一路can網路最多也就十個...