OpenFlow协议
功能
1.0版本Openflow:控制器通過Openflow協(xié)議與交換機建立了安全通道(Sceure Channel),下發(fā)流表。
1.3版本Openflow:多控制器,多流表。
用于實現Controller和Switch之間的通信過程,定義了一系列標準術語。
定義了Controller如何來控制Swithch以及Switch如何來反饋Ctroller。
定義了Controller和Switch通信過程的消息類型和格式。
版本
版本升級功能升級。
流表
相當于傳統(tǒng)網絡的路由表和CAM表。
傳統(tǒng)網絡的表是死的,給我就按照上面的做,查找轉發(fā)。
SDN的流表,很多張,可編程。
流(Flow)
同一時間內,經過同一網絡并且具有相同屬性的數據包集合。
不同情況流的定義可以不同。一般基于端口以及源目IP。
SDN體系中,所有的數據都以“流”為單位進行處理。
流表(Flow Table)
流過來就查表(基于序號查找)。
每一張流表都有詳細的流表項。
每一個流表項中都有相應參數,根據參數做出相應的動作(要么轉,要么丟,不轉也不丟,下一張表處理)。
雖然要遞歸似的查表,但是節(jié)約了計算的時間,總體上轉發(fā)速度加快。
流表項-1.0版本(Flow Entry)
不同版本的Openflow的流表項有些區(qū)別,下面是Openflow1.0版本的流表項。
包含:包頭域、計數器、動作三個部分。
包頭域(Header Fields)
除了進接口,傳統(tǒng)的2-4層的尋址信息都出現在包頭域中(MAC、IP、PORT)。
Openflow交換機相比傳統(tǒng)網絡交換機(路由器),是一個模糊的概念,不再區(qū)分二者,所以Openflow交換機可以廣義的理解為Openflow轉發(fā)設備(交換機、路由器、防火墻)。
計數器(Counters)
計數器主要對每張表、每個端口、每個流等進行計數,方便流量監(jiān)管。
為流量可視化奠定了基礎。
動作(Actions)
對匹配到的流進行處理,傳統(tǒng)網絡中要么轉發(fā)要么丟棄,沒有第三種選擇。Openflow1.0中規(guī)定了必備動作(Required Actions)和可選動作(Optional Actions)。
必備動作-轉發(fā)(Forward):
ALL:轉發(fā)到所有出口(不包括入口)。
CONTROLLER:封裝并轉發(fā)給控制器。
LOCAL:轉發(fā)給本地網絡棧。
TABLE:對要發(fā)出的包執(zhí)行流表中的行動。
IN_PORT:從入口發(fā)出。
必要行動-丟棄(Drop)
沒有明確指明處理行動的表項,所匹配的所有分組默認丟棄。
可選行動-轉發(fā)
NORMAL:按照傳統(tǒng)交換機的2層或3層進行轉發(fā)處理。
FLOOD:通過最小生成樹從出口泛洪發(fā)出,注意不包括入口。傳統(tǒng)網絡只有在CAM表空或者滿了的時候才會泛洪,現在更加靈活。
可選行動-入隊(Enqueue)
將包轉發(fā)到綁定到某個端口的隊列中。(流控)
可選行動-修改域(Modify-field)
修改包頭內容。
這個動作是跟傳統(tǒng)網絡的最大區(qū)別,Openflow可以對數據包頭部進行修改!(可修改2層-4層的信息)。
流表項—1.3版本
Openflow1.0之后都支持多流表,每張表都有獨立的序號,從序號最小的開始匹配。
Openflow1.3版本包括了匹配域、優(yōu)先級、計數器、指令、超時時間、附屬屬性。
匹配域(Match Fields)
1.0包頭域的拓展,除了2-4層的信息,多了MPLS、IPv6、PBB、Tunnel ID等支持。
1.0能匹配12個信息,1.3能匹配39個信息。
Openflow正在覆蓋傳統(tǒng)網絡協(xié)議。
優(yōu)先級(Priority)
用于標志流表項的匹配優(yōu)先次序,越高越先匹配,默認為0。
支持復雜的策略調度。
計數器(Counters)
在1.0的基礎上,加入了對每組,每個動作的計數。
流量統(tǒng)計。
指令(Instructions)
相當于1.0版本的動作(Actions),但是因為引入了多流表,多了很多復雜操作:
行動集:查到行動后,不立即執(zhí)行,放到一個集合(緩存)中去,最后一起執(zhí)行。
這一段講述了動作的疊加,集成,清除。
Required Instruction:Write-Actions action(s):將指定的行動添加到正在運行的行動集中。
Required Instruction:Goto-Table next-table-id:指定流水線處理進程中的下一張表的ID。
Optional Instruction:Apply-Actions action(s):立即執(zhí)行指定的行動,而不改變行動集。
Optional Instruction:Meter meter id:直接將包計量后丟棄。
Optional Instruction:Clear-Actions:在行動集中立即清除所有的行動。
Optional Instruction:Write-Metadata metadata / mask:在元數據區(qū)域記錄元數據。
這一段是動作
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:如果指定了組行動,那么按照這個序列中的順序執(zhí)行組行動存儲段里的行動。
output:如果沒有指定組行動,報文就會按照output行動中指定的端口轉發(fā)。
行動集與每個報文相關,默認情況下是空的。
一個流表項可以使用Write-Action指令或者Clear-Action指令修改行動集。
當一個表項的指令集沒有包含Goto-Table指令時,流水線處理就停止了,然后報文的行動集就被執(zhí)行。
交換機可以通過Apply-Actions指令修改行動的執(zhí)行順序。
行動集包含所有的行動,無論它們按照什么順序加入到行動集中,行動的順序均按照上一段順序執(zhí)行。
超時時間(Timeouts)
用于標志該流表項的老化時間,到了超時時間就刪除,節(jié)約資源保持準確性。
附屬信息(Cookie)
由控制器選擇的不透明數據值。控制器用來過濾統(tǒng)計數據、流改變和流刪除。但處理數據包時不能使用。
流表匹配—1.1版本(Flow Match)
引入了多流表,多流表的流表匹配稱為流水線處理(Pipeline Process)。交換機從流表0開始查找,序號從小到大匹配。
每個包按照優(yōu)先級去匹配流表中的流表項,優(yōu)先級高的先匹配(被匹配),一旦匹配成功,對應計數器將更新,動作立即執(zhí)行;如果沒能找到匹配的表項,則轉發(fā)給控制器。
流表匹配—1.3版本
1.3版本引入了table-miss的處理和action-set的處理。
之前的版本當交換機沒有匹配到流表項的時候,直接丟給Controller處理。而table-miss則用于解決這個問題。
通過table-miss參數,可以對數據包實現丟棄、給下一個表處理、轉發(fā)給控制器。
還多了一個邏輯層—動作集。動作的累加。
多流表操作中,每個表都有獨立的指令,這些指令(執(zhí)行動作)可以在查表的時候執(zhí)行,也可以通過指令匯總到action-set再疊加執(zhí)行。
行動集與每個報文相關,默認情況為空。
一個流表項可以使用Write-Action指令或者Clear-Action指令修改行動集。
當一個表項的指令集沒有包含Goto-Table指令時,流水線處理就停止了,然后報文的行動集就被執(zhí)行。
交換機可以通過Apply-Actions指令修改行動的執(zhí)行順序。
行動集包含所有的行動,無論它們按照什么順序加入到行動集中,行動按照指定順序執(zhí)行。
單表時,只有action動作;多表環(huán)境下,多個action操作累加則為action-set動作集。
決定action-set中的一堆動作如何工作,便是Instruction指令。指令可以將動作寫入、修改到動作集action-set中,或者可以直接在讀表時執(zhí)行。
多流表最核心的內容:疊加執(zhí)行。
流表的生成
傳統(tǒng)路由技術中,建立一張路由表,需要路由器和路由器之間運行路由協(xié)議,然后相互交互路由條目,之后達到路由共享。這種架構是一種P2P架構(雙方對等)。
SDN的想法是類似的,在控制器和交換機直接運行Openflow協(xié)議,不同的是,這里是一種C/S架構(客戶端服務器架構)。由控制器統(tǒng)一計算后再下發(fā)給Openflow交換機流表項信息。
總結
以上是生活随笔為你收集整理的OpenFlow协议的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 不关注公众号可以获取openid吗_微信
- 下一篇: Materialize MySQL引擎: