searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

openvswitch原理简介

2023-08-30 01:26:22
138
0

      openvswitch(以下简称OVS)是对单机网络进行虚拟化的主流网络虚拟化软件。它最基本的功能是实现了虚拟交换机,可以把虚拟网卡和虚拟交换机的端口连接,这样一个交换机下的多个网卡网络就打通了,类似Linux Bridge 的功能。在此之上,OVS 很重要的一点就是支持 OpenFlow,这是一种可编程的流量控制语言,可以方便我们以编程的方式对流量进行控制,例如转发,拒绝,更改包信息,NAT,QoS 等等。
      OVS的整体架构如下图所示:

      其中用户空间的主要模块由ovsdb-server和守护进程ovs-vswitchd组成,kernel中的模块是datapath内核模块。Controller表示OpenFlow控制器,控制器和OVS通过OpenFlow协议交互。下面对这些组成部分做一一介绍。
      ovs-vswitchd守护进程是OVS的核心模块,它和datapath内核模块一起实现OVS基于流的数据交换。作为核心组件,它使用openflow协议与上层OpenFlow控制器通信,使用OVSDB协议与ovsdb-server通信,使用netlink与datapath内核模块通信。ovs-vswitchd在启动时会读取ovsdb-server中配置信息,然后配置内核中的datapaths,当ovsdb中的配置信息改变时(例如使用ovs-vsctl工具),ovs-vswitchd也会自动更新其配置以保持与数据库同步。
      ovs-vswitchd从OpenFlow控制器获取流表规则,然后把从datapath中收到的数据包在流表中进行匹配,找到匹配的flows并把所需应用的actions返回给datapath,同时作为处理的一部分,ovs-vswitchd会在datapath中设置一条datapath flows用于后续相同类型的数据包可以直接在内核中执行动作,此datapath flows相当于OpenFlow flows的缓存。
      ovsdb-server是OVS轻量级的数据库服务,用于整个OVS的配置信息,包括端口/交换规则等。下面是ovsdb-server进程的详细信息,/etc/openvswitch/conf.db是数据库文件存放位置,文件形式存储保证服务器重启不会影响其配置信息。
      --remote=punix:/var/run/openvswitch/db.sock 实现了一个Unix socket连接,OVS主进程ovs-vswitchd或其它命令工具(ovsdb-client)通过此socket连接管理ovsdb。
      Kernel Datapath是一个Linux内核模块,负责执行数据交换,具体转发流程如下图所示:

      首先,datapath内核模块收到数据包(物理网卡或虚拟网卡),然后查找其缓存(datapath flows),当有一个匹配的flow时它执行对应的操作,否则datapath会把该数据包送入用户空间,由ovs-vswitchd负责在其OpenFlow flows中查询,ovs-vswitchd查询后把匹配的actions返回给datapath并设置一条datapath flows到datapath中,这样后续进入的同类型的数据包因为缓存匹配会被datapath直接处理,不用再次进入用户空间。
      OpenFlow是Controller控制网络设备的协议,告诉网络设备如何转发数据包。支持OpenFlow的交换机存储了一个或多个流表(Flow Table),当有数据包到达,OpenFlow交换机会在每张流表中根据优先级查找匹配的流规则,根据匹配的规则执行相应的指令。每条流规则由流描述(Flow Description)和行为(Actions)组成,前者用于查找匹配,后者是匹配成功执行的操作。一个简单的流表如下:
      table=1,priority=1,dl_dst=01:00:00:00:00:00/01:00:00:00:00:00 actions=resubmit(,21)
      该规则表示在流表1中查找匹配MAC地址是(01:00:00:00:00:00/01:00:00:00:00:00)的包,并转发到流表21继续查找。

 

0条评论
0 / 1000
佘****生
5文章数
0粉丝数
佘****生
5 文章 | 0 粉丝
原创

openvswitch原理简介

2023-08-30 01:26:22
138
0

      openvswitch(以下简称OVS)是对单机网络进行虚拟化的主流网络虚拟化软件。它最基本的功能是实现了虚拟交换机,可以把虚拟网卡和虚拟交换机的端口连接,这样一个交换机下的多个网卡网络就打通了,类似Linux Bridge 的功能。在此之上,OVS 很重要的一点就是支持 OpenFlow,这是一种可编程的流量控制语言,可以方便我们以编程的方式对流量进行控制,例如转发,拒绝,更改包信息,NAT,QoS 等等。
      OVS的整体架构如下图所示:

      其中用户空间的主要模块由ovsdb-server和守护进程ovs-vswitchd组成,kernel中的模块是datapath内核模块。Controller表示OpenFlow控制器,控制器和OVS通过OpenFlow协议交互。下面对这些组成部分做一一介绍。
      ovs-vswitchd守护进程是OVS的核心模块,它和datapath内核模块一起实现OVS基于流的数据交换。作为核心组件,它使用openflow协议与上层OpenFlow控制器通信,使用OVSDB协议与ovsdb-server通信,使用netlink与datapath内核模块通信。ovs-vswitchd在启动时会读取ovsdb-server中配置信息,然后配置内核中的datapaths,当ovsdb中的配置信息改变时(例如使用ovs-vsctl工具),ovs-vswitchd也会自动更新其配置以保持与数据库同步。
      ovs-vswitchd从OpenFlow控制器获取流表规则,然后把从datapath中收到的数据包在流表中进行匹配,找到匹配的flows并把所需应用的actions返回给datapath,同时作为处理的一部分,ovs-vswitchd会在datapath中设置一条datapath flows用于后续相同类型的数据包可以直接在内核中执行动作,此datapath flows相当于OpenFlow flows的缓存。
      ovsdb-server是OVS轻量级的数据库服务,用于整个OVS的配置信息,包括端口/交换规则等。下面是ovsdb-server进程的详细信息,/etc/openvswitch/conf.db是数据库文件存放位置,文件形式存储保证服务器重启不会影响其配置信息。
      --remote=punix:/var/run/openvswitch/db.sock 实现了一个Unix socket连接,OVS主进程ovs-vswitchd或其它命令工具(ovsdb-client)通过此socket连接管理ovsdb。
      Kernel Datapath是一个Linux内核模块,负责执行数据交换,具体转发流程如下图所示:

      首先,datapath内核模块收到数据包(物理网卡或虚拟网卡),然后查找其缓存(datapath flows),当有一个匹配的flow时它执行对应的操作,否则datapath会把该数据包送入用户空间,由ovs-vswitchd负责在其OpenFlow flows中查询,ovs-vswitchd查询后把匹配的actions返回给datapath并设置一条datapath flows到datapath中,这样后续进入的同类型的数据包因为缓存匹配会被datapath直接处理,不用再次进入用户空间。
      OpenFlow是Controller控制网络设备的协议,告诉网络设备如何转发数据包。支持OpenFlow的交换机存储了一个或多个流表(Flow Table),当有数据包到达,OpenFlow交换机会在每张流表中根据优先级查找匹配的流规则,根据匹配的规则执行相应的指令。每条流规则由流描述(Flow Description)和行为(Actions)组成,前者用于查找匹配,后者是匹配成功执行的操作。一个简单的流表如下:
      table=1,priority=1,dl_dst=01:00:00:00:00:00/01:00:00:00:00:00 actions=resubmit(,21)
      该规则表示在流表1中查找匹配MAC地址是(01:00:00:00:00:00/01:00:00:00:00:00)的包,并转发到流表21继续查找。

 

文章来自个人专栏
文章 | 订阅
0条评论
0 / 1000
请输入你的评论
0
0