2019/10/21 Flow-level State Transition as a New Switch Primitive for SDN
===
###### tags: `SDN` `Flow-level State`
## Abstract
現在已經有很多的 controller應用可以提供給不同管理網路的方式,大多數的應用也都是依靠 flow-based的規則,而通常 controller會存入Proactive和 Reactive兩種flow-based rule到 switch中。而在這篇論文中他們的目的就是為了融合上述兩者的優點來製作一個新的 flow-base rule,他們稱它為 FAST(Flow-level State Transitions)。
### Proactive
Controller會在新的 flow來到之前在 switch裡佈置好規則,但是這個辦法也必須要事先知道目前交換機的事件以及要如何處理事件。
### Reactive
在 Reactive中,交換機通常會將事(例如,每個 flow的第一個封包)發送到控制器,並且控制器根據這些事件安裝基於流的規則。 但是,由於交換機和控制器之間的通信通道有限,這會在交換機上引入大量開銷(CPU,內存等),性能開銷(即延遲和吞吐量)以及可伸縮性問題。
### FAST(Flow-level State Transitions)
FAST會允許 controller主動的去轉換狀態,並允許switch對本地資料進行動態操作。FAST可以支援大多數的動態應用程式,並且還可以在現今大多數的switch上輕鬆實現。
## FAST的設計
### Abstraction

* **Task**:
State會需要一個表儲存不同狀態對應到的計數器數字
* **State**
Controller會將狀態的名字變成狀態集合所代表的位元字串,並且更新計數器進入到下一個狀態。
* **Transitions**
Transitions可以用在封裝狀態變數的 Condition
* **Filter**
使用者一樣也可以使用這個來過濾流量
* **Instance Mapping**
它是一個可以解析並映射到正確狀態的一個 function
### Controller

FAST的編譯器會將使用者的狀態機變成 switch可以跑得程式碼,並部屬到各個獨立的 switch。
#### Switch agent responsibilities
1. 將狀態機轉換為switch的API
2. 如果switch不支持狀態機需要的功能,它會退回 Reactive方法,並透過封包的內容執行部分狀態機
3. 如果有需要將本地事件(狀態更改)通知網絡範圍的工作,則 switch agent會對交換器進行編程,以發送數據包以報告給該工作。
### Data-plane

作者認為這是從flow-base rule到基於狀態機的 data-plane的步驟。 他們使用TCP狀態機作為運行示例來說明狀態機的組件,這些組件可以使用在現有的交換機上,並且可已在硬體端來實現。該設計包含四個表。
#### State machine filter table
State machine filter table會在多種狀態機中間共享,而其他三個表則是會在各自的狀態機定義中。
#### State table
State table可以跟蹤狀態機的詳細資訊並且它可以用hash-table來實作。
#### State transitions table
作者會將這個表分出來有兩個原因。
* 第一是因為它可以用的更簡潔: Action table的每個動作可以對應到多種的狀態,例如不管狀態機是 Established state 或是 Init1 state都可以指定到相同的動作(轉到port 1)。
* 更重要的是因為問題可能會有需要以不同方式展開的情況。 雖然已經有一個TCP狀態機的實例了,但與處於特定狀態的 flow相對應的操作可能取決於flow本身(例如,輸出端口)。 Switch agent通過在過 filter table中添加規則,為狀態表指定 hash field和初始狀態,以及在相應的表中安裝狀態轉換規則和操作規則,在data-plane上安裝狀態機。
## Conclusion

作者說他們已經成功實現了,並利用 open vSwitch學習動作並更改狀態。與flow-based rule的原始方法相比,FAST可以支持更多靈活的網絡任務,可以提高SDN控制器的性能和可延展性,並且可以使用目前多數 switch組件輕鬆實現。