1.【重识云原生】第四章云网络4.8.3.2节——Open vSwitch工作原理详解
2.OpenVSwitch实现浅谈(一)
3.OVS 总体架构、码分源码结构及数据流程全面解析
4.OVS的码分隐藏设计原则
5.OVS架构组成
6.virtio+ovs转发原理和性能分析
【重识云原生】第四章云网络4.8.3.2节——Open vSwitch工作原理详解
云原生再解密第四章云网络4.8.3.2节——Open vSwitch工作原理详解
OVS的核心在于其架构与组件间的协同工作。首先,码分用户空间的码分ovsdb-server存储配置信息,ovs-vswitchd守护进程作为核心组件,码分负责与OpenFlow控制器的码分手机签到页面源码OpenFlow协议通信,以及与ovsdb-server的码分OVSDB协议通信,它通过netlink与内核的码分datapath模块交互。启动时,码分ovs-vswitchd会根据ovsdb的码分配置动态调整其内核配置,保持与数据库同步。码分
ovs-vswitchd的码分核心功能是处理数据包,它从OpenFlow控制器获取流表规则,码分并在内核模块的码分datapath中执行。ovs-vswitchd不仅配置了datapath flows作为OpenFlow规则的码分缓存,还在用户空间与内核之间充当桥梁,使得后续相同类型的数据包能在内核中直接执行操作,提高效率。Datapath作为独立组件,专注于数据交换,通过actions处理收到的数据包,而OpenFlow协议则提供控制器与ovs-vswitchd之间的通信手段。
OpenFlow控制器通过发送流表规则来控制数据包的流向,OVS支持OpenFlow,允许用户通过控制器或ovs-ofctl工具管理流表。OVS中,OpenFlow flow是核心,但还有其他类型的flows,如隐藏的flows。控制器和ovs-vswitchd之间的交互确保了数据转发策略的灵活管理和执行。
使用ovs-*工具时,ovs-vsctl提供高级管理功能,ovsdb-tool和ovsdb-client用于数据库操作,ovs-ofctl专用于OpenFlow配置。这些工具各有侧重,原型图源码共同维护OVS的高效运行。
深入理解Open vSwitch的工作原理,有助于我们更有效地利用其功能,实现云网络的灵活配置和高效转发。
OpenVSwitch实现浅谈(一)
虚拟化技术在过去的年里彻底改变了应用、数据和服务的部署方式,根据Gartner在年的报告,%的x工作负载已实现虚拟化,其中大多数是虚拟机,而容器的使用比例正以惊人的速度增长。
服务器虚拟化对数据中心网络产生了根本性影响,新的接入层在物理服务器内部出现,它由运行在x服务器中的虚拟交换机(vSwitch)组成,这些交换机连接着服务器内的多个工作负载(包括容器和虚拟机)。
早期的虚拟交换机如Linuxbridge,最初目的是提供基本的网络连接,它模拟了堆叠交换机的行为,并接入到现有的物理网络中。这种实现的优点在于可以利用现有物理网络的理论和协议,无需重复设计。然而,作为物理网络的延伸,这导致虚拟工作负载的网络与物理网络紧密耦合,削弱了虚拟化带来的灵活性和快速部署优势。
网络虚拟化(network virtualization)的出现,为虚拟工作负载网络提供了另一种可能。虚拟工作负载网络由vSwitch单独管理,并在现有物理网络(underlay)之上定义独立的overlay网络(例如VxLAN)。这种overlay网络不受物理网络设备控制,完全由vSwitch控制。
OpenVSwitch基于这一设计思想实现,是一个多层、开源的虚拟交换机。LinuxBridge也支持VxLAN,react源码原理OpenVSwitch同样支持物理网络的VLAN和FLAT网络。
OpenFlow的引入是OpenVSwitch的另一大特色。传统的交换机功能固定,依赖特定配置。而OpenVSwitch通过OpenFlow实现了交换机的可编程性,可以定义网络包在交换机中的处理流程(pipeline),支持OpenFlow的交换机功能不再是固定的,可通过OpenFlow软件定义OpenVSwitch的功能。
OpenFlow以多个Table串行工作方式处理网络数据包。灵活性是实现软件定义网络(SDN)的关键部分,但处理复杂功能会导致pipeline过长,影响性能。为了解决这个问题,OpenVSwitch在最新版本(2.x版本)中采用了一种不同方式。
OpenVSwitch架构包括快速路径(fast path)和慢速路径(slow path)。其中,ovs-vswitchd代表慢速路径,OVS内核模块代表快速路径。OpenFlow存储在slow path中,但为了快速转发,数据包应尽可能在fast path中处理。因此,OpenVSwitch通过以下逻辑完成转发:
当网络连接的第一个数据包(首包)发出时,OVS内核模块会首先接收到这个包。由于此时内核模块还未了解如何处理该包,所有OpenFlow规则都存在于ovs-vswitchd中,它的默认行为是将包上送至ovs-vswitchd。ovs-vswitchd通过OpenFlow pipeline处理完网络数据包后,将结果送回给OVS内核模块,并生成一串类似于OpenFlow Action的简单datapath action。这串datapath action与OVS内核模块一同处理后续的网络包。由于同一连接的所有包特征(IP、MAC、端口号)相同,源码组合模式OVS内核模块可以高效地应用datapath action进行转发,从而与OpenFlow协议解耦,减少了代码更新对内核的影响。
为了提高效率,OVS内核模块通过缓存保持datapath action的记录。早期版本使用名为microflow的缓存,这是一种哈希映射,其key是所有可能匹配的值对应的哈希值,包括网络2-4层头部数据和一些其他元数据(如in_port),value为对应的datapath action。哈希映射实现O(1)查找时间,使得OVS内核模块中实现高效查找和转发。
虽然看起来这是一种理想的解决方案,但在实际应用中仍存在一些问题。下篇文章将深入探讨具体问题及其解决方法。
OVS 总体架构、源码结构及数据流程全面解析
OVS 是一款基于SDN理念的虚拟交换机,它在数据中心的虚拟网络中发挥着关键作用。其核心架构由控制面和数据面组成,控制面通过OpenFlow协议管理交换策略,数据面则负责实际的数据包交换。OVS的整体架构可以细分为管理面、数据面和控制面,每个部分都有特定的功能和工具以提升用户体验。
管理面主要包括OVS提供的各种工具,如ovs-ofctl用于OpenFlow交换机的监控和管理,ovs-dpctl用于配置和管理内核模块的datapath,ovs-vsctl负责ovs-vswitchd的配置和ovsdb-server的数据库操作,ovs-appctl则集合了这些工具的功能。这些工具让用户能方便地控制底层模块。
源码结构方面,OVS的数据交换逻辑由vswitchd和可选的datapath实现,ovsdb存储配置信息,控制面使用OVN,排名变化源码提供兼容性和性能。OVS的分层结构包括vswitchd与ovsdb通信,ofproto处理OpenFlow通信,dpif进行流表操作,以及netdev抽象网络设备并支持不同平台和隧道类型。
数据转发流程中,ovs首先解析数据包信息,然后根据流表决定是否直接转发。若未命中,会将问题上交给用户态的ovs-vswitchd,进一步处理或通过OpenFlow通知控制器。ovs-vswitchd在必要时更新流表后,再将数据包返回给内核态的datapath进行转发。
总的来说,OVS通过其强大的管理工具和精细的架构设计,简化了用户对虚拟网络的操控,确保了高效的数据传输和策略执行。
OVS的隐藏设计原则
OVS的隐藏设计原则在其清晰的软件架构下隐藏着独特的理解方式。首先,我们要理解的是,OVS与传统网络处理软件如NAT和Load Balancer的区别,这些软件通常采用有状态架构,包含快速路径(五元组哈希表)和慢速路径(包含路由表和ACL表)。快速路径通过五元组缓存快速查找,慢速路径则处理复杂查找。五元组在这些网关中构成了转发等价类(FEC),意味着相同五元组的数据包会受到相同的处理。
然而,FEC的设计并不固定,例如路由器仅关注目的IP,其快速路径可能只需IP地址。Revalidator的作用在于维护规则变化时fastpath的FEC与slowpath规则的一致性,通过记录原始数据包并重计算FEC来确保转发语义的正确性。在有状态网关中,如NAT和Load Balancer,虽然它们也使用五元组查找,但因需保持连接跟踪的完整性,它们不需Revalidator。
OVS的设计则有所不同,它把一切都等效为Match-Action-Revalidation。OVS的架构分为ofproto层(慢速路径,包括OpenFlow规则和接口抽象)、datapath层(快速路径,负责实际转发)以及revalidator(维护语义一致性)。配置和OpenFlow规则共同表示转发逻辑,而fastpath仅执行Match-Action,如网桥的实现,其依据是MAC地址,通过Revalidator周期性维护slowpath的MAC表。
总结来说,OVS的设计巧妙地将各种协议抽象为统一的处理模式,使其架构显得自然流畅。下文会深入探讨更高级的概念,如Recirculation、Tunnel和Conntrack的实现,对FEC生成的深入理解则可以参考OVS的论文。
OVS架构组成
Open vSwitch (OVS),这款强大的开源虚拟交换机,是云计算领域中不可或缺的组件。它以其高度的灵活性和可扩展性,确保了云环境中虚拟机间的流量可见性和可控性。OVS的独特之处在于其分布式虚拟交换的实现,结合控制器,支持VLAN中继、NetFlow等高级特性,提供了严格的流量控制和QoS保障。
OVS架构的设计精妙且高效,主要由三个关键部分组成:用户空间、内核空间和控制器。用户空间包括ovsdb-server、ovs-vswitchd和ovs-vsctl等工具,它们协同工作,ovsdb-server负责存储和管理配置信息,ovs-vswitchd则是核心组件,它不仅管理ovsdb,还与内核的Datapath模块通过OpenFlow和ovsdb协议进行通信。Datapath模块是数据包处理的中心,它在内核中注册钩子,负责处理网络包,与流表匹配执行策略,由openvswitch.ko内核模块实现。
Datapath模块的运作机制十分巧妙。当接收到帧时,它会学习源MAC地址,对多播和广播包进行特殊处理。如果没有找到匹配的CAM表项,所有端口都会被转发;找到匹配,则直接转发至相应端口。OVS的工作模式分为Fast Path和Slow Path,前者利用内核的高速处理,后者则在内存紧张时,先在用户态查询,再将策略快速下放到内核,以优化后续匹配。
管理工具方面,ovs-vsctl用于配置和管理ovs-vswitchd,ovs-ofctl则专注于流表的控制,而ovs-pki则确保了TLS通信的安全性。例如,ovs-dpctl提供了Datapath的管理界面,让我们可以深入了解其工作状态。ovs-appctl则允许用户执行一系列指令,以便测试和优化数据包转发流程。
OVS的这些组件协同作用,构成了一个高效、灵活的虚拟网络架构,为云计算提供了坚实的基础设施支撑。无论是大型数据中心还是边缘计算环境,OVS都是实现网络自动化和性能优化的关键要素。深入了解并掌握OVS的架构,无疑将有助于提升网络管理的效率和灵活性。
virtio+ovs转发原理和性能分析
virtio和ovs在云计算环境中结合,提供了高效的虚拟网络转发解决方案。本文将深入探讨它们的原理和性能特性。
在云计算环境中,virtio是一种虚拟I/O技术,通过半虚拟化简化了虚拟机与物理服务器之间的数据交换,允许各种虚拟设备(如网卡、硬盘)通过通用机制工作。virtio的frontend在虚拟机中,backend在物理服务器上,通过virtio机制进行数据传输,这使得它成为虚拟化标准。
ovs作为虚拟交换机,通过软件实现交换功能,适应云计算对灵活性和性能的需求。云计算环境中,ovs的openflow设计使其易于扩展和功能定制,避免了复杂的控制面协议,如STP,性能上由datapath提供支持。
vhost-net和vhost-user是virtio与硬件交互的不同方式。vhost-net利用硬件特性进行直接数据搬运,而vhost-user通过用户态和内核之间的通信,实现虚拟机与硬件的高效协作。vdpa则进一步将数据平面的处理移到硬件,提供热迁移支持,但复杂度较高。
性能分析显示,vdpa通常提供最高性能,但成本较高;vhost-user次之,性能稳定但消耗CPU;而vhost的性能较差,受硬件限制明显。在实际应用中,vhost-net因其稳定性和配套成熟性成为主流选择,但在电信级云环境中,vhost-user因其性能优势被青睐。
综上,virtio+ovs的组合在云计算中发挥了关键作用,不同的实现方式根据应用场景各有优劣,用户需根据需求权衡性能、成本和功能需求。
OVS架构解析--dpdk datapath数据通路
OVS(Open vSwitch)是一种广泛应用于云环境中、采用开源的虚拟交换机,支持OpenFlow协议和ovsdb管理。OVS的架构包括ovsdb-server、ovs-vswitchd和可选的dpdk数据通路模块。ovsdb-server负责管理和操作,ovs-vswitchd负责核心功能如OpenFlow通信和数据转发,而dpdk模式的ovs在用户态进行快速转发,无需内核支持。
管理方面,OVS通过OVSDB协议,通过RFC 规范进行配置,管理员通过OVSDB管理协议进行交换机的配置和控制。转发控制则通过OpenFlow协议,控制器直接向OVS下发流表指令控制转发行为。
OVS的核心组件间通过socket、netlink和内核模块进行交互。例如,添加接口时,ovs-vsctl会先更新ovsdb,ovs-vswitchd据此更新交换机配置。dpdk模式的ovs保留了相同的架构,但不使用内核的dpdk模块。
ovsdb_idl和ovsdb通信是通过idl(接口描述语言)进行的,ovsdb_idl_create建立连接,接收和解析jsonrpc数据,然后更新本地数据。dpdk加速处理涉及初始化配置,如设置dpdk-init参数,以及使用dpdk库进行接口状态监控和设备注册。
数据结构抽象层面,OVS使用ofproto、dpif和netdev等类进行分层设计,构建了OpenFlow交换机、数据通路接口和网络设备的抽象。通过这些类,OVS可以创建和管理交换机、配置端口,实现数据包的接收和发送。
最后,OVS的启动流程包括与ovsdb-server通信、dpdk初始化、ofproto和netdev的配置,以及网桥和端口的配置和运行。对于数据结构查询,详细的类和结构说明了OVS内部的不同组件及其交互方式。