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. 怎么成为asp.net大神!!!!!!!!!!!!!!!!!!!怎么成为asp.net大神!!!!!!!!!!!!!!!!!!!

    怎么成为asp.net大神!!!!!!!!!!!!!!!!!!!怎么成为asp.net大神!!!!!!!!!!!!!!!!!!!怎么成为asp.net大神!!!!!!!!!!!!!!!!!!!怎么成为 ...

  2. php常见的坑

    10.filesize缓存的问题 PHP的filesize居然会缓存(当然还有不少,这里仅用filesize举例,其它会缓存的函数,以官方文档为准)线上代码经常随机出各种问题,排查了1个月,线上加各种 ...

  3. mybatis由浅入深day01_5.3 Mapper动态代理方法

    5.3 Mapper动态代理方法(程序员只需要写mapper接口(相当于dao接口)) 5.3.1 实现原理(mapper代理开发规范) 程序员还需要编写mapper.xml映射文件 程序员编写map ...

  4. MySQL<事务与存储过程>

    事务与存储过程 事务管理 事务的概念 谓的事务就是针对数据库的一组操作,它可以由一条或多条SQL语句组成,同一个事务的操作具备同步的特点,即事务中的语句要么都执行,要么都不执行. 事务的使用 开启事务 ...

  5. 查看内存使用情况:free

    free命令用于显示内存的使用情况,常见用法如下: [root@localhost ~]$ free # 以KB为单位显示内存使用情况 [root@localhost ~]$ free -m # 以M ...

  6. VS2015编译OpenSSL1.0.2源码

    更多详细信息http://blog.csdn.net/YAOJINGKAO/article/details/53041165?locationNum=10&fps=1 1.下载安装编译必须的A ...

  7. vue中的小踩坑(01)

    前言: 昨天算是使用vue2.0+element-ui做了一点小小的页面,可是源于其中遇到的问题,特地整理一下,以防自己还有其他的小伙伴们继续踩坑. 过程:         1.不知道大家有没有注意到 ...

  8. 什么是“类数组对象”,在jquer中怎样将类数组对象转换为数组对象

    类数组对象的定义: 所谓"类数组对象"就是一个常规的Object对象,如$("div")但它和数组对象非常相似:具备length属性, 并以0.1.2.3……等 ...

  9. 拼图的几个网上找到的Demo

    东西就直接放到云盘里了 https://yunpan.cn/ck8eCzJe9Pknm  访问密码 ee53

  10. 编译boost程序出现如下错误fatal error LNK1104: cannot open file 'libboost_system-vc100-mt-gd-1_54.lib'的解决方法

    对于如下程序: #include <iostream> #include <boost/asio.hpp> #include <boost/date_time/posix ...