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、IPv6、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交換機流表項信息


免責聲明!

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



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