认识Open vSwitch的基础与原理

描述

一、概况

随着服务器虚拟化技术的发展,网络虚拟化也需要解决从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. 命令示例

(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 删除交换机的流表项。
打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分