OpenFlow協議
功能
- 1.0版本Openflow:控制器經過Openflow協議與交換機創建了安全通道(Sceure Channel),下發流表。
- 1.3版本Openflow:多控制器,多流表。
- 用於實現Controller和Switch之間的通訊過程,定義了一系列標準術語。
- 定義了Controller如何來控制Swithch以及Switch如何來反饋Ctroller。
- 定義了Controller和Switch通訊過程的消息類型和格式。
版本
流表
- 至關於傳統網絡的路由表和CAM表。
- 傳統網絡的表是死的,給我就按照上面的作,查找轉發。
- SDN的流表,不少張,可編程。
流(Flow)
- 同一時間內,通過同一網絡而且具備相同屬性的數據包集合。
- 不一樣狀況流的定義能夠不一樣。通常基於端口以及源目IP。
- SDN體系中,全部的數據都以「流」爲單位進行處理。
流表(Flow Table)
- 流過來就查表(基於序號查找)。
- 每一張流表都有詳細的流表項。
- 每個流表項中都有相應參數,根據參數作出相應的動做(要麼轉,要麼丟,不轉也不丟,下一張表處理)。
- 雖然要遞歸似的查表,可是節約了計算的時間,整體上轉發速度加快。
流表項-1.0版本(Flow Entry)
- 不一樣版本的Openflow的流表項有些區別,下面是Openflow1.0版本的流表項。
- 包含:包頭域、計數器、動做三個部分。
- 除了進接口,傳統的2-4層的尋址信息都出如今包頭域中(MAC、IP、PORT)。
- Openflow交換機相比傳統網絡交換機(路由器),是一個模糊的概念,再也不區分兩者,因此Openflow交換機能夠廣義的理解爲Openflow轉發設備(交換機、路由器、防火牆)。
計數器(Counters)
- 計數器主要對每張表、每一個端口、每一個流等進行計數,方便流量監管。
- 爲流量可視化奠基了基礎。
動做(Actions)
- 對匹配到的流進行處理,傳統網絡中要麼轉發要麼丟棄,沒有第三種選擇。Openflow1.0中規定了必備動做(Required Actions)和可選動做(Optional Actions)。
- 必備動做-轉發(Forward):
- ALL:轉發到全部出口(不包括入口)。
- CONTROLLER:封裝並轉發給控制器。
- LOCAL:轉發給本地網絡棧。
- TABLE:對要發出的包執行流表中的行動。
- IN_PORT:從入口發出。
- 必要行動-丟棄(Drop)
- 沒有明確指明處理行動的表項,所匹配的全部分組默認丟棄。
- 可選行動-轉發
- NORMAL:按照傳統交換機的2層或3層進行轉發處理。
- FLOOD:經過最小生成樹從出口泛洪發出,注意不包括入口。傳統網絡只有在CAM表空或者滿了的時候纔會泛洪,如今更加靈活。
- 可選行動-入隊(Enqueue)
- 可選行動-修改域(Modify-field)
- 修改包頭內容。
- 這個動做是跟傳統網絡的最大區別,Openflow能夠對數據包頭部進行修改!(可修改2層-4層的信息)。
流表項—1.3版本
- Openflow1.0以後都支持多流表,每張表都有獨立的序號,從序號最小的開始匹配。
- Openflow1.3版本包括了匹配域、優先級、計數器、指令、超時時間、附屬屬性。
匹配域(Match Fields)
- 1.0包頭域的拓展,除了2-4層的信息,多了MPLS、IPv六、PBB、Tunnel ID等支持。
- 1.0能匹配12個信息,1.3能匹配39個信息。
- Openflow正在覆蓋傳統網絡協議。
優先級(Priority)
- 用於標誌流表項的匹配優先次序,越高越先匹配,默認爲0。
- 支持複雜的策略調度。
計數器(Counters)
- 在1.0的基礎上,加入了對每組,每一個動做的計數。
- 流量統計。
指令(Instructions)
- 至關於1.0版本的動做(Actions),可是由於引入了多流表,多了不少複雜操做:
- 行動集:查到行動後,不當即執行,放到一個集合(緩存)中去,最後一塊兒執行。
- 這一段講述了動做的疊加,集成,清除。
- Required Instruction:Write-Actions action(s):將指定的行動添加到正在運行的行動集中。
- Required Instruction:Goto-Table next-table-id:指定流水線處理進程中的下一張表的ID。
- Optional Instruction:Apply-Actions action(s):當即執行指定的行動,而不改變行動集。
- Optional Instruction:Meter meter id:直接將包計量後丟棄。
- Optional Instruction:Clear-Actions:在行動集中當即清除全部的行動。
- Optional Instruction:Write-Metadata metadata / mask:在元數據區域記錄元數據。
- 這一段是動做
- Required Actions:Output:報文傳輸到指定端口。
- Required Actions:Drop:丟棄。
- Required Actions:Group:用組表處理報文。
- Optional Actions:Set-Queue:設置報文隊列ID,爲了Qos的須要。
- Optional Actions:Push-Tag / Pop-Tag
- Optional Actions:Set-Field:設置報文包頭的類型和修改包頭的值。
- Optional Actions:Change-TTL:修改TTL的值。
- copy TTL inwards:apply copy TTL inward actions to the packet.
- pop:apply all tag pop actions to the packet.
- push-MPLS:apply MPLS tag push action to the packet.
- push-PBB:apply PBB tag push action to the packet.
- push-VLAN:apply VLAN tag push action to the packet.
- copy TTL outwards:apply copy TTL outwards action to the packet.
- decrement TTL:apply decrement TTL action to the packet.
- set:apply all set-field actions to the packet.
- qos:apply all QoS actions,such as set queue to the packet.
- group:若是指定了組行動,那麼按照這個序列中的順序執行組行動存儲段裏的行動。
- output:若是沒有指定組行動,報文就會按照output行動中指定的端口轉發。
- 行動集與每一個報文相關,默認狀況下是空的。
- 一個流表項可使用Write-Action指令或者Clear-Action指令修改行動集。
- 當一個表項的指令集沒有包含Goto-Table指令時,流水線處理就中止了,而後報文的行動集就被執行。
- 交換機能夠經過Apply-Actions指令修改行動的執行順序。
- 行動集包含全部的行動,不管它們按照什麼順序加入到行動集中,行動的順序均按照上一段順序執行。
超時時間(Timeouts)
- 用於標誌該流表項的老化時間,到了超時時間就刪除,節約資源保持準確性。
附屬信息(Cookie)
- 由控制器選擇的不透明數據值。控制器用來過濾統計數據、流改變和流刪除。但處理數據包時不能使用。
流表匹配—1.1版本(Flow Match)
- 引入了多流表,多流表的流表匹配稱爲流水線處理(Pipeline Process)。交換機從流表0開始查找,序號從小到大匹配。
- 每一個包按照優先級去匹配流表中的流表項,優先級高的先匹配(被匹配),一旦匹配成功,對應計數器將更新,動做當即執行;若是沒能找到匹配的表項,則轉發給控制器。
流表匹配—1.3版本
- 1.3版本引入了table-miss的處理和action-set的處理。
- 以前的版本當交換機沒有匹配到流表項的時候,直接丟給Controller處理。而table-miss則用於解決這個問題。
- 經過table-miss參數,能夠對數據包實現丟棄、給下一個表處理、轉發給控制器。
- 還多了一個邏輯層—動做集。動做的累加。
- 多流表操做中,每一個表都有獨立的指令,這些指令(執行動做)能夠在查表的時候執行,也能夠經過指令彙總到action-set再疊加執行。
- 行動集與每一個報文相關,默認狀況爲空。
- 一個流表項可使用Write-Action指令或者Clear-Action指令修改行動集。
- 當一個表項的指令集沒有包含Goto-Table指令時,流水線處理就中止了,而後報文的行動集就被執行。
- 交換機能夠經過Apply-Actions指令修改行動的執行順序。
- 行動集包含全部的行動,不管它們按照什麼順序加入到行動集中,行動按照指定順序執行。
- 單表時,只有action動做;多表環境下,多個action操做累加則爲action-set動做集。
- 決定action-set中的一堆動做如何工做,即是Instruction指令。指令能夠將動做寫入、修改到動做集action-set中,或者能夠直接在讀表時執行。
- 多流表最核心的內容:疊加執行。
流表的生成
- 傳統路由技術中,創建一張路由表,須要路由器和路由器之間運行路由協議,而後相互交互路由條目,以後達到路由共享。這種架構是一種P2P架構(雙方對等)。
- SDN的想法是相似的,在控制器和交換機直接運行Openflow協議,不一樣的是,這裏是一種C/S架構(客戶端服務器架構)。由控制器統一計算後再下發給Openflow交換機流表項信息。
歡迎關注本站公眾號,獲取更多信息