- SDN环境部署与OpenDaylight开发入门
- 程丽明
- 11955字
- 2025-02-22 06:39:53
第3章 现有SDN交换机简介
随着SDN的落地发展以及SDN硬件交换机应用在生产环境中的场景不断增长,已有越来越多的厂商从事SDN硬件交换机的生产。SDN交换机包括SDN虚拟交换机和SDN硬件交换机。
SDN虚拟交换机主要包括OVS(Open vSwitch)交换机,OVS是最具影响力的虚拟交换机,具有生产级的质量,在商业上得到了广泛的应用,甚至很多云平台的虚拟交换机都是基于OVS改造而来的。本章将在3.1节首先对其进行介绍。
接着本章将在3.2节对市场上主流的SDN硬件交换机厂商及其主打产品进行简要介绍,包括思科、博科、华为、瞻博网络、NEC、戴尔、Arista、H3C新华三、锐捷网络、xNET网锐科技、盛科网络。
最后在3.3节对本章进行总结。
3.1 OVS简介
3.1.1 认识OVS
OVS(Open vSwitch)具有生产级的质量,在商业上得到了广泛的应用。OVS是一个使用开源Apache 2.0许可证的多层虚拟交换机。通过可编程扩展,OVS能在仍支持标准管理接口和协议(如NetFlow、sFlow、IPFIX、RSPAN、CLI、LACP、802.1ag)的同时实现大规模网络自动化。OVS的目标是实现一个支持标准管理接口、向外开放转发功能以实现可编程扩展和控制的工业级交换机。
OVS能在VM环境中很好地实现虚拟交换机的功能,如图3-1所示。除向虚拟网络层开放标准控制和可视接口外,OVS能很好地支持跨物理服务器的分布式虚拟交换机(类似的产品如VMware vNetwork的虚拟分布式交换机vSwitch和思科的Nexus 1000V)。

图3-1 OVS简介
OVS在保证必要性能的情况下尽可能缩小内核代码的规模,并且在适当时尽量复用已有的子系统(如OVS使用现有的QoS协议栈)。大部分代码是用独立于平台的C语言编写的,能很容易地移植到其他环境中。
在Linux 3.3及以上的版本中,OVS是内核和用户空间工具的一部分,得到了广泛的使用。OVS也可以只在用户空间(无须核心模块)中使用。OVS在用户空间能访问Linux或DPDK设备,但需要注意的是,OVS使用用户空间数据路径和非DPDK设备时通常是为实验所有的,这种情况下OVS的性能会降低。
OVS目前支持的功能有:
● 标准的802.1Q VLAN模型(躯干和接入端口的)。
● 在上游交换机带有或不带有LACP的网卡绑定。
● NetFlow、sFlow(R)、提高可见性的镜像。
● QoS(服务质量)配置及策略。
● Geneve、GRE、VxLAN、STT、Lisp隧道。
● 802.1ag连接故障管理。
● OpenFlow 1.0及以上多种扩展。
●(与C和Python绑定的)事务数据库的配置。
● 使用Linux内核模块的高性能转发。
OVS的主要组成构件包括以下几项。
● ovs-vswitchd:一个实现基于流的交换机功能的守护进程,包括相伴的一个Linux内核模块。
● ovsdb-server:一个轻量级的数据库服务器,ovs-vswitchd查询此数据库以获得其配置。
● ovs-dpctl:一个配置交换机核心模块的工具。
● 为Citrix XenServer和红帽Linux创建RPM的脚本和规范。XenServer RPM允许Open vSwitch被安装在Citrix XenServer主机上,作为其交换机带有其他附加功能的drop-in替代。
● ovs-vsctl:用于查询和更新的ovs-vswitchd配置的工具。
● ovs-appctl:发送命令到运行的OVS守护进程的工具。
除以上之外,OVS还提供以下工具。
● ovs-ofctl:用于查询和控制OpenFlow交换机和控制器的工具。
● ovs-pki:为OpenFlow交换机创建和管理公钥基础设施的工具。
● ovs-testcontroller:一个简单的OpenFlow控制器,可用于测试。
3.1.2 OVS常用的命令
1.查询和配置OVS的命令:ovs-vsctl
ovs-vsctl通过提供一个高层次的接口用于查询和更新的ovs-vswitchd配置,ovs-vsctl可连接到一个ovsdb-server进程,此进程用于维护一个OVS配置数据库。
语法为:
ovs-vsctl [options] --[options] command [args] [--[options] command [args]]...
ovs-vsctl的第一个options是一个全局选项,随后紧跟一个或多个命令。每个命令需要由符号--开始,其自身的参数为一个命令行参数,然后由空格与下一个命令分隔开。
(1)添加一个OVS网桥
添加一个名称为br0的OVS网桥,使用选项add-br:
ovs-vsctl add-br br0
(2)删除指定的OVS网桥,例如删除OVS网桥br1:
ovs-vsctl del-br br1
(3)列出当前所有的OVS网桥:
ovs-vsctl list-br
(4)将端口添加到指定的网桥上。
将物理网卡eth8添加到OVS网桥br0上:
ovs-vsctl add-port br0 eth8
将虚拟网卡vif2.0添加到OVS网桥br0上,并且将tag设为33:
ovs-vsctl add-port br0 vif2.0 tag=33
结果显示如图3-2所示。

