Open vSwitch 概述

Open vSwitch(下面简称为 OVS)是由 Nicira Networks 主导的,运行在虚拟化平台(例如 KVM,Xen)上的虚拟交换机。在虚拟化平台上,OVS 可以为动态变化的端点提供 2 层交换功能,很好的控制虚拟网络中的访问策略、网络隔离、流量监控等等。

Openvswitch的架构图如下所示

主要组成解释如下

ovs-vswitchd:守护程序,实现交换功能,和Linux内核兼容模块一起,实现基于流的交换flow-based switching。
ovsdb-server:轻量级的数据库服务,主要保存了整个OVS的配置信息,包括接口啊,交换内容,VLAN啊等等。ovs-vswitchd会根据数据库中的配置信息工作。
ovs-dpctl:一个工具,用来配置交换机内核模块,可以控制转发规则。
ovs-vsctl:主要是获取或者更改ovs-vswitchd的配置信息,此工具操作的时候会更新ovsdb-server中的数据库。
ovs-appctl:主要是向OVS守护进程发送命令的,一般用不上。
ovsdbmonitor:GUI工具来显示ovsdb-server中数据信息。
ovs-controller:一个简单的OpenFlow控制器
ovs-ofctl:用来控制OVS作为OpenFlow交换机工作时候的流表内容。

Flow 语法说明

openvswitch支持openflow协议,openflow channel 负责与controller进行交互,

交换机基于流表(Flow Table)转发,每个流表包含许多流表项entry,每个entry是对数据包处理的规则,其主要组成如下图

match Fields(匹配字段)主要如下:

字段名称	说明
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 协议编号

table=number	        指定要使用的流表的编号,范围是 0-254。在不指定的情况下,默认值为 0。通过使用流表编号,可以创建或者修改多个 Table 中的 Flow
reg<idx>=value[/mask]	交换机中的寄存器的值。当一个数据包进入交换机时,所有的寄存器都被清零,用户可以通过 Action 的指令修改寄存器中的值 对于 add−flow                        ,add−flows 和 mod−flows 这三个命令,还需要指定要执行的动作:actions=[target][,target...]

Priority为流表优先级,是一个0-65535之间的数字,值越大,优先级越高。

一个流规则中可能有多个Instructions(动作),按照指定的先后顺序执行。

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]: 写数据到指定的字段

Cookie是用来标示一系列流的64位数字。

Flow处理过程

如果有多个流表,则数据包按流表id从小到大一次进行匹配,如下图所示

报文在一个流表中进行匹配是,找优先级最高的流表项进行匹配,如下图所示

Creative Commons License
This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.
永久连接: http://www.nfvschool.cn/?p=561
标签:

发表评论