如何进行Open vSwitch OvS源代码分析

60次阅读
没有评论

共计 2417 个字符,预计需要花费 7 分钟才能阅读完成。

本篇文章给大家分享的是有关如何进行 Open vSwitch OvS 源代码分析,丸趣 TV 小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着丸趣 TV 小编一起来看看吧。

云计算是现在 IT 行业比较流行的,但真正什么是云计算业界也没有个什么统一的定义(很多公司都是根据自己的利益狭隘的定义云计算),更别说什么标准 规范了。所以现在就有很多人说云计算只不过是个幌子,是个嘘头,没点实用的,嘴上说说而已,虽然我也不太清楚什么叫做云计算,云计算的定义究竟是什么,但 我根据我公司现在做的云计算产品来说,对于云计算服务还是懂些的。我觉得那并不是什么幌子、嘘头,但如果说这云计算技术还不太成熟,我倒还勉强认可的。若 把云计算比作一个人的话,我个人觉得现在它正是二十岁的样子,到三十多岁就算是比较成熟了,所以大概就能想象的到云计算现在的境况了。下面就来简介下实现 云计算的一些技术,我对云计算并没有什么研究,也没能达到从全局的角度来分析云计算技术,更别说从一些更高的位置来分析问题,我所能介绍的仅仅是我一个小 程序员在工作中所遇到的一些和云计算有关的技术,日积月累,希望终有一天能成为云计算“砖家”。

云计算是个全世界的话题,所以也有全世界的能人异士来为实现这个云计算而奋斗。我现阶段遇到的有关云计算的技术就是 Open vSwitch、OpenStack 技术和 docker 技术。那就先从 Open vSwitch 开始介绍起,我会用一系列 blog 来分析 Open vSwitch 的相关数据结构和工作流程,以及各个重要模块的分析。所有的介绍都是基于源码的分析,希望对初学着有点用。

Open vSwitch,根据其名就可以知道这是一个开放的虚拟交换机(open virtual switch);它是实现网络虚拟化 SDN 的基础,它是在开源的 Apache2.0 许可下的产品级质量的多层虚拟交换标准。设计这个 Open vSwitch 的目的是为了解决物理交换机存在的一些局限性:Open vSwitch 较物理交换机而言有着更低的成本和更高的工作效率;一个虚拟交换机可以有几十个端口来连接虚拟机,而 Open vSwitch 本身占用的资源也非常小;可以根据自己的选择灵活的配置,可以对数据包进行接收分析处理;同时还支持标准的管理接口和协议,如 NetFlow、sFlow、SPAN、RSPAN 等。

Open vSwtich 模块介绍

当前最新代码包主要包括以下模块和特性:

ovs-vswitchd:主要模块,实现 switch 的 daemon,包括一个支持流交换的 Linux 内核模块;

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

ovs-brcompatd:让 ovs-vswitch 替换 Linux bridge,包括获取 bridge ioctls 的 Linux 内核模块;

ovs-dpctl:用来配置 switch 内核模块;

一些 Scripts and specs:辅助 OvS 安装在 Citrix XenServer 上,作为默认 switch;

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

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

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

ovs-openflowd:一个简单的 OpenFlow 交换机;

ovs-controller:一个简单的 OpenFlow 控制器;

ovs-ofctl:查询和控制 OpenFlow 交换机和控制器;

ovs-pki:OpenFlow 交换机创建和管理公钥框架;

ovs-tcpundump:tcpdump 的补丁,解析 OpenFlow 的消息;

上面是网上提到的一些 Open vSwitch 的主要模块。其实 Open vSwitch 中最主要的还是 datapath 目录下的一些文件。有端口模块 vport 等,还有关键的逻辑处理模块 datapath 等,以及 flow 等流 表模块,最后的还有 action 动作响应模块,通道模块等等。

Open vSwtich 工作流程

如何进行 Open vSwitch OvS 源代码分析

一般的数据包在 linux 网络协议栈中的流向为黑色箭头流向:从网卡上接受到数据包后层层往上分析,最后离开内核态,把数据传送到用户态。当然也有些数据包只是在内核网络协议栈中操作,然后再从某个网卡发出去。

但当其中有 openVswitch 时,数据包的流向就不一样了。首先是创建一个网桥:ovs-vsctl add-br br0;然后是绑定某个网卡:绑定网卡:ovs-vsctl add-port br0 eth0;这里默认为绑定了 eth0 网卡。数据包的流向是从网卡 eth0 上然后到 openVswitch 的端口 vport 上进入 openVswitch 中,然后根据 key 值进行流表的匹配。如果匹配成功,则根据流表中对应的 action 找到其对应的操作方法,完成相应的动作(这个动作有可能是把一个请求 变成应答,也有可能是直接丢弃,也可以自己设计自己的 action);如果匹配不成功,则执行默认的动作,有可能是放回内核网络协议栈中去处理(在创建网 桥时就会相应的创建一个端口连接内核协议栈的)。

其大概工作流程就是这样了,在工作中一般在这几个地方来修改内核代码以达到自己的目的:第一个是在 datapath.c 中的 ovs_dp_process_received_packet(struct vport *p, struct sk_buff *skb) 函数内添加相应的代码来达到自己的目的,因为对于每个数据包来说这个函数都是必经之地;第二个就是自己去设计自己的流表了;第三个和第二个是相 关联的,就是根据流表来设计自己的 action,完成自己想要的功能。

以上就是如何进行 Open vSwitch OvS 源代码分析,丸趣 TV 小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注丸趣 TV 行业资讯频道。

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-08-25发表,共计2417字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)