图3-2 将端口添加到指定的网桥上
(5)删除OVS网桥上指定的端口。
删除网桥br0上的端口eth8(注意,若未指定网桥,则在所有网桥的所有端口删除):
ovs-vsctl del-port br0 eth8
(6)列出OVS网桥上的端口:
ovs-vsctl list-ports br0
(7)设置OVS连接的控制器。
连接到IP为192.168.1.55、端口为6633的控制器上:
ovs-vsctl set-controller br0 tcp:192.168.1.55:6633
(8)删除OVS连接的控制器。
删除br0所连接的控制器:
ovs-vsctl del-controller br0
(9)列出OVS连接的控制器。
列出br0所连接的控制器:
ovs-vsctl get-controller br0
(10)限制端口速度。
将VM1的速度限制到1Mbps,波动为0.1Mbps,运行:
ovs-vsctl set Interface tap0 ingress_policing_rate=1000 ovs-vsctl set Interface tap0 ingress_policing_burst=100
(11)端口镜像的相关指令。
将br0网桥上端口eth8、eth9接收到的流量镜像转发一份给vif1.0端口,命令如下:
ovs-vsctl set Bridge br0 mirrors=@m \ -- --id=@eth8 get Port eth8 \ -- --id=@eth9 get Port eth9 \ -- --id=@vif1.0 get Port vif1.0\ -- --id=@m create Mirror name=BDmirror select-dst-port=@eth8, @eth9 select-src-port=@eth9, @eth8 output-port=@vif1.0
清除br0上所有的端口映像,命令如下:
ovs-vsctl clear bridge br0 mirrors
2.流操作命令:ovs-ofctl
ovs-ofctl是监控和管理OpenFlow交换机的命令,显示其当前状态,包括功能、配置、流表项。注意,此命令不仅能用于OVS,还能用于所有支持OpenFlow的交换机。
语法为:
ovs-ofctl [options] command [switch][args]
ovs-ofctl的命令(command)主要包括添加流(add-flow)、修改流(mod-flows)、删除流(del-flow)、替代流(replace)、区别流(diff-flows)等,其中添加流(add-flow)和删除流(del-flow)的命令使用较多。
ovs-ofctl的[options]中其中一个参数——strict意味着严格匹配。
ovs-ofctl命令中最为复杂的是流表的语法,以下一些命令中包含着一条或多条流的引用,这些引用如field=value的格式,由逗号或空格(需要引用,以防内核将此描述误认为多个参数)隔离开。流定义必须先在底层已定义的情况才可定义。如果L2层(网络第二层)的协议类型(dl_type)是指定匹配的(wildcarded),那么L3层(网络第三层)的协议,如IP源地址(nw_src)、IP目标地址(nw_dst)和协议类型(nw_proto)也必须为指定通配的。如果在流中有某个字段省去,就默认该字段为通配的(wildcard)。符号*可以指定为通配的(wildcard),但需要引用起来以与shell表达式区分。下面按流表匹配L1层、L2层、L3层、L4层的顺序进行简要介绍,接着介绍流表可执行的操作(action=…)部分,最后介绍其他一些值得注意的地方。限于篇幅,还有许多命令没有列出,有兴趣的读者可参考ovs-ofctl命令指南自行实验。
(1)匹配L1层
下面介绍在L1层中,流表匹配in_port的情况。
1)in_port
in_port=port, port为端口号或LOCAL。匹配br0上端口号为1的数据包,将其发送到编号为4的端口:
ovs-ofctl add-flow br0 in_port=1, action=output:4
运行后查看,可见br0添加流表项,如图3-3所示。

图3-3 in_port操作结果
(2)匹配L2层
下面介绍在L2层中,流表匹配dl_vlan、dl_vlan_pcp、dl_type、dl_src、dl_dst的情况。
1)dl_vlan
dl_vlan=vlan,其中vlan为0xffff,意味着无vlan标识的数据包,vlan的范围为[0,4095]。匹配无vlan标识的数据包,使其正常转发:
ovs-ofctl add-flow br0 dl_vlan=0xffff, action=normal
也可使用双引号将流标注起来:
ovs-ofctl add-flow br0 "dl_vlan=0xffff, actions=normal"
运行后查看,可见br0添加流表项,如图3-4所示。

图3-4 dl_vlan操作结果
2)dl_vlan_pcp
dl_vlan_pcp=priority,值为[0,7],一般为0。值越高说明帧优先级越高。匹配vlan的pcp为0的数据包,使其正常转发:
ovs-ofctl add-flow br0 dl_vlan_pcp=0, action=normal
运行后查看,可见br0添加流表项,如图3-5所示。

图3-5 dl_vlan_pcp操作结果
3)dl_type
匹配icmp数据包(需要匹配以下两条),使其正常转发:
ovs-ofctl add-flow br0 dl_type=0x0806, action=normal ovs-ofctl add-flow br0 dl_type=0x0800, action=normal
运行后查看,可见br0添加流表项,如图3-6所示。

图3-6 dl_type操作结果
4)dl_src/dl_dst
匹配源/目标Mac地址的数据包,格式如下。其中xx:xx:xx:xx:xx:xx指代的是某个Mac地址,yy:yy:yy:yy:yy:yy是Mac地址通配符掩码。
① 匹配一个源Mac地址为xx:xx:xx:xx:xx:xx的数据包:
dl_src=xx:xx:xx:xx:xx:xx
② 匹配一个目标Mac地址为xx:xx:xx:xx:xx:xx的数据包:
dl_dst=xx:xx:xx:xx:xx:xx
③ 匹配一个范围内源Mac地址的数据包:
dl_src=xx:xx:xx:xx:xx:xx/yy:yy:yy:yy:yy:yy
④ 匹配一个范围内目标Mac地址的数据包:
dl_dst=xx:xx:xx:xx:xx:xx/yy:yy:yy:yy:yy:yy
注意,OVS 1.8及之后的版本支持任意的Mac地址通配符掩码,之前的版本仅支持以下4个通配符掩码。
● 01:00:00:00:00:00:仅匹配多播位,如dl_dst=01:00:00:00:00:00/01:00:00:00:00:00匹配所有的组播数据包(包括广播), dl_dst=00:00:00:00:00:00/01:00:00:00:00:00匹配所有的单播数据包。
● ff:ff:ff:ff:ff:ff:精确匹配,相当于没有掩码。
● 00:00:00:00:00:00:匹配所有的位,相当于dl_dst=*。
● fe:ff:ff:ff:ff:ff:匹配除了组播位外的所有位。
下面举例说明。
屏蔽所有进入OVS网桥br0的以太网广播数据包:
ovs-ofctl add-flow br0 "dl_src=01:00:00:00:00:00/01:00:00:00:00:00, actions=drop"
屏蔽所有从OVS发出的以太网广播数据包:
ovs-ofctl add-flow br0 "dl_dst=01:00:00:00:00:00/01:00:00:00:00:00, actions=drop"
运行后查看,可见br0添加流表项,如图3-7所示。

