一、概況
隨著服務器虛擬化技術的發展,網絡虛擬化也需要解決從NIC到虛機的“最后一公里”問題,便產生了許多虛擬交換機開源方案:Open vSwitch、Snabb Switch 和 Lagopus,其中Open vSwitch的知名度最高。
Open vSwitch項目早在2009年,就已孵化誕生,于2012年7月30日發布第一個開源版本V1.7.0,內核datapath已經被納入Linux內核作為發行版的一部分。
二、工作原理
1.組件
l ovsdb-server將配置信息保存在conf.db中,并通過db.sock提供服務,ovs-vswitchd通過這個db.sock從這個進程讀取配置信息。
l ovs-vswitchd: OVS守護進程,實現基于流的交換(flow-based switching)。與controller通信使用OpenFlow協議,與ovsdb-server通信使用OVSDB協議,與內核模塊使用netlink機制通信。
l ovsdb-server: OVS輕量級的數據庫服務器,用于保存整個OVS的配置信息。
l Forwarding Path(數據通路):Datapath把流的match和action結果緩存,避免后續同樣的流繼續upcall到用戶空間進行流表匹配。
2.工作流程
①OVS的datapath接收到從OVS連接的某個網絡設備發來的數據包,從數據包中提取源/目的IP、源/目的MAC、端口等信息。
②OVS在內核狀態下查看流表結構(通過Hash),觀察是否有緩存的信息可用于轉發這個數據包。
③假設數據包是這個網絡設備發來的第一個數據包,在OVS內核中,將不會有相應的流表緩存信息存在,那么內核將不會知道如何處置這個數據包。所以內核將發送upcall給用戶態。
④位于用戶態的ovs-vswitchd進程接收到upcall后,將檢查數據庫以查詢數據包的目的端口是哪里,然后告訴內核應該將數據包轉發到哪個端口,例如eth0。
⑤內核執行用戶此前設置的動作。即內核將數據包轉發給端口eth0,進而數據被發送出去。
三、命令接口
1.Open vSwitch提供了ovs-vsctl、ovs-ofctl、ovs-dpctl等命令,詳情如下:
l ovs-vsctl:管理ovsdb-server的配置,提供OVSDB的配置方法,包括創建和刪除網橋、端口等;
l ovs-ofctl:提供ovs-vswitchd的流表配置方法;
l ovs-dpctl:配置OVS內核模塊,提供緩存流表的操作方法;
l ovsdb-tool:創建和管理OVSDB。
- 命令示例
(1)網橋管理
命令 | 功能 |
---|---|
ovs-vsctl show | 顯示OVS信息 |
ovs-vsctl add-brbr-name | 添加新的網橋br-name |
ovs-vsctl del-brbr-name | 刪除br-name |
ovs-vsctl list-br | 顯示網橋br-name信息 |
ovs-vsctl list-portsbr-name | 顯示網橋br-name中所有port信息 |
ovs-vsctl add-portbr-name port-no | br-name添加端口 |
ovs-vsctl del-portbr-name port-no | 刪除br-name上的端口 |
ovs-vsctl get-controllerbr-name | 獲取br-name連接控制器的信息 |
ovs-vsctl del-controllerbr-name | 刪除br-name連接控制器的信息 |
ovs-vsctl set-controller *br-name *tcp: [ip] : [port] | br-name網橋連接控制器controller |
(2)流表管理
命令 | 功能 |
---|---|
ovs-ofctl showbr-name | 輸出OpenFlow信息。 |
ovs-ofctl add-flowbr-name flow | 添加流表項。 |
ovs-ofctl add-flowsbr-name filename | 以文件形式批量添加流表項。 |
ovs-ofctl del-flowsbr-name flow | 刪除交換機的流表項。 |
-
交換機
+關注
關注
21文章
2656瀏覽量
99997 -
服務器虛擬化
+關注
關注
0文章
6瀏覽量
7731 -
NIC
+關注
關注
0文章
23瀏覽量
12457 -
網絡虛擬化
+關注
關注
0文章
11瀏覽量
3004
發布評論請先 登錄
相關推薦
評論