不知道谁是谁?不打紧 带你进入OVS的世界

2017-11-03 16:42 出处:其他 作者:佚名 责任编辑:sunziyi

  【PConline 干货铺】在SDN快速发展的今天,要说有什么技术能跟它争头条的,也就是NFV了,而Open VSwitch(以下简称OVS)则是目前开源云计算平台中最受欢迎而且也是部署最为广泛的NFV技术。

  说到OVS,就不得不提到一个人,Martin Casado;是的,没错,这个人就是Open VSwitch的创始人,并且,他的牛逼之处不仅于此,他还是OpenFlow的发明人、硅谷最炙手可热的“40 under 40“之一、Nicira的创始人(Nicira被VMware收购后成为VMware的网络系统总设计师),人们尊称其为软件定义网络之父。

  那么,什么是OVS呢,它是一个标准,叫开放虚拟交换标准,你可以简单的理解为,OVS就是虚拟交换机,你可能会问,虚拟交换机有什么用呢?现在不是有那么多的交换机可以使用,为什么还需要虚拟交换机呢?是的,现在生产交换机的厂商有很多,比如锐捷,但是一台普通的交换机都要几千块钱,并且几千块的交换机的性能可能还没那么好;而虚拟交换机可以使用一台普通的服务器配置出数十台甚至上百台的虚拟交换机,且端口数目可以灵活选择,而性能方面,虚拟机与虚拟交换机之间的联机速度轻易可达10Gbps。怎么样,心动了吗;接下来,我就为各位看官详细的介绍一下这个Open VSwitch。

  前面说过了OVS是一个虚拟交换的标准,那什么是虚拟交换呢?就是利用软件的方式形成交换部件,所以也叫虚拟交换机或者软件交换机,而这虚拟交换机的有点前面也跟各位看官介绍过了,简单的说就是两个有点,一个是便宜、另一个是性能好。并且,它还支持标准的管理接口和协议(如NetFlow, sFlow, SPAN, RSPAN, CLI, LACP, 802.1ag)。

  好了,前面讲了这么多OVS的历史跟优点,那虚拟交换机具体是个什么样子呢?首先,说一下虚拟交换机的工作环境;物理交换机组成的网络呢,我们可以称之为物理网络,那虚拟交换机组成的网络呢,我们就称之为虚拟网络,如下图所示:

  绿色虚线内组成的就是一个虚拟网络了。其虚拟机之间的信息交换都通过虚拟交换机。

  接下来,我们来看一下OVS内部具体的组件。简单来看,OVS由这三大部分构成:

  1. ovsdb-sever: OVS的数据库服务器,用于管理ovsdb,通过与ovs-vswitchd之间的UNIXsocket机制进行通信,来存储虚拟交换机的配置信息

  2. ovs-vswitchd: OVS中最重要的组件;它实现了OpenFlow交换机的核心功能,并且通过netlink协议直接和OVS的内核模块进行通信。交换机运行过程中,ovs-vswitchd还会将交换机的配置、数据流信息及其变化保存到数据库ovsdb中,因为这个数据库由ovsdb-server直接管理,所以ovs-vswitchd需要和ovsdb-server通过UNIXsocket机制进行通信以获得或者保存配置信息。数据库ovsdb的存在,使得OVS交换机的配置能够被持久化存储,即便设备被重启后相关的OVS配置仍旧能够存在。

  3.ovs kernel module: OVS的内核模块,处理包交换和隧道,缓存flow,如果在内核的缓存中找到转发规则便进行转发,否则发向用户空间去处理。

  知道了这三个最重要的组件之后,我们再来看看OVS还有哪些其它的模块,看图:

  ovs-dpctl:一个用来配置交换机内核模块的工具,可以控制转发规则。

  ovs-vsctl:主要是获取或者更改ovs-vswitchd的配置信息,此工具操作的时候会更新ovsdb-server中的数据库。

  ovs-appctl:主要用于向OVS守护进程发送命令。

  ovsdbmonitor:GUI工具来显示ovsdb-server中数据信息。

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

  ovs-ofctl:用来控制OVS作为OpenFlow交换机工作时候的流表内容。

  熟悉完OVS各模块的概念和相互关系,我们来讲讲OVS交换机是怎么转发数据流的,毕竟作为一个交换机,它的工作就是转发数据嘛:

  第一步,OVS的datapath接收到从OVS连接的某个网络设备发来的数据包,从数据包中提取源/目的IP、源/目的MAC、端口等信息。

  第二步,OVS在内核状态下查看流表结构(通过Hash),观察是否有缓存的信息可用于转发这个数据包。

  第三步,假设数据包是这个网络设备发来的第一个数据包,在OVS内核中,将不会有相应的流表缓存信息存在,那么内核将不会知道如何处置这个数据包。所以内核将发送upcall给用户态。

  第四步,位于用户态的ovs-vswitchd进程接收到upcall后,将检查数据库以查询数据包的目的端口是哪里,然后告诉内核应该将数据包转发到哪个端口,例如eth0。

  第五步,内核执行用户此前设置的动作。即内核将数据包转发给端口eth0,进而数据被发送出去。

  最后,放一些ovs常用的操作命令,好奇心强的同学可以尝试。

  1)显示所有的网桥和端口

  ovs-vsctl show

  2)查看命令帮助

  ovs-vsctl -help

  3)查看交换机已建立的接口

  ovs-vsctl list-ports br0

  4)删除br0的接口

  ovs-vsctl del-port br0 svi-100

  5)查看流表

  ovs-ofctl dump-flows br0 -O OpenFlow13

  6)删除所有流表

  ovs-ofctl del-flows br0 -O OpenFlow13

  7)查看端口报文计数

  ovs-ofctl dump-ports br0 -O OpenFlow13

  好了,OVS故事会到此结束。期待下期精彩内容吧。

网络设备论坛帖子排行

最高点击 最高回复 最新
最新资讯离线随时看 聊天吐槽赢奖品