图3-7 dl_src/dl_dst操作结果1
设置两台机器能相互Ping通,其中物理机的MAC地址为8c:89:a5:bd:ba:d3,虚拟机(连接OVS)的MAC地址为00:16:3e:1a:10:28。
ovs-ofctl add-flow br0 dl_src=8c:89:a5:bd:ba:d3, action=normal ovs-ofctl add-flow br0 dl_src=00:16:3e:1a:10:28, action=normal
运行后查看,可见br0添加流表项,如图3-8所示。

图3-8 dl_src/dl_dst操作结果2
运行Ping命令,发现可Ping通,如图3-9所示。

图3-9 两机相互ping通
(3)匹配L3层
下面介绍在L3层中,流表匹配nw_proto、nw_tos、nw_ecn、nw_ttl、nw_src、nw_dst的情况。注意,加入二层流表参数后,三层流表参数才起作用。
1)nw_proto
匹配符合协议类型的数据包。注意和dl_type区分,但同时也需要和dl_type一起使用,比如dl_type是ip(0x0800),那么nw_proto=1就表示icmp packet。下面介绍一些常见类型的数据包的dl_type值和nw_proto值。
ip:dl_type=0x0800
arp:dl_type=0x0806
icmp:dl_type=0x0800, nw_proto=1
tcp:dl_type=0x0800, nw_proto=6
udp:dl_type=0x0800, nw_proto=17
注意,以下命令不被OVS的1.1.0以下版本支持。
ipv6:dl_type=0x86dd
tcp6:dl_type=0x86dd, nw_proto=6
udp6:dl_type=0x86dd, nw_proto=17
icmp6:dl_type=0x86dd, nw_proto=58
以下命令匹配所有的icmp数据包,更改其源地址为192.168.1.47后正常转发:
ovs-ofctl add-flow br0 dl_type=0x0800, nw_proto=1, action=mod_nw_src:192.168.1.47, normal
运行后查看,如图3-10所示。从IP地址为192.168.1.55的机器向IP地址为192.168.1.142的机器Ping,于是在IP地址为192.168.1.142的机器上可见源IP为192.168.1.47。

图3-10 nw_proto操作结果
2)nw_tos
匹配tos,格式为nw_tos=tos,只有dl_type为wildcard、0x0800、0x86dd时此参数才有意义(才得到匹配), tos的值为[0,255]。
运行以下命令,匹配nw_tos为0且dl_type=0x0800的数据包,更改其目标地址为192.168.1.147后正常转发:
ovs-ofctl add-flow br0 dl_type=0x0800, nw_tos=0, action=mod_nw_dst:192.168.1.147, normal
运行后查看结果,如图3-11所示。

图3-11 nw_pos操作结果
3)nw_ecn
匹配指定ecn的数据包,格式为nw_ecn=ecn,只有dl_type为wildcard、0x0800、0x86dd才有意义,值为0、1、2、3。与IP Tos或IPv6流量的ecn比特匹配。
4)nw_ttl
匹配指定nw_ttl的数据包,只有dl_type为wildcard、0x0800、0x86dd才有意义,nw_ttl的值为[0,255]。
举例说明:
ovs-ofctl add-flow br0 dl_type=0x0800, nw_ttl>0, action=normal
5)nw_src/nw_dst
匹配源/目标ip地址的数据包,格式如下(其中[/netmask]为可选参数):
nw_src=ip[/netmask] nw_dst=ip[/netmask]
以上格式中需注意:
当dl_type=0x0800(可能为ip或tcp)时,匹配源或者目标的IPv4地址,可以使用IP地址或者域名(192.168.1.1或www.example.com)。netmask是可选的,如192.168.1.0/255.255.255.0或192.168.1.0/24格式。OVS 1.8之前的版本只支持后一种。
当dl_type设为通配符或除0x0800、0x0806、0x8035之外的值时,nw_src和nw_dst的值将被忽视。
下面举例说明nw_src。
输入以下命令,将来自192.168.1.55的IP数据包的IP地址改成47:
ovs-ofctl add-flow br0 dl_type=0x0800, nw_src=192.168.1.55, action=mod_nw_src:192.168.1.47, normal
或将其中的匹配条件直接写为ip:
ovs-ofctl add-flow br0 ip, nw_src=192.168.1.55, action=mod_nw_src:192.168.1.47, normal
运行后查看,可见br0添加流表项,如图3-12所示。

图3-12 nw_src/nw_dst操作结果1
下面举例说明nw_dst。
输入以下命令,将发送到192.168.1.142/24的IP数据包的源Mac地址改成11:22:33:44:55:66:
ovs-ofctl add-flow br0 dl_type=0x0800, nw_dst=192.168.1.142/24, action=mod_dl_src:11:22:33:44:55:66, normal
运行后查看,可见br0添加流表项,如图3-13所示。

图3-13 nw_src/nw_dst操作结果2
(4)匹配L4层
下面介绍在L4层中,流表匹配icmp_type、icmp_code、tp_src、tp_dst的情况。
1)icmp_type
输入以下命令,匹配指定icmp_type的数据包。
运行以下命令,将其复制转发到编号为4的端口,然后正常转发。注意,icmp_type=0是reply, icmp_type=8是request, arp必须添加。
ovs-ofctl add-flow br0 arp, action=output:4, normal ovs-ofctl add-flow br0 dl_type=0x0800, nw_proto=1, icmp_type=0, action=output:4, normal ovs-ofctl add-flow br0 dl_type=0x0800, nw_proto=1, icmp_type=8, action=output:4, normal
运行后查看,可见br0添加流表项,如图3-14所示。

