找回密码
 注册
查看: 3834|回复: 0

OVS 总体架构、源码结构及数据流程全面解析

[复制链接]

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
发表于 2019-10-18 11:00:53 | 显示全部楼层 |阅读模式
数据面就是以用户态的 ovs-vswitchd 和内核态的 datapath 为主的转发模块,以及与之相关联的数据库模块 ovsdb-server,控制面主要是由 ovs-ofctl 模块负责,基于 OpenFlow 协议与数据面进行交互。而管理面则是由 OVS 提供的各种工具来负责,这些工具的提供也是为了方便用户对底层各个模块的控制管理,提高用户体验。下面就对这些工具进行一个逐一的阐述。  t# m4 W2 v7 q! R! X4 V

* F2 {& `: I9 J+ H4 M, Jovs-ofctl:这个是控制面的模块,但本质上它也是一个管理工具,主要是基于 OpenFlow 协议对 OpenFlow 交换机进行监控和管理,通过它可以显示一个 OpenFlow 交换机的当前状态,包括功能、配置和表中的项。使用时,有很多参数,我们可以通过 ovs-ofctl --help 查看。
8 |! d  a  [: F' h5 p9 Y/ F. ^+ r6 y0 q8 M# ~
Copy
4 z, {% W8 l+ t0 j& }0 D" H常用命令:# w" n1 E- O% g+ H7 ]" H
' I& A3 c) |6 B& w
ovs-ofctl show switch-name :输出交换机信息,包括其流量表和端口信息。8 `4 V: K# U  c+ M) d9 G4 s

1 `: _) y- ?: S9 oovs-ofctl dump-ports switch-name:输出交换机的端口统计信息,包括收发包、丢包、错误包等数量。
% i, T5 B8 v+ e' [) r8 @( {6 M8 G5 C2 a
ovs-ofctl add-flow switch-name:为交换机配置流策略。/ R  @" S" _4 ?; ^7 l3 s* o
ovs-dpctl:用来配置交换机的内核模块 datapath,它可以创建,修改和删除 datapath,一般,单个机器上的 datapath 有 256 条(0-255)。一条 datapath 对应一个虚拟网络设备。该工具还可以统计每条 datapath 上的设备通过的流量,打印流的信息等,更过参数通过 ovs-dpctl --help 查看。; J. m9 _" c* V0 U2 V& K3 |4 }& X

" D; w+ V1 k# ~  [1 R8 }& HCopy
- ]3 |" n; q. u. q- ~' n7 u常用命令:5 C; L- T- d3 t- K0 Z
0 d& d0 F1 s) g5 {
ovs-dpctl show :显示所有 datapath 的基本信息。
% W7 ~& k8 t$ L. q/ T8 v2 s" m; F% `; C/ t
ovs-dpctl dump-dps :显示所有 datapath 的名字。
: N" F# x& r9 K  e* G3 e
  [7 T& m6 h- j$ Uovs-dpctl dump-flows DP :显示一条 datapath DP 上的流信息。( Z( |, ?, ~2 O4 u
ovs-appctl:查询和控制运行中的 OVS 守护进程,包括 ovs-switchd,datapath,OpenFlow 控制器等,兼具 ovs-ofctl、ovs-dpctl 的功能,是一个非常强大的命令。ovs-vswitchd 等进程启动之后就以一个守护进程的形式运行,为了能够很好的让用户控制这些进程,就有了这个命令。详细可以 ovs-appctl --help 查看。
- p. N- h4 K( M7 c- z3 v2 A# N$ H/ T6 d: F# u  d! q
ovs-vsctl:查询和更新 ovs-vswitchd 的配置,这也是一个很强大的命令,网桥、端口、协议等相关的命令都由它来完成。此外,还负责和 ovsdb-server 相关的数据库操作。
% d1 w) M# U! S; ~, R8 t
5 ^' f' `$ F5 b+ pCopy
+ q# l1 i0 X  }1 y' h, v2 m常用命令:
5 L8 O+ r/ {% c# q1 M9 P# |, S* n6 y6 E
ovs-vsctl show :显示主机上已有的网桥及端口信息。
/ `/ a- p# }# @4 s! Q
) ~' l. t& u  ]+ ]( |ovs-vsctl add-br br0:添加网桥 br0。
1 W% Y. ]; P& C: z( |! d3 `ovsdb-client:访问 ovsdb-server 的客户端程序,通过 ovsdb-server 执行一些数据库操作。
& `: A! \# y  h7 @. F- y) i* K* e+ b1 }* Y  Z, F
Copy2 p, J- E  U, {3 u8 A% w
常用命令:2 i4 e1 K6 P8 _" }8 X& C
/ X& x% I) I7 H# i( V
ovsdb-client dump:用来查看ovsdb内容。
( {: |3 J' H; W; A6 ]8 D' J( h( X% ?$ S+ d& l' Y6 |
ovsdb-client transact :用来执行一条类 sql。# T$ u9 U7 z; g2 E
ovsdb-tool:和 ovsdb-client 要借助 ovsdb-server 才能进行相关数据库操作不同,ovsdb-tool 可以直接操作数据库。& Y! x: {# G. _% l- s0 H
& E9 H0 B0 E! K( r
OVS 源码结构#+ `6 s" C# J1 h. q) H  t( g
OVS 源码结构中,主要包含以下几个主要的模块,数据交换逻辑在 vswitchd 和 datapath 中实现,vswitchd 是最核心的模块,OpenFlow 的相关逻辑都在 vswitchd 中实现,datapath 则不是必须的模块。ovsdb 用于存储 vswitch 本身的配置信息,如端口、拓扑、规则等。控制面部分采用的是 OVS 自家实现的 OVN,和其他控制器相比,OVN 对 OVS 和 OpenStack 有更好的兼容性和性能。
& e$ g2 a' y) G: ~, ^. u) q4 l0 b; g' d

& \1 T4 `/ R5 z, P
% L9 U6 \2 B2 ]8 v$ L  M从图中可以看出 OVS 的分层结构,最上层 vswitchd 主要与 ovsdb 通信,做配置下发和更新等,中间层是 ofproto ,用于和 OpenFlow 控制器通信,并基于下层的 ofproto provider 提供的接口,完成具体的设备操作和流表操作等工作。
; x' N4 t: [" G1 q6 I0 b. O9 [( z
) [9 N4 d+ z. X% d. r# T5 ^dpif 层实现对流表的操作。
8 C4 ^5 U% @+ P. o
" Z' H5 W9 ?( m; Pnetdev 层实现了对网络设备(如 Ethernet)的抽象,基于 netdev provider 接口实现多种不同平台的设备,如 Linux 内核的 system, tap, internal 等,dpdk 系的 vhost, vhost-user 等,以及隧道相关的 gre, vxlan 等。
$ B7 K5 B7 X; b8 o8 W, M1 X' J2 n: S' S0 M; g
数据转发流程#
  B9 Q% y3 `4 ^& N; r/ Y通过一个例子来看看 OVS 中数据包是如何进行转发的。  r. P# S( Q2 v/ n1 Z' ?

1 b. e- @7 h! T* m" ^/ o" F0 r- N& b5 p2 v5 Y: K! p; T/ S

* Z* W  M$ Q3 k+ R1)ovs 的 datapath 接收到从 ovs 连接的某个网络端口发来的数据包,从数据包中提取源/目的 IP、源/目的 MAC、端口等信息。% K, S. q1 n6 Y5 F0 M

; @. @7 l7 d" K4 ?2)ovs 在内核态查看流表结构(通过 hash),如果命中,则快速转发。+ M( ?6 a( L/ O7 m3 l5 w4 [

& E5 B$ V, N! V2 k+ R! ~3)如果没有命中,内核态不知道如何处置这个数据包,所以,通过 netlink upcall 机制从内核态通知用户态,发送给 ovs-vswitchd 组件处理。
" o6 }- S6 r8 `# `& p9 D3 l
  |1 M) p* [9 x. V; D4)ovs-vswitchd 查询用户态精确流表和模糊流表,如果还不命中,在 SDN 控制器接入的情况下,经过 OpenFlow 协议,通告给控制器,由控制器处理。
( f+ g; S# z. _8 o2 \- c% d
% K* e. H; m; L( B/ |' C/ X/ x. `5)如果模糊命中, ovs-vswitchd 会同时刷新用户态精确流表和内核态精确流表,如果精确命中,则只更新内核态流表。; _; Y) J, a/ C
- T0 f( I5 W, p2 e3 c+ v8 ~
6)刷新后,重新把该数据包注入给内核态 datapath 模块处理。
2 p5 ~" [/ z8 r) d- t& ?( O9 o/ H$ S/ l( n- }9 I
7)datapath 重新发起选路,查询内核流表,匹配;报文转发,结束。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

返回首页|Archiver|手机版|小黑屋|易陆发现技术论坛 ( 蜀ICP备2026014127号-1 )

GMT+8, 2026-6-12 01:22 , Processed in 0.017463 second(s), 22 queries .

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表