• openvswitch总述


    前面用了两天时间了解了OpenvSwitch的结构,今天参考其他资料加自己的心得做个总结

    一. openvswitch的安装和使用

    前一篇文章中详细的介绍了OpenvSwitch的安装和使用,不再赘述

    二. openvswitch的代码框架

    上图(来自于别人的博客)简单但是很好的展示了OpenvSwitch的结构框架,最上面的远程层运行着OpenFlow控制器,可以是ryu,Floodlight等等,用来作为SDN的控制平面,下面两层:用户层和内核层分别为OpenvSwitch的具体逻辑实现,下面分别介绍:

    首先介绍用户层

    用户层的功能如下:作为守护程序他们实现了交换机和流表,是OpenvSwitch的核心,提供了一些组件去管理交换机,实现了数据库,对内核进行直接的管理

    主要包含三个守护程序:ovs-vswitchd, ovsdb-server, ovs-brcompatd(暂时用不到)

    ovs-vswitchd是交换机的核心,它实现了虚拟交换机,通过netlink协议直接和虚拟机进行通信。ovs-vswitchd将交换机的配置保存在数据库里面,修改也是通过数据库,这个数据库是通过ovsdb-server来直接管理的,因此ovs-vswitchd会通过Unix socket和ovsdb-server通信。

    前面提到用户空间通过netlink和内核空间通信,netlink定义了一些命令,去get/set/add/delete datapath/flow/vport,在特定的数据包上执行操作。

    控制datapath的命令有OVS_DP_CMD_UNSPEC, OVS_DP_CMD_NEW, OVS_DP_CMD_DEL, OVS_DP_CMD_GET, OVS_DP_CMD_SET

    实现这些命令的对应的内核函数为ovs_dp_cmd_new(), ovs_dp_cmd_del(), ovs_dp_cmd_get(), ovs_dp_cmd_set()

    对vport和flow定义了同样的函数,不再赘述

    三. 数据包在OpenvSwitch中的处理流程

    Open vSwitch工作流程

    上图(来自于sdnlab.com)非常形象的展示了数据包的流向:一般的数据包在linux网络协议栈中的流向为黑色箭头流向,而如果有了OpenvSwitch,则是红色箭头流向。OpenvSwitch转发和接收数据包的处理流程不一样,分开讲述。

    1. 转发

    vport是OpenvSwitch定义的一个非常重要的模块,一旦他接收到数据包,他会通过这个数据包的2-4层来构建一个独一无二的键值,内核会用这个键值来查看流表,如果匹配成功,则会直接对数据包执行相应的操作,如果匹配不成功,OpenvSwitch会通过upcall函数将数据包传送给用户层,用户层守护程序-ovs-vswitchd会通过数据库确定数据包的目的端口,然后通过OVS_ACTION_ATTR_OUTPUT命令告诉内核应该将数据包转向哪个端口,OVS_PACKET_CMD_EXECUTE让内核执行刚才的命令。

    2. 接收

    和转发处理非常类似,但是他是通过vport绑定了网卡,注册了一个接收函数hook,一旦网卡接收到数据包,OpenvSwitch会将数据包转发给用户层进行处理。

    除了上面提到的命令,内核还定义了一些操作

    OVS_ACTION_ATTR_USERSPACE: 告诉内核将数据包转发给用户层

    OVS_ACTION_ATTR_SET:更新数据包头

    等等

    四. 命令和缩写以及名词解释解释

    1. genl: generic netlink
    2. fast path 和slow path:这两个概念在FLowVisor里面就涉及过,fast path就是指在datapath中可以匹配成功流表,直接进行处理,如果匹配失败,则会上传到用户空间,消耗时间,这时slow path
    3. ovs-vsctl: openvswitch control:管理OpenvSwitch
    4. ovs-dpctl: dapapath control,不通过ovs-vswitchd来直接管理datapath
    5. ovsdb-client: 直接通过ovs-server数据库操作
    6. ovsdb-tool: 不通过ovs-server来直接操控数据库

    至此,应该对OpenvSwitch有了很好的了解,如果按照程序再走一边流程,相信对OpenvSwitch的理解会更加加深一些。

  • 相关阅读:
    [转] 股票基础知识
    [原] combobox如何让用户不能输入只能从下拉列表里面选择
    【原】2个面试问题(与同事李将的交流)
    [转] 纯代码取得本机IP地址
    [转] 关于硬盘修复以及低级格式化的一些文章
    [转] 130道C#面试题
    初学Sockets编程(四) 发送和接收数据
    利用Beyond Compare比较文件
    第三日:SimuLink之后是Stateflow
    简单的RPC编程实践——HelloWorld的实现
  • 原文地址:https://www.cnblogs.com/cotyb/p/5045881.html
Copyright © 2020-2023  润新知