美文网首页
OpenVSwitch概述

OpenVSwitch概述

作者: georgejguo | 来源:发表于2020-11-16 22:38 被阅读0次

OpenVSwitch是一个实现了OpenFlow的虚拟交换机,它由多个模块组成。主要有位于用户空间的ovsdb-server和ovs-vswitchd进程,和位于内核空间的OVS datapath组成。在一个SDN架构中,Controller将各种网络拓扑,网络功能转换成OVS的数据和OpenFlow规则,分别下发给ovsdb-server和ovs-vswitchd进程,OpenFlow规则可以通过ovs-ofctl dump-flows查看。

网络数据的转发,都是由位于内核空间的OVS datapath完成。用户空间和内核空间的信息是怎么同步的?对于一个网络数据流,第一个数据包到达OVS datapath,这个时候的datapath没有转发信息,并不知道怎么完成转发。接下来OVS datapath会查询位于用户空间的ovs-vswitchd进程。ovs-vswitchd进程因为有OpenFlow信息,可以根据OpenFlow规则完成match-action操作,也就是从一堆OpenFlow规则里面匹配网络数据包对应的规则,根据这些规则里的action实现转发。

这样第一个数据包就完成了转发。与此同时,ovs-vswitchd会通过netlink向OVS datapath写入一条(也有可能是多条)转发规则,这里的规则不同于OpenFlow规则,可以通过ovs-dpctl dump-flows查看。这样,同一个网络数据流的后继网络数据包到达OVS datapath时,因为已经有了转发规则,datapath就可以直接完成转发,不再需要向ovs-vswitchd查询。

通过ovs-vswitchd查找OpenFlow实现转发的路径称为slow-path,通过OVS datapath直接转发的路径称为fast-path。OVS的设计思路就是通过slow-path和fast-path的配合使用,完成网络数据的高效转发。

OpenVSwitch基本架构图

OpenVSwitch和内核相关的代码位于net/openvswitch, 从其Makefile可见其代码组织架构:

obj-$(CONFIG_OPENVSWITCH) += openvswitch.o                                                             
                                                                                                       
openvswitch-y := \                                                                                     
    actions.o \                                                                                        
    datapath.o \                                                                                       
    dp_notify.o \                                                                                      
    flow.o \                                                                                           
    flow_netlink.o \                                                                                   
    flow_table.o \                                                                                     
    meter.o \                                                                                          
    vport.o \                                                                                          
    vport-internal_dev.o \                                                                             
    vport-netdev.o                                                                                     
                                                                                                       
ifneq ($(CONFIG_NF_CONNTRACK),)                                                                        
openvswitch-y += conntrack.o                                                                           
endif                                                                                                  
                                                                                                       
obj-$(CONFIG_OPENVSWITCH_VXLAN)+= vport-vxlan.o                                                        
obj-$(CONFIG_OPENVSWITCH_GENEVE)+= vport-geneve.o                                                      
obj-$(CONFIG_OPENVSWITCH_GRE)   += vport-gre.o

一般基础的功能就是加载openvswitch.ko模块。

ref:
https://www.sdnlab.com/23003.html
OpenFlow交换机规范1.3.0(一)
https://www.jianshu.com/p/acfeae1771b3

相关文章

网友评论

      本文标题:OpenVSwitch概述

      本文链接:https://www.haomeiwen.com/subject/hfgbvktx.html