OVS简介
OpenvSwitch是一个高质量的、多层虚拟交换机,使用开源Apache2.0许可协议,由 Nicira Networks开发,主要实现代码为可移植的C代码。OpenvSwitch支持多种Linux 虚拟化技术,包括Xen/XenServer, KVM和VirtualBox。
Openvswitch是一个虚拟交换软件,主要用于虚拟机VM环境,作为一个虚拟交换机,支持Xen/XenServer,KVM以及virtualBox多种虚拟化技术。在这种虚拟化的环境中,一个虚拟交换机主要有两个作用:传递虚拟机之间的流量,以及实现虚拟机和外界网络的通信。
内核模块实现了多个“数据路径”(类似于网桥),每个都可以有多个“vports”(类似于桥内的端口)。每个数据路径也通过关联一下流表(flow table)来设置操作,而这些流表中的流都是用户空间在报文头和元数据的基础上映射的关键信息,一般的操作都是将数据包转发到另一个vport。当一个数据包到达一个vport,内核模块所做的处理是提取其流的关键信息并在流表中查找这些关键信息。当有一个匹配的流时它执行对应的操作。如果没有匹配,它会将数据包送到用户空间的处理队列中(作为处理的一部分,用户空间可能会设置一个流用于以后碰到相同类型的数据包可以在内核中执行操作)。
OVS的架构

1. ovs-vswitchd:OVS守护进程,OVS的核心部件,实现交换功能,和Linux内核兼容模块一起,实现基于流的交换(flow-based switching)。它和上层 controller 通信遵从 OPENFLOW 协议,它与 ovsdb-server 通信使用 OVSDB 协议,它和内核模块通过netlink通信,它支持多个独立的 datapath(网桥),它通过更改flow table 实现了绑定和VLAN等功能。
2. ovsdb-server:轻量级的数据库服务,主要保存了整个OVS 的配置信息,包括接口啊,交换内容,VLAN啊等等。ovs-vswitchd 会根据数据库中的配置信息工作。它于 manager 和 ovs-vswitchd 交换信息使用了OVSDB(JSON-RPC)的方式。
3. ovs-dpctl:一个工具,用来配置交换机内核模块,可以控制转发规则。
4. ovs-vsctl:主要是获取或者更改ovs-vswitchd 的配置信息,此工具操作的时候会更新ovsdb-server 中的数据库。
5. ovs-appctl:主要是向OVS 守护进程发送命令的,一般用不上。
6. ovsdbmonitor:GUI 工具来显示ovsdb-server 中数据信息。
7. ovs-controller:一个简单的OpenFlow 控制器
8. ovs-ofctl:用来控制OVS 作为OpenFlow 交换机工作时候的流表内容。
OVS简单实例应用
创建从物理机到物理机的网络拓扑:

通过以下命令即可实现:
ovs-vsctl add-br br0
ovs-vsctl add-port br0 eth0
ovs-vsctl add-port br0 eth1
sudo ovs-vsctl show
OVS安装
参见另外一篇文章Mininet,全安装方式安装完Mininet之后,同时也默认安装了OVS。Mininet文章链接:https://www.jianshu.com/p/0849f39da0c4
OVS常用命令
常用命令:ps -ef | grep ovs
查看ovs的版本:ovs-ofctl -V
查看网桥的情况:sudo ovs-vsctl show
列出所有网桥:ovs-vsctl list-br
新增网桥:sudo ovs-vsctl add-br br0
删除网桥: sudo ovs-vsctl del-br br0
将物理网卡挂载到网桥上:ovs-vsctl add-port br0 eth0
将br0网桥远程连接到SDN控制器:sudo ovs-vsctl set-controller br0 tcp:192.168.1.144:6633 (当然此操作的前提是已经在指定机器上安装并启动了SDN控制器,如果是做实验使用,可以选择轻量级控制器RYU)
设置OpenFlow协议版本: ovs-vsctl set bridge br0 protocols=OpenFlow10,OpenFlow12,OpenFlow13
查看网桥br0上的所有存储的流规则:sudo ovs-ofctl dump-flows br0
查看网桥上所有交换机端口的状态:ovs-ofctl dump-ports br0
网友评论