本文主要介紹Open VSwitch - 虛擬交換機的概述內容,閱讀本文可以對OVS(Open VSwitch)有一個大致的了解。那么本文主要回答了這樣幾個問題:
1. 虛擬交換機是什么,干什么?
2. 虛擬網絡和OVS
3. OVS的組件有哪些?
4. 使用OVS創建一個網絡拓撲
5. 示例
一、 Open VSwitch是什么
OVS是一個高質量的,多層虛擬交換機(網絡分層的層),其目的是讓大規模網絡自動化可以通過編程擴展,同時仍然支持標准的管理接口和協議:NetFlow. SFlow ... 等,並且它還支持多個物理機的分布式環境。詳情請見http://openvswitch.org / http://lamoop.com/post/2013-11-18/40060149263
那什么又是虛擬交換呢?就是,利用軟件的方式形成交換部件,所以也叫軟件交換機,跟傳統的物理交換機相比,虛擬交換機同要具備很多有點:1.配置靈活,因為是軟件實現的,一台物理服務器上可以配置數十太或者數百台虛擬交換機,而且端口數目可以靈活選擇 2. 成本低廉,通過軟件的方式可輕易達到10Gbps的交換速度。
所以OVS是一個虛擬交換機,可以用來組成虛擬網絡,虛擬機還有其他的類型不同的架構。
二、虛擬網絡
淺顯的理解就是 使用虛擬交換機組成的網絡,就是虛擬網絡(和物理網絡相比) ,如圖所示: 綠色虛線內組成的就是一個虛擬網絡了。其虛擬機之間的信息交換都通過虛擬交換機。
三、 OVS組件
有了全局的概念后,我們來詳細了解OVS的內部組件。簡單來看,OVS由這三大部分構成:
1. ovsdb-sever: OVS的數據庫服務器,用來存儲虛擬交換機的配置信息。它於manager和ovs-vswitchd交換信息使用了OVSDB(JSON-RPC)的方式。
2. ovs-vswitchd: OVS的核心部件,它和上層controller通信遵從OPENFLOW協議,它與ovsdb-server通信使用OVSDB協議,它和內核模塊通過netlink通信,它支持多個獨立的datapath(網橋),它通過更改flow table實現了綁定,和VLAN等功能。
3. ovs kernel module: OVS的內核模塊,處理包交換和隧道,緩存flow,如果在內核的緩存中找到轉發規則則轉發,否則發向用戶空間去處理。
四、OVS結構詳解

ovs-vswitchd 主要模塊,實現switch的daemon,包括一個支持流交換的Linux內核模塊;
ovsdb-server 輕量級數據庫服務器,提供ovs-vswitchd獲取配置信息;
ovs-brcompatd 讓ovs-vswitch替換Linuxbridge,包括獲取bridge ioctls的Linux內核模塊;
ovs-dpctl 用來配置switch內核模塊;一些Scripts and specs 輔助OVS安裝在Citrix XenServer上,作為默認switch;
ovs-vsctl 查詢和更新ovs-vswitchd的配置;
ovs-appctl 發送命令消息,運行相關daemon;
ovsdbmonitor GUI工具,可以遠程獲取OVS數據庫和OpenFlow的流表。
此外,OVS也提供了支持OpenFlow的特性實現,包括
ovs-openflowd:一個簡單的OpenFlow交換機;
ovs-controller:一個簡單的OpenFlow控制器;
ovs-ofctl 查詢和控制OpenFlow交換機和控制器;
ovs-pki :OpenFlow交換機創建和管理公鑰框架;
ovs-tcpundump:tcpdump的補丁,解析OpenFlow的消息;
運行原理:
內核模塊實現了多個“數據路徑”(類似於網橋),每個都可以有多個“vports”(類似於橋內的端口)。每個數據路徑也通過關聯一下流表
(flow table)來設置操作,而這些流表中的流都是用戶空間在報文頭和元數據的基礎上映射的關鍵信息,一般的操作都是將數據包轉發
到另一個vport。當一個數據包到達一個vport,內核模塊所做的處理是提取其流的關鍵信息並在流表中查找這些關鍵信息。當有一個匹配
的流時它執行對應的操作。如果沒有匹配,它會將數據包送到用戶空間的處理隊列中(作為處理的一部分,用戶空間可能會設置一個流
用於以后碰到相同類型的數據包可以在內核中執行操作)。
五、示例
1. 物理機器之間通過虛擬交換機
2. 一台物理機上的虛擬機之間的虛擬交換機
由於對虛擬交換機還不了解怎么應用,所以示例有點簡單。以后再補充。