Linux Bridge

和物理网络一样,虚拟网络要通信,必须借助一些交换设备来转发数据。因此,对于网络虚拟化来说,交换设备的虚拟化是很关键的一环。

上文网络虚拟化已经大致介绍了 Linux 内核为了满足网络虚拟化的要求,实现了一套虚拟交换设备——Bridge。本文重点介绍下 Bridge 的加强版——Open vSwitch(OVS),并从 Bridge 过渡到 OVS 的缘由讲起,让大家有个全面的认识。

借助 Linux Bridge 功能,同主机或跨主机的虚拟机之间能够轻松实现通信,也能够让虚拟机访问到外网,这就是我们所熟知的桥接模式,一般在装 VMware 虚拟机或者 VirtualBox 虚拟机的时候,都会提示我们要选择哪种模式,常用的两种模式是桥接和 NAT。

NAT 也很好理解,可以简单理解为当虚拟机启用了 NAT 模式之后,宿主机便通过 DHCP 为其生成可以访问外网的 IP,当 VM 访问外网的时候,就可以用该 IP 访问,其实就是宿主机为其做了地址转换。更详细的内容请自行搜索了解。

物理交换机有个重要的功能,就是虚拟局域网(VLAN),是对局域网(LAN)的软件化升级。一般,两台计算机通过一台交换机连接在一起就构成了一个 LAN。

一个 LAN 表示一个广播域,这意味着这个 LAN 中的任何节点发的数据包,其他节点都能收到,这有两个问题,一个是容易形成广播风暴,造成网络拥塞,另一个是广播包无法隔离,比如节点 B 不想接收节点 A 的包,但节点 A 强行要发,这就有点说不过去了。

解决这个问题的方案就是 VLAN,VLAN 能够对广播包进行有效隔离,它的做法是从软件上将交换机的端口虚拟出多个子端口,用 tag 来标记,相当于将交换机的端口划分多个 LAN,同一个 LAN 中的节点发出的数据包打上本 LAN 的 tag,这样,其他 LAN 中的节点就无法收到包,达到隔离的目的。

Bridge 本身是支持 VLAN 功能的,如下图所示,通过配置,Bridge 可以将一个物理网卡设备 eth0 划分成两个子设备 eth0.10,eth0.20,分别挂到 Bridge 虚拟出的两个 VLAN 上,VLAN id 分别为 VLAN 10 和 VLAN 20。同样,两个 VM 的虚拟网卡设备 vnet0 和 vnet 1 也分别挂到相应的 VLAN 上。这样配好的最终效果就是 VM1 不能和 VM2 通信了,达到了隔离。

Linux Bridge + VLAN 便可以构成一个和物理交换机具备相同功能的虚拟交换机了。对于网络虚拟化来说,Bridge 已经能够很好地充当交换设备的角色了。

OVS

但是为什么还有很多厂商都在做自己的虚拟交换机,比如比较流行的有 VMware virtual switch、Cisco Nexus 1000V,以及 Open vSwitch。究其原因,主要有以下几点(我们重点关注 OVS):

1)方便网络管理与监控。OVS 的引入,可以方便管理员对整套云环境中的网络状态和数据流量进行监控,比如可以分析网络中流淌的数据包是来自哪个 VM、哪个 OS 及哪个用户,这些都可以借助 OVS 提供的工具来达到。

2)加速数据包的寻路与转发。相比 Bridge 单纯的基于 MAC 地址学习的转发规则,OVS 引入流缓存的机制,可以加快数据包的转发效率。

3)基于 SDN 控制面与数据面分离的思想。上面两点其实都跟这一点有关,OVS 控制面负责流表的学习与下发,具体的转发动作则有数据面来完成。可扩展性强。

4)隧道协议支持。Bridge 只支持 VxLAN,OVS 支持 gre/vxlan/IPsec 等。

5)适用于 Xen、KVM、VirtualBox、VMware 等多种 Hypervisors。

......

除此之外,OVS 还有很多高级特性,详情可以查阅官网自行了解。

下面简单看下 OVS 的整体架构,如下图所示,OVS 在 Linux 用户态和内核态都实现了相应的模块,用户态主要组件有数据库服务 ovsdb-server 和守护进程 ovs-vswitchd。内核态中实现了 datapath 模块。

