封装格式
#1. 封装格式
支持VXLAN或ERSPAN隧道封装,建议优先选择ERSPAN隧道封装。支持可选的内层VLAN封装,用于简化隧道对端汇聚设备或TAP交换机的配置。隧道封装格式和携带信息如下图所示:

分发流量封装格式
#2. 流量标签
支持流量标签和方向标签。流量标签通常用于区分不同VPC或不同业务的流量;方向标签通常用于分辨流量相对采集点的方向,也可用于区分客户端、服务端。
若分发策略中,采集点为服务端,那么流量接收方可根据方向标签来判断源IP或目的IP的类型:
- 方向标签=0:相对采集点的Ingress方向,即采集点为目的IP,因此目的IP为服务端IP
- 方向标签=1:相对采集点的Egress方向,即采集点为源IP,因此源IP为服务端IP

分发流量方向标签
#3. 流量解封装参考
#3.1 内层VLAN封装
VLAN头部格式参考Wikipedia (opens new window)。
当接收端TAP交换机或分流设备仅有隧道解析能力,无法根据隧道头部设置正确的VLAN及PCP标签时,DeepFlow采集器可设置为在原始包以太头后部插入VLAN标签。DeepFlow采集器使用的标记字段包括:
- 使用VID记录流量标签
- 采集器配置
内层附加头为802.1Q, 插入一个VLAN标签VID使用流量标签的低12比特 - 采集器配置
内层附加头为QinQ, 插入两个VLAN标签VID分别使用流量标签的高12比特和低12比特
- 采集器配置
- 使用PCP记录流量采集的位置,也可理解为在采集点观测到的流量方向
- PCP最高位永远为1
- PCP最低位与方向标签的含义一致

VLAN包格式
VLAN样包下载(请右键另存文件,或在浏览器新标签页中打开链接)
是否携带内层VLAN头是可配置的,默认不携带内层VLAN, 在系统-采集器-配置中修改包分发配置参数-内层附加头为802.1Q可开启内层VLAN封装。
#3.2 VXLAN封装
VXLAN隧道封装格式参考RFC 7348 (opens new window)。
DeepFlow采集器使用的标记字段包括:
- 设置Flags为0xff来区分于业务网络的VXLAN流量
- 使用Flags之后的24 bit预留位(下图的
Group Policy ID)记录序列号,辅助接收端判断隧道丢包 - 使用24 bit VNI(VXLAN Network Identifier)字段记录流量标签
- 使用VNI之后的一个保留字节的最低比特记录方向标签

VXLAN包格式
VXLAN样包下载(请右键另存文件,或在浏览器新标签页中打开链接)
#3.3 ERSPAN封装
GRE头部格式参考RFC 2890 (opens new window)。ERSPAN头部格式参考IETF ERSPAN Draft 03 (opens new window)。
DeepFlow采集器使用的标记字段包括:
- 使用32 bit的GRE Key字段记录流量标签
- 使用32 bit的GRE Sequence Number字段记录序列号字段,辅助接收端判断隧道丢包
- 使用10 bit的ERSPAN SpanID字段记录流量标签的低10比特,当接收端无法解析GRE Key时刻使用此字段
- 使用48 bit的ERSPAN Timestamp + SGT(Security Group Tag)记录纳秒时间戳的高48比特
- 使用1 bit的ERSPAN Direction字段记录方向标签

ERSPAN包格式
ERSPAN样包下载(请右键另存文件,或在浏览器新标签页中打开链接)
#3.4 ZMQ-NPB 封装
分发流量使用 ZMQ 协议发送,ZMQ Payload 包括 DeepFlow NPB Header 以及匹配到分发策略的原始包。DeepFlow NPB Header 具体封装格式如下:
0 128
+------------+----------------------------------------------------------+-----------------+
| ZMQ Header | DeepFlow NPB Header | Original Packet |
+------------+----------------------------------------------------------+-----------------+
/
+--------------------
|
DeepFlow NPB Header:
0 16 24 32 64 128
+--------------+---------+-------+-------------+-----------+
| Total Length | Version | Flags | Service Tag | Timestamp |
| 16b | 8b | 8b | 32b | 64b |
+--------------+---------+-------+-------------+-----------+
/
+------------------------
|
Flags Bitmap:
0 1 2 3 4 5 6 7
+-------------+-+
| Reserved |D|
+-------------+-+
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
DeepFlow NPB Header 字段含义如下(所有字段使用网络字节序传输):
- Total Length:16 bit,DeepFlow NPB Header 及 Original Packet 的总长度
- Version:8 bit,目前固定为 1
- Flags: 8 bit,目前仅使用了一个比特
D (Direction),用于标识方向- 1:分发流量和分发策略同向
- 0:分发流量和分发策略反向
- Service Tag:32 bit,流量服务标签,由流量匹配的分发策略决定
- Timestamp: 64 bit,deepflow-agent 采集到 Original Packet 时的 Unix Epoch 时间戳,单位为 ns
#3.5 TCP-NPB 封装
分发流量使用 TCP 协议发送,内容包括 DeepFlow NPB Header 以及匹配到分发策略的原始包。
0 128
+------------+----------------------------------------------------------+-----------------+
| TCP Header | DeepFlow NPB Header | Original Packet |
+------------+----------------------------------------------------------+-----------------+
2
3
4
#4. 最佳实践
#4.1 利用内层VLAN封装简化TAP设备配置
当客户已有具备VXLAN或ERSPAN隧道解封装能力的TAP设备时,采集器可发送流量至TAP设备,再由TAP设备将流量分发给其他分析工具。这种情况下推荐打开内层VLAN封装,使得分发流量中同时携带外层隧道封装和内层VLAN封装。此时TAP设备上可直接配置一条对所有隧道封装流量的解封装策略,无需对流量做任何额外的标记操作即可直接转发给后端分析工具。分析工具通过VLAN头中的ID识别分发的云网流量。
#4.2 利用ERSPAN封装提升性能分析工具精准度
若采集器和分析工具之间需要经过复杂的交换机、路由器甚至防火墙,此时路径中的多网元、网元上的多接口、接口内的多个转发队列都有可能会导致分发流量在传输过程中出现不一致的时延、抖动、甚至乱序。这种场景下推荐使用ERSPAN封装,DeepFlow采集器将会在ERSPAN头部中记录流量在采集位置出现时的高精度时间戳,分析工具可利用该时间戳精准还原报文原始时间,由此计算更加精确的网络性能指标数据。