图3-14 icmp_type操作结果
2)icmp_code
匹配指定icmp_code的数据包,需要注意dl_type和nw_proto需指定ICMP or ICMPv6才有意义,即它们的值分别为0x0800和1。
运行以下命令,匹配数据包,将其复制转发到编号为4的端口,然后正常转发。
ovs-ofctl add-flow br0 dl_type=0x0800, nw_proto=1, icmp_code=0, action=output:4, normal
运行后查看,可见br0添加流表项,如图3-15所示。

图3-15 icmp_code操作结果
3)tp_src/tp_dst
匹配源/目标端口地址的数据包,格式如下:
tp_src=port tp_dst=port
OVS 1.6及之后的版本还支持掩码的使用:
tp_src=port/mask tp_dst=port/mask
注意,dl_type和nw_proto必须指定TCP或UDP时,此项才生效,port为[0,65535](其中80为通用的HTTP服务器)。mask的1比特表示相应的port中的比特必须匹配,0表示忽略。其中TCP和UDP的参数分别如下。
● TCP:dl_type=0x0800, nw_proto=6。
● UDP:dl_type=0x0800, nw_proto=17。
实验如下:
① 将TCP目标端口为80的数据包转发设为正常:
ovs-ofctl add-flow br0 dl_type=0x0800, nw_proto=6, tp_dst=80, action=normal、
② 将TCP源端口为80的数据包转发设为正常:
ovs-ofctl add-flow br0 dl_type=0x0800, nw_proto=6, tp_src=80, action=normal
③ 将UDP目标端口为80的数据包转发设为正常:
ovs-ofctl add-flow br0 dl_type=0x0800, nw_proto=17, tp_dst=80, action=normal
④ 将UDP源端口为80的数据包转发设为正常:
ovs-ofctl add-flow br0 dl_type=0x0800, nw_proto=17, tp_src=80, action=normal
运行后查看,可见br0添加流表项,如图3-16所示。

图3-16 tp_src/tp_dst操作结果
(5)流表可执行的操作
① output:port
指定转发的端口,举例如下:
ovs-ofctl add-flow br0 in_port=1, action=output:4 ovs-ofctl add-flow br0 idle_timeout=0, in_port=2, action=output:4, output:6, normal ovs-ofctl add-flow br0 "table=3, priority=234, in_port=4, actions=output:4, output:6"
运行后查看,可见br0添加流表项,如图3-17所示。

图3-17 output:port操作结果
② flood
除了入口和禁止flood的端口外,将收到的数据包泛洪到其他所有的物理端口。将br0接收到的数据包泛洪,命令如下,如图3-18所示。

图3-18 flood操作结果
ovs-ofctl add-flow br0 in_port=1, ations=flood
③ all
除了入口外,将收到的数据包泛洪到其他所有的物理端口,示例如下:
ovs-ofctl add-flow br0 in_port=1, ations=all
④ normal(L2/L3)
指定数据包不由OVS处理,示例如下:
ovs-ofctl add-flow br0 action=normal
运行后查看,可见br0添加流表项,如图3-19所示。

图3-19 all操作结果
⑤ enqueue
enqueue:port:queue,将带宽限制加于某特征数据包流上,使用后数据包无法传达至原定目的地。port可以为端口或为LOCAL。
示例如下,假设vif0.0接在交换机x号端口上,流量入口为A,队列号为y。
ovs-ofctl add-flow br0 "in_port=A, idle_timeout=0, actions=enqueue:x:y" ovs-ofctl add-flow br0 "in_port=1, idle_timeout=0, actions=enqueue:4:0"
⑥ drop
丢弃数据包,将数据包直接丢弃,示例如下:
ovs-ofctl add-flow br0 action=drop
⑦ controller
controller(key=value...)
向controller发送packet in信息,支持如下key-value对。
max_len=nbytes:发送给控制器的最大长度,默认全发。
reason=reason:说明发送的原因,如action(默认)no_match、invalid_ttl。
id=controller-id:默认为0。
示例如下:
ovs-ofctl add-flow br0 in_port=1, action=controller:reason:no_match, normal
运行后查看,可见br0添加流表项,如图3-20所示。

图3-20 controller操作结果1
ovs-ofctl add-flow br0 table=0, priority=1000, dl_type=0x88cc, action=CONTROLLER:65535
运行后查看,可见br0添加流表项,如图3-21所示。

图3-21 controller操作结果2
⑧ mod_vlan_vid
增加或修改vlan id。
ovs-ofctl add-flow br0 in_port=1, action=mod_vlan_vid:123, normal
⑨ mod_dl_src
修改源MAC地址。将来自192.168.1.55的IP数据包的MAC地址改成33:33:33:33:82:1c,然后正常发送:
ovs-ofctl add-flow br0 dl_type=0x0800, nw_src=192.168.1.55, action=mod_dl_src:33:33:33:33:82:1c, normal
运行后查看,可见br0添加流表项,如图3-22所示。

图3-22 mod_dl_src操作结果
⑩ mod_dl_dst
修改目标MAC地址,示例如下:
ovs-ofctl add-flow br0 dl_type=0x0800, nw_scr=192.168.1.55, action=mod_dl_dst:33:33:33:33:82:1c, normal
运行后查看,可见br0添加流表项,如图3-23所示。

图3-23 mod_dl_dst操作结果
⑪ mod_nw_src
修改源IP地址。将来自192.168.1.55的IP数据包的源IP地址改成192.168.1.142,然后正常发送:
ovs-ofctl add-flow br0 ip, nw_src=192.168.1.55, action=mod_nw_src:192.168.1.142, normal
运行后查看,可见br0添加流表项,如图3-24所示。

图3-24 mod_nw_src操作结果
⑫ mod_nw_dst
修改目标IP地址。将发往192.168.1.55的IP数据包的目标IP地址改成192.168.1.47,然后正常发送:
ovs-ofctl add-flow br0 dl_type=0x0800, nw_src=192.168.1.55, action=mod_nw_dst:192.168.1.47, normal
运行后查看,可见br0添加流表项,如图3-25所示。

