- 积分
- 16844
在线时间 小时
最后登录1970-1-1
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?开始注册
x
数据面就是以用户态的 ovs-vswitchd 和内核态的 datapath 为主的转发模块,以及与之相关联的数据库模块 ovsdb-server,控制面主要是由 ovs-ofctl 模块负责,基于 OpenFlow 协议与数据面进行交互。而管理面则是由 OVS 提供的各种工具来负责,这些工具的提供也是为了方便用户对底层各个模块的控制管理,提高用户体验。下面就对这些工具进行一个逐一的阐述。
6 u; K% }2 _/ R5 R
6 r$ S, a. D: U. ?ovs-ofctl:这个是控制面的模块,但本质上它也是一个管理工具,主要是基于 OpenFlow 协议对 OpenFlow 交换机进行监控和管理,通过它可以显示一个 OpenFlow 交换机的当前状态,包括功能、配置和表中的项。使用时,有很多参数,我们可以通过 ovs-ofctl --help 查看。+ U# r( t: C/ X9 m7 M
: E! \/ P; L5 i# b% k) [8 K S) m8 n
Copy
0 Y; C) f- f8 ]! ^" W1 ?常用命令:
7 C: U$ J' ^# ^' L" a+ `! Y0 w9 Z9 {
ovs-ofctl show switch-name :输出交换机信息,包括其流量表和端口信息。$ i, \: K5 `. F4 [: E' t
3 E; ~* t X+ ^; R: G c
ovs-ofctl dump-ports switch-name:输出交换机的端口统计信息,包括收发包、丢包、错误包等数量。
; H5 f& L0 e5 R$ a V
' b. I4 G* u1 z0 iovs-ofctl add-flow switch-name:为交换机配置流策略。
0 L; J% O7 [+ P) \ovs-dpctl:用来配置交换机的内核模块 datapath,它可以创建,修改和删除 datapath,一般,单个机器上的 datapath 有 256 条(0-255)。一条 datapath 对应一个虚拟网络设备。该工具还可以统计每条 datapath 上的设备通过的流量,打印流的信息等,更过参数通过 ovs-dpctl --help 查看。' L# q, H0 D! e# I) z! s
0 C" R4 A, |0 Y; i& M, xCopy% I1 j/ Q1 J% S, j- Z
常用命令:2 E0 d1 a0 m" o( S
% s: W; \* u G& I" S- p {, M
ovs-dpctl show :显示所有 datapath 的基本信息。
6 R- Z8 o/ V1 k6 P0 |7 M: K' \/ z" E
4 Q' ]' E# w. \5 p- N: i, Wovs-dpctl dump-dps :显示所有 datapath 的名字。
8 d; o+ U7 R) I' X6 c$ t
! v/ s" R* p9 C6 I) V9 eovs-dpctl dump-flows DP :显示一条 datapath DP 上的流信息。6 j3 z, W" z+ ? \6 S3 Q2 f
ovs-appctl:查询和控制运行中的 OVS 守护进程,包括 ovs-switchd,datapath,OpenFlow 控制器等,兼具 ovs-ofctl、ovs-dpctl 的功能,是一个非常强大的命令。ovs-vswitchd 等进程启动之后就以一个守护进程的形式运行,为了能够很好的让用户控制这些进程,就有了这个命令。详细可以 ovs-appctl --help 查看。
8 I# p8 ~& T8 @0 `( S7 q4 }& @0 ~
$ F! ~, k7 W/ [' X- aovs-vsctl:查询和更新 ovs-vswitchd 的配置,这也是一个很强大的命令,网桥、端口、协议等相关的命令都由它来完成。此外,还负责和 ovsdb-server 相关的数据库操作。+ N7 q: V' R$ j6 h r- y+ g
" H/ C: U ]6 h/ P. R8 b" y6 ]6 f1 rCopy
! G# a1 x9 K4 Q6 m6 k2 n常用命令:$ o6 J! B4 `4 [# Y* ^
( m$ ?$ I2 {1 E9 Bovs-vsctl show :显示主机上已有的网桥及端口信息。
# ?: G" H8 C2 m% M0 D5 l% e1 E# I- b3 Z) p% |
ovs-vsctl add-br br0:添加网桥 br0。1 N, c% w( {7 T7 A" B& d" {: ~/ S
ovsdb-client:访问 ovsdb-server 的客户端程序,通过 ovsdb-server 执行一些数据库操作。& @. K4 d: v/ ^. o n
7 h3 N$ O# b# Y e+ N' V$ z" J/ FCopy
) p- E+ M( G$ H常用命令:
& \$ { `$ @ ?0 _6 Q' A$ s7 g6 M5 k& l
ovsdb-client dump:用来查看ovsdb内容。8 e. f" V6 z+ k$ J
$ P7 y# q7 H4 p1 [* Iovsdb-client transact :用来执行一条类 sql。% c) M% B0 a) f) b& x4 j
ovsdb-tool:和 ovsdb-client 要借助 ovsdb-server 才能进行相关数据库操作不同,ovsdb-tool 可以直接操作数据库。
- x% w- r# d# X2 [9 Q
' c' j4 j% @% D4 l& l, e" _# dOVS 源码结构#
8 F8 d% B( I* F$ K. K% wOVS 源码结构中,主要包含以下几个主要的模块,数据交换逻辑在 vswitchd 和 datapath 中实现,vswitchd 是最核心的模块,OpenFlow 的相关逻辑都在 vswitchd 中实现,datapath 则不是必须的模块。ovsdb 用于存储 vswitch 本身的配置信息,如端口、拓扑、规则等。控制面部分采用的是 OVS 自家实现的 OVN,和其他控制器相比,OVN 对 OVS 和 openstack 有更好的兼容性和性能。
$ r2 D+ w# D( M, `# x% \: c
- Z! W; W3 F5 e8 T a6 i7 o* r' j N: V3 X
& }8 J' Y- y, k3 }
从图中可以看出 OVS 的分层结构,最上层 vswitchd 主要与 ovsdb 通信,做配置下发和更新等,中间层是 ofproto ,用于和 OpenFlow 控制器通信,并基于下层的 ofproto provider 提供的接口,完成具体的设备操作和流表操作等工作。
: c7 k$ k0 U+ T' F0 a3 v- L: J
! Z' q- k1 U @/ zdpif 层实现对流表的操作。
7 M. G o9 B( H
9 o) r7 R( E7 H8 a; e4 Snetdev 层实现了对网络设备(如 Ethernet)的抽象,基于 netdev provider 接口实现多种不同平台的设备,如 Linux 内核的 system, tap, internal 等,dpdk 系的 vhost, vhost-user 等,以及隧道相关的 gre, vxlan 等。
- d' M; B2 R) ]. c8 z% Y+ j, t0 E& D4 }; |
数据转发流程#; Y* A" |2 a! A
通过一个例子来看看 OVS 中数据包是如何进行转发的。# x/ B8 x. t, h4 ]1 f" \: ^
6 q2 l l5 y+ g2 j G$ m# z( q V/ y+ R; ~6 C7 ~& S/ k: D
' { L! T! T; J6 G7 X. F: }, K6 g
1)ovs 的 datapath 接收到从 ovs 连接的某个网络端口发来的数据包,从数据包中提取源/目的 IP、源/目的 MAC、端口等信息。1 R; r+ S; C) T5 `8 b* m y/ Z
4 _5 G- v- b. J' X# Z/ N2)ovs 在内核态查看流表结构(通过 hash),如果命中,则快速转发。 M! \4 ]9 H$ Z' n* X( h0 ~5 b, g% G
& z! Z E" T! n+ ~3)如果没有命中,内核态不知道如何处置这个数据包,所以,通过 netlink upcall 机制从内核态通知用户态,发送给 ovs-vswitchd 组件处理。+ i; g( R: G' E: X1 d5 F0 m, O! \& b
1 c- K2 j1 V' D# i0 g+ \$ A
4)ovs-vswitchd 查询用户态精确流表和模糊流表,如果还不命中,在 SDN 控制器接入的情况下,经过 OpenFlow 协议,通告给控制器,由控制器处理。
& H: ~! G. D5 |! O1 `- x+ J H
+ ~! Z# `. n- R f5)如果模糊命中, ovs-vswitchd 会同时刷新用户态精确流表和内核态精确流表,如果精确命中,则只更新内核态流表。' [ c5 I1 G) J
3 q6 s* k; S! M6 Z
6)刷新后,重新把该数据包注入给内核态 datapath 模块处理。
' c& Z* u4 N! j% |0 B. e1 Q' [3 P {0 V% h" C4 M, g
7)datapath 重新发起选路,查询内核流表,匹配;报文转发,结束。 |
|