- 积分
- 16840
在线时间 小时
最后登录1970-1-1
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?开始注册
x
数据面就是以用户态的 ovs-vswitchd 和内核态的 datapath 为主的转发模块,以及与之相关联的数据库模块 ovsdb-server,控制面主要是由 ovs-ofctl 模块负责,基于 OpenFlow 协议与数据面进行交互。而管理面则是由 OVS 提供的各种工具来负责,这些工具的提供也是为了方便用户对底层各个模块的控制管理,提高用户体验。下面就对这些工具进行一个逐一的阐述。
z2 w; Y7 o7 ~. X6 N) }. o
+ |4 [5 P0 W! }! c& }ovs-ofctl:这个是控制面的模块,但本质上它也是一个管理工具,主要是基于 OpenFlow 协议对 OpenFlow 交换机进行监控和管理,通过它可以显示一个 OpenFlow 交换机的当前状态,包括功能、配置和表中的项。使用时,有很多参数,我们可以通过 ovs-ofctl --help 查看。
1 P3 w) l, e6 a% b+ W, |# _* X* y( {& P: `
Copy0 L- }( S( r$ X
常用命令:
& }8 j n" N7 q: h2 o$ T y. c4 `1 k' ?
ovs-ofctl show switch-name :输出交换机信息,包括其流量表和端口信息。
% Y. h$ \: L3 Q6 Z9 v9 M0 A) Q( c1 h; H0 s) l* X& v
ovs-ofctl dump-ports switch-name:输出交换机的端口统计信息,包括收发包、丢包、错误包等数量。! S( n) _: c7 t- B
' T. q, ^: {* ^6 O& C3 T. p
ovs-ofctl add-flow switch-name:为交换机配置流策略。
7 B0 i. |7 w9 \( ?ovs-dpctl:用来配置交换机的内核模块 datapath,它可以创建,修改和删除 datapath,一般,单个机器上的 datapath 有 256 条(0-255)。一条 datapath 对应一个虚拟网络设备。该工具还可以统计每条 datapath 上的设备通过的流量,打印流的信息等,更过参数通过 ovs-dpctl --help 查看。
0 y3 C: K. c$ s9 c' b" l# }0 |: O+ `
; c% k4 B4 ~* bCopy
, w0 E: @+ b7 W9 o0 e4 Q常用命令:: p O% y$ q6 v2 V3 t$ k
* w$ ^( r) ~7 P7 F5 C" i% G
ovs-dpctl show :显示所有 datapath 的基本信息。
/ U; [/ Z7 {0 Q `6 N7 s/ t' O0 {" q
ovs-dpctl dump-dps :显示所有 datapath 的名字。
% A3 ]# t: ?0 h( y# r' O: r2 n9 Z" F+ l( }
ovs-dpctl dump-flows DP :显示一条 datapath DP 上的流信息。
+ g; Z0 u; O# d* [ovs-appctl:查询和控制运行中的 OVS 守护进程,包括 ovs-switchd,datapath,OpenFlow 控制器等,兼具 ovs-ofctl、ovs-dpctl 的功能,是一个非常强大的命令。ovs-vswitchd 等进程启动之后就以一个守护进程的形式运行,为了能够很好的让用户控制这些进程,就有了这个命令。详细可以 ovs-appctl --help 查看。
' G# I9 y2 s f5 V* i6 h
- k! |: L# h4 j9 s* p, d( _ovs-vsctl:查询和更新 ovs-vswitchd 的配置,这也是一个很强大的命令,网桥、端口、协议等相关的命令都由它来完成。此外,还负责和 ovsdb-server 相关的数据库操作。
~) @8 V F F' R0 U4 A9 I& i; D% s7 b& E" T
Copy/ u5 q3 R* R7 \- J1 {& T$ ~
常用命令:
6 t$ X0 s$ r. H$ x
! x7 |. W7 S# L/ D$ Movs-vsctl show :显示主机上已有的网桥及端口信息。9 u- X/ F4 S, F% P8 f6 a
, l6 L( P; s* f2 F
ovs-vsctl add-br br0:添加网桥 br0。3 L4 T- q2 g4 M/ @* o
ovsdb-client:访问 ovsdb-server 的客户端程序,通过 ovsdb-server 执行一些数据库操作。0 @2 w' o& U6 t9 a4 @5 [- Q8 r" p
- y( ?# z0 t9 B% D% M' N! x- E# e' ~. ~
Copy
/ Q& Z+ z: ~( `: j6 e) j常用命令:7 X U8 h$ t1 h2 H! O- U& M1 a
/ {, k) }1 z; [) [ovsdb-client dump:用来查看ovsdb内容。
4 q1 T0 _" j7 w9 J3 Z# _* J0 R0 i- a! o) M/ |8 q
ovsdb-client transact :用来执行一条类 sql。
) I4 p X" W0 H, ]: g3 P jovsdb-tool:和 ovsdb-client 要借助 ovsdb-server 才能进行相关数据库操作不同,ovsdb-tool 可以直接操作数据库。
/ ^" O4 p8 F( X" P
, j0 G3 N7 p; lOVS 源码结构#6 w; D m0 W6 m
OVS 源码结构中,主要包含以下几个主要的模块,数据交换逻辑在 vswitchd 和 datapath 中实现,vswitchd 是最核心的模块,OpenFlow 的相关逻辑都在 vswitchd 中实现,datapath 则不是必须的模块。ovsdb 用于存储 vswitch 本身的配置信息,如端口、拓扑、规则等。控制面部分采用的是 OVS 自家实现的 OVN,和其他控制器相比,OVN 对 OVS 和 openstack 有更好的兼容性和性能。
. S: Y0 {% [/ I! l8 c4 A8 r3 Q$ x( F4 Y) J
]( C$ _) z9 j% z- v, Z
7 ]) ^3 j) c+ p从图中可以看出 OVS 的分层结构,最上层 vswitchd 主要与 ovsdb 通信,做配置下发和更新等,中间层是 ofproto ,用于和 OpenFlow 控制器通信,并基于下层的 ofproto provider 提供的接口,完成具体的设备操作和流表操作等工作。( K$ i9 D% {- t3 @ t s+ `0 q
+ ^" B. `9 c7 K# V* u' P" Cdpif 层实现对流表的操作。
' {% _1 N/ w. {5 {, i' e- A* E; @% y0 c/ v% ]
netdev 层实现了对网络设备(如 Ethernet)的抽象,基于 netdev provider 接口实现多种不同平台的设备,如 Linux 内核的 system, tap, internal 等,dpdk 系的 vhost, vhost-user 等,以及隧道相关的 gre, vxlan 等。
7 o* k& V5 l( B6 y5 F* r: e, i2 ` \' T
数据转发流程#
- b" h1 @: O: o: @; W通过一个例子来看看 OVS 中数据包是如何进行转发的。2 h) z& `. ]; u5 x% c) p1 q# L
( _ P. x' ^ @5 J8 J) d k# @- M0 O1 O; _
* Z7 W1 S2 }2 L! k% {0 r0 @1)ovs 的 datapath 接收到从 ovs 连接的某个网络端口发来的数据包,从数据包中提取源/目的 IP、源/目的 MAC、端口等信息。
/ \7 M$ ~# u6 k1 v2 ~8 I9 s
+ u- I: d9 ~- Z' G, L2 s2)ovs 在内核态查看流表结构(通过 hash),如果命中,则快速转发。" T- Z3 c! U1 v' \
2 S8 f* M/ w# f! G8 {' ^5 J
3)如果没有命中,内核态不知道如何处置这个数据包,所以,通过 netlink upcall 机制从内核态通知用户态,发送给 ovs-vswitchd 组件处理。
7 m. u$ f0 n1 x- r. t* p* w9 ` C h; P# J0 \+ N* [4 m* L
4)ovs-vswitchd 查询用户态精确流表和模糊流表,如果还不命中,在 SDN 控制器接入的情况下,经过 OpenFlow 协议,通告给控制器,由控制器处理。
& |% a6 L, z* d" J/ z5 d& [& N3 Y/ M' g7 i: O; \0 F6 z" @
5)如果模糊命中, ovs-vswitchd 会同时刷新用户态精确流表和内核态精确流表,如果精确命中,则只更新内核态流表。
; j) u9 P' R* X N- c
# a9 p4 O4 L- _) I9 j6)刷新后,重新把该数据包注入给内核态 datapath 模块处理。4 L# A4 }) S8 y3 X
5 `) P2 D& f1 c; E% `) m7)datapath 重新发起选路,查询内核流表,匹配;报文转发,结束。 |
|