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