1、Database Structure

  • Physical network table中包含了和chassis nodes有关的所有信息,包括用于overlay所需的IP地址,支持的tunnel类型以及security key。其中Chassis table和Encap table都是physical network tables
  • Logical network table包含logical switches,logical routers,ACLs,firewall rules以及所有用于描述packet如何流经logical network的logical datapath flow。logical network的数据可能很大,因此为了提高扩展性,每个chassis只保存它参与的logical network的有关的数据。
  • Logical-physical bindings 用于连接logical component和physical component。其中表明了logical component当前所在的chassis以及在tunnel encapsulation中代表的logical entities的value。
  • MAC_Binding table用于追踪那些使用ARP和ND动态发现的IP address - Ethernet address bindings。通常虚拟机的IP-to-MAC是位于Port_Binding table中的,因此MAC_Binding中主要用于发现physical network中的bindings

2、SB_Global TABLE

其中的nb_cfg是配置的序号。当CMS或者ovn-nbctl更新northbound database时,它会更新其中的NB_Global table的nb_cfg列。接着当ovn-northd更新southbound database和northbound database同步时,它也会同步SB_Global中的nb_cfg

3、Chassis TABLE

这个表中的每一行都代表了物理网络中的一个hypervisor或者gateway(a chassis)。每个chassis都通过ovn-controller/ovn-controller-vtep来添加或者更新它自己对应的行,并且保留其他行的拷贝用于确认如何到达其他hypervisor。

4、Encap TABLE

Chassis table中的encap column会引用这个table中的某行,用于标识OVN应该怎样将logical dataplane packets传输到该chassis。

5、Logical_Flow TABLE

这个表中的每一行都代表了一个logical flow。ovn-northd用logical flow填充本表,用以实现OVN_Northbound中的L2和L3拓扑逻辑。每个hypervisor再通过ovn-controller将logical flow转换成OpenFlow flows并将其装入Open vSwtich。

logical flow和OpenFlow flow很像,主要区别在于logical flow使用的是logical ports和logical datapaths,而不是physical ports和physical datapaths。logical flow和physical flow之间的转换有助于确保logical datapaths间的隔离性。(同时logical flow这一抽象模型有助于减轻OVN中心组件的负担,因为它们不再需要为每个chassis单独计算并安装physical flow了)

如果没有匹配的flow,默认的行为是drop packet

Architectural Logical Lift Cycle of a Packet

下文的描述可能让人产生都是OVN自己执行的这些操作,事实上OVN(利用ovn-controller)通过OpenFlow和OVSDB对Open vSwitch进行编程,让它来代替执行的。

OVN首先将packet传入logical datapath的logical ingress pipeline,接着它会将packet输出到一个或多个logical port或者logical multicast groups中。对于每个logical output port,OVN将packet传输给datapath中的logical egress pipeline,它可能会drop the packet或者将它送往目的地。在两个pipeline之间,OVN可能会将packet封装到tunnel中并传输到remote hypervisor。

更详细的说,首先,OVN会对Logical_Flow table进行搜索,寻找一条正确的logical_datapath,它的pipeline为ingress,table_id为0,以及和该packet匹配。如果没有找到,OVN会drop the packet。如果OVN找到了很多条,则选择其中具有最高优先级的一条。接着OVN会以规定的顺序执行该行对应的action。其中的next和output action比较特殊。

next action会让上述的执行过程重复递归地执行,不同的是OVN会查询table_id 1而不是0。当递归结束时,会接着执行next之后的action。

output action同样会引入递归。它的具体作用取决于output field当前的value。假设ouput指向一个logical port。首先OVN会比较inport和outport,如果两者相等,默认output不做任何操作。一般来说,两者是不同的,packet会进入egress pipeline,并且丢弃reg0 ... reg9,这些寄存器信息和connection tracking state,从而无论egress pipeline是否在不同的hypervisor中都能够保持一致的行为。

