SDN原理 OpenFlow協議 -2


本文由SDN原理視頻而成:SDN原理

流表 FlowTable --- OpenFlow的核心

問題3 流表項 Flow Entry

單流表(OpenFlow 1.0版本) -> 多流表(OpenFlow 1.3版本)

組成1(OpenFlow 1.0):Header Fields | Counters | Actions

不同版本的OpenFlow協議的流表項 不一樣。OpenFlow 1.0版本包括了包頭域,計數器,動作三個部分。

流表項包頭域 --- 匹配

可以看出來,除了進接口,傳統OSI七層模型中2-4層的尋址信息都包含在報頭域中了:目的IP地址,源IP地址,目的MAC地址,源MAC地址,端口號···

因此,流表約等於 路由表 + MAC地址表 + 端口號··· 包含了原有OSI七層所有的尋址信息。
也就是說:OpenFlow交換機 相比 傳統網絡的交換機 是一個比較模糊的概念,不再區分交換和路由;所以 OpenFlow交換機 可以廣義理解為 OpenFlow轉發設備 (路由器,交換機,防火牆)。

從小的方面來看,SDN交換機是一個傳統意義上的OSI二層設備;從大的方面來看,它是一個”具有七層結構“(指的是 具有所有七層尋址信息)的交換機。

有新意的地方:取消了傳統網絡 中間路由 的分層結構 分層次進行匹配;把所有的信息一次性進行匹配。

計數器 --- 流量可視化

傳統網絡的計數器這一方面,是一個弱項;雖然TCP有 四個定時器:重傳定時器,堅持定時器,2MSL定時器,保活定時器,IP有TTL字段,但是沒有比較多的技術支持對數據流進行計數。
也就是說,在傳統網絡里面,你不知道通過每一個接口的流量具體有多少,在這條鏈路上已經跑了多少流量。
簡單來說,就是流量可視化。

SDN需要支持流量可視化,方便管理人員和用戶根據可視化的流量來指定一些策略:比如擁塞控制,提高鏈路帶寬的利用率等等。

計數器 Counters 主要對每張表,每個端口,每個流進行計數:方便監管流量。
比如:經過這個端口已經有多少流量了?匹配這個流表項的數據報有多少了?這個表項 或者這張表 查找多少次了?

如果所有的交換機支持計數器,那么每一個交換機都根據計數器向控制器匯總流量信息,那么控制器就很容易生成一張全局的流量圖,方便用戶對流量進行監控和制定策略。
這是 SDN 中很核心的一點,很有新意的一點。

Actions 動作 流表項的關鍵 --- 按需修改

Action 動作 是對匹配該表項的流的操作

傳統網絡的動作,就兩種:要么進行轉發,要么進行丟棄。而SDN中的動作,非常的多。
原因:OpenFlow協議需要支持 源目IP地址,源目MAC地址等等的 按需修改

OpenFlow 1.0規定了必備動作(Required Actions),和可選動作(Optional Actions)。

必備行動1 -轉發 Forward

  • 泛洪選項,ALL -轉發到所有出口(但不包括入口),相當於往所有接口泛洪。
  • 給控制器,CONTROLLER -封裝並轉發給控制器
  • 找本地,LOCAL -轉發給本地網絡棧
  • 按表執行,TABLE -對要發出去的包執行流表內的動作
  • 從哪里來從哪里去,IN_PORT -從入口發出

必備行動2 -丟棄 Drop

沒有明確指明 處理行動 的表項,將匹配的所有分組默認丟棄。

可選行動1 -轉發 Forward

  • NORMAL -按照傳統OSI七層模型中的第二層(源目MAC),或者是第三層(源目IP)進行轉發。
  • FLOOD -通過最小生成樹從出口泛洪發出,不包括入口。

可選行動2 -入列 Enqueue

將包轉發到 綁定某個端口的隊列 中去;常用於管道限速。

非常重要的 可選行動3 -修改域 Modify-field

修改報頭內容 這是和傳統網絡最大的區別:OpenFlow能夠對報頭信息進行修改。

很明顯,OpenFlow所提供的流表,表項比傳統網絡路由表等 更加豐富,操作,執行動作比以前更加繁多。

在1.3版本中:流表項包頭域 -> 匹配域;多了一個 優先級;動作 -> 指令;增加了 超時時間 和 緩存信息。

從1.0版本開始,OpenFlow支持多流表:每張流表都有獨立的序號,從序號最小的流表開始匹配,每張表進行獨立的處理操作。

匹配域 -匹配

匹配域是之前1.0包頭域的拓展,匹配內容除了OSI二到四層的尋址信息(MAC,IP,PORT)之外,多了MPLS,IPv6,PBB,Tunnel ID 等支持;1.0版本能匹配12個信息,1.3版本能夠匹配39個信息。

這樣做的原因,是為了盡量減小傳統網絡協議對SDN的影響;如果還有OpenFlow尚未支持的協議,那么就通過混合型網絡來支持。當OpenFlow發展到支持匹配所有路由信息的時候,那么就可以摒棄掉原來傳統網絡路由轉發的機制了。

