一、概览
Open vSwitch(简称OVS)是一个多层软件交换机,它遵循开源的Apache 2许可协议。其目标是实现一个具有生产质量的交换机平台,该平台支持标准的管理接口,并将转发功能开放给程序化扩展和控制。
Open vSwitch非常适合在虚拟机环境中作为虚拟交换机使用。除了向虚拟网络层提供标准的控制和可见性接口外,它还被设计为支持跨多个物理服务器的分布。Open vSwitch支持多种基于Linux的虚拟化技术,包括KVM和VirtualBox。
Open vSwitch的大部分代码是用与平台无关的C语言编写的,因此可以轻松地移植到其他环境中。当前的Open vSwitch版本支持以下功能:
-
标准的802.1Q VLAN模型,包括中继端口和访问端口
-
具有或不具有上游交换机LACP的NIC绑定
-
NetFlow、sFlow(R)和镜像功能,用于提高可见性
-
QoS(服务质量)配置和策略执行
-
Geneve、GRE、VXLAN、STT、ERSPAN、GTP-U、SRv6、Bareudp和LISP隧道技术
-
802.1ag连接故障管理
-
OpenFlow 1.0及众多扩展
-
具有C和Python绑定的事务性配置数据库
-
使用Linux内核模块实现高性能转发
此外,Open vSwitch还可以完全在用户空间中运行,无需内核模块的协助。这种用户空间实现应该比基于内核的交换机更容易移植。用户空间中的OVS可以访问Linux或DPDK设备。请注意,使用用户空间datapath和非DPDK设备的Open vSwitch被视为实验性质,并且可能带来性能上的损耗。
Open vSwitch的这些功能使其成为了网络自动化和虚拟化的关键组件,通过编程控制,网络管理员可以灵活地配置和管理网络流量,实现网络资源的优化和高效利用。
二、特点
1 Security 安全
1) VLAN isolation 虚拟局域网隔离
VLAN isolation,即虚拟局域网隔离,是一种通过将物理网络划分为逻辑上独立的虚拟网络段(VLANs)来实现的技术。每个VLAN都像一个独立的网络,其中的广播流量不会传播到其他VLAN。这种隔离有助于减少广播风暴,提高网络安全性,并允许更精细地控制网络流量和用户访问,增强了网络灵活性灵活。
2) Traffic filtering 流量过滤
Traffic filtering,即流量过滤,是一种用于监控和控制网络流量的技术。它允许网络管理员根据预定义的规则或策略,对进入或离开网络的数据包进行过滤。这些规则可以基于数据包的源地址、目的地址、端口号、协议类型等多种因素来定义。通过流量过滤,管理员可以阻止不需要或潜在有害的流量进入网络,例如恶意软件、未经授权的访问尝试等。同时,流量过滤还可以用于优化网络性能,例如通过限制高带宽应用的流量,确保关键业务应用的带宽需求得到满足。
总的来说,VLAN isolation和traffic filtering都是提高网络安全性和管理效率的重要工具。它们可以帮助网络管理员更好地控制网络流量,防止未经授权的访问和恶意攻击,从而保护网络资源和用户数据的安全。
2 Qos (Quality of Service )服务质量
QoS(Quality of Service,服务质量)是一种网络管理机制,旨在通过一定的技术手段和管理策略,保证网络资源的有效分配和利用,以提供满足用户需求的网络服务。它是用来解决网络延迟、阻塞等问题的一种技术,对于容量有限的网络来说尤为重要。 QoS的关键在于为网络流量中的特定流提供差异化处理和容量分配,使得网络管理员能够分配处理数据包的顺序以及为该应用程序或流量提供的带宽量。QoS包括带宽、延迟、抖动和丢包率等方面的指标,通过对这些指标的管理和控制,QoS能够提升用户满意度,优化资源利用,保证服务质量和流量控制,避免网络拥塞问题。
1) Traffic Queuing 流量排队
流量排队是一种机制,用于处理网络中的数据包,特别是当数据包的到达速率超过网络的处理能力时。在这种情况下,数据包被暂时存储在队列中,等待处理。队列管理策略决定了哪些数据包应该被优先处理,哪些数据包可能会面临延迟或丢弃。这种机制有助于确保网络在面临拥塞时能够保持一定的稳定性和公平性。
2) Traffic Shaping 流量整形
流量整形则是一种主动调整流量输出速度的措施。它的主要目的是限制流出某一网络的某一连接的流量与突发,使这类报文以比较均匀的速度向外发送。流量整形通常使用缓冲区或队列和令牌桶来完成。当报文的发送速度过快时,首先在缓冲区或队列进行缓存,然后在令牌桶的控制下,再均匀地发送这些被缓冲的报文。这样有助于平滑网络流量,减少突发流量对网络的影响,从而提高网络的稳定性和性能。
总之,流量排队和流量整形都是网络流量管理的重要工具,它们在网络拥塞控制、流量优化和性能提升方面发挥着关键作用。
3 Monitor 监控
1) Netflow
是一种网络监测功能,最早由思科公司研发,可以收集进入及离开网络界面的IP封包的数量及资讯。通过分析NetFlow收集到的数据,网络管理人员可以了解封包的来源及目的地、网络服务的种类,以及网络拥塞的原因。这种技术有助于实时查看全网状态,检测网络性能瓶颈,并进行自动处理或告警显示,确保网络高效、可靠地运行。
2) sFlow
则是由InMon、HP和FoundryNetworks联合开发的一种网络监测技术。它采用数据流随机采样技术,能够提供完整的第二层到第四层,甚至全网络范围内的流量信息。sFlow技术可以适应超大网络流量环境下的流量分析,帮助用户实时、详细地分析网络传输流的性能、趋势和存在的问题。
3) SPAN (Switched Port Analyzer) 交换端口分析器
是交换端口分析器,它允许网络管理员将交换机上的某个或某些源端口的数据流复制到目标端口,以便利用分析器进行监控和分析。这种技术对于故障排查、流量监控和协议分析非常有用。
4) RSPAN (Remote Switched Port Analyzer)远程交换端口分析器
即远程交换端口分析,是SPAN技术的扩展。它突破了被镜像端口和镜像端口必须在同一台交换机上的限制,使得被镜像端口和镜像端口可以跨越网络中的多个设备。这大大方便了网络管理员对远程交换机设备的管理和监控。
总的来说,这些技术都是网络监控的重要组成部分,它们各自具有独特的功能和优势,可以根据具体的网络环境和监控需求进行选择和配置。
4 Automated Contorl 自动控制
1) OpenFlow protocol 网络通信协议
它定义了控制器与交换机之间的交互方式,使得控制器能够对交换机中的流表进行编程。通过OpenFlow协议,网络管理员可以实现网络流量的灵活控制,包括转发、过滤、负载均衡等操作。OpenFlow的应用使得网络更加智能化和可编程化,能够根据实际需求进行动态调整和优化。
2) OVSDB mgmt protocol 是ovsdb管理协议
管理协议则是用于控制器与交换机之间信息交互的协议。它允许控制器通过OVSDB连接,将配置信息、订阅内容等下发到ovs交换机,并获取ovs交换机的状态和统计信息。OVSDB管理协议的实现基于SSL,确保了信息传输的安全性和可靠性。通过OVSDB管理协议,网络管理员可以实现对ovs交换机的远程配置和管理,提高了网络管理的效率和便捷性。
在自动化控制方面,OpenFlow和OVSDB管理协议相互配合,共同实现了网络流量的灵活控制和交换机的智能管理。通过编写自动化脚本或利用现有的网络管理工具,网络管理员可以实现对整个网络的自动化配置、监控和故障排除。这大大提高了网络管理的效率和准确性,降低了人工干预的需求,使得网络更加稳定、可靠和安全。
三、ovs的组件
组件间通信:
ovs-vswitchd与ovsdb-server通信使用OVSDB协议(通信内容包括加载配置信息,同时将运行过程中变化的OVS的配置信息保存到数据库中),
ovs-vswitchd与内核模块使用netlink机制通信(netlink是一种进程间通信机制),
ovs-vswitchd与上层controller控制器通信使用OpenFlow协议。
1 ovs-vswitchd 守护进程
-
是交换机的主要模块, 作为ovs守护进程,运行在用户态,负责处理数据包的转发和流量管理(基本的转发逻辑、地址学习、外部物理端口绑定、VLAN隔离等)。
当数据包到达OVS时,ovs-vswitchd会根据预先配置的规则、策略和流表来判断该如何转发这些数据包;
根据配置文件中的规则和策略将数据包从一个虚拟端口发送到另一个虚拟端口,处理ARP请求和响应消息;
收集和记录网络统计信息
-
ovs-vswitchd还可以与多个交换机进行通信,支持OpenFlow协议、NetFlow和sFlow协议等,并与不同的虚拟化平台(如KVM、Xen等)集成。
-
在运行时,ovs-vswitchd需要与ovsdb-server交互,以获取和更新Open vSwitch中的配置信息。因此,在启动ovs-vswitchd之前,必须先启动ovsdb-server服务,否则ovs-vswitchd将无法正常工作。
-
ovs-vswitchd还提供了一些命令行选项和配置文件参数,可以用来调整其行为和性能。
ovs-ofctl:采用openflow协议对交换机进行远程配置和管理,下发流表信息。
ovs-appctl:发送命令消息到ovs-vswithchd, 查询和控制运行中的OVS守护进程
2 ovsdb-server 轻量级数据库服务器
-
OVS轻量级的数据库服务器的服务程序,它与ovs-vswitchd都是以一个单独的进程存在于系统中,ovs-vswitchd会查询它以获取配置
-
作用:负责持久化存储的数据库管理,主要用于记录网络配置信息,如网桥、端口、QoS(服务质量)等、日志以及状态。
-
ovsdb-server为控制器和ovs-vswitchd提供OVSDB操作接口,使得这些组件可以获取和更新网络配置信息
-
相关组件命令:
ovs-vsctl:网桥、接口等的创建、删除、设置、查询等。 配置OVS交换机的配置信息将保存在ovsdb中,
ovs-db:开放虚拟交换机数据库是一种轻量级的数据库,包含一系列记录网桥、端口、QoS等网络配置信息的表,这些表均以JSON格式保存,默认路径:/etc/openvswitch/conf.db,可提供持久化存储,设备重启后,相关OVS配置不会丢失
在OVS的架构中,ovsdb-server与ovs-vswitchd协同工作。ovs-vswitchd是核心交换机进程,它根据数据库中的配置信息来实现数据包的转发和流量管理。当网络配置发生变化时,ovsdb-server会更新数据库,并通知ovs-vswitchd进行相应的调整。
openvswitch.ko:
-
作用:组件运行在内核态,属于快速转发平面,主要负责流表匹配、报文修改、隧道封装、转发或者上送,并且维护底层转发表,把流的match和action结果缓存,避免后续同样的流继续upcall到用户空间进行流表匹配。在原始OVS中,报文首先经过该组件完成报文解析和封装、转发规则匹配,若找到转发规则不再经过用户空间,直接转发。否则转交用户空间的ovs-vswitchd组件进行处理。
-
相关组件命令:
ovs-dpctl:配置vswitch内核模块
3(工具) ovs-vsctl OVS命令行工具
man使用手册: openvswitch.org/support/dist-docs/ovs-vsctl.8.html
ovs-vsctl是Open vSwitch(OVS)的命令行工具,用于管理OVS中的网络配置信息。它提供了丰富的命令和选项,使用户能够查看和修改OVS交换机中的端口、网桥、流表等配置信息。 通过ovs-vsctl,用户可以动态地创建、修改和删除虚拟交换机,使得网络资源的分配和管理变得更加高效和灵活。例如,用户可以使用ovs-vsctl命令来添加或删除网桥,配置网桥的转发模式(如standalone或secure模式),设置网桥的外部ID等。
总之,ovs-vsctl是Open vSwitch中功能强大的命令行工具,它使用户能够方便地管理和配置OVS交换机,实现网络资源的优化和灵活管理。
4(工具)ovs-ofctl 操作流表的命令行工具
man使用手册:openvswitch.org/support/dist-docs/ovs-ofctl.8.html
ovs-ofctl是Open vSwitch(OVS)中用于操作流表的命令行工具。通过ovs-ofctl,用户可以对OVS交换机上的流表进行增、删、改、查等操作。这些流表用于控制交换机如何转发和处理流经其端口的数据包.
-
ovs-ofctl show命令可以显示指定交换机的信息,包括连接到交换机的接口、tap和端口号等。
-
ovs-ofctl dump-flows命令可以显示交换机上的流表条目,帮助用户了解当前的数据包转发规则。
-
ovs-ofctl add-flow命令则可以向交换机添加新的流表规则,从而实现对数据包转发的灵活控制。
此外,ovs-ofctl还支持各种流表操作选项和参数,可以根据用户的需求进行精确的配置。通过合理设置流表规则,用户可以实现复杂的网络流量控制、安全策略实施以及性能优化等功能。
5(工具)ovs-appctl 查询和控制运行中的OVS守护进程
man使用手册:openvswitch.org/support/dist-docs/ovs-appctl.8.html
ovs-appctl是Open vSwitch(OVS)的一个工具,用于查询和控制运行中的OVS守护进程。通过ovs-appctl,管理员可以执行各种诊断、监控和管理任务,以确保OVS系统的正常运行。 ovs-appctl提供了多种命令和选项,用于查询OVS守护进程的内部状态,控制其行为,以及执行特定的管理任务。例如,使用ovs-appctl bridge/dump-flows命令,可以显示指定网桥的流表信息,这对于调试和优化网络流量至关重要。此外,ovs-appctl还提供了跟踪虚拟机发出的数据包经过的pipeline路径的功能,通过ovs-appctl ofproto/trace命令,管理员可以跟踪数据包在网络中的转发路径,从而定位和解决问题。
6(工具)ovs-dpctl 用于配置ovs内核模块的工具
man使用手册: openvswitch.org/support/dist-docs/ovs-dpctl.8.html
ovs-dpctl是Open vSwitch(OVS)中的一个工具,用于与OVS交换机的datapath进行交互。datapath是OVS交换机中的一个关键组件,主要用于实际处理数据包的转发功能。ovs-dpctl命令可以用来查询和配置datapath的状态和属性。例如,使用ovs-dpctl show命令可以显示交换机的datapath信息。通过ovs-dpctl,用户可以实现对交换机内核模块的配置,以及控制转发规则,从而更灵活地管理网络流量和数据包的处理。
7(工具)ovs-tcpdump
man使用手册 openvswitch.org/support/dist-docs/ovs-tcpdump.8.html
这个工具使tcpdump能够解析OpenFlow消息。
8 其它
-
Scripts and specs: 用于为Red Hat Enterprise Linux构建RPM包和为Ubuntu/Debian构建deb包的脚本和规格。
-
ovs-pki:这是一个用于创建和管理OpenFlow交换机的公钥基础设施的实用程序。
-
ovs-testcontroller:这是一个简单的OpenFlow控制器,可能用于测试(但不适用于生产环境)。
四、OVS 报文转发机制
在传统OVS中,网卡在加载网络过程中被绑定到OVS端口上,端口的数据包接收和发送函数在datapath中定义,因此报文的接收和发送统一由位于内核空间的datapath进行。
内核空间负责报文的解析封装、流表匹配、流表匹配失败上送、报文转发或丢弃等报文处理操作。
用户空间只在内核空间将报文上送用户空间时,对报文进行流表匹配操作,根据匹配结果通知内核datapath报文该如何处理,并下发匹配到的流表项至内核态流表,以备后续类似报文匹配。
流表说明:
内核态流表主要是存储近期匹配过的流表项 (fast flow, 存储在内存中,大约10秒老化 )
Microflow Cache: 精确匹配,通过hash能在时间复杂度1找到流表项
Megaflow Cache: 通配符匹配,是为了弥补microflow缓存量小的问题
用户态流表主要由控制器或人为通过OVS提供的ovs-ofctl工具下发 (slow flow, 也存储在内存中,断电丢失 )
传统OVS数据流转发的大致流程如下:
a. 当报文到达网卡设备,网卡驱动(需要给网卡提前绑定网卡驱动vfio-pci)将接收到的报文交给该网卡绑定的端口在OVS中定义的数据包接收函数(datapath级别)处理
b. 在datapath中主要首先进行报文头信息的获取(从数据包中提取源/目的IP、源/目的MAC、端口等信息),根据报文头信息生成匹配流表项的key值
c. 得到key值后,根据key值在内核态流表(Microflow和Megaflow)中匹配
若匹配到内核态流表项,数据包将不经过用户空间,直接由内核进行action操作并将报文转发或丢弃;
若未匹配到内核态流表项,将使用Linux系统的Netlink通信机制实现内核进程和用户进程的通信,把数据包上送到用户空间进行用户态流表匹配
若命中用户态流表项,则在用户空间中完成流表项中相应的action操作,最终获得数据包的出端口信息并告知内核将数据包转发出去,
同时将命中到的用户态流表项以内核态流表的规则生成对应的内核态流表项下发至内核态流表
若未命中,则将数据包丢弃或者上送至控制器,由控制器决定如何转发该数据包