|
|
在网络中,交换机和桥都是同一个概念,OVS实现了一个虚拟机的以太交换机,换句话说,OVS也就是实现了一个以太桥。那么,在OVS中,给一个交换机,或者说一个桥,用了一个专业的名词,叫做DataPath!
( D3 [& L" t7 }; f
0 t9 Y5 c" U; C/ I4 B6 }) R( u. s要了解OVS如何工作,首先需要知道桥的概念:6 ?2 f" H( h2 v+ a
7 _. c$ S, j9 d- u% i) t网桥也叫做桥接器,连接两个局域网的设备,网桥工作在数据链路层,将两个LAN连接,根据MAC地址来转发帧,可以看成一个“低层的路由器”(路由器工作在网络层,根据IP地质进行转发)。
9 Z/ B- [+ m) _+ N9 t1 J/ d3 r! E1 P' Y) F
网桥的工作原理, O" ^) @+ G- P4 I8 f. t E3 G
网桥处理包遵循以下几条规则:
2 ~; L. g! m1 h+ _" k' @, @' J4 h2 B
在一个接口上接收到的包不会再往那个接口上发送此包。, V! ^4 P- P2 W- M. ?5 ?1 k$ Z
每个接收到的包都要学习其源MAC地址。
' \2 {5 Q8 J1 X8 V; Z \7 v如果数据包是多播或者广播包(通过2层MAC地址确定)则要向接收端口以外的所有端口转发,如果上层协议感兴趣,则还会递交上层处理。
$ Y" Z" I2 E8 i8 U7 C如果数据包的地址不能再CAM表中找到,则向接收端口以外的其他端口转发。
- k; o& |5 S0 E. }; W$ j% t( }- |如果CAM表中能找到,则转发给相应端口,如果发送和接收都是统一端口,则不发送。
" ?- @! _- p: v注意,网桥是以混杂模式工作的。关于网桥更多,请查阅相关资料。
3 g" i/ m* f3 F6 A0 J1 m
+ ?. h6 L9 o+ g- LOVS中的bridge$ h9 X5 P2 Z7 m- h4 g/ H! u$ T
上面,说到,一个桥就是一个交换机。例如,在OVS中:8 f: k$ @+ n* [1 I r
9 _' ^+ U& h/ u* J
root@localhost:~# ovs-vsctl add-br br01 ]+ s+ @8 f6 @9 ^/ e1 @
root@localhost:~# ifconfig br0
/ L2 }$ H. M8 V9 S! y br0 Link encap:Ethernet HWaddr 1a:09:56:ea:0b:49
3 Z! s$ L3 t# z$ W. O+ ~/ p inet6 addr: fe80::1809:56ff:feea:b49/64 Scope:Link
0 z( o% K+ I9 ?% h UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
! x2 a* r2 B+ ~1 a RX packets:1584 errors:0 dropped:0 overruns:0 frame:0! A; K- v' Z- w6 @% _
TX packets:6 errors:0 dropped:0 overruns:0 carrier:0
7 M2 ?1 V) {4 y8 h- i7 X( V collisions:0 txqueuelen:0
. N, Q6 i( @" e4 e! U8 n- e6 ^7 y RX bytes:316502 (316.5 KB) TX bytes:468 (468.0 B)
) o, H3 M$ l9 R0 N当我们创建了一个交换机(网桥)以后,此时网络功能不受影响,但是会产生一个虚拟网卡,名字就是网桥的名称(br-int),之所以会产生一个虚拟网卡,是为了实现接下来的网桥(交换机)功能。有了这个交换机以后,还需要为这个交换机增加端口(port),一个端口,就是一个物理网卡,当网卡加入到这个交换机之后,其工作方式就和普通交换机的一个端口的工作方式类似了。* O7 \7 S! x% `
7 F$ R4 W$ ], b6 U
root@localhost:~# ovs-vsctl add-port br0 port" F% [2 M& H8 R7 b! c: `2 B5 _: V# ~
这里要特别注意,网卡加入网桥以后,要按照网桥的工作标准工作,那么加入的一个端口就必须是以混杂模式工作,工作在链路层,处理2层的帧,所以这个port就不需要配置IP了。(你没见过哪个交换的端口有IP的吧)) d* v0 e9 F6 m( t) n+ j4 ^# K7 z
8 `4 g7 m% T9 x( W5 |
那么接下来你可能会问,通常的交换机不都是有一个管理接口,可以telnet到交换机上进行配置吧,那么在OVS中创建的虚拟交换机有木有这种呢,有的!上面既然创建交换机brname的时候产生了一个虚拟网口 br-int,那么,你给这个虚拟网卡配置了IP以后,就相当于给交换机的管理接口配置了IP,此时一个正常的虚拟交换机就搞定了。
: G3 u, r/ q7 n, D: k0 m9 D; S. l9 z& D
root@localhost:~# ip address add 192.168.1.1/24 dev br0
3 R* Q; L, @ y% K2 _最后,我们来看看一个br的具体信息:6 _1 `/ x2 I0 @' d, V1 e5 Q5 y
f. B7 c( J, E! r5 `root@localhost:~# ovs-vsctl show
* S/ s. U5 G ^& U) y# `( W! `bc12c8d2-6900-42dd-9c1c-30e8ecb99a1b2 X" ]8 S; k% b( O
Bridge "br0"
, l: W$ Y6 \" o k Port "eth0"3 M/ S% S4 Z2 h3 R% l: |5 Q
Interface "eth0"
) n( L: ]2 c$ S" K2 Z6 | Port "br0"
& R- t4 t( \* j Interface "br0"
J' E' Y" M* ?. i type: internal' m. z+ G2 I9 M6 Z$ o. B# o
ovs_version: "1.4.0+build0"+ L8 H8 ]! {" f. T, r& p
首先,这里显示了一个名为br0的桥(交换机),这个交换机有两个接口,一个是eth0,一个是br0,上面说到,创建桥的时候会创建一个和桥名字一样的接口,并自动作为该桥的一个端口,那么这个虚拟接口的作用,一方面是可以作为交换机的管理端口,另一方面也是基于这个虚拟接口,实现了桥的功能。
5 D; u) p: Q5 a( ~% U9 e. @' ~. y3 f" Y* f- p. P: r
#### OpenvSwitch的典型工作流程
+ e7 n; v( ~8 i$ W9 ]+ r
; h' ^! o2 d. a Z/ ]' ?* ^这一部分以一个简单的例子,说明在虚拟化环境中OpenvSwitch的典型工作流程。
; ^# r7 M/ Y3 D& {4 Q
$ d4 x) ?' |. E9 M0 e' ^4 ?* |前面已经说到,OVS主要是用来在虚拟化环境中。实现虚拟机之间通信以及一个虚拟机和外网之间通信,如下是一个典型的结构图:
! k$ G, H$ c7 {6 }5 p! m T& P# w8 s3 j D
那么,通常情况下的工作流程如下:3 h* Z8 e& T8 `
4 [7 G$ g7 U* _9 i6 X5 ?logical_model1 S& L& a8 ]9 p) F% y0 p
9 [7 K0 w. p3 u: G! n/ ~6 m s
VM实例 instance 产生一个数据包并发送至实例内的虚拟网络接口 VNIC,图中就是 instance 中的 eth0.
: Q: l4 R( t# Y; s) K- s这个数据包会传送到物理机上的VNIC接口,如图就是vnet接口。6 _) W0 y8 {: R/ \
数据包从 vnet NIC 出来,到达桥(虚拟交换机) br100 上.
0 i: G4 i6 I0 ~( O数据包经过交换机的处理,从物理节点上的物理接口发出,如图中物理机上的 eth0 .
8 ^# t1 b: ]* \数据包从 eth0 出去的时候,是按照物理节点上的路由以及默认网关操作的,这个时候该数据包其实已经不受你的控制了。$ S0 W' Z0 J9 h4 d+ V
一般 L2 switch 连接 eth0 的这个口是一个 trunk 口, 因为虚拟机对应的 VNET 往往会设置 VLAN TAG, 可以通过对虚拟机对应的 vnet 打 VALN TAG 来控制虚拟机的网络广播域. 如果跑多个虚拟机的话, 多个虚拟机对应的 vnet 可以设置不同的 vlan tag, 那么这些虚拟机的数据包从 eth0(4)出去的时候, 会带上TAG标记. 这样也就必须是 trunk 口才行. |
|