軟體定義網路 - OpenFlow 中 Flow Table 介紹
reference:
- OpenFlow Switch: What Is It and How Does it Work?
- 圖 : Flow Table Packet Processing Pipeline
- 2-2 FlowTables
- OpenFlow Switch Specification
- 圖 : 各版本openflow 的 header 長相
- OpenFlow 交換器規範 1.3.0 (1)
- Ryubook 1.0 說明文件
目錄:
1. Open Flow 的架構

- 在 OpenFlow 的交換器中,最主要的結構就是 Flow Table。
- Flow Table 彼此具有順序性,封包也被規定不能由後往前傳遞。
1.1 Flow Table 的 Pipeline


2. Flow Table 和 Flow Entry
※此 Flow Table為 OpenFlow 1.3 的樣式,1.0~1.2 版本可以參考 1 2 3
| Match Fields | Priority | Counter | Instructions | Timeouts | Cookie | Flags |
|---|---|---|---|---|---|---|
| … | … | … | … | … | … | … |
- 整個表會稱為 Flow Table,裡面的每個 row 稱為 Flow Entry。
3 Flow Table 的欄位
3.1 各個欄位的作用:
| 名稱 | 解釋 |
|---|---|
| Match Fields | 要去比對 packet 有沒有符合 flow entry,比對的內容至少有以下:
|
| Priority | flow entry 的優先程度,數字越高越優先,最小為零。 |
| Counter | 紀錄以下資訊(當封包mtach時就更新):
|
| Instruction | 當封包符合 flow entry 的條件時,所要做的動作,包括以下:
|
| Timeouts | 標記此 flow entry 甚麼時候要被消除,包含以下兩種形式:
|
| Cookie |
|
| Flags | 用來改變 flow entry 的管理方式,例如 OFPFF_SEND_FLOW_REM 會觸發到刪除此 flow entry 的 message。 |
3.2 Flow Table 管線處理流程

- 封包一定要從 table 0 開始比對。
- 由 priority 高的開始比對。
3.3 Table Miss Entry
以下是某個 Flow Table :
| Match Fields | Priority | Counter | Instructions | Timeouts | Cookie | Flags |
|---|---|---|---|---|---|---|
| … | … | … | … | … | … | … |
| ANY | 0 | … | … | … | … | … |
| … | … | … | … | … | … | … |
由上表可以看到,Table Miss Entry 所使用的 Match Feild 是 ANY,且因為是最後比的,因此 Priority 是最低的 0 。
4. Action Set 中 Action 的執行順序
| 順位 | 名稱 | 功能 |
|---|---|---|
| 1. | copy TTL inwards | |
| 2. | pop | |
| 3. | push-MPLS | |
| 4. | push-PBB | |
| 5. | push-VLAN | |
| 6. | copy TTL | |
| 7. | decrement TTL | TTL-=1 |
| 8. | set (set-field) | 修改封包內的某些欄位 |
| 9. | qos (set-queue) | 寫入一個 queue id 進到指定封包內 |
| 10. | group | 如果有指定 group action ,就依照 group table 內的指令做 |
| 11. | output | 如果沒有指定 group action,則在 output action 指定的 port 轉發 packet。 |
- TTL : Time To Live 指一個封包在經過一個路由器時,可傳遞的最長距離(躍點數)。目的是防止封包因不正確的路由表等原因造成的無限循環而無法送達及耗盡網路資源。