其中, ovs-vswitchd 和 datapath 共同构成了 OVS 的数据面,控制面由 controller 模块来完成,controller 一般表示的是 OpenFlow 控制器,在 OVS 中,它可以借由第三方来完成,只要支持 OpenFlow 协议即可。

这里额外提一点,很多的一些产品级的虚拟交换机都是自身集成了控制器,比如 Cisco 1000V 的 Virtual Supervisor Manager(VSM),VMware 的分布式交换机中的 vCenter,而 OVS 是把这个事交由第三方去做,这么做的意义还是比较大的,可以让自己的产品很好地融入到各种解决方案中。

OpenFlow
OpenFlow 是控制面和数据面通信的一套协议,我们常常把支持 OpenFlow 协议的交换机称为 OpenFlow 交换机,控制器称为 OpenFlow 控制器,业界比较知名的 OpenFlow 控制器有 OpenDaylight、ONOS 等。

OpenFlow 是一个独立的完整的流表协议,不依赖于 OVS,OVS 只是支持 OpenFlow 协议,有了支持,就可以使用 OpenFlow 控制器来管理 OVS 中的流表。OpenFlow 不仅仅支持虚拟交换机,某些硬件交换机也支持 OpenFlow 协议。

ovs-vswitchd
ovs-vswitchd 是 OVS 的核心组件,它和内核模块 datapath 共同构成了 OVS 的数据面。它使用 OpenFlow 协议与 OpenFlow 控制器通信,使用 OVSDB 协议与 ovsdb-server 通信,使用 netlink 和 datapath 内核模块通信。

ovsdb-server
ovsdb-server 是 OVS 轻量级的数据库服务,用于整个 OVS 的配置信息,包括接口、交换内容、VLAN 等,ovs-vswitchd 根据这些配置信息工作。

OpenFlow 控制器
OpenFlow 控制器可以通过 OpenFlow 协议连接到任何支持 OpenFlow 的交换机,比如 OVS 。控制器通过向交换机下发流表规则来控制数据流向。

Kernel Datapath
datapath 内核模块和 ovs-vswitchd 是相互协作工作的,datapath 负责具体的收发包,而 ovs-vswitchd 通过 controller 下发的流表规则指导 datapath 如何转发包。

举个例子,datapath 从主机物理网卡 NIC 或者 VM 的 虚拟网卡 vNIC 收到包,如果是第一次收到包,datapath 不知道怎么处理这个包,于是将其丢给 ovs-vswitchd , ovs-vswitchd 决定该如何处理这个包之后又丢给 datapath,datapath 根据 ovs-vswitchd 的指示执行相应的动作,是丢弃还是从哪个口传出去。同时,ovs-vswitchd 会让 datapath 缓存好这个包的动作,下次再来就可以直接执行动作。

如果不是第一次收到包,就是按照之前缓存好的动作执行,这样极大地提高了数据处理的速度。


本文先对 OVS 有个初步印象, OVS 的其他组件详细介绍以及下载可以进群1044279583获取

