本文進行讨論的是openflow 1.0和openflow 1.3的基本知識
Overview:
Openflow 1.0:
安全通道+單張流表+ipv4
Openflow 1.3:
安全通道+多級流表(流水線pipeline)+組表+測量表+ipv6+.....
流(flow)
1.流由管理者定義,根據不同的流執行不同的政策
2.同一時間内,經過同一網絡并且具有相同屬性根據不同情況可以不同,例如我們可以規定通路同一個IP為一個流,也可以規定同一源目IP的資料為一個流或者同一個協定為一個流
3.所有資料都是以流為機關進行處理的。
流表(flow table)
1.流表最常用的動作:forward
discard(drop)
Next table
2.流表就是交換機裡的一張轉發表,類似交換機的MAC表和路由器的路由表。
3.每一個流表項都有各種動作
4.流表由一條條的流表項(路由條目)組成。
5.Openflow包含多個流表
6.流表由controller下發
流表項(flow entry):
Of1.0:Header Fields(標頭域)+Counters+Actions
Of1.3:Match Fields(比對字段)+Priority+Counters+Instructions+Timeouts+Cookie
Openflow1.0:
1.流表項:
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIyVGduV2QvwVe0lmdhJ3ZvwFM38CXlZHbvN3cpR2Lc1TPB10QGtWUCpEMJ9CXsxWam9CXwADNvwVZ6l2c052bm9CXUJDT1wkNhVzLcRnbvZ2LcZXUYpVd1kmYr50MZV3YyI2cKJDT29GRjBjUIF2LcRHelR3LcJzLctmch1mclRXY39zNwMjM1UzM4EzNyMDM2EDMy8CX0Vmbu4GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.jpg)
2.Header Fields(標頭域)的主要内容:
標頭域主要是不在分層簡單的說,就是除了進接口,傳統2層到4層的尋址資訊都出現在標頭域中(MAC,IP,PORT)
3.計數器Counters
主要對每張表,每個端口,每個流等進行計數,友善流量監管(例如經過這個端口有多少流量?比對這個流的資料包有多少了、這張表查找了多少次?)主要是将流量可視化
4.動作Actions
即是對比對到的流進行處理,傳統網絡中要不轉發要不丢棄,沒有第三種選擇,openflow1.0規定了必備動作(Require Action)和可選動作(Optional Actions)
5.必備動作-----轉發(Forward)
ALL 轉發到所有出口(不包括入口)
CONTROLLER 封裝并轉發給控制器
LOCAL 轉發給本地網絡棧
TABLE 對要發出的包執行流表中的動作
IN_PORT 從入口發出
必備動作---丢棄(Dorp)
沒有明确指明處理行動表項的,所比對的所有分組預設丢棄
6.可選動作---轉發
NORMAL 按照傳統交換機的2層或者3層進行轉發處理
FLOOD 通過最小生成樹從出口泛洪發出,注意不包括入口
可選動作---入隊(Enqueue)
将包轉發到綁定到某個端口的隊列中
可選動作----修改域(Modify-field)
修改標頭内容
7 .Openflow與傳統網絡最大的差別:openflow可以對資料標頭部進行修改
8.流表比對(1.1版本):
注釋:1.1版本中引入了多級流表的概念
流表比對(table 0------->table n):
比對到:執行相應動作
未比對到:通過安全通道傳遞給控制器處理
Openflow1.3
1.流表項:
比對域 優先級 計數器 指令 超出時間 附屬屬性
openflow使用多級流表,每張流表有獨立的序号,從序号最小的流表開始比對,每張流表由獨立的處理和動作。
2.比對域Match Fields
它是之前1.0的拓展,比對的内容除了2到4層的尋址資訊(MAC,IP,PORT),多了MPLS(城域網),IPV6,PBB,Tunnel ID等支援。1.0能比對12個資訊,1.3能比對39個資訊
3.優先級Priority
用于标志流表比對的優先順序,優先順序越高越早比對,預設優先級為0
4.計數器Counters
主要對每張表,每個端口,每個流等進行計數,友善流量監管,在原有1.0的基礎上,加入了對每一個組,每一個動作集(隊列)的計數
5.逾時時間Timeout
用于标志該流表項老化的時間,超過了時間限制就删除,節省了記憶體資源
6.附屬資訊Cookie
由控制器選擇的不透明資料值。控制器用來過濾流統計資料,流改變和流删除,但處理資料包時不能使用
7.指令Instructions:
Require Instructions:
Write-Actions action(s):将制定的行動添加到正在運作的行動集中
Goto-Table next-table-id:指定流水線處理程序中的下一張表中的ID(流水線pipeline定義:多級流表的比對)
Apply-Actions action(s):立即執行指定的行動,而不改變指令集(。這個指令經常用來修改資料包,在兩個表之間或者執行同類型的多個行動的時候)
Optional Instructions:
Merter merter id:直接将計流量包丢棄
Clear-Actions:在行動集中立刻清楚所有的動作
Write-Meterdata meterdata/mask:在中繼資料區域紀錄中繼資料
動作Action
Require Action:
Outport:封包輸出到指定端口
Drop:丢棄
Group:用組表處理封包
Optional Action:
Set-Queue:設定封包的隊列ID,為了QoS的需要
Push-Tag/Pop-Tag
Set-Field:設定封包標頭的類型和和修改標頭的值
Change-TTL:修改TTL的值
動作執行的順序(動作集Action Set):
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 行動中指定的端口轉發。
Output 行動最後執行。如果組行動和輸出行動均存在,那麼組行動優先級高。如果兩者均 不存在,那麼封包被丢棄。
一個流表項可以使用 Write-Action 指令或者 Clear-Action指令修改行動集。
行動集在表間被累加。
當一個表項的指令集沒有包含 Goto-Table 指令時,流水線處理就停止了,然後封包的行動集就被執行。
行動集包含所有的行動,無論他們以什麼順序加入到行動集中,行動的順序均按照下列順序執行。
如果行動集包含組行動,那麼組行動存儲段中的行動也按照下列順序執行。當然, 交換機也可以支援通過Apply-Actions指令修改行動執行順序。
8.流表比對:
注釋:比對到相應的流表後(table 0------>table n):
1.更新計數器
2.執行指令(更新行動集、更新比對域、更新中繼資料)
未比對到table:
檢視是否存在table-miss,沒有則丢棄流表
(table-miss 表項指定在流表中如何處 理與其他流表項未比對的資料包。比如資料包發送到控制器,丢棄資料包或直接 将包扔到後續的表。)