使用开源交换机(Open vSwitch)软件

文章目录

  • Open vSwitch安装及部署
  • Open vSwitch网桥管理
    • 网桥相关的基本概念
    • 常用的网桥命令,进行网桥和端口的添加、删除、查看等操作
  • Open vSwitch流表管理
    • Open vSwitch流表的基本概念。
    • 常用的流表命令,进行流表的添加、删除、查看等操作
  • Open vSwitch 端口镜像
    • 端口镜像的作用,利用Open vSwitch设置端口映射
  • Open vSwitch QoS设置
    • QoS(Quality of Service)等相关网络知识
    • 利用Open vSwitch调控网络性能
  • Open vSwitch流量监控
    • 部署sFlow Collector和sFlow Agent
    • 使用sFlow对Mininet模拟的Open vSwitch端口流量进行监控

Open vSwitch安装及部署

这一部分我参考了一篇大佬的博客:ubuntu安装运行Open vSwitch

Open vSwitch网桥管理

网桥相关的基本概念

??在网络中,交换机和桥概念类似,Open vSwitch是一个虚拟交换软件,也就是说,Open vSwitch实现了网桥的功能。学习Open vSwitch的第一步要弄清楚网桥的概念。网桥是连接两个局域网的设备,工作在数据链路层,根据MAC地址来转发帧。在Open vSwitch中创建一个网桥后,此时网络功能不受影响,但是会产生一个虚拟网卡,之所以会产生一个虚拟网卡,是为了实现接下来的网桥(交换机)功能。有了这个网桥以后,还需要为这个网桥增加端口(port),一个端口就是一个物理网卡,当网卡加入到这个网桥之后,其工作方式就和普通交换机的一个端口的工作方式类似了。

??创建桥的时候会创建一个和桥名字一样的接口,并自动作为该桥的一个端口,那么这个虚拟接口的作用,一方面是可以作为交换机的管理端口,另一方面也是基于这个虚拟接口实现了桥的功能。Open vSwitch的内核模块实现了多个“数据路径”,每个都可以有多个vports。每个数据路径也通过关联流表(flow table)来设置操作,而这些流表中的流都是用户空间在报文头和元数据的基础上映射的关键信息,一般的操作都是将数据包转发到另一个vport。当一个数据包到达一个vport,内核模块所做的处理是提取其流的关键信息并在流表中查找这些关键信息,当有一个匹配的流时它执行对应的操作,如果没有匹配,它会将数据包送到用户空间的处理队列中,作为处理的一部分,用户空间可能会设置一个流用于以后碰到相同类型的数据包可以在内核中执行操作。

常用的网桥命令,进行网桥和端口的添加、删除、查看等操作

ovs-vsctl关于网桥管理的常用命令如下:

命令 含义
init 初始化数据库(前提数据分组为空)
show 打印数据库信息摘要
add-br BRIDGE 添加新的网桥
del-br BRIDGE 删除网桥
list-br 打印网桥摘要信息
list-ports BRIDGE 打印网桥中所有port摘要信息
add-port BRIDGE PORT 向网桥中添加端口
del-port [BRIDGE] PORT 删除网桥上的端口
get-controller BRIDGE 获取网桥的控制器信息
del-controller BRIDGE 删除网桥的控制器信息
set-controller BRIDGE TARGET 向网桥添加控制器

Open vSwitch流表管理

Open vSwitch流表的基本概念。

??OpenFlow是用于管理交换机流表的协议,ovs-ofctl是Open vSwitch提供的命令行工具。在没有配置OpenFlow控制器的模式下,用户可以使用ovs-ofctl命令通过OpenFlow协议连接Open vSwitch来创建、修改或删除Open vSwitch中的流表项,并对Open vSwitch的运行状况进行动态监控。

??在OpenFlow白皮书中,Flow被定义为某个特定的网络流量。例如,一个TCP连接就是一个Flow,或者从某个IP地址发出来的数据包,都可以被认为是一个Flow。支持OpenFlow协议的交换机应该包括一个或多个流表,流表中的条目包含:数据包头的信息、匹配成功后要执行的指令和统计信息。当数据包进入OVS后,会将数据包和流表中的流表项进行匹配,如果发现了匹配的流表项,则执行该流表项中的指令集。相反,如果数据包在流表中没有发现任何匹配,OVS会通过控制通道把数据包发到OpenFlow控制器中。

常用的流表命令,进行流表的添加、删除、查看等操作

ovs-ofctl关于流表管理的常用命令如下表所示。

命令 含义
show SWITCH 输出OpenFlow信息
dump-ports SWITCH PORT 输出端口统计信息
dump-ports-desc SWITCH 输出端口描述信息
dump-flows SWITCH 输出交换机中所有的流表项
dump-flows SWITCH FLOW 输出交换机中匹配的流表项
add-flow SWITCH FLOW 向交换机中添加流表项
add-flows SWITCH FILE 在文件中向交换机添加流表项
mod-flows SWITCH FLOW 修改交换机的流表项
del-flows SWITCH FLOW 删除交换机的流表项