图3-25 mod_nw_dst操作结果
⑬ mod_tp_src
修改源4层地址,示例如下:
ovs-ofctl add-flow br0 tcp, action=mod_tp_src:1111, normal ovs-ofctl add-flow br0 icmp, action=normal ovs-ofctl add-flow br0 arp, action=normal
运行后查看,可见br0添加流表项,如图3-26所示。

图3-26 mod_tp_src操作结果
⑭ mod_tp_dst
修改目标4层地址。修改所有进入的TCP包的目标端口,示例如下:
ovs-ofctl add-flow br0 tcp, action=mod_tp_dst:1111, normal ovs-ofctl add-flow br0 icmp, action=normal ovs-ofctl add-flow br0 arp, action=normal
运行后查看,可见br0添加流表项,如图3-27所示。

图3-27 mod_tp_dst操作结果
⑮ mod_nw_tos
修改TOS的值,示例如下:
ovs-ofctl add-flow br0 ip, action=mod_nw_tos:200, normal ovs-ofctl add-flow br0 icmp, action=mod_nw_tos:200, normal
运行后查看,可见br0添加流表项,如图3-28所示。

图3-28 mod_nw_tos操作结果
在br0所在的机器上,使用Wireshark可见Differentiated Services Field为0xc8(即200)。
⑯ fin_timeout
fin_timeout(argument[, argument]),当规则符合TCP数据包中的FIN或RST标志时,更改idle timeout或/和hard timeout。当观察到时,action减少规则相关操作的timeout,若规则现有的timeout已比操作指明的任一个都短,则timeout不变。举例说明:
ovs-ofctl add-flow br0 "actions=normal, fin_timeout(hard_timeout=60)"
运行后查看,可见br0添加流表项,如图3-29所示。

图3-29 fin_timeout操作结果
(6)ovs-ofctl其他重要命令
① 流表有效期的处理
idle_timeout和hard_timeout是流表的两个重要的生存周期,其中idle_timeout指的是流表空闲期(未使用流表的时间)的值,hard_timeout是流表下发到交换机的时间,超过idle_timeout和hard_timeout中最小的时间,则将此流表丢弃。其中,若时间为0,则代表此流表永远生效。
举例说明:
ovs-ofctl add-flow br0 icmp, idle_timeout=60, action= normal ovs-ofctl add-flow br0 arp, idle_timeout=60, action= normal
运行后查看,可见br0添加流表项,如图3-30所示。

图3-30 idle_timeout和hard_timeout操作结果
② 改动OVS的端口状态
格式为:
ovs-ofctl mod-port switch port action
switch port action有多种值,常用的有up和down。将br0上的vif1.0端口设置为down,示例如下:
ovs-ofctl mod-port br0 vif1.0 down
运行后使用ifconfig命令查看,可见br0上的vif1.0端口状态变为down,如图3-31所示。

