Open vSwitch系列之一 Open vSwitch誕生
Open vSwitch系列之三 ovs-vsctl 命令使用
Open vSwitch系列之四 ovs-ofctl命令使用
2006年,SDN誕生於美國GENI項目資助的斯坦福大學Clean Slate課題,斯坦福大學Nick McKeown教授為首的研究團隊提出了Openflow的概念用於校園網絡的試驗創新,后續基於Openflow給網絡帶來可編程的特性,SDN的概念應運而生。Clean Slate項目的最終目的是要重新發明英特網,旨在改變設計已略顯不合時宜,且難以進化發展的現有網絡基礎架構。
SDN的誕生,打破了網絡傳統設備制造商領域。SDN架構下,交換機要支持可編程能力,要能夠理解控制器下發的流表。網絡硬件設備制造商因為成本等因素不提供對硬件進行重新編程的能力; 核心ASIC芯片從設計、定型到市場推廣所需的超長周期,使得芯片制造商不願意對新協議和標准輕易試水,導致硬件缺乏可編程特性。

基於以上兩個原因,Nick的學生Martin提出解決辦法。Martin認為基於x86的虛擬交換機將會彌補傳統硬件交換機轉發面靈活性不足這一短板。 2007年8月的某一天,Martin Casado提交了第一個開源虛擬機的commit,這個開源虛擬交換機在2009年五月份正式稱之為Open VSwitch。
如下是初代ovs交換機的硬件


隨后,ovs交換得到學術界的認可,並逐步走向商業化。

Open vSwitch 交換機

Open vSwitch是在開源的Apache2.0許可下的產品級質量的多層虛擬交換標准!它旨在通過編程擴展,使龐大的網絡自動化(配置、管理、維護),同時還支持標准的管理接口和協議。
安全:VLAN隔離、流量過濾 監控:NetFlow Qos 自動控制
ovs交換機的角色
在SDN的架構下,ovs作為 SDN交換機,向上連接控制器,向下連接主機。並且Open vSwitch交換機是能夠與真是物理交換機通信,相互交流數據。

ovs交換機的組成
- ovs-vswitchd:ovs守護進程,實現基於流的交換,實現內核datapath upcall 處理以及ofproto 查表,同時是dpdk datapath處理程序。與ovsdb-server通信使用OVSDB協議,與內核模塊使用netlink機制通信,與controller通信使用OpenFlow協議。
- ovsdb-server:OVS輕量級的數據庫服務器的服務程序,用於保存整個OVS的配置信息。數據庫服務程序, 使用目前普遍認可的ovsdb 協議。
- ovs-vsctl:網橋、接口等的創建、刪除、設置、查詢等。
- ovs-dpctl:配置vswitch內核模塊
- ovs-appctl:發送命令消息到ovs-vswithchd, 查看不同模塊狀態
- ovs-ofctl:下發流表信息。該命令可以配置其他openflow 交換機(采用openflow 協議)
- datapath: Datapath把流的match和action結果緩存,避免后續同樣的流繼續upcall到用戶空間進行流表匹配。
- ovs-db:開放虛擬交換機數據庫是一種輕量級的數據庫,它是一個JSON文件,默認路徑:/etc/openvswitch/conf.db;
可以通過命令ovsdb-client dump將數據庫結構打印出來。OVSDB中包含一系列記錄網橋、端口、QoS等網絡配置信息的表,這些表均以JSON格式保存。
每一個ovs交換機中,數據庫中存在的表如下:

數據包處理流程
1.ovs的datapath接收到從ovs連接的某個網絡設備發來的數據包,從數據包中提取源/目的IP、源/目的MAC、端口等信息。
2.ovs在內核狀態下查看流表結構(通過Hash),觀察是否有緩存的信息可用於轉發這個數據包。
3.假設數據包是這個網絡設備發來的第一個數據包,在OVS內核中,將不會有相應的流表緩存信息存在,那么內核將不會知道如何處置這個數據包。所以內核將發送upcall給用戶態。
4.ovs-vswitchd進程接收到upcall后,將檢查數據庫以查詢數據包的目的端口是哪里,然后告訴內核應該將數據包轉發到哪個端口,例如eth0。
5.內核執行用戶此前設置的動作。即內核將數據包轉發給端口eth0,進而數據被發送出去。
ovs在OpenStack中的應用
OpenStack中的網橋br-int、br-tun、br-ex都ovs創建,其中保存流表,用於指定數據流方向。

