本文主要介绍Open VSwitch - 虚拟交换机的概述内容,阅读本文能够对OVS(Open VSwitch)有一个大体的了解。那么本文主要回答了这样几个问题:数据库
1. 虚拟交换机是什么,干什么?编程
2. 虚拟网络和OVS缓存
3. OVS的组件有哪些?服务器
4. 使用OVS建立一个网络拓扑网络
5. 示例架构
OVS是一个高质量的,多层虚拟交换机(网络分层的层),其目的是让大规模网络自动化能够经过编程扩展,同时仍然支持标准的管理接口和协议:NetFlow. SFlow ... 等,而且它还支持多个物理机的分布式环境。详情请见http://openvswitch.org / http://lamoop.com/post/2013-11-18/40060149263app
那什么又是虚拟交换呢?就是,利用软件的方式造成交换部件,因此也叫软件交换机,跟传统的物理交换机相比,虚拟交换机同要具有不少有点:1.配置灵活,由于是软件实现的,一台物理服务器上能够配置数十太或者数百台虚拟交换机,并且端口数目能够灵活选择 2. 成本低廉,经过软件的方式可轻易达到10Gbps的交换速度。框架
因此OVS是一个虚拟交换机,能够用来组成虚拟网络,虚拟机还有其余的类型不一样的架构。tcp
浅显的理解就是 使用虚拟交换机组成的网络,就是虚拟网络(和物理网络相比) ,如图所示: 绿色虚线内组成的就是一个虚拟网络了。其虚拟机之间的信息交换都经过虚拟交换机。分布式
有了全局的概念后,咱们来详细了解OVS的内部组件。简单来看,OVS由这三大部分构成:
1. ovsdb-sever: OVS的数据库服务器,用来存储虚拟交换机的配置信息。它于manager和ovs-vswitchd交换信息使用了OVSDB(JSON-RPC)的方式。
2. ovs-vswitchd: OVS的核心部件,它和上层controller通讯听从OPENFLOW协议,它与ovsdb-server通讯使用OVSDB协议,它和内核模块经过netlink通讯,它支持多个独立的datapath(网桥),它经过更改flow table实现了绑定,和VLAN等功能。
3. ovs kernel module: OVS的内核模块,处理包交换和隧道,缓存flow,若是在内核的缓存中找到转发规则则转发,不然发向用户空间去处理。
ovs-vswitchd 主要模块,实现switch的daemon,包括一个支持流交换的Linux内核模块;
ovsdb-server 轻量级数据库服务器,提供ovs-vswitchd获取配置信息;
ovs-brcompatd 让ovs-vswitch替换Linuxbridge,包括获取bridge ioctls的Linux内核模块;
ovs-dpctl 用来配置switch内核模块;一些Scripts and specs 辅助OVS安装在Citrix XenServer上,做为默认switch;
ovs-vsctl 查询和更新ovs-vswitchd的配置;
ovs-appctl 发送命令消息,运行相关daemon;
ovsdbmonitor GUI工具,能够远程获取OVS数据库和OpenFlow的流表。
此外,OVS也提供了支持OpenFlow的特性实现,包括
ovs-openflowd:一个简单的OpenFlow交换机;
ovs-controller:一个简单的OpenFlow控制器;
ovs-ofctl 查询和控制OpenFlow交换机和控制器;
ovs-pki :OpenFlow交换机建立和管理公钥框架;
ovs-tcpundump:tcpdump的补丁,解析OpenFlow的消息;
运行原理:
内核模块实现了多个“数据路径”(相似于网桥),每一个均可以有多个“vports”(相似于桥内的端口)。每一个数据路径也经过关联一下流表
(flow table)来设置操做,而这些流表中的流都是用户空间在报文头和元数据的基础上映射的关键信息,通常的操做都是将数据包转发
到另外一个vport。当一个数据包到达一个vport,内核模块所作的处理是提取其流的关键信息并在流表中查找这些关键信息。当有一个匹配
的流时它执行对应的操做。若是没有匹配,它会将数据包送到用户空间的处理队列中(做为处理的一部分,用户空间可能会设置一个流
用于之后碰到相同类型的数据包能够在内核中执行操做)。
1. 物理机器之间经过虚拟交换机
能够看到虚拟机的两个网卡是虚拟交换机虚拟出来的两个端口。
2. 一台物理机上的虚拟机之间的虚拟交换机
转载http://blog.csdn.net/sqx2011/article/details/39344869