一、概况
随着服务器虚拟化技术的发展,网络虚拟化也需要解决从NIC到虚机的“最后一公里”问题,便产生了许多虚拟交换机开源方案:Open vSwitch、Snabb Switch 和 Lagopus,其中Open vSwitch的知名度最高。
Open vSwitch项目早在2009年,就已孵化诞生,于2012年7月30日发布第一个开源版本V1.7.0,内核datapath已经被纳入Linux内核作为发行版的一部分。
二、工作原理
1.组件
l ovsdb-server将配置信息保存在conf.db中,并通过db.sock提供服务,ovs-vswitchd通过这个db.sock从这个进程读取配置信息。
l ovs-vswitchd: OVS守护进程,实现基于流的交换(flow-based switching)。与controller通信使用OpenFlow协议,与ovsdb-server通信使用OVSDB协议,与内核模块使用netlink机制通信。
l ovsdb-server: OVS轻量级的数据库服务器,用于保存整个OVS的配置信息。
l Forwarding Path(数据通路):Datapath把流的match和action结果缓存,避免后续同样的流继续upcall到用户空间进行流表匹配。
2.工作流程
① OVS的datapath接收到从OVS连接的某个网络设备发来的数据包,从数据包中提取源/目的IP、源/目的MAC、端口等信息。
② OVS在内核状态下查看流表结构(通过Hash),观察是否有缓存的信息可用于转发这个数据包。
③ 假设数据包是这个网络设备发来的第一个数据包,在OVS内核中,将不会有相应的流表缓存信息存在,那么内核将不会知道如何处置这个数据包。所以内核将发送upcall给用户态。
④ 位于用户态的ovs-vswitchd进程接收到upcall后,将检查数据库以查询数据包的目的端口是哪里,然后告诉内核应该将数据包转发到哪个端口,例如eth0。
⑤ 内核执行用户此前设置的动作。即内核将数据包转发给端口eth0,进而数据被发送出去。
三、命令接口
1.Open vSwitch提供了ovs-vsctl、ovs-ofctl、ovs-dpctl等命令,详情如下:
l ovs-vsctl:管理ovsdb-server的配置,提供OVSDB的配置方法,包括创建和删除网桥、端口等;
l ovs-ofctl:提供ovs-vswitchd的流表配置方法;
l ovs-dpctl:配置OVS内核模块,提供缓存流表的操作方法;
l ovsdb-tool:创建和管理OVSDB。
(1)网桥管理
命令 | 功能 |
---|---|
ovs-vsctl show | 显示OVS信息 |
ovs-vsctl add-brbr-name | 添加新的网桥br-name |
ovs-vsctl del-brbr-name | 删除br-name |
ovs-vsctl list-br | 显示网桥br-name信息 |
ovs-vsctl list-portsbr-name | 显示网桥br-name中所有port信息 |
ovs-vsctl add-portbr-name port-no | br-name添加端口 |
ovs-vsctl del-portbr-name port-no | 删除br-name上的端口 |
ovs-vsctl get-controllerbr-name | 获取br-name连接控制器的信息 |
ovs-vsctl del-controllerbr-name | 删除br-name连接控制器的信息 |
ovs-vsctl set-controller *br-name *tcp: [ip] : [port] | br-name网桥连接控制器controller |
(2)流表管理
命令 | 功能 |
---|---|
ovs-ofctl showbr-name | 输出OpenFlow信息。 |
ovs-ofctl add-flowbr-name flow | 添加流表项。 |
ovs-ofctl add-flowsbr-name filename | 以文件形式批量添加流表项。 |
ovs-ofctl del-flowsbr-name flow | 删除交换机的流表项。 |
全部0条评论
快来发表一下你的评论吧 !