??对于add-flow、add-flows和mod-flows这3个命令,还需要指定要执行的动作actions=[target],[target]…,一个流规则中可能有多个动作,按照指定的先后顺序执行。
常见的流表操作如下表所示。

操作 说明
output:port 输出数据包到指定端口,port指端口的OpenFlow端口编号
mod_vlan_vid 修改数据包中的VLANtag
strip_vlan 移除数据包中的VLANtag
mod_dl_src/mod_dl_dest 修改源或者目标MAC地址信息
mod_nw_src/mod_nw_dst 修改源或者目标IPv4地址信息
resubmit:port 替换流表的in_port字段,并重新进行匹配
load:value->dst[start, end] 写数据到指定字段

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

字段名称 说明
in_port=port 传递数据包端口的OpenFlow端口编号
dl_vlan=vlan 数据包的VLANTag值,范围0-4095,0xffff代表不包含VLANTag
dl_src(dst)= 匹配源/目标MAC地址
dl_type=ethertype 匹配以太网协议类型:0x800代表IPv4;0x86dd代表IPv6;0x806代表ARP
nw_src(dst)=ip[/netmask] 匹配源或目标IPv4地址,可以使用IP地址或域名
nw_proto=proto 与dl_type协同使用,匹配IP/IPv6编号
table=number 流表编号,范围0-254,默认为0
reg=value[/mask] 交换机中寄存器的值

Open vSwitch 端口镜像

端口镜像的作用,利用Open vSwitch设置端口映射

??端口镜像(port Mirroring)是把交换机一个或多个端口(VLAN)的数据镜像到一个或多个端口的方法。在一些交换机中,我们可以通过对交换机的配置来实现将某个端口上的数据包,拷贝一份到另外一个端口上,这个过程就是端口镜像。

  • 端口映射:把在公网的地址转翻译成私有地址,或者反过来。比如你通过路由器用ADSL上百度,你本机地址是192.168.1.10,但百度看到的IP地址是你的路由器的IP地址。百度把数据发送给路由器,你的路由器通过内置的端口映射表把数据转发给你。
  • 端口镜像:把一个端口上的数据同时发送到原端口和另外一个端口,相当于另外一个端口得到了一个复本。它跟端口映射的主要区别在于:映射的目的是转发,而镜像的目的是复制!

??这里原文中写的是端口映射,可能是笔误,所以这里就统一为端口镜像

使用开源交换机(Open vSwitch)软件
??首先,根据预先设置的匹配规则来对报文进行分类,如果是没有规定流量特性的报文,就直接继续发送,并不需要经过令牌桶的处理;如果是需要进行流量控制的报文,则会进入令牌桶中进行处理。如果令牌桶中有足够的令牌可以用来发送报文,则允许报文通过,报文可以被继续发送下去。如果令牌桶中的令牌不满足报文的发送条件,则报文被丢弃。这样,就可以对某类报文的流量进行控制。
??Open vSwitch本身并不具备QoS功能,是基于linux的”tc”(流量控制器)功能实现的,是已经在Linux内核中存在的功能。而Open vSwitch所做的是对其部分支持的tc功能进行配置。在Linux的QoS中,接收数据包使用的方法叫策略(policing),当速率超过了配置速率,就简单的把数据包丢弃。不通过OpenFlow设置,直接在interface上设置。例如:
  • ovs-vsctl set interface vif1.0 ingress_policing_rate=10000
  • ovs-vsctl set interface vif1.0 ingress_policing_burst=8000

??上面两行命令,把虚拟端口vif1.0的最大接收速率设置为10000kbps,桶大小设置为8000kb。策略使用了简单的令牌桶(token bucket)算法。我们以一定的速度不断生成令牌,除非令牌桶装满。每接收一个包,需要消耗一个令牌;如果没有令牌了,就会把新到达的包丢弃。如果到达包的速度大于令牌的生成速度,那么令牌很快消耗干净,新到达的包只能丢弃,那么接收包的速度很快就降下来,和令牌的生成速度一致。所以接收包的速度依赖于令牌的生成速度,换句话说,不能大于令牌的生成速度,也就是最大接收速率,即ingree_policing_rate的值,单位是kbps。如果到达包的速度小于令牌的生成速度,那么令牌很快堆满令牌桶,这时到达包的速度突然增大,令牌桶中有足够的令牌。这一瞬间可供消耗的令牌有桶中的令牌,也有不断生成的令牌,导致接收包的速度也会突然增大,大于令牌的生成速度,也就是大于我们设置的最大接收速率,称为突发接收速率。这时虽然突发接收速率大于最大接受速率,但是也是有限制的,最多增加的速率(最大突发接收速率减去最大接收速率)依赖于桶的大小,换句话说,增加的吞吐量不能大于桶的大小,即ingress_policing_burst的值,单位是kb。在上面的例子中,如果所有包的大小都是1kb,那么最多增加的速率达到8000kbps,最大突发接收速率达到18000kbps。
??:接口和端口是两个比较容易混淆的概念。一般是物理上的概念,主机后面的就是接口,有KVM接口、以太网接口、同步串口等,也可以是逻辑上的概念比如VLAN的interface。端口是TCP/UDP协议的一个概念,用来区分某种应用,例如telnet的端口是23、而www的端口是80等。Open vSwitch既可以针对网络接口,也可以针对端口设置QoS,本实验中的QoS设置就是一个针对接口设置QoS的用例。