当执行egress pipeline时,OVN会再次对Logical_Flow进行搜索,找寻正确的logical_datapath,同样table_id为0,匹配该packet,不同的是,此时寻找的是egress类型的pipeline。如果没要找到匹配的flow,那么output不做任何操作。否则OVN执行matching flow中的action。

在egress pipeline中,next action和ingress pipeline中的相同,而output action则直接将packet传输到output port。

6、Port_Binding TABLE

该表中的每一行都绑定了一个logical port和它的具体实现。对于大多数的logical ports,这意味着和某个physical location绑定,例如绑定一个logical port到运行在某个hypervisor中的某个虚拟机的VIF。其他的logical ports,例如logical patch port,没有具体的physical location,但是它们的binding依然可以在这个表中出现。

对于OVN_Northbound database中的每个Logical_Switch_Port记录,ovn-northd都会在这个表中创建一条记录。并且ovn-northd填充并且维护除了chassis column中的每一列。

ovn-controller/ovn-controller-vtep会填充chassis column,当它通过监听本地的Open_vSwitch database发现logical port就位于自己所在的hypervisor中。

7、MAC_Binding TABLE

该表中的每一行代表一个IP地址以及通过ARP(对于IPv4)或者ND(对于IPv6)发现的Ethernet address。这个表主要用于发现和physical network的绑定关系,因为虚拟机的IP-to-MAC通常是静态绑定到Port_Binding table中的。

概况来说,logical router的MAC binding的生命周期如下所示:

  1. 在hypervisor 1中,一个logical router发现有一个packet需要发往IP地址为A的router port。通过查找logical flow table之后,它发现A缺少静态的IP-to-MAC binding,而通过get_arp发现它缺少动态的IP-to-MAC binding。
  2. 通过OVN logical arp action,logical router会创建并发送一个广播ARP请求到router port并且丢弃IP packet
  3. 和router port相连的logical switch将ARP请求转发到它的所有ports
  4. hypervisor2中和该logical switch相连的虚拟机如果拥有请求中的IP地址,它就会创建一个APR reply并且将其单播到发出请求的logical router port的Ethernet address
  5. logical switch将ARP reply转发到logical router port
  6. logical router的flow table执行put_arp action。ovn-controller会在MAC_Binding table中增加一行用于记录IP-to-MAC binding
  7. 在hypervisor1中,ovn-controller从OVN southbound database中获取了更新过的MAC_Binding table。下一个通过logical router发往A的packet将直接送往bound Ethernet address

8、Datapath_Binding TABLE

这个表中的每一行代表了一个logical datapath,它实现了和它相关的Port_Binding中的ports之间的logical pipeline。事实上,给定的logical datapath中的pipeline实现的不是一个logical switch就是一个logical router。

这个表的主要目的是为logical datapath提供physical binding。一个logical datapath没有physical location,因此它的physical binding信息是有限的:只有tunnel_key。该表中的其他数据并不影响packet的转发

