軟體定義網路與 NFV

比對動作表(match-action table)

想像一位拿著檢查清單的海關人員。對每件包裹,他看某些標籤(產地、申報價值、內容物),照第一條匹配的規則辦事:這種組合放行、那種扣留、另一種送驗。比對動作表正是封包版的這份清單。每一列實際上在說:如果某封包的欄位長這樣,就做那件事。交換器讀出抵達封包的相關欄位,找出匹配的那一列,執行所列的動作。

具體來說,每條表項有三個部分:比對(對封包標頭欄位的樣式,可帶萬用字元——例如目的 IP 屬於 10.0.0.0/8 且 TCP 埠為 80)、優先序(讓多條都匹配時最明確的那條勝出),以及一組動作(從第 4 埠轉送、丟棄、改寫目的 MAC、遞減 TTL、送給控制器)。許多規則還保有計數器(匹配到的封包數與位元組數)供監控用。表常被串成一條管線:封包在第 0 表匹配後,可能被送到第 1 表做進一步處理,依此類推。這個「先比對再動作」的模型,就是 OpenFlow 所揭露、也是真實交換器硬體(與可程式化資料平面)所實作的。

為什麼重要:比對動作表是現代 SDN 式網路如何轉送的核心。不再是每台設備各跑分散式路由協定、各自決定,而是由控制器把規則填入這些表,交換器只負責執行——在硬體中快速完成。它夠通用,能在同一個框架裡表達路由、交換、防火牆、負載平衡與 NAT。誠實的限制在於容量與表達力:硬體表能容納的條目數有限(尤其是快速的 TCAM),而一張普通的比對動作表只能比對它被造出來時就懂的欄位,這也是可程式化解析器與 P4 存在的部分原因。

某交換器持有這些表項,優先序由高到低:(1)比對目的 IP 10.0.5.7,動作為從第 2 埠轉送;(2)比對目的 IP 10.0.0.0/8,動作為從第 5 埠轉送;(3)比對任意,動作為送給控制器。發往 10.0.5.7 的封包匹配規則 1,從第 2 埠離開。發往 10.0.9.3 的封包落到規則 2,從第 5 埠離開。發往 8.8.8.8 的封包只匹配規則 3,被上呈給控制器。

多列都匹配時由優先序決定勝出者;越明確通常代表優先序越高。

比對動作表比傳統的轉送表更通用:後者只比對目的位址,而比對動作規則可同時比對許多欄位並套用豐富的動作,所以同一張表能把路由、過濾、改寫一起做。

又稱
flow tablematch-action pipeline流表比對動作管線