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

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

[复制链接]

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
发表于 2019-9-12 11:13:52 | 显示全部楼层 |阅读模式
一、必须掌握的基础知识
# q# @$ R' c/ \# M" g. ^# ?1、具备看懂流表的能力
3 g! U: f& ~# k# t5 aOpenFlow流表是常用的SDN云数据中心转发依据。要搞明白控制转发机制,首先就得具备读懂流表的能力。流表由很多个流表项组成,每个流表项就是一个转发规则。每个流表项由匹配字段、优先级、计数器、指令、超时、cookie这六部分组成。流表项中关键的两个内容是匹配字段和指令。匹配字段包括inport、报文的12元组信息等。指令是用来描述OpenFlow的处理方式,修改数据包的行动集或触发流表的流水线处理。流表的匹配原则是“table0—table255”,优先从table0开始匹配。同一table内部按照优先级匹配,优先级高优先匹配。需要特殊说明一下,不同商业解决方案的流表格式存在一定差异性,但是本质上都是一致的。抓住流表的六要素和流表匹配原则,就能读懂并理解不同厂家的流表。
* P3 Z. d' g% {9 q  }
% S$ R# p$ j* _1 z/ C以某商业解决方案的两个流表项为例,说明下流表的含义:
( _" d, y6 w. y: v8 X. Q8 R/ d  {( U
" }* {2 {+ `+ o2 f, t+ u- u' ]Java% r0 h# i6 m* L/ f

4 `- N. H6 z& x+ {0 z# w" t; wcookie=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
+ D7 _- q9 y" d$ L' f1( D5 N/ i' ]: e' V
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" ?9 l" p& r. E/ n1 {, d. t
这是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端口转发数据包”。
* O! {  a8 l$ I% n$ h! C5 Z( Z: G" k% A% D3 R- {& w  w
Java
' V9 X! \. q1 X) u+ T3 x' \' F5 S  R3 z' a4 `5 l
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, ]8 o( E+ \% D( D! f( K9 k
1; k6 W" K' N& s; P# ^8 T6 J
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
- b! V+ D( n/ M& t# S: e) z这是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端口转发数据包”。
- N$ S* Q7 R0 ]6 h5 ^! f+ W5 E7 t  X* t3 e
下面给出了常见的匹配字段和动作,供参考。3 \3 \% e( i9 E2 l

" ^" W9 }/ X7 L: \, d, {Match field
& Z. L% \4 W1 q2 r8 I( x4 Z9 M
; e1 X0 x; b3 q7 O' x0 _6 h说明
5 r! C8 h, _& ~& L' J# Z' J6 d
+ k; @6 v; ^* l, f% D2 W7 Q$ l* pin_port
* D4 R$ k8 U. s  a- @
2 U! }& M4 {& V+ ^& bSwitch input port
7 N' D7 r# n: Y) F4 D
" S$ B0 X* e+ v% ]% bdl_dst8 Q9 }; c; _( p+ X

0 M5 p* I1 B2 r) Z1 w/ ?# W8 KEthernet destination address: m$ q( _9 C2 _# l2 B
& c. ?' ?1 T! [+ D! |
dl_src* ~& `# J/ n$ N4 a) z
+ V( @% Z: o- r' i
Ethernet source address5 N' W4 {( i* x0 C  G0 W( {8 e
$ c! P) }" G& E$ T' p( Y% U2 g  R$ ]5 c
dl_vlan
' Q/ ~* W# c" z6 B% n: {% C* H8 z; i
  ?! {4 c8 W6 h3 _8 P1 e0 FVLAN id0 R" g" R. K( j( j1 w( z

8 A5 F" e4 _. E* @9 L. L/ unw_src
& V* {, i- u) B) }  n+ w6 P* S" S* X8 z, {% Y- r; Q1 Y) b
IPv4 source address8 |+ o8 u* i5 ~

% ^6 g- N: ^6 u6 }5 V3 f( {4 ~nw_dst
/ C2 r, T  a1 m, O3 s# @2 m  O: B/ R
IPv4 destination address
; C: [8 b$ [; y" s
% V( {6 V' y5 P4 |$ Mtcp_src+ T) N, _  [2 d& D

$ }6 c& ~; s9 a8 }5 |! ?4 ]" Q' ]0 zTCP source port
1 e- _  _% R; J- V
# q% Y* _! g  S# b! K  Etcp_dst
9 Z! n) ~0 l3 l8 d
4 D/ I0 V4 w" N" q  \" u( HTCP destination port) u( L* m: O; t
  w! k' q% E& ]3 J. w+ ?, J! l
udp_src
; g# _$ x4 z1 A) T% [) g( N( E+ N  y7 T' P: W3 y+ b* q4 M
UDP source port
7 E0 `  L* f% L5 a$ t7 A" V- Y0 ~& u
udp_dst
' g1 X4 P8 B) F4 P* Q0 c  S- }! h& N/ H8 e
UDP destination port* Z8 E! F7 N4 o4 ]# `

6 x& }$ M! Y4 Q& K3 gAction
# L$ Y$ d- V. w1 B- u( j; L% A/ C+ e* H% r: R: ^* f3 P; J
动作, q' x" I4 c0 r- X- }2 l
/ u% s5 f, L" y5 z' E, |
resubmit
9 b- R4 h* E6 D; M/ G: s% ^' J6 k$ _2 F/ K# C
跳转表0 g, ~$ `& L, `6 E; x" D5 Z! C* s

3 g& w: L8 L: `/ i' k" Sdrop
1 T. R# p* ?/ p1 Q( l! T8 g$ P# \) J  F& v
丢弃. r) b( O, q1 o* K- ]  V

% [( M0 J9 T4 B# E7 h6 Pload:$local_vlan->NXM_NX_REG0[0..11]
9 s. w5 p1 p, S- e% ~" Y! e: p0 e0 D) w3 j7 M- w
local_vlan放在寄存器里
4 y) i! f2 w. o8 y4 O2 S' c$ F9 s8 O
CONTROLLER- A% K$ o' ?" u
% F& [. E4 D, ?" Y) B, e0 P
上送控制器. {8 y) ~5 Y' `9 b8 c* R

& F) o+ U* K0 z0 ~2 `& vmod_vlan_pcp" t. E% ^  G6 s9 _' W% |& C8 e& Q

: u( D0 m! e+ W. {1 z& s8 w修改vlanpcp
$ P+ j. _: R6 `# d( F. d* y+ H
  K9 ~( L9 K" \/ }& kmove2 o  T  ]+ Z& b6 ~# ]! y6 F! o
6 e& Q" \8 z$ L! H: a
将报文的dst设置为src( [) {1 k( `; _2 @/ G
7 h" n7 V% u6 J/ M" C& Z
mod_dl_src: a" F) I' Q) V$ L/ O

+ q. ~& Z) ~+ F$ j& G6 q. g# x修改目的mac
; z9 x! w: U$ e$ j3 J: S, G+ l: G" G6 f
load
" y) ]; Y3 x2 K4 @. M% N
8 t, k9 U. [9 L5 I设置某个报文头部的值
' X& h/ u, F9 i; e+ P# u8 Y5 I3 J5 N1 Z; m, ~
output5 S( ~' h( `1 G9 ~- r1 w

' I9 T2 ~; B: c( n% l# s" _1 ?从指定端口发出/ q3 J2 a0 R, `# @. \0 B" H' A

2 ~. ?. m* _  L; y7 P8 d: d, ^9 LIN_PORT& c( Y9 @3 P6 k6 W& C

" I. q+ m( `) l% t$ f7 x5 F从入端口发出7 h- r4 L6 H0 k2 L2 q

8 V( H6 p7 v  h8 R4 G' W. }set_tun_id
5 ?1 V) u1 d$ K7 ^2 z! {, m6 x- C, H' U" d
设置vni9 p  }7 v) A/ ]

5 u- L- C8 s2 T5 q8 v" }2、具备看懂vxlan数据包的能力: h* U: s  E4 ?
在网络运维中,常常会用到wireshark软件进行数据包的抓取和分析,从而进一步分析网络转发平面的运作机制。在SDN云数据中心的数据平面会用到vxlan隧道封装技术,因此需要了解vxlan的数据封装格式,并能够通过抓取的vxlan数据包进行网络分析。, p4 V6 Q4 g& h: \

0 @# q* e; z1 S1 n6 ?/ i以下是wireshark的一个vlan数据包示例。这是一个ICMP(ping)数据包。Ethernet 是以太网封装,src为源mac地址,dst为目的mac地址。Internet是IP层封装,src是源IP地址,dst是目的IP。: q8 V, i) l8 v
. n- x& [5 X8 g8 T( }
我们来看一个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.
& `5 I" C" I& F! J, `0 r% |3 H2 R' f

0 P2 z4 d% h( m$ m5 |. K二、控制和转发的联动分析2 a: y! p5 U5 |2 }  ?2 J
物理服务器上的虚拟交换机是SDN云数据中心较为常用的网络设备。需要特殊说明一下,在不同商业解决方案中,流表内容和用户流量/vxlan映射关系存在一定差异性。下面以一个商用虚拟交换机的流表和数据包为例,抛砖引玉,分析vpc产品的技术实现。" P9 V: G6 r: L, S$ B
8 Z( {1 C+ U( B6 I4 B
1、同子网虚拟机的流量互访:+ _0 ^* n3 z' Q. O! N* V

6 M# c+ ^- N9 q; p4 u(1)控制平面:分别查看PM1和PM2虚拟交换机的流表。- u. O  j1 M- n; w" _+ L  i+ M# Z
PM1的虚拟交换机有如下流表:9 i* e" x- e: F5 b
9 O5 b) \8 R' a# O5 j, m
Java
+ _, H) Y4 c) t* M" z! ?
! P  q. u8 F: m! c) h$ @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) {- s( M+ V% x$ \2 L
1
: r7 `0 o  m2 |: j/ m) a3 @" |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
9 ^! c9 L! j% O( \3 _3 [- {这条流表的含义是:流表的匹配字段是“数据包来自虚拟交换机的端口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转发出去”。
/ M; n# I2 D% N, ~8 C8 H; N( n
; R& X$ H5 Z: J, m. {PM2的虚拟交换机有如下流表:
1 U2 U3 m, T; l$ {$ q8 i) v0 \
6 Y* `! x/ _% d4 hJava1 A8 M( o$ O: @  M; Z3 K. e

( R* h1 Z* a4 I4 S4 Dskb_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
0 G, ?, n$ x7 z! U1
' L' _2 ]9 V+ l) |3 h  C1 Y6 |8 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:5# ?8 q  G1 F% v9 B
这条流表的含义是: 流表的匹配字段是“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转发出去”。4 o+ \+ u" T$ y2 E1 b  G4 d# A
(2)转发平面:分别在PM1和PM2上OVS的tap1和bond1口进行抓包分析,分析“数据包经过虚拟交换机后做了哪些变化”。
3 _7 a# p0 `4 T. J  w. h1 u0 x0 H1 RPM1的tap1的数据包格式如下,是vlan格式:
3 d2 }, X: M+ |
2 k( e+ y+ }% i5 fPM1的bond1的数据包格式如下,是vxlan格式:
" t# g# [' p9 E) u* A- V8 U0 o! p* R/ n  ^. \) ^; O' R# r9 C1 R3 h. d
PM2的bond1的数据包格式如下,是vxlan格式:
% f9 \5 M  A: R( P( n3 J1 m# u, `+ F+ f+ k% t! m7 X/ C
PM2的tap1的数据包格式如下,是vlan格式:+ e  U  ^8 X; e, f$ X$ b

7 B! B% |( T( I通过对上面四个节点的数据包分析,可以得到:PM1的虚拟交换机对来自VM1的数据包进行了vxlan隧道封装,VNI标识是3257333。在underlay交换机上,基于vxlan 的隧道IP地址完成数据包的转发,对隧道里面封装的VM数据包内容处于无感知状态。PM2的虚拟交换机则是相应的完成的vxlan数据包的解封装过程,并将数据包送至VM2。4 D. B" U2 W+ w3 n9 r

9 D* ~/ |8 h5 l/ e, F: M8 A1 q0 m2、跨子网虚拟机的流量互访
/ {/ c6 o" W; ]- W( C8 {跨子网通信的控制转发联动原理,与同子网场景下的是一致的,只是在流表内容上有一定差异性。跨子网的流量交互涉及到网关联动处理,存在原始数据包的MAC地址转化,同时vxlan隧道封装的VNI也会不同。以PM1的发送端为例,分析如下。% f" ]- m% G9 o1 |  i

# `5 K0 I+ U, h$ TPM1上的流表:
3 w& @( u. K9 g' D/ L9 y5 l& `7 L
3 X! z/ x/ {5 S* @! V- U6 oJava* L# r, @7 I$ n8 U; e
) m$ \7 o/ ^7 l
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
' u) [2 M) D9 Z2 u: D12 Z# k$ [" N  Z7 `: Q! r
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* q" U4 ~; n% j; b& [& h- K# r
这条流表的含义是: 流表的匹配字段是“数据包来自虚拟交换机的端口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转发出去”。
  E* C4 w, R' B0 z  @
4 A4 V  v, z2 cPM1上bond1的数据包:
4 Z/ F  ?- x) L, k% B3 j! |9 |* K+ k8 A0 X2 g. ^
从抓包可以看出,VM1的数据包经过虚拟交换机后被封装为vni为3709754的vxlan数据包,与流表的动作集一致。

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
 楼主| 发表于 2019-9-12 11:15:43 | 显示全部楼层
一、必须掌握的基础知识
8 g" c$ _, A9 e# i6 P. |% L2 P: ?" V5 o% K, D* q
1、具备看懂流表的能力+ W. V2 {! x5 E5 ?- A

( }+ s& k! D! {2 ^; V/ bOpenFlow流表是常用的SDN云数据中心转发依据。要搞明白控制转发机制,首先就得具备读懂流表的能力。流表由很多个流表项组成,每个流表项就是一个转发规则。每个流表项由匹配字段、优先级、计数器、指令、超时、cookie这六部分组成。流表项中关键的两个内容是匹配字段和指令。匹配字段包括inport、报文的12元组信息等。指令是用来描述OpenFlow的处理方式,修改数据包的行动集或触发流表的流水线处理。流表的匹配原则是“table0—table255”,优先从table0开始匹配。同一table内部按照优先级匹配,优先级高优先匹配。需要特殊说明一下,不同商业解决方案的流表格式存在一定差异性,但是本质上都是一致的。抓住流表的六要素和流表匹配原则,就能读懂并理解不同厂家的流表。以某商业解决方案的两个流表项为例,说明下流表的含义:
. f  Q( j1 P9 d- N; B( Z! d. I
1 H7 Q- \* z! v# ]# z# @5 L/ 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 2 B  J/ |) r0 ]* c7 @
这是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端口转发数据包”。1 c, Z, n4 a  F: O" Z+ v7 z

8 A/ @- c4 g, {2 Jcookie=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
' P7 f8 a, t- v0 b6 d  C5 P4 a这是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 G# K5 O6 p* b, M+ i8 Q; K5 Y

8 `$ z1 i" y6 |1 `
% B' t, C  h. z  U+ _* f2 P' N2 g6 Y' E5 g* O% s7 C3 Y2 }4 U4 o; d2 p

# z4 K6 _) h7 a# E2、具备看懂vxlan数据包的能力
& r3 K6 ^$ [% _4 K- K/ }7 v, |
8 z' S6 l1 ^: g. J& H' o在网络运维中,常常会用到wireshark软件进行数据包的抓取和分析,从而进一步分析网络转发平面的运作机制。在SDN云数据中心的数据平面会用到vxlan隧道封装技术,因此需要了解vxlan的数据封装格式,并能够通过抓取的vxlan数据包进行网络分析。以下是wireshark的一个vlan数据包示例。这是一个ICMP(ping)数据包。Ethernet 是以太网封装,src为源mac地址,dst为目的mac地址。Internet是IP层封装,src是源IP地址,dst是目的IP。; R3 x, n: ]# D5 p' l; Z
% ^4 g; v) J" h5 F9 m! F" \
; B2 c; C- J& N9 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.
; q* \- J# M3 f! A! S  Q
; X7 _8 n4 o0 j: U7 j! M1 a) p' ?5 I* D
二、控制和转发的联动分析! h. d; R" Q" [1 ]

; W4 }, F- ^' ]4 h; Q. J. u5 q物理服务器上的虚拟交换机是SDN云数据中心较为常用的网络设备。需要特殊说明一下,在不同商业解决方案中,流表内容和用户流量/vxlan映射关系存在一定差异性。下面以一个商用虚拟交换机的流表和数据包为例,抛砖引玉,分析vpc产品的技术实现。1、同子网虚拟机的流量互访:' ~# h! U$ I& C. V& _# F

9 X, Q. R; |  U; m6 B" k, e. e; |/ |( b0 i3 w  V
(1)控制平面:分别查看PM1和PM2虚拟交换机的流表。
) Q  u0 G7 j% K0 x# D( O5 m2 o$ @! I, A& K! P
PM1的虚拟交换机有如下流表:# W) Y1 U3 `6 f3 D7 Q

, W* K- G7 W' B5 p: zskb_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 ' Q! F$ H' e6 k( ]8 r: S
这条流表的含义是:流表的匹配字段是“数据包来自虚拟交换机的端口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的虚拟交换机有如下流表:8 P; t. q5 e0 P. S! M
; P' |& Y3 D' P; D% Z7 q2 _
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 - C0 Y$ ]7 }4 A+ n- d7 R
这条流表的含义是: 流表的匹配字段是“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转发出去”。% ^+ ^  T  u6 s/ |

% F) {9 N; Q! H5 e(2)转发平面:分别在PM1和PM2上OVS的tap1和bond1口进行抓包分析,分析“数据包经过虚拟交换机后做了哪些变化”。
1 D  y. O0 t2 I; P6 O1 X7 f/ d
: ]' x* p9 J& c8 x' v* ^8 LPM1的tap1的数据包格式如下,是vlan格式:! u. L, n6 J3 A
; q' q; T2 `+ v% |- ], g; ^% G
. c/ e, z. U2 S) C1 T
PM1的bond1的数据包格式如下,是vxlan格式:* d  K9 S7 m; O6 f7 U" B

) Q7 I% d& M8 d8 |1 @3 G6 r6 Q
) f9 ]4 G+ S* ^8 K0 Q+ DPM2的bond1的数据包格式如下,是vxlan格式:; }& l, V* T8 N, C5 {

4 J7 k/ Z9 b0 V% e- S) v( j2 i7 w4 F/ ~8 l  t
PM2的tap1的数据包格式如下,是vlan格式:$ J2 a0 J! L' @3 S. ~3 J" f$ [
, A8 }8 Q7 ?/ n9 `9 D5 @6 m+ c
4 K/ M7 D: v, `4 Q
通过对上面四个节点的数据包分析,可以得到:PM1的虚拟交换机对来自VM1的数据包进行了vxlan隧道封装,VNI标识是3257333。在underlay交换机上,基于vxlan 的隧道IP地址完成数据包的转发,对隧道里面封装的VM数据包内容处于无感知状态。PM2的虚拟交换机则是相应的完成的vxlan数据包的解封装过程,并将数据包送至VM2。2、跨子网虚拟机的流量互访0 o9 S7 ?; t' a
3 ~% B: j5 q$ u) t  i+ F$ v+ ?
跨子网通信的控制转发联动原理,与同子网场景下的是一致的,只是在流表内容上有一定差异性。跨子网的流量交互涉及到网关联动处理,存在原始数据包的MAC地址转化,同时vxlan隧道封装的VNI也会不同。以PM1的发送端为例,分析如下。+ A2 Z* r! U1 |) Z6 C+ q% Z( Z

7 o: I# U3 J# q& t/ |PM1上的流表:1 G( u" g+ x7 T, U8 U
& O5 M; ]; l& C% x: S
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
- @! @! U( ]% |; B& ~6 |4 t这条流表的含义是: 流表的匹配字段是“数据包来自虚拟交换机的端口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的数据包:
: b. O) ~# {7 |: T" Z! q+ T" b, C" G+ h
. m# m5 U; F+ _* n" d9 K
从抓包可以看出,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:03 , Processed in 0.024484 second(s), 22 queries .

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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