找回密码
 注册
查看: 5379|回复: 2

SDN在云数据中心的应用之VPC网络

[复制链接]

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
发表于 2019-9-12 11:13:52 | 显示全部楼层 |阅读模式
一、必须掌握的基础知识$ n0 c% {  f: k! Y
1、具备看懂流表的能力# h7 P% _2 s# X; L* o
OpenFlow流表是常用的SDN云数据中心转发依据。要搞明白控制转发机制,首先就得具备读懂流表的能力。流表由很多个流表项组成,每个流表项就是一个转发规则。每个流表项由匹配字段、优先级、计数器、指令、超时、cookie这六部分组成。流表项中关键的两个内容是匹配字段和指令。匹配字段包括inport、报文的12元组信息等。指令是用来描述OpenFlow的处理方式,修改数据包的行动集或触发流表的流水线处理。流表的匹配原则是“table0—table255”,优先从table0开始匹配。同一table内部按照优先级匹配,优先级高优先匹配。需要特殊说明一下,不同商业解决方案的流表格式存在一定差异性,但是本质上都是一致的。抓住流表的六要素和流表匹配原则,就能读懂并理解不同厂家的流表。
( E! y8 h4 W. ?9 l6 L5 _8 Z
9 c! q/ o/ d5 W% H7 \+ K: l5 D以某商业解决方案的两个流表项为例,说明下流表的含义:
  I# x( U9 v/ ^! K$ Z/ B: k4 m$ u- ]1 `' X
Java
4 J  m2 C( O7 \' v. |9 T  {
' z; K  n) d, R( ?+ _cookie=0x2000208,duration=231310.205s,table=160,n_packets=2879,n_bytes=282142,idle_age=0,hard_age=65534,priority=90,ip,dl_dst=fa:16:3f:00:02:d1,nw_dst=192.168.1.4 actions=mod_dl_dst:fa:16:3e:54:db:6a,mod_dl_src:fa:16:3e:2c:f0:e3,strip_vlan,output:32 Z. _1 H3 e! f, q: j* P. o) j
12 x4 G3 H4 ?( w( B: X
cookie=0x2000208,duration=231310.205s,table=160,n_packets=2879,n_bytes=282142,idle_age=0,hard_age=65534,priority=90,ip,dl_dst=fa:16:3f:00:02:d1,nw_dst=192.168.1.4 actions=mod_dl_dst:fa:16:3e:54:db:6a,mod_dl_src:fa:16:3e:2c:f0:e3,strip_vlan,output:3
: z4 \5 t! q  {- W7 J' U3 H( D1 e这是table160的一个优先级为90的流表项内容,它的匹配项是“IP数据包,目的MAC地址是fa:16:3f:00:02:d1,目的IP地址是192.168.1.4”,若是数据包的包头与流表匹配项完全匹配后,则执行下面动作“修改数据包的目的MAC地址为fa:16:3e:54:db:6a,修改源MAC地址为fa:16:3e:2c:f0:e3,剥掉vlan标签,从交换机的3端口转发数据包”。8 t. w# H0 @: B1 [- C0 v

% p, \6 f$ [6 C$ K6 i8 ]! ]- tJava
, f0 m+ N; H" |8 w
/ I6 s& r! i+ dcookie=0x2000205,duration=168409.329s,table=200,n_packets=93326,n_bytes=23319603, idle_age=117, hard_age=65534, priority=90,dl_vlan=6,dl_dst=d4:94:e8:5b:4e:01,actions=strip_vlan,set_tunnel:0x4e5c(20060),load:0xa0005f5(10.0.5.245)->NXM_NX_TUN_IPV4_SRC[],load:0xa00032d(10.0.3.45)->NXM_NX_TUN_IPV4_DST[],output:23 w: n( q: V3 O
1- ^( x& {: C" Q
cookie=0x2000205,duration=168409.329s,table=200,n_packets=93326,n_bytes=23319603, idle_age=117, hard_age=65534, priority=90,dl_vlan=6,dl_dst=d4:94:e8:5b:4e:01,actions=strip_vlan,set_tunnel:0x4e5c(20060),load:0xa0005f5(10.0.5.245)->NXM_NX_TUN_IPV4_SRC[],load:0xa00032d(10.0.3.45)->NXM_NX_TUN_IPV4_DST[],output:2  m4 t- j% ]7 ^" Q$ r' Q$ \7 Z3 V
这是table200的一个优先级为90的流表项内容,它的匹配项是“vlan id是6,目的MAC地址是d4:94:e8:5b:4e:01”,若是数据包的包头与流表匹配项完全匹配后,则执行下面动作“剥掉vlan标签,将数据包封装为vni为20060的vxlan隧道,隧道的源IP地址是10.0.5.245,隧道的目的IP地址是10.0.3.45,从交换机的2端口转发数据包”。
. t+ |, C3 R# J. p4 X6 k% R
% ~% [( u0 D+ B2 s; I下面给出了常见的匹配字段和动作,供参考。4 P0 f% z" r) a
& I/ E* M& n: g2 I5 v* n
Match field
4 H' n0 l. G* ?! x1 c$ x# v  @2 P2 L3 A; r: z
说明$ A: M& a+ p6 `: ~

  i- ^( V" ?; D  X2 Nin_port% _; `- Z) z( q: v- ?4 w
) \( e# U7 V9 W
Switch input port
$ T9 Y. G+ Q- ~' ~) U$ J: ]6 O
$ M: X) G3 z' Wdl_dst
& i! I9 G# x( F; t8 C3 S/ v
$ y! ~, l! {5 O/ }, ~Ethernet destination address; J' S6 f: c0 s

- ^- I7 Z3 @9 p3 o( y' bdl_src
% Q. R9 _$ M7 \. ~2 w4 G/ P8 _' J- @! i& B
Ethernet source address6 u2 `: f: N! r5 g# |4 a2 e( b5 \  l! _
: [+ }1 g2 M3 X( U3 l
dl_vlan" z$ X. k- r5 x) p! h. l

) ]- R/ C* y% s5 x9 F0 l  t! W' mVLAN id3 O! l1 z- m. T) b- @# V& v
6 E5 D0 S# o) R6 T, _+ |
nw_src* M5 s  B3 P2 m% ]* \

" c! |! Z0 x; ^3 zIPv4 source address
( Z: H. M5 g* m1 ~) E5 y% \, Q9 P2 F1 @4 n" N- @2 R! M
nw_dst
; T3 w) K0 e2 ]9 \
4 R3 r& k0 S# t7 n" JIPv4 destination address: h) Q% A+ p# r/ m: j, N) ]9 p$ P1 i
& k$ L1 n  z- ~8 f
tcp_src0 U8 B2 D( F4 K6 Y3 M

# l& i4 C4 t, \' O$ t1 m  y+ \- wTCP source port+ ?0 Y7 U5 |, \0 z6 s
1 T1 h/ v! [% r# F( f
tcp_dst
3 W- p8 ?; E$ f8 b1 }9 d
, b! w9 T9 P2 V  J7 o& mTCP destination port( l# ^6 r6 |, c! D; d! D5 z

, u1 |$ h, v; w3 xudp_src! p; ]$ K/ }) \0 b$ ~9 s

. w- _1 h- C5 r' J4 e" cUDP source port% ?* ]/ h; D6 C- f0 _* A# i

' |6 \, {* A6 ^udp_dst( P1 {3 \% R4 t" r

% f$ ^- V) h* E) RUDP destination port
# y9 u( Q( L9 m: h2 K( P. q; h) U: T2 h: L
Action( @* B0 F' ?  `7 s/ |# {

1 n6 r( x7 ~- `) N动作
$ a! J: ~# ]# h. I  H- z9 r9 j$ N3 }8 N( G$ \
resubmit7 w3 e4 @" E, S8 u

' E1 W, U0 `* U/ ~跳转表
1 ?* s: o' ]' x* Q4 C* ^9 ~" I( H5 Z2 ^9 _7 F. w  B- V
drop5 a: t$ p7 c7 R4 B) d
' a9 ]: g. Y# z  L
丢弃  J: i6 Q, x1 b( V% c4 o

: h5 @6 o7 X9 l  l8 hload:$local_vlan->NXM_NX_REG0[0..11]! a  a) g4 z/ ^* b
! n7 B& c! F9 C( B
local_vlan放在寄存器里* h, r/ V: j: h+ S; v9 A& X: _

8 Z% O" N2 E# h' qCONTROLLER
5 F! {" W0 {$ B) J4 y4 p% a/ V- u, e+ h, f) T) N
上送控制器
8 F3 z# G1 o! A6 |7 Z. V) \
0 \0 B1 p7 ?3 F# B# [1 F8 cmod_vlan_pcp2 ^. W. r3 p8 \$ V& c

" w) }8 H! r$ U% G6 P修改vlanpcp. C+ L: `1 K$ p; K/ g8 v

9 Z9 h. I$ N" Y+ Z# `2 B* a3 Dmove! H6 X8 ^: L! o* J8 k
* k( s3 R. }+ J' V0 Z: q
将报文的dst设置为src
( Y' p4 R9 {9 D+ b4 P* I7 L. f3 J1 ?) |* Y
mod_dl_src) L( a4 u7 I; i
, g5 F4 l8 X, ^4 S
修改目的mac4 J6 i, u2 b% ]- ?: p
. z& z' N4 y1 M) H
load
& Z) T# e' p% V4 q7 A" H) P/ x$ E) N5 f) y5 g$ @
设置某个报文头部的值
. c; Y# k  e# l% R- a$ d7 s2 ?8 C# ^: E" B" b) p8 Y2 Q0 J
output
, f6 R: i7 v& ]$ P- r# m: t, e1 E$ O3 i( S2 f' V# ~" g
从指定端口发出: |5 v2 j5 o( p# }- h

* u# z! H3 C5 Z7 x& H, ?IN_PORT
; p+ M6 u9 S! ?- d4 T- G3 i1 a# d0 R( G( a! j) w6 |
从入端口发出
5 H) X* h5 M, v8 a
4 b2 A! R1 M$ x8 [1 E9 Mset_tun_id
3 S& f% F3 y! J5 W
9 @3 H! R) S% h* j设置vni
2 t, l! Y; |- Y2 F6 n* P/ m
& J$ m4 n' [: D; d: d2、具备看懂vxlan数据包的能力* X* ~3 c# \* @
在网络运维中,常常会用到wireshark软件进行数据包的抓取和分析,从而进一步分析网络转发平面的运作机制。在SDN云数据中心的数据平面会用到vxlan隧道封装技术,因此需要了解vxlan的数据封装格式,并能够通过抓取的vxlan数据包进行网络分析。
6 h3 Q) r5 H1 P9 g3 F9 K0 f  R6 K% V7 }' p, z' M% I# F, _
以下是wireshark的一个vlan数据包示例。这是一个ICMP(ping)数据包。Ethernet 是以太网封装,src为源mac地址,dst为目的mac地址。Internet是IP层封装,src是源IP地址,dst是目的IP。  |$ ?6 L$ q* y' A

) z, [. @2 x+ n6 N  ^2 ~. }. d我们来看一个vxlan数据包的wireshark示例。这也是一个ICMP(ping)数据包,跟vlan数据包相比,多了一层数据封装。。Vxlan隧道的源IP地址是10.0.3.45,目的IP地址是10.0.5.169,隧道的VNI标识是20022。原始数据包的源IP地址是114.114.114.114,目的IP地址是192.168.1.4.) {. B5 G0 B% f" x; S" R# D
8 c8 {! ]" K% b; z( g8 o

! q/ C1 c) ]3 h: [, T0 O( t二、控制和转发的联动分析
$ N! ]  X8 W" E2 N物理服务器上的虚拟交换机是SDN云数据中心较为常用的网络设备。需要特殊说明一下,在不同商业解决方案中,流表内容和用户流量/vxlan映射关系存在一定差异性。下面以一个商用虚拟交换机的流表和数据包为例,抛砖引玉,分析vpc产品的技术实现。3 d; V9 W. C/ J: N8 O. Q5 K
" P- U/ u) T; O; h! J. s2 u
1、同子网虚拟机的流量互访:$ I$ R$ M$ E% u$ ?
- i5 I4 S: {2 E( s: P1 O1 o4 Q
(1)控制平面:分别查看PM1和PM2虚拟交换机的流表。2 O5 k* h% Z. S; M( X, P
PM1的虚拟交换机有如下流表:/ s1 k. [& H+ `  x1 n
) J/ Z. A" B6 @0 b5 q, f7 m
Java  a; {; J$ ]9 h- \1 A  V9 X
0 w0 X9 b' w( b2 E/ A
skb_priority(0),in_port(5),eth(src=fa:16:3e:79:b7:62,dst=fa:16:3e:eb:2b:1e),eth_type(0x0800),ipv4(src=192.168.1.3/255.255.255.255,dst=192.168.1.5/255.255.255.255,proto=1/0xff,tos=0/0x3,ttl=64/0,frag=no/0xff), packets:7, bytes:686, used:0.883s, actions:set(tunnel(tun_id=0x31b3f5(3257333),src=0.0.0.0,dst=10.0.4.84,tos=0x0,ttl=64,flags(key))),6
) r- k* T" K2 f. b, v7 X) ^5 v5 `( l10 k3 r# E" ?& ?. T$ ]1 X- z4 x
skb_priority(0),in_port(5),eth(src=fa:16:3e:79:b7:62,dst=fa:16:3e:eb:2b:1e),eth_type(0x0800),ipv4(src=192.168.1.3/255.255.255.255,dst=192.168.1.5/255.255.255.255,proto=1/0xff,tos=0/0x3,ttl=64/0,frag=no/0xff), packets:7, bytes:686, used:0.883s, actions:set(tunnel(tun_id=0x31b3f5(3257333),src=0.0.0.0,dst=10.0.4.84,tos=0x0,ttl=64,flags(key))),60 o3 L. t/ U9 r% _( f9 D
这条流表的含义是:流表的匹配字段是“数据包来自虚拟交换机的端口5,源MAC地址(src=fa:16:3e:79:b7:62),目的mac地址(dst=fa:16:3e:eb:2b:1e),源IP地址(192.168.1.3),目的IP地址(192.168.1.5)”,若是数据包完全匹配,则执行的指令是“将数据包封装为VNI为3257333的vxlan隧道,vxlan隧道的源IP为自身,目的IP为10.0.4.84,并从端口6转发出去”。6 Z, n, n( f. y8 [, x
; f( {  n; O# l; g' }
PM2的虚拟交换机有如下流表:9 `( ?/ p& a/ W8 j

' W- W0 s# m& B: J3 V( wJava0 G, V" `& G; i! r0 K

+ N% [' t& v- @2 F! S5 G! O5 oskb_priority(0),tunnel(tun_id=0x31b3f5(3257333)/0xffffffffffffffff,src=10.0.4.119/255.255.255.255,dst=10.0.4.84/255.255.255.255,tos=0/0xff,ttl=64/0xff,flags(key)),in_port(6),skb_mark(0),eth(src=fa:16:3e:79:b7:62,dst=fa:16:3e:eb:2b:1e),eth_type(0x0800),ipv4(src=192.168.1.3/255.255.255.255,dst=192.168.1.5/255.255.255.255,proto=1/0xff,tos=0/0,ttl=64/0,frag=no/0xff), packets:30, bytes:2940, used:0.335s, actions:58 Z( ^7 u( O+ U1 ~* M: h' f* x3 c
1' ?) l6 L( W( t, r) f4 L# G; B, y5 B
skb_priority(0),tunnel(tun_id=0x31b3f5(3257333)/0xffffffffffffffff,src=10.0.4.119/255.255.255.255,dst=10.0.4.84/255.255.255.255,tos=0/0xff,ttl=64/0xff,flags(key)),in_port(6),skb_mark(0),eth(src=fa:16:3e:79:b7:62,dst=fa:16:3e:eb:2b:1e),eth_type(0x0800),ipv4(src=192.168.1.3/255.255.255.255,dst=192.168.1.5/255.255.255.255,proto=1/0xff,tos=0/0,ttl=64/0,frag=no/0xff), packets:30, bytes:2940, used:0.335s, actions:5
& [+ I/ M: E3 p# o( `这条流表的含义是: 流表的匹配字段是“vxlan数据包的VNI为3257333,vxlan源IP地址(10.0.4.119),vxlan目的IP地址(10.0.4.84),数据包来自OVS的端口6,原始数据包的源MAC地址(src= fa:16:3e:79:b7:62),目的mac地址(dst= fa:16:3e:eb:2b:1e),源IP地址(192.168.1.3),目的IP地址(192.168.1.5)”,若是数据包完全匹配,则执行的指令是“将数据包解封,并从端口5转发出去”。3 r# s, `* x: L
(2)转发平面:分别在PM1和PM2上OVS的tap1和bond1口进行抓包分析,分析“数据包经过虚拟交换机后做了哪些变化”。
: B: ]6 p* i; ~+ [" gPM1的tap1的数据包格式如下,是vlan格式:
+ l; v3 K' x: L( m) D' o
2 w& B4 H" Q+ J1 x& ~PM1的bond1的数据包格式如下,是vxlan格式:* T9 S. q; A$ K' W  b
3 F2 X8 u# C$ X' }& s5 y! g1 ]
PM2的bond1的数据包格式如下,是vxlan格式:7 [; b& F+ L9 m

' L# d, I2 f8 R& \PM2的tap1的数据包格式如下,是vlan格式:7 U8 V4 U, `# \5 E

- o! X8 j3 G* u8 b通过对上面四个节点的数据包分析,可以得到:PM1的虚拟交换机对来自VM1的数据包进行了vxlan隧道封装,VNI标识是3257333。在underlay交换机上,基于vxlan 的隧道IP地址完成数据包的转发,对隧道里面封装的VM数据包内容处于无感知状态。PM2的虚拟交换机则是相应的完成的vxlan数据包的解封装过程,并将数据包送至VM2。: Q+ y, N( I# U" h$ z: Y4 ]+ o

3 y: R5 O6 f/ g2 }5 R. b( R2、跨子网虚拟机的流量互访& K+ \* k6 ]3 D: j
跨子网通信的控制转发联动原理,与同子网场景下的是一致的,只是在流表内容上有一定差异性。跨子网的流量交互涉及到网关联动处理,存在原始数据包的MAC地址转化,同时vxlan隧道封装的VNI也会不同。以PM1的发送端为例,分析如下。+ x) x! W" N* G0 r: }+ s% ^
( ~- W# Q; U, g2 D" K
PM1上的流表:
- n2 z1 E3 @7 w4 {9 C' d( z, D$ P; G/ I! O9 Q2 \8 ]
Java# U7 Q4 h, t( }9 A

! f# ~) E; z0 n$ r* n" a- gskb_priority(0),in_port(21),eth(src=fa:16:3e:79:b7:62,dst=68:54:ed:00:00:36),eth_type(0x0800),ipv4(src=192.168.1.3,dst=192.168.8.74,proto=1,tos=0,ttl=64,frag=no), packets:277, bytes:27146, used:0.594s, actions:set(tunnel(tun_id=0x389b3a(3709754),src=0.0.0.0,dst=10.0.4.129,tos=0x0,ttl=64,flags(key))),set(eth(src=68:54:ed:00:00:0c,dst=fa:16:3e:fc:4c:1f)),set(ipv4(src=192.168.1.3,dst=192.168.8.74,proto=1,tos=0,ttl=63,frag=no)),6/ R) D! n3 o, `* M5 N
1
" V' c$ {& A4 N" J0 p. wskb_priority(0),in_port(21),eth(src=fa:16:3e:79:b7:62,dst=68:54:ed:00:00:36),eth_type(0x0800),ipv4(src=192.168.1.3,dst=192.168.8.74,proto=1,tos=0,ttl=64,frag=no), packets:277, bytes:27146, used:0.594s, actions:set(tunnel(tun_id=0x389b3a(3709754),src=0.0.0.0,dst=10.0.4.129,tos=0x0,ttl=64,flags(key))),set(eth(src=68:54:ed:00:00:0c,dst=fa:16:3e:fc:4c:1f)),set(ipv4(src=192.168.1.3,dst=192.168.8.74,proto=1,tos=0,ttl=63,frag=no)),6
* F5 S3 r+ \. U! O* V这条流表的含义是: 流表的匹配字段是“数据包来自虚拟交换机的端口21,源MAC地址(src=fa:16:3e:79:b7:62),目的mac地址(dst=68:54:ed:00:00:36),源IP地址(192.168.1.3),目的IP地址(192.168.8.74)”,若是数据包完全匹配,则执行的指令是“将数据包封装为VNI为3709754的vxlan隧道, vxlan隧道的源IP为自身,目的IP为10.0.4.129,同时修改原始数据包的源地址为(src=68:54:ed:00:00:0c),目的MAC地址为(fa:16:3e:fc:4c:1f),最后从端口6转发出去”。
5 ~( W$ k1 Q' p* q! O; ~( W/ e% G" O' d" R. j
PM1上bond1的数据包:- T/ N; s( C/ Q

2 a3 v3 t6 J' C& Z' M" W从抓包可以看出,VM1的数据包经过虚拟交换机后被封装为vni为3709754的vxlan数据包,与流表的动作集一致。

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
 楼主| 发表于 2019-9-12 11:15:43 | 显示全部楼层
一、必须掌握的基础知识9 D1 u1 H; U4 S6 L9 c* h

5 H7 I2 C, W9 ~! k6 X/ m1、具备看懂流表的能力
7 J& z( r) ~0 ?% V2 N
& z" ^. k( z! [; a6 ^5 Z: JOpenFlow流表是常用的SDN云数据中心转发依据。要搞明白控制转发机制,首先就得具备读懂流表的能力。流表由很多个流表项组成,每个流表项就是一个转发规则。每个流表项由匹配字段、优先级、计数器、指令、超时、cookie这六部分组成。流表项中关键的两个内容是匹配字段和指令。匹配字段包括inport、报文的12元组信息等。指令是用来描述OpenFlow的处理方式,修改数据包的行动集或触发流表的流水线处理。流表的匹配原则是“table0—table255”,优先从table0开始匹配。同一table内部按照优先级匹配,优先级高优先匹配。需要特殊说明一下,不同商业解决方案的流表格式存在一定差异性,但是本质上都是一致的。抓住流表的六要素和流表匹配原则,就能读懂并理解不同厂家的流表。以某商业解决方案的两个流表项为例,说明下流表的含义:1 ^: h9 D7 \# c+ J

6 T0 Q5 @3 x" _2 V" Vcookie=0x2000208,duration=231310.205s,table=160,n_packets=2879,n_bytes=282142,idle_age=0,hard_age=65534,priority=90,ip,dl_dst=fa:16:3f:00:02:d1,nw_dst=192.168.1.4 actions=mod_dl_dst:fa:16:3e:54:db:6a,mod_dl_src:fa:16:3e:2c:f0:e3,strip_vlan,output:3 ' y+ F7 Q1 l* \3 |
这是table160的一个优先级为90的流表项内容,它的匹配项是“IP数据包,目的MAC地址是fa:16:3f:00:02:d1,目的IP地址是192.168.1.4”,若是数据包的包头与流表匹配项完全匹配后,则执行下面动作“修改数据包的目的MAC地址为fa:16:3e:54:db:6a,修改源MAC地址为fa:16:3e:2c:f0:e3,剥掉vlan标签,从交换机的3端口转发数据包”。
; X; r% t% n! J4 l* M
1 B2 @+ h# w4 }" P* Ccookie=0x2000205,duration=168409.329s,table=200,n_packets=93326,n_bytes=23319603, idle_age=117, hard_age=65534, priority=90,dl_vlan=6,dl_dst=d4:94:e8:5b:4e:01,actions=strip_vlan,set_tunnel:0x4e5c(20060),load:0xa0005f5(10.0.5.245)->NXM_NX_TUN_IPV4_SRC[],load:0xa00032d(10.0.3.45)->NXM_NX_TUN_IPV4_DST[],output:2 & ]+ U5 K. W1 J: U
这是table200的一个优先级为90的流表项内容,它的匹配项是“vlan id是6,目的MAC地址是d4:94:e8:5b:4e:01”,若是数据包的包头与流表匹配项完全匹配后,则执行下面动作“剥掉vlan标签,将数据包封装为vni为20060的vxlan隧道,隧道的源IP地址是10.0.5.245,隧道的目的IP地址是10.0.3.45,从交换机的2端口转发数据包”。下面给出了常见的匹配字段和动作,供参考。3 W* Y+ J6 b! A9 c
" ^. z6 m; W! W; l% l) t, d$ Z: k

5 k' f. o* w" x! W1 l3 E  m+ M& n0 K1 F% g1 |
+ N% e( P4 i1 ?( d

; z  f' S6 R0 E% Y" T/ v( ^2、具备看懂vxlan数据包的能力9 {+ d" L4 Z( j6 ^
8 x. U6 k0 |2 V' ?4 {
在网络运维中,常常会用到wireshark软件进行数据包的抓取和分析,从而进一步分析网络转发平面的运作机制。在SDN云数据中心的数据平面会用到vxlan隧道封装技术,因此需要了解vxlan的数据封装格式,并能够通过抓取的vxlan数据包进行网络分析。以下是wireshark的一个vlan数据包示例。这是一个ICMP(ping)数据包。Ethernet 是以太网封装,src为源mac地址,dst为目的mac地址。Internet是IP层封装,src是源IP地址,dst是目的IP。
! K! ~( \9 d8 _' F+ x! }7 g5 X3 p" \- |# Z9 a

8 j$ H* G2 L* A我们来看一个vxlan数据包的wireshark示例。这也是一个ICMP(ping)数据包,跟vlan数据包相比,多了一层数据封装。。Vxlan隧道的源IP地址是10.0.3.45,目的IP地址是10.0.5.169,隧道的VNI标识是20022。原始数据包的源IP地址是114.114.114.114,目的IP地址是192.168.1.4.
! G) E* t1 ?- |7 ~+ B! ?& ?8 [" i$ Q+ e6 o. e+ Z

1 W, @) i# }. A0 F二、控制和转发的联动分析
+ A9 w! Y' ?' e: E3 W0 ?, T
/ J  p1 G- e; b' ^9 P物理服务器上的虚拟交换机是SDN云数据中心较为常用的网络设备。需要特殊说明一下,在不同商业解决方案中,流表内容和用户流量/vxlan映射关系存在一定差异性。下面以一个商用虚拟交换机的流表和数据包为例,抛砖引玉,分析vpc产品的技术实现。1、同子网虚拟机的流量互访:1 i9 I4 m3 a$ M# ]
# S: S8 C* e4 x0 _' i8 a

9 m& E" D$ A' G+ V(1)控制平面:分别查看PM1和PM2虚拟交换机的流表。" C+ z( G4 g( ]( E8 F) A7 k+ M2 f

; P) v& ]( ?! j1 s7 v& ZPM1的虚拟交换机有如下流表:9 {+ \, [' ]( x" [+ s: P; j

' D) @: q% u' X" j4 b5 d) Jskb_priority(0),in_port(5),eth(src=fa:16:3e:79:b7:62,dst=fa:16:3e:eb:2b:1e),eth_type(0x0800),ipv4(src=192.168.1.3/255.255.255.255,dst=192.168.1.5/255.255.255.255,proto=1/0xff,tos=0/0x3,ttl=64/0,frag=no/0xff), packets:7, bytes:686, used:0.883s, actions:set(tunnel(tun_id=0x31b3f5(3257333),src=0.0.0.0,dst=10.0.4.84,tos=0x0,ttl=64,flags(key))),6
7 m, i8 z# ~! B2 t这条流表的含义是:流表的匹配字段是“数据包来自虚拟交换机的端口5,源MAC地址(src=fa:16:3e:79:b7:62),目的mac地址(dst=fa:16:3e:eb:2b:1e),源IP地址(192.168.1.3),目的IP地址(192.168.1.5)”,若是数据包完全匹配,则执行的指令是“将数据包封装为VNI为3257333的vxlan隧道,vxlan隧道的源IP为自身,目的IP为10.0.4.84,并从端口6转发出去”。PM2的虚拟交换机有如下流表:
( I2 W! L+ s- X( X- ]! o
- _, p. w5 J  H- }* G* U9 A4 lskb_priority(0),tunnel(tun_id=0x31b3f5(3257333)/0xffffffffffffffff,src=10.0.4.119/255.255.255.255,dst=10.0.4.84/255.255.255.255,tos=0/0xff,ttl=64/0xff,flags(key)),in_port(6),skb_mark(0),eth(src=fa:16:3e:79:b7:62,dst=fa:16:3e:eb:2b:1e),eth_type(0x0800),ipv4(src=192.168.1.3/255.255.255.255,dst=192.168.1.5/255.255.255.255,proto=1/0xff,tos=0/0,ttl=64/0,frag=no/0xff), packets:30, bytes:2940, used:0.335s, actions:5 * x: Q+ Q" @0 V$ t% I
这条流表的含义是: 流表的匹配字段是“vxlan数据包的VNI为3257333,vxlan源IP地址(10.0.4.119),vxlan目的IP地址(10.0.4.84),数据包来自OVS的端口6,原始数据包的源MAC地址(src= fa:16:3e:79:b7:62),目的mac地址(dst= fa:16:3e:eb:2b:1e),源IP地址(192.168.1.3),目的IP地址(192.168.1.5)”,若是数据包完全匹配,则执行的指令是“将数据包解封,并从端口5转发出去”。
- A5 ?/ T1 V( V" h) r& ]% k
1 r  t  i$ k; U  [+ i9 ]% D: ]# i(2)转发平面:分别在PM1和PM2上OVS的tap1和bond1口进行抓包分析,分析“数据包经过虚拟交换机后做了哪些变化”。
2 U6 S1 Z7 v5 T5 g/ `' W
. [3 ]. {( _8 _# C" _  MPM1的tap1的数据包格式如下,是vlan格式:5 I( M! b5 q. T" P! E
8 [3 N% A3 {/ {" u- F1 v7 u) {3 x

& h1 U. q. ^) u5 R$ \2 GPM1的bond1的数据包格式如下,是vxlan格式:
; t, x; H& ^2 E2 C7 b0 ]0 i9 e7 w# v& t& i
% s) X% M4 D+ d2 f7 `! s2 n
PM2的bond1的数据包格式如下,是vxlan格式:
2 O% l4 a! `8 P7 y. F& ?; U
& W& j9 H! d5 z5 }3 I& Q$ `+ ]/ D( W' n  I/ d$ \' i
PM2的tap1的数据包格式如下,是vlan格式:
8 B0 j; l1 S0 h0 m
$ T/ h* ]8 ^( M3 t
6 a4 \, F* Z& e* D% d6 ^" ]2 u" l通过对上面四个节点的数据包分析,可以得到:PM1的虚拟交换机对来自VM1的数据包进行了vxlan隧道封装,VNI标识是3257333。在underlay交换机上,基于vxlan 的隧道IP地址完成数据包的转发,对隧道里面封装的VM数据包内容处于无感知状态。PM2的虚拟交换机则是相应的完成的vxlan数据包的解封装过程,并将数据包送至VM2。2、跨子网虚拟机的流量互访
5 ?8 ?. c. c5 h* Q2 ~( X
- s% K7 T5 l9 k# u) x跨子网通信的控制转发联动原理,与同子网场景下的是一致的,只是在流表内容上有一定差异性。跨子网的流量交互涉及到网关联动处理,存在原始数据包的MAC地址转化,同时vxlan隧道封装的VNI也会不同。以PM1的发送端为例,分析如下。
# K( Z0 \. }4 {' V! f' Y, i2 Q0 X/ h# g2 t
PM1上的流表:: g- D1 F- u. _4 Q# P1 X- @
( x  Q8 x$ b6 L# S% m! d$ Q
skb_priority(0),in_port(21),eth(src=fa:16:3e:79:b7:62,dst=68:54:ed:00:00:36),eth_type(0x0800),ipv4(src=192.168.1.3,dst=192.168.8.74,proto=1,tos=0,ttl=64,frag=no), packets:277, bytes:27146, used:0.594s, actions:set(tunnel(tun_id=0x389b3a(3709754),src=0.0.0.0,dst=10.0.4.129,tos=0x0,ttl=64,flags(key))),set(eth(src=68:54:ed:00:00:0c,dst=fa:16:3e:fc:4c:1f)),set(ipv4(src=192.168.1.3,dst=192.168.8.74,proto=1,tos=0,ttl=63,frag=no)),6
# @" j  q+ T( ?7 f, m- a! m  Y$ a8 i这条流表的含义是: 流表的匹配字段是“数据包来自虚拟交换机的端口21,源MAC地址(src=fa:16:3e:79:b7:62),目的mac地址(dst=68:54:ed:00:00:36),源IP地址(192.168.1.3),目的IP地址(192.168.8.74)”,若是数据包完全匹配,则执行的指令是“将数据包封装为VNI为3709754的vxlan隧道, vxlan隧道的源IP为自身,目的IP为10.0.4.129,同时修改原始数据包的源地址为(src=68:54:ed:00:00:0c),目的MAC地址为(fa:16:3e:fc:4c:1f),***从端口6转发出去”。PM1上bond1的数据包:) r: G8 m6 q& A; o7 U

0 A8 M/ D  C* L4 o. B3 P; w) O% ]& }6 j2 h0 V9 Y
从抓包可以看出,VM1的数据包经过虚拟交换机后被封装为vni为3709754的vxlan数据包,与流表的动作集一致。

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
 楼主| 发表于 2019-9-12 11:17:34 | 显示全部楼层
下面给出了常见的匹配字段和动作,供参考。Match field说明in_portSwitch input portdl_dstEthernet destination addressdl_srcEthernet source addressdl_vlanVLAN idnw_srcIPv4 source addressnw_dstIPv4 destination addresstcp_srcTCP source porttcp_dstTCP destination portudp_srcUDP source portudp_dstUDP destination portAction动作resubmit跳转表drop丢弃load:$local_vlan->NXM_NX_REG0[0..11]local_vlan放在寄存器里CONTROLLER上送控制器mod_vlan_pcp修改vlanpcpmove将报文的dst设置为srcmod_dl_src修改目的macload设置某个报文头部的值output从指定端口发出IN_PORT从入端口发出set_tun_id设置vni
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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