图3-31 改动OVS的端口状态
3.1.3 OVS的学习参考
(1)OVS的官方网站链接:http://openvswitch.org/。
(2)OVS的官方学习文档参考:http://openvswitch.org/support/dist-docs/。
(3)OVS的下载地址:http://openvswitch.org/download/。
(4)OVS的邮件列表:https://mail.openvswitch.org/mailman/listinfo。
3.2 SDN硬件交换机简介
SDN硬件交换机总的来说可以分为3种:一种是新兴创业公司,SDN硬件交换机就是他们起家的产品;一种是传统硬件厂商,为了适应市场的需求专门革新创建的新型交换机或只是对其旧有交换机进行改造,这些交换机通常能够支持传统业务;还有一种是互联网服务提供商(如Facebook自主设计的代号为Wedge的网络交换机),这类厂商制造其定制的SDN硬件交换机,专为自身业务服务,极少会对外出售。需要注意,市场上出售的SDN硬件交换机对于OpenFlow的协议支持并不完整,与OVS对OpenFlow的支持能力相比有较大的落差。
另外,SDN硬件交换机中较有意思的产品是裸交换机。这种裸交换机在销售时不安装任何交换机OS,其不止能应用于SDN场景,也可安装其他交换机OS,作为传统交换机或定制的交换机应用于指定的生产环境。
下面我们简单介绍11家SDN硬件交换机厂商及其主打产品。
3.2.1 思科
思科公司是领先的网络解决方案供应商,其设备和软件产品主要用于连接计算机网络系统,它占据全球交换机市场一半以上的份额。思科公司的经营范围几乎覆盖了网络建设的每个部分,以绝对的领先位置控制了互联网和数据传送的路由器、交换机等网络设备市场。
SDN的飞速发展对生产传统网络产品的思科产生了巨大的压力,在失去亚马逊10亿美元订单后,思科终于推出其SDN产品,其中也包括SDN交换机产品。SDN交换机产品中比较出名的主要有catalyst-3850-series-switches(可编程,支持SDN、onePK)、Cisco Nexus 7000 /7700 Series Switches(可编程,支持SDN)、Cisco Nexus 3000 Series Switches(可编程,支持onePK)。
catalyst-3850-series-switches(可编程,支持SDN, onePK)交换机主要定位于企业园区交换机,具有以下特性:
● 业内一流的堆叠式接入交换机。
Cisco Catalyst 3850交换机目前提供业界最高的堆栈带宽480 Gbps以满足网络需求,包括千兆位桌面和802.11ac无线。此交换机在所有端口上提供高性能24/48端口GE交换机、480 G堆叠、增强型以太网供电、StackPower和Flexible NetFlow等大量高级功能。
● 融合有线和无线接入。
Cisco Catalyst 3850交换机通过扩展有线基础设施的功能、恢复能力、精细服务质量(QoS)和扩展性,将Cisco IOS卓越性引入无线网络。其提供内置无线控制器功能和40G无线吞吐量,不仅支持每个交换机有50个接入点和2000个无线客户端,而且还支持802.11ac。
● 分布式智能服务。
Cisco Catalyst 3850交换机可在有线和无线网络中为安全和策略、应用可见性和控制、网络恢复能力、智能操作及其他方面实现通用智能服务。此交换机可基于无线网络的SSID、客户端、无线电、应用和公平共享策略等精细信息实现多级QoS。
● 思科开放网络环境的基础。
Cisco Catalyst 3850的核心是新型ASIC,其能够根据未来的功能和智能需要进行编程,并保护投资。新型ASIC可为有线和无线网络融合API、软件定义网络(SDN)支持和思科单平台套件(OnePK)提供基础。
3.2.2 博科
博科是存储网络行业的巨头,其主营业务也涉及SDN交换机,并且积极支持国内的SDN推广和技术共享。博科的SDN硬件交换机硬件产品主要分为两种:ICX系列交换机(混合,支持OpenFlow 1.3)、VDX系列交换机(混合,支持OpenFlow)。
● ICX系列交换机(混合,支持OpenFlow 1.3):ICX交换机的博科园区矩阵技术具备灵活的可扩展性和简化的管理,并且总体拥有成本(TCO)较低。随着用户的应用和设备数量的增长,可在整个园区范围内轻松扩展端口和服务。高级交换机可与入门级交换机共享高级服务,同时提供集中管理功能。此外,用户还能享受开放标准支持,它提供多供应商互操作性、SDN应用和投资保护。这个系列中接入交换机主要包括BROCADE RUCKUS ICX 7150交换机、BROCADE ICX 7250交换机、BROCADE ICX 6430和6450交换机。核心和聚合的交换机主要是BROCADE ICX 7750交换机。
● VDX系列交换机(混合,支持OpenFlow):运用在数据中心的场景中,主要包括BROCADE VDX 6740、6740T和6740T-1G交换机(支持新的软件定义网络(SDN)协议,如OpenFlow和VxLAN/NVGRE等)、BROCADE VDX 6940交换机(提供业内最开放的可编程功能和软件定义网络(SDN)选项,支持REST API、OpenFlow 1.3以及针对Puppet和Python的开发运营集成)、Brocade VDX 8770交换机(设计用于数据平面、控制平面和管理平面,支持SDN技术)。
3.2.3 华为
华为在很早就进入了SDN领域,华为交换机已广泛应用于政府、电信运营商、金融、教育和医疗等行业,敏捷交换机是其SDN战略的核心竞争力之一。到目前为止,华为已经推出了多款SDN硬件交换机产品,在这里简要介绍一下华为的S12700系列敏捷交换机产品。S12700系列敏捷交换机是混合可编程的,支持OpenFlow 1.3。主要的特性为:
● 全可编程架构,新业务通过编程实现,快速灵活,6个月即可上线。
● 利用ENP全可编程能力创新实现随板AC功能,可管理6K AP,64K用户,整机转发性能可达4T-bit。
● 可随时随地、逐点实时检测网络质量,提供秒级的故障检测,可精准定位故障端口,实现精准运维。
● SVF 2.0超级虚拟交换网,将“核心/汇聚+接入交换机+AP”网络架构虚拟化为一台设备进行管理,提供业界最简化网络管理方案。
● 对OpenFlow有很好的支持:支持多控制器、高达九级流表、高达256K流表、Group Table、Meter、Open Flow 1.3标准。
3.2.4 瞻博网络
瞻博(Juniper)网络专注网络创新,是著名的网络通信设备公司,客户包括全球排名前130名的服务提供商,财富100强中的96家企业、数百个公共部门机构,主要供应IP网络及资讯安全解决方案。Juniper的主要产品线包括广域网络加速、VF系列、E系列、J系列、M系列、T系列路由器产品家族,SRX系列防火墙,EX系列网络交换机及SDX服务部署系统等。
瞻博网络在较早时就推出了SDN产品,现在已经得到了较为广泛的应用。本书在这里主要介绍其EX9200以太网交换机产品。瞻博网络EX9200模块化以太网交换机为在园区和数据中心环境交付关键任务型应用提供了一种可编程、灵活和可扩展的核心,在降低成本和复杂性的同时,还提供运营商级的可靠性。EX9200具有很高的端口密度,能够整合和汇聚网络层,这大幅简化了园区和数据中心的架构,同时还能减少总体拥有成本(TCO),降低在电力、占用空间和冷却方面的要求。
EX9200主要的特性为:
● 支持OpenFlow 1.3。
➢ 简化的网络架构。
EX9200能够压缩网络的层,因而成为简化园区、数据中心以及园区和数据中心混合环境的理想之选。
➢ 高可用性。
EX9200核心交换机提供大量高可用特性,确保不间断的运营商级性能。每个EX9200机箱都配置了一个额外的插槽来安装一个冗余的路由引擎模块(该模块在热备用模式中作为备用),以便在主用路由引擎出现故障时接替其工作。
➢ 运营商级操作系统。
与其他的瞻博网络EX系列以太网交换机以及全球最大规模和最复杂网络所采用的瞻博网络路由器一样,EX9200交换机也运行Junos操作系统。
● 简化的管理和运行。
➢ MACsec。
EX9200-40F-M线卡支持IEEE 802.1ae MACsec标准和AES-128/256位加密,为链路层的数据保密性、数据完整性和数据源验证提供支持。
3.2.5 NEC
NEC是全球IT、通信网络的领先供应商之一,其为SDN推出了PF(ProgrammableFlow)系列产品,其中就包括pf5200 / pf5400 / pf5800系列交换机(PFS)。本书在此简要介绍NEC PF5240-48T4X交换机(混合,2/3层协议和OpenFlow)。
PF5240系列交换机(PFS)是NEC公司设计的SDN交换机,可用于ProgrammableFlow的核心和边缘,既可以满足传统网络架构需求运行标准的L2-L3网络协议,也可以支持最新的软件定义网络(SDN)技术,保证现有网络向SDN的平滑过渡。PF5240-48T4X交换机提供48个1Gb以太网的多端口和4个10GbE(SFP+)/1GbE(SFP)以太网上行链路,交换容量达到176Gbps,转发能力达到131Mpps,支持全线速转发;支持OpenFlow协议,配备有48个1Gb以太网的多端口和4个10GbE(SFP+)/1GbE(SFP)以太网上行链路,可用于ProgrammableFlow的核心和边缘;兼容OpenFlow 1.0和1.3.1版本;执行OpenFlow的流条目搜索和硬件转发功能,从而实现满线速转发数据包。
3.2.6 戴尔
戴尔(DELL)是来自美国的全球知名电脑品牌,由迈克尔•戴尔于1984年创立。戴尔旗下有多款SDN交换机,并能适用于数据中心等要求高性能的场景,较出名的有Dell Networking Z9100-ON交换机(混合,支持OpenFlow 1.3)、Dell Networking S系列S4820T高性能1/10/40 GbE交换机(混合,支持OpenFlow 1.3)、Dell Networking S4048-ON 10/40 GbE架顶式开放网络交换机(混合,支持OpenFlow 1.3)、Dell Networking S3048-ON 1 GbE架顶式开放网络交换机(裸交换机)。本书在此简单介绍Dell Networking S系列S4820T 1/10 GBASE-T以太网交换机。
Dell Networking S系列S4820T 1/10 GBASE-T以太网交换机专为高性能数据中心而打造。S4820T采用无阻塞、直通式(默认模式为存储转发)交换体系结构,可以提供线速第2层/第3层功能,从而最大限度地提升网络性能。S4820T设计提供48个支持100 Mb/1Gb/10Gb的1/10GBASE-T端口和4条40 GbE QSFP+上行链路。使用分支电缆,每条40 GbE QSFP+上行链路均可分解为4个10 GbE端口。
主要的性能有:
● 高性能数据中心环境中的高密度1/10 GBASE-T ToR服务器聚合。
● 与Z系列核心交换机相结合,可打造双层、无阻塞的1/10/40 GbE数据中心网络体系结构。
● 使用DCB,可实现无损iSCSI存储部署。
● 适用于ToR和列末式应用程序的企业、Web 2.0和云服务提供商数据中心网络。
● 启用了高性能SDN/OpenFlow 1.3,能够与行业标准OpenFlow控制器进行互操作。
3.2.7 Arista
Arista Networks是一家为数据中心提供云计算网络设备的公司,主打数据中心以太网交换机,其核心优势是其网络操作系统EOS。其产品为Google采购,能用于大型网络和数据中心这类的场景。
Arista Networks出名的SDN交换机产品主要包括7150系列(支持OpenFlow 1.0)、7300系列(支持OpenFlow 1.0)、7050X系列(支持OpenFlow 1.0/1.3)、7500系列。本书在此简要介绍Arista 7300X和7320X系列。
Arista 7300X和7320X系列模块化交换机设计用于大规模叶子/骨干和Spline™ 网络,可提供业界领先的密度和性能,并具有用于服务器叶子和骨干网络部署的丰富的接口类型可供选择。这些交换机将可扩展的L2和L3特性与全面网络监视、虚拟化及可见性特性相结合。Arista 7300X系列采用最新的片上系统(SoC)软件设计,7300X系列优化的系统架构适用于私有和公用云网络、全网状混合流量均有的东-西向流量模式。7300X系列模块化交换机具有系统级硬件和软件组件监控、简易操作性和逆向气流选项,因而适合持续网络运行。该系列的所有关键组件均具有高可用性,并配备冗余管理引擎、电源、交换矩阵和风扇模块。
3.2.8 新华三
新华三技术有限公司(简称新华三,H3C)主要从事IT基础架构产品及方案的研究、开发、生产、销售及服务,拥有完备的路由器、以太网交换机、无线、网络安全、服务器、存储、IT管理系统、云管理平台等产品。新华三是国内能完整提供从SDN设备、SDN控制器、SDN业务编排、SDN应用到SDN管理等全套SDN解决方案的厂商。
新华三推出了多款SDN硬件交换机,其中出名的包括H3C S5130-HI系列千兆以太网交换机(混合,可做SDN交换机)、H3C S6800数据中心以太网汇聚交换机(混合,可做SDN交换机)。另外,新华三还推出了自己的虚拟SDN交换机——H3C S1020V虚拟交换机产品。
H3C S5130HI系列交换机是H3C公司自主开发的三层千兆以太网交换机产品,是为要求具备高性能、高端口密度且易于安装的网络环境而设计的智能型可网管交换机,基于业界领先的高性能硬件架构和H3C先进的Commware V7软件平台开发。在大中型企业园区网中,S5130-HI系列以太网交换机可作为接入交换机,提供了高性能、大容量的交换服务,并支持10GE/40GE的上行接口,为接入设备提供了更高的带宽。此外,整网核心层、汇聚层和高性能接入层均采用H3C创新的IRF2(智能弹性架构)技术,在原有网络拓扑不变的情况下,通过将多台设备虚拟为一台统一的逻辑设备实现网络拓扑、业务、管理的简化,1:N的可靠性成倍提升,网络运行性能大幅提高等多重优点。
H3C S6800系列交换机是H3C公司自主研发的数据中心级智慧以太网交换机产品。S6800系列交换机支持包含数据中心特性在内的增强二三层软件特性集,提供业界紧凑型交换机最灵活的40GE、100GE及万兆端口的动态组合。S6800系列定位于智慧数据中心及云计算网络中的高密万兆或40GE、100GE汇聚交换,也可用于Overlay网络或融合网络中的TOR架顶接入交换机。S6800可以配合多个OpenFlow controller实现SDN方案。
3.2.9 锐捷网络
锐捷网络股份有限公司成立于2000年,占据中国数据通信解决方案市场较大的份额,客户涉及互联网、运营商、政府、金融、能源、制造、教育、医疗卫生、文化体育、交通等领域。
锐捷网络也推出了自己的SDN硬件交换机产品,主要包括RG-S2910-H系列大功率以太网供电(HPoE)交换机(通过OpenFlow 1.3认证)、RG-S5750-H系列新一代高性能以太网交换机(通过OpenFlow 1.3认证)、RG-S6220-H系列数据中心交换机(通过OpenFlow 1.3认证)、RG-S2910XS-E系列新一代高效节能交换机(支持SDN,符合OpenFlow 1.3)。本书在此简要介绍一下RG-S5750-H系列交换机。
RG-S5750-H系列提供灵活的千兆接入及高密度的万兆端口扩展能力,全系列交换机均固化4端口万兆,采用双扩展槽设计,支持高密、高性能端口上行能力,充分满足用户高密度接入和高性能汇聚的需求。RG-S5750-H系列的特征包括:
● 高性能、高扩展性
● IPv4/IPv6双协议栈多层交换
● VSU虚拟化技术
● 简化管理
● 简化网络拓扑
● 毫秒级故障修复
● 高扩展性
● 完善的安全防护策略
● 高可靠性
● 强大的多业务支撑能力
● 完善的QoS策略
● SDN(全面支持OpenFlow 1.3)
● VXLAN特性
● 绿色节能
● 简单轻松的网络维护
3.2.10 xNET网锐科技
xNET网锐科技成立于2012年,总部位于南京,是一家SDN创业公司,主要提供包括数据中心网络、园区以及企业网络的WhiteBox交换机和SDN解决方案。2016年重组成立艾奈信息技术有限公司,与大唐高鸿信安公司正式签署战略合作协议,在上海设立运营总部,在南京设立研发中心,在北京和深圳分别设立销售分部。xNET是一个专门做交换机OS的厂商,想要打造一个以用户为中心,基于NITOS/flexSDN系统,包含芯片商、Bare Metal硬件商(ODM/OEM)、第三方软件商以及渠道/集成商在内的开放网络生态系统,基于这个平台,可以通过安装各种App实现各种功能。
xNET网锐科技出名的产品主要包括flexSDN交换机(混合,具体包含flexSDN FX1-48T、flexSDN FX10-24S、flexSDN FX10-48S、flexSDN FX10-48T)和openxnet-5016r交换机(可编程,混合,支持OpenFlow)。flexSDN交换机可以用于企业网络、园区网络、云计算、数据中心或者存储网络等。
flexSDN交换机不仅支持传统二层/三层网络功能,还能支持新的网络应用,以flexSDN本地SDN APP方式在交换机上运行。flexSDN以太网交换机支持如下独特的特性:
● 内置SDN控制器支持本地SDN模式。
● 内置flexSDN APP引擎,支持在交换机上执行可下载的SDN APP。
● REST开放API,支持外置SDN控制器的可编程和分担处理负载。
3.2.11 盛科网络
盛科是中国网络芯片及白牌交换机供应商,是全球领先的以太网芯片厂商,主要定位为核心芯片及定制化网络解决方案的合作者和提供者,是目前少数能够提供从高性能以太网设备核心芯片到定制化系统平台全套解决方案的公司,拥有完整自主知识产权。
盛科已经发布了一系列芯片(TransWarpTM系列),以及基于芯片的完整系统产品和SDN硬件交换机,提供灵活的合作方式,如选择基于芯片、板卡、系统、License等多种合作模式。盛科主要的SDN硬件交换机产品包括V580、V580-TAP、V350、V350-TAP、V330、V150。本书在此简要介绍V580-TAP。
V580-TAP基于盛科自主研发的第4代以太网交换芯片CTC8096构建的高性能、高密度万兆TAP交换机,旨在满足下一代企业网、数据中心和城域网对于流量分析和监控的需求。V580-TAP集成了盛科自主的OSP开放交换机系统软件,除了实现网络流量的M:N复制、分流、汇聚、过滤以及同源同宿的负载均衡外,还提供了高级的精确时间戳和报文截短等功能。V580-TAP支持多种管理方式,方便使用者部署。V580-TAP设备具备2.4Tbps的大容量、高密度端口,支持1G/10G/40G/100G等多种端口形态。V580-TAP的主要特性包括:
● 标准的1RU盒式解决方案。
● 高达2.4Tbps的交换容量。
● 支持Cut-Through转发模式,超低的传输延迟。
● 流量复制/汇聚/分流一体化。
● 支持1G/10G/40G/100G等多种形态。
● 支持报文截短。
● 支持时戳和用VLAN标记源端口。
● 支持通过VxLAN、MPLS等Tunnel技术将报文送到远端。
● 支持同源同宿的均衡负载,从而保证流量输出过程中的会话完整性。
● 支持基于L2或者IP五元组、IP碎片分析、报文内容标识等过滤。
● 支持console、Telnet、SNMP、syslog、SSH、RPC API、OpenFlow等管理。
● 支持双电源冗余。
● 较低的系统功耗:V580-20Q4Z 160W、V580-48X2Q4Z 200W、V580-48X6Q 190W、V580-32X2Q/V580-32X 150W。
3.3 本章总结
支持SDN的虚拟交换机OVS对OpenFlow协议具有很完备的支持性,同时也是在虚拟化环境中使用最广的虚拟交换机,我们在3.1节中对OVS进行了总述,简要介绍了它的功能、主要组件,向读者说明了OVS常用的命令,并以示例说明其用法,最后给出了OVS的学习参考。
随后我们在3.2节“SDN硬件交换机简介”中对支持SDN的硬件交换机进行了介绍,主要介绍了最具影响力的11家厂商及其产品。需要注意,由于硬件设计的局限性(特别是在生产环境中需要保障性能的要求), SDN硬件交换机对于OpenFlow的协议支持并不完整。
本书不对交换机的开发进行深入研究,有兴趣的读者请查找相关的资源进行学习研究。