Open vSwitch概述

来源:互联网 发布:算法设计与分析 考研 编辑:程序博客网 时间:2024/06/05 11:34

Open vSwitch概述:

Open vSwitchh一个高质量的、多层虚拟交换机,使用开源Apache2.0许可协议。它的主要目的是让大规模网络自动化可以通过编程扩展,同时仍然支持标准的管理接口和协议(例如NetFlow,sFlow,SPAN,RSPAN,CLI,LACP,802.1ag)。

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

      在Open vSwitch中,有几个非常重要的概念:

      Bridge:Bridge代表一个以太网交换机(Switch),一个主机中可以创建一个或者多个Bridge设备。

      Port:端口与物理交换机的端口概念类似,每个Port隶属于一个Bridge。

      Interface:连接到Port的网络接口设备。在通常情况下,port和interface是一对一的关系,只有在配置port为bond模式后,port和interface是一对多的关系。

      Controller:OpenFlow控制器。Open vSwitch可以同时接受一个或者多个OpenFlow控制器的管理。

      Datapath:在Open vSwitch中, datapath负责执行数据交换,也就是把从接收端口收到的数据包在流表中进行匹配,并执行匹配到的动作。

      Flow table:流表,每个datapath都和一个流表关联,当datapath接收到数据后,Open vSwitch会在流表中查找匹配的flow,执行对应的操作,例如转发数据到另外的端口。

Open vSwitch模块:

Ovs-vswitched:主要模块,实现switch的daemon,包含一个支持流交换的Linux内核模块。

Ovsdb-server:轻量级数据库服务器,提供ovs-vswitchd获取配置信息。

Ovs-brcompatd:让ovs-vswitch替换Linuxbridge,包含获取bridge ioctls的Linux内核模块。

Ovs-dpctl:用来配置switch内核模块。

Ovs-vsctl:查询和更新ovs-vswitchd的配置;

Ovs-appctl:发送命令消息,运行相关的daemon;

Ovsdbmonitor :GUI工具,可以远程获取OpenvSwitch数据库和OpenFlow的流表。

Ovs-openflowd:一个简单的openflow交换机。

Ovs-controller:一个简单的openflow控制器。

Ovs-ofctl:查询和控制openflow交换机和控制器。

Ovs-pki:openflow交换机创建和 管理公钥框架。

Ovs-tcpundump:tcpdump的补丁,解析openflow的消息。

Flow语法说明:

       当数据包进入Open vSwitch后,会将数据包和流表中的流表进行匹配,如果发现了匹配的流表项,则执行该流表中的指令集。相反,如果数据包在流表中没有发现任何匹配,Open vSwitch会通过控制通道把数据报文发送到openflow控制器中。

      在Open vSwitch中,流表项作为ovs-ofctl的参数,采用如下的格式:字段=值。如果有多个字段,可以用逗号或者空格分开,一些常用的字段有:

in_port=port     传递数据包端口的openflow端口编号。

dl_vlan=vlan      数据包的vlan tag值,范围是0-4095,0xffff表示不包含vlan tag的数据包。

dl_src=<MAC>/dl_dst=<MAC>   匹配源或者目的mac地址。

dl_type=ethertype   匹配以太网类型。

nw_src=ip[/netmask]、nw_dst=ip[/netmask] 当dl_type=0x0800时,匹配源或者目的 ipv4地址,可以使用ip地址或者域名。

nw_proto=proto      和dl_type协同使用,IP或者ipv6头下层数据的协议号。

table=number         指定要使用的流表的编号,范围是0-254。在不指定的情况下,默认值为0。通过使用流表编号,可以创建或者修改多个table中的flow。

reg<idx>=value[/mask] 交换机中寄存器的值。当一个数据包进入交换机时,所有寄存器都被清零,用户可以通过Action的指令修改寄存器中的值。

对于add-flow,add-flows和mod-flows这三个命令,还需要指定要执行的动作:action=[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]:写数据到指定的字段。

Sflow和Netflow

      netflow会针对所有经过网络的报文取得报文的特征,包含五元组、入接口、ToS这些信息,若网络流量较大时,netflow所提供的资料量亦会随之增加,如果资料量太大,后端分析引擎可能不堪负荷,进而影响资料判断时的正确性。

      sflow的做法和netflow不同,sflow以取样的方式取出资料的摘要,使用者可以自定义取样大小以及取样周期,即使流经大量的网络流量,sflow经取样后的资料相对于netflow而言会大量的减少,如此一来就可以兼顾资料正确性并保证后端分析引擎处理能力。所以,sflow常运用于高速网络的环境,也是因为其具有此特性的关系。

0 0
原创粉丝点击