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版本的流表項。
  • 包含:包頭域、計數器、動做三個部分。

包頭域(Header Fields)


  • 除了進接口,傳統的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的值。
  • 動做集順序
  1. copy TTL inwards:apply copy TTL inward actions to the packet.
  2. pop:apply all tag pop actions to the packet.
  3. push-MPLS:apply MPLS tag push action to the packet.
  4. push-PBB:apply PBB tag push action to the packet.
  5. push-VLAN:apply VLAN tag push action to the packet.
  6. copy TTL outwards:apply copy TTL outwards action to the packet.
  7. decrement TTL:apply decrement TTL action to the packet.
  8. set:apply all set-field actions to the packet.
  9. qos:apply all QoS actions,such as set queue to the packet.
  10. group:若是指定了組行動,那麼按照這個序列中的順序執行組行動存儲段裏的行動。
  11. 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交換機流表項信息
相關文章
相關標籤/搜索