OVS即开放虚拟交换标准,不仅仅是为了支持OpenFlow协议,而是为了给虚拟化平台上运行的虚拟机实例提供一套纯软件实现的路由交换协议栈。具体点说,Open vSwitch是在开源的Apache2.0许可下的产品级质量的多层虚拟交换标准!它旨在通过编程扩展,使庞大的网络自动化(配置、管理、维护),同时还支持标准的管理接口和协议(如NetFlow, sFlow, SPAN, RSPAN, CLI, LACP,802.1ag)。

Standard 802.1Q VLAN model with trunk and access ports;
NIC bonding with or without LACP on upstream switch;
NetFlow, sFlow(R), and mirroring for increased visibility;
QoS (Quality of Service) configuration, plus policing;
Geneve, GRE, GRE over IPSEC, VXLAN, and LISP tunneling;
802.1ag connectivity fault management;
OpenFlow 1.0 plus numerous extensions;
Transactional configuration database with C and Python bindings;
High-performance forwarding using a Linux kernel module;

​ OVS bridge 有两种模式:“normal” 和 “flow”。“normal” 模式的 bridge 同普通的
Linux 桥,而 “flow” 模式的 bridge 是根据其流表(flow tables) 来进行转发的。Neutron 使用两种 OVS
bridge:br-int 和 br-tun。其中,br-int 是一个 “normal” 模式的虚拟网桥,而 br-tun 是 “flow”
模式的,它比 br-int 复杂得多。详情参考:Neutron二层网络服务实现原理

OVS基础架构

Open vSwitch分为三层:

1)管理层即:ovs-dpctl、ovs-vsctl、ovs-ofctl、ovsdb-tool。
2)业务逻辑层即:vswitchd、ovsdb。
3)底层服务层即:datapath。

ovs-vswitchd:守护程序,实现交换功能,和Linux内核兼容模块一起,实现基于流的交换flow-based switching。
ovsdb:轻量级的数据库服务,主要保存了整个OVS的配置信息,包括接口,交换内容,VLAN等等。ovs-vswitchd会根据数据库中的配置信息工作。
ovs-dpctl:一个工具,用来配置交换机内核模块,可以控制转发规则。
ovs-vsctl:主要是获取或者更改ovs-vswitchd的配置信息,此工具操作的时候会更新ovsdb-server中的数据库。
ovs-ofctl:用来查询和控制Ovs作为Openflow交换机和控制器。

OVS常见命令

ovs-vsctl 系列

添加网桥

ovs-vsctl add-br br-int

列出网桥

ovs-vsctl list-br

给网桥添加端口

ovs-vsctl add-port br-int tap-xxx

列出挂载某网络接口的所有网桥

ovs-vsctl port-to-br tap-xxx

查看全部信息

ovs-vsctl show

ovs-ofctl 系列

查看所有网桥

ovs-vsctl list bridge

查看br-tun网桥

ovs-ofctl show br-tun

查看br-tun网桥上所有端口的状态
ovs-ofctl dump-ports br-tun

添加一条流表规则 丢弃从port2上发来的所有数据表

ovs-ofctl add-flow br-tun idle_timeout=120,in_port=2,actions=drop

其中每条流规则由一系列字段组成,分为基本字段、条件字段和动作字段三部分。
基本字段包括: 生效时间
duration_sec,所属表项 table_id,优先级 priority,处理的数据包数 n_packets,空闲超时时间
idle_timeout ,其中 idle_timeout 以秒为单位,超过设置的空闲超时时间后该流规则将被自动删除,空闲超时时间设置为 0
表示该流规则永不过期,idle_timeout 将不包含于 ovs-ofctl dump-flows brname 的输出中。

条件字段包括: 输入端口号 in_port,dl_vlan=vlan(数据包的 VLAN Tag 值,范围是 0-4095,0xffff
代表不包含 VLAN Tag 的数据包),源目的 mac 地址 dl_src/dl_dst,源目的 ip 地址
nw_src/nw_dst,数据包类型 dl_type,网络层协议类型 nw_proto,匹配源或者目标的 MAC
地址01:00:00:00:00:00/01:00:00:00:00:00
代表广播地址,00:00:00:00:00:00/01:00:00:00:00:00
代表单播地址,dl_type=ethertype匹配以太网协议类型,dl_type=0x0800 代表 IPv4
协议,dl_type=0x086dd 代表 IPv6 协议,dl_type=0x0806 代表 ARP
协议。这些字段可以任意组合,但在网络分层结构中底层的字段未给出确定值时上层的字段不允许给确定值,即一
条流规则中允许底层协议字段指定为确定值,高层协议字段指定为通配符(不指定即为匹配任何值),而不允许高层协议字段指定为确定值,
而底层协议字段却为通配符(不指定即为匹配任何值),否则,ovs-vswitchd 中的流规则将全部丢失,网络无法连接。