从 Bridge 到 OVS,深度探索虚拟交换机相关推荐

  1. 深度探索 OpenStack Neutron:Neutron 实现模型

    此文章源于鄙人微信公众号"标哥说天下" [上次发表了(1),这次就不发表(2)了,而是在(1)的基础上继续往下写.如果您已经看过(1),可以往下翻,从 4.2.3 小节开始看起,谢 ...

  2. 技术沙龙 | TeaTalk 带你深度探索 SDN 网络技术再创新

    越来越多的企业.行业和政府机关顺应企业数字化转型.云服务和国家政策等趋势将业务迁移上云.随着移动云的快速发展,对网络提供差异化的服务能力也提出了很多新的考验.大规模数据中心.虚拟化 SDN 网络技术及 ...

  3. esxi6.7虚拟机网卡连接第二个虚拟交换机_Linux云计算底层技术之网络虚拟化

    本文首发于我的公众号 Linux云计算网络(id: cloud_dev),号内有 10T 书籍和视频资源,后台回复「1024」即可领取,欢迎大家关注,第一时间掌握技术干货! 网络虚拟化相对计算.存储虚 ...

  4. Linux中建立虚拟交换机,使用Open vSwitch做虚拟交换机制定网络解决方案

    本文主要介绍如何在使用Open vSwitch做虚拟交换机和使用Linux bridge做交换机中做出抉择,希望通过本文的学习,对大家日后的学习和工作有所帮助. 想要在使用Open vSwitch做虚 ...

  5. 浅谈虚拟交换机(vswitch)技术演进

    虚拟化环境中,对于网络的连接有多种方式,以KVM为例,我们平时在使用libvirt或者qemu创建虚拟机时,可以选择NAT网络连接和bridge桥接网络连接.首先来调查一下这二者的实现区别是什么. 基 ...

  6. 《Android深度探索(卷1):HAL与驱动开发》——6.4节使用多种方式测试Linux驱动...

    本节书摘来自异步社区<Android深度探索(卷1):HAL与驱动开发>一书中的第6章,第6.4节使用多种方式测试Linux驱动,作者李宁,更多章节内容可以访问云栖社区"异步社区 ...

  7. 《深度探索C++对象模型》--5 构造析构拷贝 6 执行期语意学

     <深度探索C++对象模型>--5构造.析构.拷贝语意学 1.纯虚函数: (1)C++可以定义和调用一个纯虚函数,不过只可以静态调用,不可以由虚拟机制调用. 注意:pure virtu ...

  8. 深度探索C++ 对象模型(7)-Data member的布局(虚继承)

    虚拟继承 namespace ObjectMultiDerived {class Point2d {public:// has virtual functionsvirtual void print( ...

  9. 新书出版:《Android深度探索(卷1):HAL与驱动开发》

    <Android深度探索(卷1):HAL与驱动开发> [1]亚马逊 [2]当当网 [3]京东商城 [4]互动网 [5]淘宝网 [6]豆瓣网 < Android深度探索(卷1):HAL ...

最新文章

  1. 低差异序列:范德科皮特序列(Van der Corput sequence)
  2. leetcode刷题练习
  3. 多线程编程(15) - 多线程同步之 WaitableTimer (等待定时器对象)[续]
  4. 关于Fiori MyAccount无法在standalone环境下运行的问题
  5. Mayor's posters POJ - 2528 (离散化+线段树)
  6. java去除不为null,java – 选择特定字段不为NULL的所有记录
  7. 程序员需要避免的 10 个坏习惯
  8. 安卓更改目标sdk_您最近是否修改了目标?
  9. python基础分析_python基础--函数全解析(1)
  10. 基于JAVA+SpringMVC+Mybatis+MYSQL的网上拍卖秒杀竞价系统
  11. 在CentOS7上使用FastDFS搭建文件服务器
  12. mysql参数优化和硬件优化等分享
  13. setfacl 权限导出_setfacl getfacl 将某个目录的访问权限赋值给某个用户
  14. AC自动机(HDU 2222: Keywords Search)
  15. coreseek mysql_centos+php+coreseek+sphinx+mysql之一coreseek安装篇
  16. 如何处理出差或放假在家办公加密文件打不开?
  17. ug草图精度怎么设置_UG怎么设置草图尺寸? UG草图尺寸的编辑方法
  18. 10篇最新年优秀CISSP认证考试心得分享(值得收藏)
  19. 浅析ERP系统--研发
  20. 业务流程监控:让多维度监控有了灵魂

热门文章

  1. VMOS虚拟机与Fiddler免root抓包(超简单解决抓包无网络问题)
  2. 西门子PLC S7-300出现通讯故障及远程维护办法
  3. Python真牛逼,获取压缩文件密码,我只要一分钟!
  4. echarts 仪表盘 文字位置_echarts仪表盘相关配置
  5. swift UITextField 设置点击确定收回输入框
  6. 中文出现乱码最常见的几种方式解析
  7. 炉石服务器请求超时何时才能修复,炉石传说登陆提示请求已超时怎么办_炉石传说登陆提示请求已超时解决方法_3DM网游...
  8. java获取cpu使用率/内存使用率/硬盘的使用率
  9. 动画演示电容工作原理、电容传感器原理
  10. Nmap安装和使用详解