OpenvSwitch分析(一)

一、前言:

       随着SDN的发展,现在南向接口OpenFlow协议也用得越来越多,但是在平时研究SDN的时候,由于能简单支持OpenFlow协议的交换机本身就屈指可数,更不要说在实际应用中的各种复杂需求了,因而虚拟交换机得到了很大的发展。我准备从OpenvSwitch(简称为OVS,下面都简化为OVS)来入手来介绍其相关的数据结构和工作机制。我会直接从源码开始,了解网络协议栈的实现,理解OVS的具体实现,当然这需要一系列的博客才能分析完。OVS的最新信息具体见http://openvswitch.org/和https://github.com/horms/openvswitch。

       虚拟交换机是实现云计算和网络虚拟化的基础。它是在开源的Apache2.0许可下的产品级质量的多层虚拟交换标准。设计这个Open vSwitch的目的是为了解决物理交换机存在的一些局限性,如:

  • Open vSwitch较物理交换机而言有着更低的成本和更高的工作效率;
  • 一个虚拟交换机可以有几十个端口来连接虚拟机,而Open vSwitch本身占用的资源也非常小;
  • 根据自己的选择灵活的配置,可以对数据包进行接收分析处理;
  • 支持标准的管理接口和协议,如NetFlow、sFlow、SPAN、RSPAN等

二、OVS的代码模块

       我研究的OpenvSwitch是目前最新版本的,下载网址是http://openvswitch.org/releases/openvswitch-2.3.0.tar.gz。
       安装完最新版的2.3.0的OVS源码后,首先来分析里面包括哪些文件信息:
OpenvSwitch分析(一)_第1张图片
其中:
Install相关文件:对应到各种应用场景下的安装指导;
Introduce说明文件:
  • AUTHORS:作者信息;
  • CodingStyle:编程风格建议;
  • COPYING:许可说明;
  • DESIGN:设计原则;
  • FAQ:常见问题解答;
  • NEWS、NOTICE、README、README-lisp、README-BUGS、WHY-OVS见字面意思就可以了。
其他文件:
  • IntegrationGuide:集成到其他Hypervisor;
  • PORING:移植说明;
  • third-party:支持第三方的插件,包括让tcpdump支持解析of协议的补丁;
  • tests:测试代码;
  • utilities:小工具,包括用户操作命令,例如ovs-dpctl、ovs-ofctl、ovs-controller、ovs-vsctl等;
  • xenserver:xenserver集成信息。
配置文件:
  • acinclude.m4:宏定义文件,供aclocal使用;
  • configure.ac:autoconf的宏文件;
  • boot.sh:执行autoreconf命令;
  • 子目录:bulid-aux、m4
  • Makefile.am:整体的automake配置文件;
  • manpages.mk:自动生成的man的配置文件;
核心代码文件:
  • datapath:ovs datapath代码目录;
  • vswitchd:ovs-switchd程序代码;
  • ovsdb:ovs数据库管理代码;
  • include:头文件代码目录;
  • lib:库文件目录;
  • ofproto:解析openflow协议;
以上基本上所有的文件都以知道大体上属于哪类文件,执行哪些功能。但更细致的需要通过研究代码才能够很好地理解。

三、OVS的工作过程:

虽然OVS是个虚拟交换机,但是它拥有物理交换机的功能,一般在LINUX内核中进行设计,下图能够很好地阐述OVS的工作过程:

OpenvSwitch分析(一)_第2张图片
       在物理交换机里面,数据流如黑色箭头所示,从网卡出发的数据包,经过层层解析,最后到达用户层。而在虚拟交换机里数据流如红色箭头所示,从网卡出发的数据包需要首先建立一个网桥:ovs-vsctl add-br br0,然后将网桥与网卡绑定起来:ovs-vsctl add-port br0 eth0.所以数据包从eth0出来后,通过vPort进入OpenvSwitch中,然后根据key值进行流表匹配,如果匹配成功,则根据流表所对应的action来进行处理;如果匹配不成功,有可能是在内核网络协议栈中进行处理(原因在于创建网桥时就会相应创建一个端口连接内核协议栈)。

更多的分析暂时还不能做出很好地总结,需要在分析代码,再进行总结。

你可能感兴趣的:(虚拟化技术)