动作字段包括:正常转发 normal、定向到某交换机端口 output:port、丢弃
drop、mod_vlan_vid、strip_vlan、更改源目的 mac 地址 mod_dl_src/mod_dl_dst
等,一条流规则可有多个动作,动作执行按指定的先后顺序依次完成。

就在我抄这边文档的时候,没错,这篇是抄袭的,我的qq技术群有人离开了,有时候想想,有些人来了又走了,有些人来了一直都在。不知道为什么过了三十岁突然感觉很小的一件事情也能引发我的一些感慨。

Neutron之OVS的更多相关文章

  1. 写个脚本列出neutron的ovs的topology。

    运行结果如下: $ ./nova-ifinfo  a7026868-407c-4c54-bb8f-a68623d7e13fvm name is: instance-00000035    # 查找VM ...

  2. Neutron 理解 (4): Neutron OVS OpenFlow 流表 和 L2 Population [Netruon OVS OpenFlow tables + L2 Population]

    学习 Neutron 系列文章: (1)Neutron 所实现的虚拟化网络 (2)Neutron OpenvSwitch + VLAN 虚拟网络 (3)Neutron OpenvSwitch + GR ...

  3. Neutron 理解 (3): Open vSwitch + GRE/VxLAN 组网 [Netruon Open vSwitch + GRE/VxLAN Virutal Network]

    学习 Neutron 系列文章: (1)Neutron 所实现的虚拟化网络 (2)Neutron OpenvSwitch + VLAN 虚拟网络 (3)Neutron OpenvSwitch + GR ...

  4. openstack之Neutron网络模式vlan,gre,vxlan详解

    第一:neutron openvswitch + vlan虚拟网络 一:基础知识 vlan基础知识 1.vlan介绍 1.1:首先说下lan,LAN 表示 Local Area Network,本地局 ...

  5. 我非要捅穿这 Neutron(四)Open vSwitch in Neutron

    目录 文章目录 目录 前文列表 OvS In Neutron 网络拓扑 OvS In Neutron 网络实现模型 双节点混合平面网络 双节点网络拓扑 OvS Bridges 与初始流表项 OvS b ...

  6. ML2 – Address Population

    Why do we need it, whatever it is? VM unicast, multicast and broadcast traffic flow is detailed in m ...

  7. OpenStack Newton版本Ceph集成部署记录

    2017年2月,OpenStack Ocata版本正式release,就此记录上一版本 Newton 结合Ceph Jewel版的部署实践.宿主机操作系统为CentOS 7.2 . 初级版: 192. ...

  8. GRE与VXLAN

    一 GRE 1.1 概念 GRE全称是Generic Routing Encapsulation,是一种协议封装的格式,具体格式内容见:https://tools.ietf.org/html/rfc2 ...

  9. OpenStack的八年之痒

    2010年10月,OpenStack发布了第一个版本:上个月,发布了它的第18个版本Rocky.几年前气氛火爆,如今却冷冷清清.Rocky版本宣布后,OpenStack群里也就出现了几篇简短的翻译过来 ...

随机推荐

  1. The Air Jordan 4 Oreo Remastered would be re-released in 2015

    May be the Jordan 4 Oreo probably the most anticipated pair among the remastered Jordans for 2015? W ...

  2. nginx 413文件上报太大

    在nginx使用过程中,上传文件的过程中,通常需要设置nginx报文大小限制.避免出现413 Request Entity Too Large. 于是奇葩的问题被我们遇到了,详细配置请参考下面.我们的 ...

  3. kubernetes Metrics-server 安装

    一.Metrics-server安装: 由于使用自动扩容,得安装heapster或metrics-server(由于heapster停止更新故用metrics-server): 1.安装之前需要为ku ...

  4. SpringBoot入门学习(一)

    Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置.用我 ...

  5. pycharm 小知识

    pycharm使用过程小知识: 1.pycharm定义项目或脚本抬头模版:setting ——Editor——File and Code Templates,右侧选择Python Script: 2. ...

  6. Linux中find

    Linux中find常见用法示例 ·find   path   -option   [   -print ]   [ -exec   -ok   command ]   {} \; find命令的参数 ...

  7. Storm完整例子

    import backtype.storm.spout.SpoutOutputCollector; import backtype.storm.task.TopologyContext; import ...

  8. USB Transfer and Packet Sizes

    https://msdn.microsoft.com/en-us/library/ff538112.aspx http://blog.csdn.net/chenyujing1234/article/d ...

  9. 延迟环境变量扩展(bat)

    延迟环境变量扩展(bat) 之前遇到一些环境变量的问题,简单记录下 From:http://www.cnblogs.com/dongzhiquan/archive/2012/09/05/2671218 ...

  10. Jenkins 集成Ansible教程

    前提条件: 1. 部署Jenkins Server 2. 部署 Ansible Server 一.在Jenkins安装SSH插件 系统管理 -> 插件管理 二.在Jenkins 凭证中添加Ans ...