現代的虛擬化技術使得開發和部署高級網絡服務變得更加簡單方便。基於虛擬化的網絡服務,具有多樣性,低成本,易集成,易管理,低持有成本等優點。而虛擬交換機已經成爲了一個高度虛擬化環境不可缺少的一部分。OpenVSwitch是所有虛機交換機中的佼佼者,廣泛被各種SDN方案採用。
OpenVSwitch kernel datapath
OpenVSwitch是一個實現了OpenFlow的虛擬交換機,它由多個模塊組成。主要有位於用戶空間的ovsdb-server和ovs-vswitchd進程,和位於內核空間的OVS datapath組成。在一個SDN架構中,Controller將各種網絡拓撲,網絡功能轉換成OVS的數據和OpenFlow規則,分別下發給ovsdb-server和ovs-vswitchd進程,OpenFlow規則可以通過ovs-ofctl dump-flows查看。
網絡數據的轉發,都是由位於內核空間的OVS datapath完成。用戶空間和內核空間的信息是怎麼同步的?對於一個網絡數據流,第一個數據包到達OVS datapath,這個時候的datapath沒有轉發信息,並不知道怎麼完成轉發。接下來OVS datapath會查詢位於用戶空間的ovs-vswitchd進程。ovs-vswitchd進程因爲有OpenFlow信息,可以根據OpenFlow規則完成match-action操作,也就是從一堆OpenFlow規則裏面匹配網絡數據包對應的規則,根據這些規則裏的action實現轉發。
這樣第一個數據包就完成了轉發。與此同時,ovs-vswitchd會通過netlink向OVS datapath寫入一條(也有可能是多條)轉發規則,這裏的規則不同於OpenFlow規則,可以通過ovs-dpctl dump-flows查看。這樣,同一個網絡數據流的後繼網絡數據包到達OVS datapath時,因爲已經有了轉發規則,datapath就可以直接完成轉發,不再需要向ovs-vswitchd查詢。