前面用了两天时间了解了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中的处理流程

上图(来自于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的理解会更加加深一些。

openvswitch总述的更多相关文章

  1. Java的多线程机制系列:(一)总述及基础概念

    前言 这一系列多线程的文章,一方面是个人对Java现有的多线程机制的学习和记录,另一方面是希望能给不熟悉Java多线程机制.或有一定基础但理解还不够深的读者一个比较全面的介绍,旨在使读者对Java的多 ...

  2. 三国杀3v3心法——总述篇

    昔日,独孤求败前辈精研剑法,将其中奥妙化为独孤九剑,破尽天下武功.其中开篇总诀式提纲挈领,从宏观的层面阐述剑道,是领悟后面八式的基石,而之后各式则深入微观,可各破一类具体的武功.笔者亦曾苦心研究三国杀 ...

  3. Web应用程序系统的多用户权限控制设计及实现-总述【1】

    中大型的Web系统开发均需要权限的配置,基于多角色,多用户的操作权限管理是一个系统开发的基础.搭建好一套权限,用户,角色,页面一体的开发架构,可以用于后期业务的开发,同时也可用于不同业务的系统开发. ...

  4. Linux makefile教程之总述二[转]

    Makefile 总述——————— 一.Makefile里有什么? Makefile里主要包含了五个东西:显式规则.隐晦规则.变量定义.文件指示和注释. 1.显式规则.显式规则说明了,如何生成一个或 ...

  5. Solr4.8.0源码分析(5)之查询流程分析总述

    Solr4.8.0源码分析(5)之查询流程分析总述 前面已经写到,solr查询是通过http发送命令,solr servlet接受并进行处理.所以solr的查询流程从SolrDispatchsFilt ...

  6. 很详细、很移动的Linux makefile教程:介绍,总述,书写规则,书写命令,使用变量,使用条件推断,使用函数,Make 的运行,隐含规则 使用make更新函数库文件 后序

    很详细.很移动的Linux makefile 教程 内容如下: Makefile 介绍 Makefile 总述 书写规则 书写命令 使用变量 使用条件推断 使用函数 make 的运行 隐含规则 使用m ...

  7. STL特性总述——写在前面

    所谓的容器,见名知意,容纳其他数据的"器具": 特点 1)支持泛型: 2)保存副本:本质上传入对象的拷贝. 3)内存托管 :构建对象于堆,无需人工干预,自动管理内存的生存周期. S ...

  8. [转] Makefile 基础 (2) —— Makefile 总述

    该篇文章为转载,是对原作者系列文章的总汇加上标注. 支持原创,请移步陈浩大神博客:(最原始版本) http://blog.csdn.net/haoel/article/details/2886 我转自 ...

  9. 基于ASP.Net Core开发一套通用后台框架记录-(总述)

    写在前面 本系列博客是本人在学习的过程中搭建学习的记录,如果对你有所帮助那再好不过.如果您有发现错误,请告知我,我会第一时间修改. 前期我不会公开源码,我想是一点点敲代码,不然复制.粘贴那就没意思了. ...

随机推荐

  1. 【干货】电路设计师指导手册(已更新完毕)(转载EDN)

    [干货]电路设计师指导手册(已更新完毕) 第一部分:接地与布线第二部分:电源返回路径与I/O信号接地第三部分:板间互连.星形接地及屏蔽第四部分:安全地以及电线/电缆第五部分:射频电缆.双绞线与串扰

  2. Azure 服务监控API调用

    概述 在使用Azure的过程中,很多用户希望通过code的方式获取服务在管理门户中显示的监视信息,如虚拟机的CPU.服务总线的总消息出入数等.目前Azure的大部分服务都已经支持通过监控器的API查询 ...

  3. 数据结构(逻辑结构,物理结构,特点) C#多线程编程的同步也线程安全 C#多线程编程笔记 String 与 StringBuilder (StringBuffer) 数据结构与算法-初体验(极客专栏)

    数据结构(逻辑结构,物理结构,特点) 一.数据的逻辑结构:指反映数据元素之间的逻辑关系的数据结构,其中的逻辑关系是指数据元素之间的前后件关系,而与他们在计算机中的存储位置无关.逻辑结构包括: 集合 数 ...

  4. 解决Win10系统下 C# DateTime 出现星期几的问题 解决ASP.NET MVC 接受Request Playload参数问题

    解决Win10系统下 C# DateTime 出现星期几的问题 昨天晚上写代码的时候偶然发现 DateTime 里出现了星期几,当时一阵凌乱,去网上百度没有详细解决办法,很多人说可以用用 ToStri ...

  5. excel weekday

    weekday(日期值)=星期几 星期天是1 星期六是7

  6. 多线程-AbstractQueuedSynchronizer(AQS)

    概述 从使用者的角度,AQS的功能可分为两类:独占功能和共享功能.它的子类中,要么实现并使用了它独占功能的API,要么使用了共享锁的功能,而不会同时使用两套API,即使是它的子类ReentrantRe ...

  7. mysql 一些常用指令

    登陆: mysql -u root -p //登陆,输入root密码 退出登陆 mysql>exit; mysql 为所有ip授权 mysql> GRANT ALL PRIVILEGES ...

  8. iOS音频合并

    iOS音频合并 最近遇到一个需求,客户录音试听一下可以,就继续向下录制,当客户录制完成后,需要把前面录制的试听音频和后面的音频进行合并.最初想到的方法,使用NSData对两个音频文件进行合并,但是合并 ...

  9. Window 窗口类

    窗口类 WNDCLASS 总结 总结为下面的几个问题: . 什么是窗口类 . 窗口类的三种类型 . 窗口类各字段含义 . 窗口类的注册和注销 . 如何使用窗口类,子类化.超类化是什么 下面分别描述: ...

  10. Hello,Ajax

    学习了Ajax技术,写了一个最简单的Ajax应用 <%@page contentType="text/html; charset=utf-8" language=" ...