趨勢:傳統路由選擇協議 -> 混合協議(OpenFlow 與 傳統路由選擇協議 共存) -> OpenFlow協議 SDN時代。

優先級 -優先匹配

顧名思義,用於標志流表項匹配的優先次序,優先級越高 越早匹配,默認為0。

計數器 -流量可視化

和之前類似,主要對 流,表,端口 做統計,方便進行流量監管。
在原有基礎上,加入了 每組,每個動作集的計數。

指令(這里只列舉部分指令) 是之前動作的抽象 增加了非常多的內容

需要弄明白:動作,動作集,指令。

在新的版本中,指令相比動作增加了非常多的內容,因為引入了多流表的概念,所以多了很多的指令(動作,動作集,指令)。

必備指令:Write-Actions action(s):將指定的命令添加到命令集中。也就是說,命令不一定要馬上執行,可以積累到命令集中,類似一個腳本,然后一起共同執行。
附加指令:Apply-Actions action(s):立即執行指定的動作,不改變行動集。

在1.3中,命令不一定馬上執行:比如Drop,Next Table,Forward等等,它可以直接執行,也可以先 預緩存 到一個動作緩存中(或者說,動作集)。

附加指令:Clear-Actions:在動作集中 立即清除所有的行動。
舉個例子,在 流 匹配了多個流表表項之后,通過指令積累了一定的動作,如果感覺到不是特別滿意,就可以在下一個流匹配的表項中加入 Clear-Action 這個指令,清除掉之前積累的所有動作。

總的來說,1.3版本的流表項,所支持的邏輯需求 更加豐富。
在1.0版本的時候,動作是一個一個執行的,沒辦法集中處理;而1.3的話,允許動作集中執行,通過命令形成動作集,或者看這些動作不順眼,用一個Clean-Actions清空命令集。

注意:

在1.3中,需要清楚的概念是:流表項中有指令Institution和動作Action之分,流表項中的指令 是用於影響動作的:比如通過指令將動作添加到動作集中,或者通過指令清空動作集。
而動作則是一系列對流的操作,比如丟棄,封裝之后交給交換機,或者是轉遞到哪一條鏈路等等。

這也體現了SDN的一個理念:在原有平面上抽象出一個抽象層,比如我們這里就是從動作中抽象出指令,通過這個抽象層更加方便的進行管理與操作,就像圖形界面之於命令行一樣。
引用一段話,源自一篇博文SDN:軟件定義網絡

縱觀計算機的發展歷程,各方面都可以看到通過增加類似的虛擬化層次來提高生產效率的案例。比如高級語言之於匯編,比如圖形界面之於命令行。這種添加層次的解決方案,總是能讓問題得到更清晰的解決。

回到指令

在視頻教學內,指令分成四塊內容:第一塊是指令,第二塊是動作,它們之間的關系在上面的 注意 已經提及了。
那么第三塊,是用來干嘛的呢?

既然,我們使用了第一塊的指令,讓第二塊的動作添加或者是刪除到動作集中,目的是為了更好的管理動作;那么當動作需要統一進行的時候,如何確定 動作集中的動作 的先后順序呢
比如動作集中 有兩個動作添加了進來,一個是將流A封裝交給控制器,另外一個是將流B丟棄,哪一個先執行呢?
類比於BGP協議,動態選路確定最優路的時候,有那么多的影響因素,如何確定這些因素影響的優秀級?

指令的第三塊內容,就是用來干這個的:它們確定了動作集中動作執行的優先順序。

指令部分 總結

行動集與每個報文相關,默認為空。

一個流表項可以通過 Clear-Action 和 Write-Action 兩個指令來對行動集進行操作。

當一個表項的指令集沒有包含 Goto-Table 指令的時候,流水線就停止了(即不用再去查找另外一張流表),然后報文的行動集就被執行。
注意:多張表的查找,叫做流水線處理。

交換機可以通過 Apply-Actions 修改動作執行順序。

行動集包括所有的行動,無論它們以什么樣的順序加入到集中,執行的順序始終按照優先級來進行。

我的理解:流找到對應的表項 -> 表項的指令 將表項的動作添加到動作集中/將動作執行 -> 由表項中的優先順序(上面的第三部分)確定動作的執行順序 -> 指令集中沒有遇到 Goto-Table指令 按照順序執行動作集中的動作

也就是說,表項中(1)有指令集,指令集中有 將動作抽象成邏輯層集中處理的指令(Write-Action & Clear-Action) 還有 定義先后順序的指令;(2)有匹配執行的動作

超時時間 Timeout

用於標志該流表項的 老化時間,到了超時時間限制就刪除,目的:節省內存資源。

附屬信息 Cookies

由控制器選擇的 不透明數據值,控制器使用Cookies來進行 過濾流的統計數據(計數器的相關信息),流改變,流刪除。
但是,當處理單個數據報的時候,不能使用。

2016/9/7


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM