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

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

[复制链接]

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
发表于 2019-9-12 11:13:52 | 显示全部楼层 |阅读模式
一、必须掌握的基础知识
8 j+ Q, b6 p1 ]  v  C1、具备看懂流表的能力
) m; V2 N' N  Z% j# U0 B8 DOpenFlow流表是常用的SDN云数据中心转发依据。要搞明白控制转发机制,首先就得具备读懂流表的能力。流表由很多个流表项组成,每个流表项就是一个转发规则。每个流表项由匹配字段、优先级、计数器、指令、超时、cookie这六部分组成。流表项中关键的两个内容是匹配字段和指令。匹配字段包括inport、报文的12元组信息等。指令是用来描述OpenFlow的处理方式,修改数据包的行动集或触发流表的流水线处理。流表的匹配原则是“table0—table255”,优先从table0开始匹配。同一table内部按照优先级匹配,优先级高优先匹配。需要特殊说明一下,不同商业解决方案的流表格式存在一定差异性,但是本质上都是一致的。抓住流表的六要素和流表匹配原则,就能读懂并理解不同厂家的流表。
* A! Z3 `2 b, Z! d+ {! \' x8 N' C) a6 R6 S& [9 L: Z' V
以某商业解决方案的两个流表项为例,说明下流表的含义:% u9 T# m7 C8 f6 {* V# u
( Q0 U% ~% i5 ]
Java
1 H( R6 `! q- g: b# j2 Y, x
1 l$ i# }. K1 x0 X( W' Lcookie=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& G6 y1 h) E& o
19 g6 E/ \& F, I% g; s
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
: y( y( Z' s1 K. P% A7 w. \这是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端口转发数据包”。7 S, Z. D, c, ~5 }6 y3 S

2 K! L& o& W# }( R; n' gJava* s# x! ^. \; w7 O

5 z! e" |2 h  A- E5 Lcookie=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
+ d5 t! H, I% @7 z3 M3 h, W! O- H& y1! @, Z( t8 z& A8 {+ u% X) @' x
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. z( d0 A% T+ ?) S
这是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端口转发数据包”。7 Z9 I2 X+ f# o  t" B

. B$ H- w  g0 G下面给出了常见的匹配字段和动作,供参考。
8 z8 C! ~+ X" B6 |6 i( B# r& t  a/ U5 i# e6 \3 d' S
Match field
& t1 r8 n1 H* }9 s; a
+ l  y, I3 i0 U4 U4 y说明1 t/ V% G! k& N; f+ ?( K
) t5 l- J6 F3 A7 z& _
in_port
6 F! h8 U$ L9 A, ?; |6 @: U2 ^9 U* J
Switch input port
# m1 r, I4 Y4 D" z; p* D) T6 M6 E' H
dl_dst% ?. V5 K* T( `0 k  n

% l) w- U7 a: y, M4 S7 ZEthernet destination address
2 c3 q. j' @$ e% q
: m' ~7 O0 ]  ^* Udl_src# ?* R& ]3 H4 ]
2 O; ~4 S: c& y+ U! [1 g8 L* c
Ethernet source address& U* y' f# |; {) F0 y! H
8 Y/ N2 |1 b; L
dl_vlan
/ W  M( _2 l/ W1 h& w2 a, l$ R4 ]9 B( u2 ^
VLAN id
& b: G7 R6 J/ J
+ h( p0 g" k9 z$ `nw_src
) M7 U  D- v+ c% g
4 @, {8 Z) f9 ]) _" r9 o* }IPv4 source address
* W% D+ f' |6 B; k2 e( o
5 f2 W( X& i5 w3 Jnw_dst
3 P2 r. i0 P& B' p. L
) i/ p6 U/ G! jIPv4 destination address, E' I8 i( q7 v6 F

; I: g7 }! w2 Y# s: Btcp_src
5 C6 ^- ^8 g" v. _
: V+ A! q0 Y6 E. mTCP source port2 E0 ]# j5 d/ g& h

5 g9 g& v, X9 p  c# _% Jtcp_dst: j. |# {7 _- C: U
9 X% h' t. M# |- `7 M9 V3 S, z5 [
TCP destination port, g! o6 Y: B1 |: \, A! C$ E
) D" M( o9 A6 \+ i' M  g
udp_src
# A+ P5 C" H/ f+ s$ d7 f7 x% a& P1 \) [, \, a6 a4 M3 \8 ~
UDP source port
- k" `2 l% {* m" {; V( O5 i, H$ k4 b% q- z; u) V- ~6 G
udp_dst
1 D& R+ t6 ^$ V3 `9 P9 F, i& c8 w4 V1 y3 U# E$ k* j
UDP destination port
6 I3 y* V% H+ K) T2 H/ O
% S. Q; C  {1 [1 Q1 AAction
0 R( d3 E* R0 _5 s& c- M5 |3 p! s5 _4 \# i
动作1 O. D& [7 x9 }& i% m
7 |: C2 N# W  ?3 W
resubmit4 G  u, x) \* U( |7 A5 ~
6 }3 b% c$ d: L1 l
跳转表) T6 x; W0 X1 J  h5 m6 ^
. ^1 n3 q4 l0 F  V, m. |# Z' L% f* Q7 o
drop4 X4 q/ y! X9 W, s2 t

( f; M$ l5 q# P( G+ s! o丢弃% m" k$ S, Z7 _

  p3 D9 S7 [' P8 f# Y. C/ Oload:$local_vlan->NXM_NX_REG0[0..11]
6 ^1 w1 P: B8 f. p
2 O. g$ D9 f( J+ M3 w$ flocal_vlan放在寄存器里) j. P2 x0 y1 |+ w1 Y
  u2 d( E" f; R8 M' E/ R6 w
CONTROLLER
5 h' m& ?3 d& y9 d6 ~8 E  A
# {7 Q3 j- t+ y# l1 s" o1 O上送控制器
; t0 M) Y1 Z+ `8 o8 u* W5 o7 s0 m5 L0 }" ^
mod_vlan_pcp8 R/ N. R; z4 Q" H5 a
  N* V, {5 Z( E0 \
修改vlanpcp/ [3 O; n) N" }8 S/ K

6 a9 }# w  i: H: Vmove
" |: U0 i2 R7 ^; z# @0 E/ M" Y
; t/ Q1 _1 V; r4 G8 K将报文的dst设置为src* C  X( \2 @4 ~+ i# i
" g+ ~2 V1 A4 E+ Q' B; A) S
mod_dl_src7 ^/ |4 L( g9 b- F& F7 a$ E
9 Z/ o1 R* V6 J! M
修改目的mac
- j! O& K5 c! \- o" U- z
3 _8 U7 M  O, N. K0 i/ @load
/ W% ^3 U% o9 K: p9 i+ o0 m
* P3 y# E8 Z( A! {8 i* O% }设置某个报文头部的值
2 O3 z; [9 p4 D0 H0 a; z
" @- e1 N. a, G8 \2 moutput; ^; ^2 `) q( X. ~
* g' J) P1 I5 _
从指定端口发出
' A) u& W0 N; e/ l3 ?  c
$ I( Q8 e5 S) K; WIN_PORT
' \# J% }1 b, q. c+ _1 J
, d3 }7 m* X. @. t从入端口发出
3 ~+ l2 f! Y; A* [: [4 ?4 W: W$ ~2 \, j
set_tun_id
1 i, ^, K: _# g5 U+ {7 V  e7 G, v" @" [, K! P" O
设置vni+ l$ Y' n$ R* o. y" O4 u2 f
, x0 N' ^5 H2 y- r
2、具备看懂vxlan数据包的能力
6 d9 q8 H- a: N2 P4 f在网络运维中,常常会用到wireshark软件进行数据包的抓取和分析,从而进一步分析网络转发平面的运作机制。在SDN云数据中心的数据平面会用到vxlan隧道封装技术,因此需要了解vxlan的数据封装格式,并能够通过抓取的vxlan数据包进行网络分析。
& S. F" u6 H, I# j+ K9 \0 n
7 @* ^* c& {  G$ @以下是wireshark的一个vlan数据包示例。这是一个ICMP(ping)数据包。Ethernet 是以太网封装,src为源mac地址,dst为目的mac地址。Internet是IP层封装,src是源IP地址,dst是目的IP。
7 w7 a* k8 R$ _; f4 e; _9 {' W3 ]' y3 K0 J9 O% c/ `5 A6 e
我们来看一个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.
8 m& J! Z7 ~4 c3 P
. i6 `' k0 G" O( n. {6 O2 u  ~" o) D
2 Y  ?/ d: d' q$ y* n  Z4 j( G二、控制和转发的联动分析, G8 f2 f8 w& u7 s: E
物理服务器上的虚拟交换机是SDN云数据中心较为常用的网络设备。需要特殊说明一下,在不同商业解决方案中,流表内容和用户流量/vxlan映射关系存在一定差异性。下面以一个商用虚拟交换机的流表和数据包为例,抛砖引玉,分析vpc产品的技术实现。! K/ F7 C  h$ W) d" P! ~
5 p9 u% S5 ?) f/ l# P8 z9 [
1、同子网虚拟机的流量互访:1 X" e! W+ d1 Q$ ^

: X5 T' Y2 w" r9 E, J; \( i(1)控制平面:分别查看PM1和PM2虚拟交换机的流表。
- k1 ?# ?$ G, BPM1的虚拟交换机有如下流表:, b) Q1 E8 X9 A: R8 v) w5 `
) K" {. ^( ]6 L; r2 s* F( a$ r
Java2 G* h) |7 A9 u& n
0 S; |2 x; f$ y1 F: E
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! _/ f- v$ s( K7 I
13 }* I$ r2 `1 C. a1 u3 S
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$ V) J% d9 p' G" r0 C
这条流表的含义是:流表的匹配字段是“数据包来自虚拟交换机的端口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转发出去”。
4 A0 t+ [9 e! x7 w2 \" o8 W
7 x# {( X: }- @1 I$ i5 EPM2的虚拟交换机有如下流表:) l% l( ]9 ?& X2 K) Q4 w# N
: _6 {8 D% e+ ?4 H4 _/ m
Java
( n) ~: e: d& {  w8 }6 p9 R1 w% `
/ W5 O; {+ r. }  b" vskb_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:53 O" f2 r" S6 l( K3 z
1
4 Y- M% {  K% T$ T" yskb_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, o- L8 L; r1 z1 e$ ?
这条流表的含义是: 流表的匹配字段是“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转发出去”。
7 o# P1 ~% [8 J& h(2)转发平面:分别在PM1和PM2上OVS的tap1和bond1口进行抓包分析,分析“数据包经过虚拟交换机后做了哪些变化”。' ]: R' v# E! t' K3 }  h. o
PM1的tap1的数据包格式如下,是vlan格式:
& M+ V( Q8 H. m9 r2 o; G& |. K1 U  E: u: r, \& }  H
PM1的bond1的数据包格式如下,是vxlan格式:
( ~& L  E' t3 f! S9 J! \2 a# \5 S6 z( D6 c/ D! X. H) s
PM2的bond1的数据包格式如下,是vxlan格式:) u" R! g& l8 p( [

7 f4 Q, D; c& [$ ^  APM2的tap1的数据包格式如下,是vlan格式:! p) J+ a. @# P; o# O& ], s. u

& |8 }8 A) D8 F" y8 k: j# a- e# h$ Q通过对上面四个节点的数据包分析,可以得到:PM1的虚拟交换机对来自VM1的数据包进行了vxlan隧道封装,VNI标识是3257333。在underlay交换机上,基于vxlan 的隧道IP地址完成数据包的转发,对隧道里面封装的VM数据包内容处于无感知状态。PM2的虚拟交换机则是相应的完成的vxlan数据包的解封装过程,并将数据包送至VM2。
5 W3 h2 n4 [0 y/ D* A" f
3 _% `: _/ Y. N# H3 @: T# w  l& ?: e2、跨子网虚拟机的流量互访
7 f+ ]; f1 G3 @3 w2 {跨子网通信的控制转发联动原理,与同子网场景下的是一致的,只是在流表内容上有一定差异性。跨子网的流量交互涉及到网关联动处理,存在原始数据包的MAC地址转化,同时vxlan隧道封装的VNI也会不同。以PM1的发送端为例,分析如下。! _' z; i% N! h! _1 V
& R/ v$ R2 X% P, z1 s% n( s
PM1上的流表:
! u. k" d  B0 f7 t8 U; u$ n4 `
& `! c5 y2 `% Z4 C0 m3 ~Java" \% }; l3 S* g- ?: u, M

0 @: M, |  Q) f6 z- ]) iskb_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  B2 H* U' G( @- C
1% z4 H; S% U& |; \- N
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
$ d6 p3 L9 L0 A! V' 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转发出去”。8 W! r2 W: f% [6 B0 _

7 a4 V& b# T. I% j* C! zPM1上bond1的数据包:+ N( g" M0 g! k! X

+ _  ~! u1 l1 v- v+ |+ d从抓包可以看出,VM1的数据包经过虚拟交换机后被封装为vni为3709754的vxlan数据包,与流表的动作集一致。

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
 楼主| 发表于 2019-9-12 11:15:43 | 显示全部楼层
一、必须掌握的基础知识
$ w# @# w: P0 j; y! B4 H1 y/ r
. X% n% y( M5 L6 z& q3 G- N7 A1、具备看懂流表的能力
4 @; E$ J7 a$ s: Q5 d4 r' X2 P9 k% i. [# d+ Z
OpenFlow流表是常用的SDN云数据中心转发依据。要搞明白控制转发机制,首先就得具备读懂流表的能力。流表由很多个流表项组成,每个流表项就是一个转发规则。每个流表项由匹配字段、优先级、计数器、指令、超时、cookie这六部分组成。流表项中关键的两个内容是匹配字段和指令。匹配字段包括inport、报文的12元组信息等。指令是用来描述OpenFlow的处理方式,修改数据包的行动集或触发流表的流水线处理。流表的匹配原则是“table0—table255”,优先从table0开始匹配。同一table内部按照优先级匹配,优先级高优先匹配。需要特殊说明一下,不同商业解决方案的流表格式存在一定差异性,但是本质上都是一致的。抓住流表的六要素和流表匹配原则,就能读懂并理解不同厂家的流表。以某商业解决方案的两个流表项为例,说明下流表的含义:8 Q9 K. n- H6 B% T  u

, K/ ]8 q* n- X# fcookie=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 + o6 z' B1 |  f! ]/ m- _
这是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端口转发数据包”。" e& [) G" w! c
8 g5 f' X2 f) A5 m% S
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
6 j( Y5 R: ^5 \/ V9 s7 @7 y% Q  Q5 m这是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端口转发数据包”。下面给出了常见的匹配字段和动作,供参考。4 o, F4 s8 }5 [+ C+ H! u
$ A8 O3 L6 m( z2 h1 w

$ H& u" M8 Y: A' i; y3 e. b2 W$ l& {; f
2 v9 E6 J, _! ]3 v3 i

; l$ K9 W/ P+ t5 ^  E# k( ^+ V2、具备看懂vxlan数据包的能力) E5 X6 o* Z4 y  |6 ?
4 _& m3 A. k3 C, x. G1 E
在网络运维中,常常会用到wireshark软件进行数据包的抓取和分析,从而进一步分析网络转发平面的运作机制。在SDN云数据中心的数据平面会用到vxlan隧道封装技术,因此需要了解vxlan的数据封装格式,并能够通过抓取的vxlan数据包进行网络分析。以下是wireshark的一个vlan数据包示例。这是一个ICMP(ping)数据包。Ethernet 是以太网封装,src为源mac地址,dst为目的mac地址。Internet是IP层封装,src是源IP地址,dst是目的IP。. D! Q# b9 Z' m% l1 d

+ z2 B, [" m9 w: H3 i' i5 E% J+ K3 k
我们来看一个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.: U# f- n' a: u" M9 L* W) A2 m
6 z5 Q' r. X# I/ R: T, K& d& Q$ [+ G

2 ?4 x3 O1 n, z" l' L, M+ W1 O二、控制和转发的联动分析/ q! C: X( P' d  C* @9 |. W
7 Q! ]- E- Q7 h( F
物理服务器上的虚拟交换机是SDN云数据中心较为常用的网络设备。需要特殊说明一下,在不同商业解决方案中,流表内容和用户流量/vxlan映射关系存在一定差异性。下面以一个商用虚拟交换机的流表和数据包为例,抛砖引玉,分析vpc产品的技术实现。1、同子网虚拟机的流量互访:
" l4 G& X+ P3 ~
! a$ x+ O+ l8 a! l2 i: T( S& ^" T5 b; N% P5 P9 V+ b9 M) D( u
(1)控制平面:分别查看PM1和PM2虚拟交换机的流表。
, e$ F# j9 F# F" p; M8 g1 ^+ Y) V& E/ e' K& Q
PM1的虚拟交换机有如下流表:- C8 ?. e$ E9 |% d* m
% ?$ q* G0 b) V0 ~- i
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
7 C. \4 D2 t  z. l  }这条流表的含义是:流表的匹配字段是“数据包来自虚拟交换机的端口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的虚拟交换机有如下流表:
" `4 o* F. g- ~  B5 N
# j8 H' I- l, C6 @: Tskb_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
# _1 M: p! {. S4 ~- h- C这条流表的含义是: 流表的匹配字段是“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转发出去”。0 o) f3 o% K: d

, ?! n/ j2 U" u6 I. R  I(2)转发平面:分别在PM1和PM2上OVS的tap1和bond1口进行抓包分析,分析“数据包经过虚拟交换机后做了哪些变化”。
5 |# S! y- f3 }. V: f3 S% k/ L0 M  o4 c; z/ N# s! l
PM1的tap1的数据包格式如下,是vlan格式:8 [$ ?, V. I+ N8 x- R$ i9 n

# M& G+ h: S) [4 `1 P6 b. o$ H
" P/ m. G# x6 Q" j2 D4 v* KPM1的bond1的数据包格式如下,是vxlan格式:
# F" {. X4 W. W% ]2 ]' r! x& U$ u  Q& A* o: P/ v
2 p& k; [/ [  Q6 h" F7 l( @
PM2的bond1的数据包格式如下,是vxlan格式:- s8 Y2 i" j1 z/ _) c8 q8 C
4 k# ~7 n8 `. Y7 g; r$ l6 ^
1 U4 I+ f; |; Y. ]
PM2的tap1的数据包格式如下,是vlan格式:
" H( I. C3 `: V. z7 ~9 f( p( W' ^  p& H. A

2 f1 s4 @3 [1 V- R1 i通过对上面四个节点的数据包分析,可以得到:PM1的虚拟交换机对来自VM1的数据包进行了vxlan隧道封装,VNI标识是3257333。在underlay交换机上,基于vxlan 的隧道IP地址完成数据包的转发,对隧道里面封装的VM数据包内容处于无感知状态。PM2的虚拟交换机则是相应的完成的vxlan数据包的解封装过程,并将数据包送至VM2。2、跨子网虚拟机的流量互访, E/ k. k& `/ y' x" x5 y! n

& \9 u" C  A( f1 J- T跨子网通信的控制转发联动原理,与同子网场景下的是一致的,只是在流表内容上有一定差异性。跨子网的流量交互涉及到网关联动处理,存在原始数据包的MAC地址转化,同时vxlan隧道封装的VNI也会不同。以PM1的发送端为例,分析如下。
5 q9 e, `! t1 z" g7 D4 e; L
$ U/ @8 C- S5 S9 O# `# @PM1上的流表:
% ]( `9 k' }" Q6 ^9 p* m) B' C8 {/ j8 _
' T- z$ m1 h3 p8 dskb_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
0 U! B7 s% _1 V: D! y* {( a/ N# J这条流表的含义是: 流表的匹配字段是“数据包来自虚拟交换机的端口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的数据包:
" s/ N  T5 Z$ `1 |* ]$ Q
9 l! x1 ^0 G8 R; ?7 u
7 G7 `. L, i  k# d" {从抓包可以看出,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 00:01 , Processed in 0.014769 second(s), 22 queries .

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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