利用Open vSwitch调控网络性能

一、检验环境
ifconfig查看主机ip;两台主机之间进行ping操作确保互通

二、测试主机间的吞吐量
在主机1上执行以下命令,确认Open vSwitch进程。

执行以下命令,创建网桥br0,并将eth0网卡挂接到br0。

将eth0挂接到br0后,ovs云主机无法与其他主机通信,执行以下命令将eth0的IP赋给br0,如下图所示。

使用开源交换机(Open vSwitch)软件
三、设置QoS参数
在主机1上执行以下命令设置eth0吞吐量为100±50Mbps。

说明:利用ingress_policing_rate设置eth0端口最大速率(kbps),ingress_policing_burst设置最大浮动速率(kbps)。

执行以下命令启动客户端,测量服务器与主机之间的吞吐量,如下图所示。

使用开源交换机(Open vSwitch)软件

使用sFlow对Mininet模拟的Open vSwitch端口流量进行监控

一、部署sFlow Collector
??首先,要想安装sFlow的话,首先要安装JAVA,我参考了一篇大佬的博客:(我选择了直接命令行安装,因为也挺快的,环境也是用的虚拟机Ubuntu18.04)

  1. 更新软件包列表:
  1. 安装openjdk-8-jdk:
  1. 查看java版本,看看是否安装成功:

结果如下图:

使用开源交换机(Open vSwitch)软件
上图表示sFlow Collector已经启动,默认监听端口为6343,可以通过虚拟机内置的浏览器输入http://localhost:8008 打开监控页面。

二、部署sFlow Agent
步骤1 选择主机1,单击终端图标,进入命令行终端。执行 su root切换到root用户。
步骤2 执行如下命令,进入root家目录,启动Mininet服务,模拟搭建一个交换机下挂2个主机的网络拓扑结构,结果如下图所示。

这里的screen真不知道是个什么东西,下面还没做,我环境崩了,重新搭一下先

使用开源交换机(Open vSwitch)软件
由上图可知,当前有主机h1和h2、默认控制器c0、网桥s1。

步骤4 执行h1 ifconfig命令,查看h1的网卡信息,如下图所示。

使用开源交换机(Open vSwitch)软件
由上图可知,网桥s1无IP。

步骤6 执行su root切换到root用户,然后执行如下命令把eth0端口IP复制给s1。

说明:通过eth0端口是无法监控到Mininet内部两个主机的ping测试。因此需要把eth0端口IP复制给s1,由s1端口作为sFlow Agent来监听。其中192.168.1.4是主机1的IP地址。

步骤7 输入ifconfig |more命令查看配置后的各端口状态,如下图所示。

使用开源交换机(Open vSwitch)软件
步骤9 切换到虚拟机界面,开启OvS的sFlow功能,并配置sFlow Agent,命令如下。

注意:该命令执行的次数和需要开启sflow的网桥的数目有关,有几个网桥,就需要执行几次此命令。参数说明如下:

agent:虚拟机对应的某个监控流量的网卡,本实验用s1网卡产生和监控流量。
target:sFlow Collector的IP,默认端口6343。
bridge:需要开启sflow的网桥。
步骤10 配置完成后,输入如下命令查看已经配置的Agent信息。

使用开源交换机(Open vSwitch)软件
由上图可知,eth0对应的编号是2,s1-eth1对应的编号是3,s1-eth2对应的编号是5,s1对应的编号是8。

三、查看监控结果
步骤1 登录主机1,输入http://localhost:8008 ,在登录sFlow Collector Web页面,查看Agents选项卡,可知已将虚拟机1(192.168.1.4)加到监控对象。

使用开源交换机(Open vSwitch)软件
使用开源交换机(Open vSwitch)软件
使用开源交换机(Open vSwitch)软件

来源:CNG Steve·Curcy

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2020年2月26日
下一篇 2020年2月26日

相关推荐