OVS简介数据库
OpenvSwitch,简称OVS是一个虚拟交换软件,主要用于虚拟机VM环境,做为一个虚拟交换机,支持Xen/XenServer, KVM, and VirtualBox多种虚拟化技术。虽然是虚拟交换机,可是其工做原理与物理交换机相似。在虚拟交换机的实现中,其两端分别链接着物理网卡和多块虚拟网卡,同时虚拟交换机内部会维护一张映射表,根据MAC地址寻找对应的虚拟机链路进而完成数据转发。缓存
OpenvSwitch是实现虚拟化网络的重要基础组件,在OpenStack中利用OpenvSwitch做为底层部件来完成虚拟网络提供和租户网络管理。OpenvSwitch能够实现访问控制功能,经过转发规则,能够实现简单的安全行为,包括经过、禁止等。安全
OVS组件服务器
ovsdb-sever: OVS的数据库服务器,用来存储虚拟交换机的配置信息。它于manager和ovs-vswitchd交换信息使用了OVSDB(JSON-RPC)的方式。网络
ovs-vswitchd: OVS的核心部件,实现switch的daemon,包括一个支持流交换的Linux内核模块;和上层controller通讯听从OPENFLOW协议,与ovsdb-server通讯使用OVSDB协议,和内核模块经过netlink通讯,支持多个独立的datapath(网桥)。架构
ovs kernel module: OVS的内核模块,处理包交换和隧道,缓存flow,若是在内核的缓存中找到转发规则则转发,不然发向用户空间去处理。app
ovs-vsctl: 查询和更新ovs-vswitchd的配置(经过对ovsdb进行配置)。框架
ovs-ofctl: 查询和控制OpenFlow交换机。tcp
ovs-appctl: 发送命令消息,对daemon进行控制、查询ovs-dpctl 用来配置switch内核模块,一些Scripts and specs 辅助OVS安装在Citrix XenServer上,做为默认switch;工具
ovs-brcompatd 让ovs-vswitch替换Linuxbridge,包括获取bridge ioctls的Linux内核模块。
ovsdbmonitor GUI工具: 能够远程获取OVS数据库和OpenFlow的流表。
此外,OVS也提供了支持OpenFlow的特性实现,包括
ovs-openflowd:一个简单的OpenFlow交换机。
ovs-controller:一个简单的OpenFlow控制器。
ovs-pki:OpenFlow交换机建立和管理公钥框架。
ovs-tcpundump:tcpdump的补丁,解析OpenFlow的消息。
工做流程
支持OpenFlow的OVS核心架构主要包括OpenFlow协议支持和数据转发通路等两个部分。OVS的数据转发通路(datapath)主要用于执行数据交换工做,即负责从设备入端口接收数据包并依据流表信息对其进行管理,例如将其转发至出端口、丢弃或者进行数据包修改。而OVS的OpenFlow协议支持则用于实现交换策略,即经过增长、删除、修改流表项的方式告诉数据转发通路针对不一样的数据流采用不一样的动做。
报文从端口上来(1),在datapatch中转发,查询Flow Table(6),若是查到了直接转出去(7)。
若是未查询到,送到用户态(2),在vswitchd中查询软表,生成精确的flow table下发到kernel(4),而后报文被送回kernel继续转发(5),此时会再查询flow table(6),而后转发出去(7)。
·Datapath是在kernel mode。
·Datapath里是精确匹配,计算报文头的hash与流表进行匹配,匹配到了进行转发。
·Datapath里未匹配时,送到userspace进行软件查找转发,并在datapath里添加精确匹配流表。
·Datapath里的流会老化。