ovn-sb 摘要的更多相关文章

  1. .NETFramework:StringBuilder

    ylbtech-.NETFramework:StringBuilder 1.程序集 mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken ...

  2. 基于HTTP在互联网传输敏感数据的消息摘要、签名与加密方案

    基于HTTP在互联网传输敏感数据的消息摘要.签名与加密方案 博客分类: 信息安全 Java 签名加密AESMD5HTTPS  一.关键词 HTTP,HTTPS,AES,SHA-1,MD5,消息摘要,数 ...

  3. HTTP摘要认证原理以及HttpClient4.3实现

    基本认证便捷灵活,但极不安全.用户名和密码都是以明文形式传送的,也没有采取任何措施防止对报文的篡改.安全使用基本认证的唯一方式就是将其与 SSL 配合使用. 摘要认证是另一种HTTP认证协议,它试图修 ...

  4. 实现自动文本摘要(python,java)

    参考资料:http://www.ruanyifeng.com/blog/2013/03/automatic_summarization.html http://joshbohde.com/blog/d ...

  5. MD5摘要(Java实现)

    消息摘要算法又成散列算法,其核心在于散列函数的单向性.即通过散列函数可获得对应的散列值,但不可以通过散列值反推其原始信息.   消息摘要算法分为以下三大类:       MD(Message Dige ...

  6. HTTP认证之摘要认证——Digest(二)

    导航 HTTP认证之基本认证--Basic(一) HTTP认证之基本认证--Basic(二) HTTP认证之摘要认证--Digest(一) HTTP认证之摘要认证--Digest(二) 在HTTP认证 ...

  7. 获取一段HTML文本中的第一张图片与截取内容摘要

    有时候我们获得到的数据是一段HTML文本,也许这段文本里面有许多图片,需要截取一张作为标题图片,这时就可以用到下面这个方法获取到第一张图片: #region 获取第一张图片 /// <summa ...

  8. Gradle +HanLP +SpringBoot 构建关键词提取,摘要提取 。入门篇

    前段时间,领导要求出一个关键字提取的微服务,要求轻量级. 对于没写过微服务的一个小白来讲.有点赶鸭子上架,但是没办法,硬着头皮上也不能说不会啊. 首先了解下公司目前的架构体系,发现并不是分布式开发,只 ...

  9. java根据html生成摘要

    转自:http://java.freesion.com/article/48772295755/ 开发一个系统,需要用到这个,根据html生成你指定多少位的摘要 package com.chendao ...

  10. Atitit HTTP 认证机制基本验证 (Basic Authentication) 和摘要验证 (Digest Authentication)attilax总结

    Atitit HTTP认证机制基本验证 (Basic Authentication) 和摘要验证 (Digest Authentication)attilax总结 1.1. 最广泛使用的是基本验证 ( ...

随机推荐

  1. Wex5短信验证

    调了好几天短信验证测试,终于成功,现将全部源代码发给大家,希望对各位有所帮助,少走弯路        Model.prototype.saveUserBtnClick = function(event ...

  2. CSS清除浮动常用方法小结

    1.使用空标签清除浮动.我用了很久的一种方法,空标签可以是div标签,也可以是P标签.我习惯用<P>,够简短,也有很多人用<hr>,只是需要另外为其清除边框,但理论上可以是任何 ...

  3. c#.net常用函数和方法集

    1.DateTime 数字型 System.DateTime currentTime=new System.DateTime(); 1.1 取当前年月日时分秒 currentTime=System.D ...

  4. shell脚本中,for基于列表进行循环的实现方法

    需求描述: 在写脚本中需要这么个需求,需要对一个列表中的值进行循环 比如,列表中的值mysqld,zookeeper,hbase 简单来说,for基于列表值的循环. 脚本测试过程: 1.测试脚本 #! ...

  5. haffman哈夫曼编码的实现

    <span style="font-size:18px;">/* 1.在一棵二叉树中,我们定义从A节点到B节点所经过的分支序列为从A节点到B节点的路径: 定义从A节点到 ...

  6. 设置Android应用程序横竖屏显示

    设置Android应用程序横竖屏显示有2中方式: 1.在mainfest中增加android:screenOrientation属性 <?xml version="1.0" ...

  7. Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock'

    MySQL在linux安装之后,连接到服务,报了下面的错误: ERROR 2002 (HY000): Can't connect to local MySQL server through socke ...

  8. ARM、MCU、DSP、FPGA、SOC各是什么?区别是什么?(转)

    ARM ARM处理器是Acorn计算机有限公司面向低预算市场设计的第一款RISC微处理器.更早称作Acorn RISC Machine.ARM处理器本身是32位设计,但也配备16位指令集,一般来讲比等 ...

  9. MYSQL系列之(一)

      mysql简介 1.什么是数据库 ? 数据库(Database)是按照数据结构来组织.存储和管理数据的仓库,它产生于距今六十多年前,随着信息技术和市场的发展,特别是二十世纪九十年代以后,数据管理不 ...

  10. Bootstrap迁移系列 - Modal

    原来项目是使用2.x完成的,现在需要使用3.x进行升级. 对jQuery的依赖 请注意,所有JavaScript插件都依赖jQuery,在页面中的引入顺序可以参考基本模版. bower.json中列出 ...