日韩精品成人无码专区免费-国产99久久久久久免费看-国产精品丝袜久久久久久不卡-国产精品无码一区二区三区

基于 Open vSwitch 的 OpenFlow 實踐

發布時間:2024-05-09 點擊:135
open vswitch 概述
open vswitch(下面簡稱為 ovs)是由 nicira networks 主導的,運行在虛擬化平臺(例如 kvm,xen)上的虛擬交換機。在虛擬化平臺上,ovs 可以為動態變化的端點提供 2 層交換功能,很好的控制虛擬網絡中的訪問策略、網絡隔離、流量監控等等。
ovs 遵循 apache 2.0 許可證, 能同時支持多種標準的管理接口和協議。ovs 也提供了對 openflow 協議的支持,用戶可以使用任何支持 openflow 協議的控制器對 ovs 進行遠程管理控制。
open vswitch 概述
在 ovs 中, 有幾個非常重要的概念:
bridge: bridge 代表一個以太網交換機(switch),一個主機中可以創建一個或者多個 bridge 設備。 port: 端口與物理交換機的端口概念類似,每個 port 都隸屬于一個 bridge。 interface: 連接到 port 的網絡接口設備。在通常情況下,port 和 interface 是一對一的關系, 只有在配置 port 為 bond 模式后,port 和 interface 是一對多的關系。 controller: openflow 控制器。ovs 可以同時接受一個或者多個 openflow 控制器的管理。 datapath: 在 ovs 中,datapath 負責執行數據交換,也就是把從接收端口收到的數據包在流表中進行匹配,并執行匹配到的動作。 flow table: 每個 datapath 都和一個“flow table”關聯,當 datapath 接收到數據之后, ovs 會在 flow table 中查找可以匹配的 flow,執行對應的操作, 例如轉發數據到另外的端口。
open vswitch 實驗環境配置
ovs 可以安裝在主流的 linux 操作系統中,用戶可以選擇直接安裝編譯好的軟件包,或者下載源碼進行編譯安裝。
在我們的實驗環境中,使用的操作系統是 64 位 ubuntu server 12.04.3 lts,并通過源碼編譯的方式安裝了 open vswitch 1.11.0
$ lsb_release -a no lsb modules are available. distributor id:ubuntu description:ubuntu 12.04.3 lts release:12.04 codename:precise
ovs 的源碼編譯安裝方式可以參考官方文檔how to install open vswitch on linux, freebsd and netbsd。
安裝完畢后,檢查 ovs 的運行情況:
$ ps -ea | grep ovs 12533 ? 00:00:00 ovs_workq 12549 ? 00:00:04 ovsdb-server 12565 ? 00:00:48 ovs-vswitchd 12566 ? 00:00:00 ovs-vswitchd
查看 ovs 的版本信息, 我們安裝版本的是 1.11.0
$ ovs-appctl –version ovs-appctl (open vswitch) 1.11.0 compiled oct 28 2013 14:17:16
查看 ovs 支持的 openflow 協議的版本
$ ovs-ofctl –version ovs-ofctl (open vswitch) 1.11.0 compiled oct 28 2013 14:17:17 openflow versions 0x1:0x4 基于 open vswitch 的 openflow 實踐
openflow 是用于管理交換機流表的協議,ovs-ofctl 則是 ovs 提供的命令行工具。在沒有配置 openflow 控制器的模式下,用戶可以使用 ovs-ofctl 命令通過 openflow 協議去連接 ovs,創建、修改或刪除 ovs 中的流表項,并對 ovs 的運行狀況進行動態監控。
flow 語法說明
在 openflow 的白皮書中,flow 被定義為某個特定的網絡流量。例如,一個 tcp 連接就是一個 flow,或者從某個 ip 地址發出來的數據包,都可以被認為是一個 flow。支持 openflow 協議的交換機應該包括一個或者多個流表,流表中的條目包含:數據包頭的信息、匹配成功后要執行的指令和統計信息。
當數據包進入 ovs 后,會將數據包和流表中的流表項進行匹配,如果發現了匹配的流表項,則執行該流表項中的指令集。相反,如果數據包在流表中沒有發現任何匹配,ovs 會通過控制通道把數據包發到 openflow 控制器中。
在 ovs 中,流表項作為 ovs-ofctl 的參數,采用如下的格式:字段=值。如果有多個字段,可以用逗號或者空格分開。一些常用的字段列舉如下:
表 1. 流表常用字段
字段名稱
說明
in_port=port
傳遞數據包的端口的 openflow 端口編號
dl_vlan=vlan
數據包的 vlan tag 值,范圍是 0-4095,0xffff 代表不包含 vlan tag 的數據包
dl_src=<mac>
dl_dst=<mac>
匹配源或者目標的 mac 地址
01:00:00:00:00:00/01:00:00:00:00:00 代表廣播地址
00:00:00:00:00:00/01:00:00:00:00:00 代表單播地址
dl_type=ethertype
匹配以太網協議類型,其中:
dl_type=0x0800 代表 ipv4 協議
dl_type=0x086dd 代表 ipv6 協議
dl_type=0x0806 代表 arp 協議
完整的的類型列表可以參見以太網協議類型列表
nw_src=ip[/netmask]
nw_dst=ip[/netmask]
當 dl_typ=0x0800 時,匹配源或者目標的 ipv4 地址,可以使 ip 地址或者域名
nw_proto=proto
和 dl_type 字段協同使用。
當 dl_type=0x0800 時,匹配 ip 協議編號
當 dl_type=0x086dd 代表 ipv6 協議編號
完整的 ip 協議編號可以參見ip 協議編號列表
table=number
指定要使用的流表的編號,范圍是 0-254。在不指定的情況下,默認值為 0。通過使用流表編號,可以創建或者修改多個 table 中的 flow
reg<idx>=value[/mask]
交換機中的寄存器的值。當一個數據包進入交換機時,所有的寄存器都被清零,用戶可以通過 action 的指令修改寄存器中的值
對于 add−flow,add−flows 和 mod−flows 這三個命令,還需要指定要執行的動作:actions=[target][,target…]
一個流規則中可能有多個動作,按照指定的先后順序執行。
常見的操作有:
output:port: 輸出數據包到指定的端口。port 是指端口的 openflow 端口編號 mod_vlan_vid: 修改數據包中的 vlan tag strip_vlan: 移除數據包中的 vlan tag mod_dl_src/ mod_dl_dest: 修改源或者目標的 mac 地址信息 mod_nw_src/mod_nw_dst: 修改源或者目標的 ipv4 地址信息 resubmit:port: 替換流表的 in_port 字段,并重新進行匹配 load:value−>dst[start..end]: 寫數據到指定的字段
實踐操作 openflow 命令
在本例中, 我們會創建一個不連接到任何控制器的 ovs 交換機,并演示如何使用 ovs-octl 命令操作 openflow 流表。
創建一個新的 ovs 交換機
$ ovs-vsctl add-br ovs-switch
創建一個端口 p0,設置端口 p0 的 openflow 端口編號為 100(如果在創建端口的時候沒有指定 openflow 端口編號,ovs 會自動生成一個)。
$ ovs-vsctl add-port ovs-switch p0 — set interface p0 ofport_request=100
設置網絡接口設備的類型為“internal”。對于 internal 類型的的網絡接口,ovs 會同時在 linux 系統中創建一個可以用來收發數據的模擬網絡設備。我們可以為這個網絡設備配置 ip 地址、進行數據監聽等等。
$ ovs-vsctl set interface p0 type=internal $ ethto

如何取消電腦IE瀏覽器中允許對剪切板進行訪問的提示
鞍山如何注冊商標
網址注冊可以在哪個平臺注冊?
上海備案填寫了驗證碼怎么提示還是提示沒有網站負責人的照片
農產品發現新機遇?網站建設助力轉型
云服務器配置1核夠
上海云服務器租用的網站
申請文字商標可行嗎