基於DPDK 的OVS 數據包處理流程
1)OVS 的內核態空間接收到網卡的中斷通知后,通過用戶空間的I/O(userspace I/O,UIO) 驅動輪詢模塊接收到網卡發來的數據包,用戶態空間通過DPDK 的PMD 收端口驅動直接接收來自網卡的報文。
2)用戶態空間收取到報文之后,從數據包中提取由流表需要匹配的有效信息( 源/目的IP、MAC、端口等) ,通過這些信息查看控制器下發的流表信息來進行匹配,通過流表下發的匹配規則來進行報文的轉發操作,首先需要根據是否有緩存信息的流表來進行模糊匹配,如果匹配存在,將數據報文直接從內核態空間的橋接口發送,轉發至下一個指定的橋接口,進行快速轉發。
3)如果模糊匹配沒有命中,在用戶態再進行一次流表結構精確匹配,如果精確匹配存在,將報文通過流表指定出接口轉發。
4)如果精確匹配沒有命中,那么將數據報文在有控制器接收的情況下,通過openflow 協議,通知控制器,用戶態空間將該報文轉交給控制器處理,通過控制器識別該報文,並對該類報文進行統一的管理,學習轉發規則,生成新的流表下發給用戶態空間。
5)控制器通過上報的報文下發新的流表給用戶態空間,用戶態空間根據接收的新流表進行更新並且再次匹配,根據新匹配的流表進行相應的報文處理操作,即轉發或丟棄。
傳統OVS 數據包處理流程
1)OVS 的內核態空間數據通道模塊接收某個網卡中斷驅動發送的數據包,從數據包中提取源/目的IP、MAC 地址、端口等信息,在內核態空間緩存中去進行匹配數據通道上的流表結構,如果匹配命中,則進行快速轉發,即模糊匹配。
2)如果模糊匹配沒有命中,則通過netlink upcall 機制通知用戶態空間。內核態空間復制報文到用戶態空間之后,通過數據報文的匹配原則,查詢用戶態精確流表,如果精確匹配命中,將報文通過流表指定出接口轉發。
3)如果精確匹配沒有命中,在控制器接入的情況下,通過openflow 協議,通知控制器,將報文由用戶態空間復制到控制器進行處理。控制器接收到報文之后對報文進行識別和下發指定流表操作,告知用戶態空間如何處理這個報文。
4)控制器根據上報的報文重新下發流表,用戶態空間會根據接收的流表將內核態空間的流表進行更新,更新后,重新把數據發送給數據通道模塊,數據通道模塊重新匹配,然后做相應的報文處理操作轉發或丟棄。
參考文獻:[1]胡衛文,陳俊強.基於DPDK技術實現OVS[J].網絡新媒體技術,2018,7(01):47-53.