第128篇:NetStream/sFlow 流量采样与监控

关键词:NetStream、sFlow、流量采样、NetFlow、IPFIX、流量分析、安全审计、华为 NetStream


一、引言

SNMP 可以采集接口的总流量(入方向/出方向字节数),但无法回答"流量是谁发的、发了什么、发给谁"。要深入了解网络流量的构成,需要流量采样技术。

NetStream(华为)、NetFlow(Cisco)和 sFlow(InterDomain)是三大主流流量采样协议。它们通过分析流经交换机的数据流,为流量基线分析、安全审计(DDoS 攻击溯源)、容量规划和性能优化提供数据支撑。

二、核心概念

2.1 流量采样技术对比

特性 NetFlow v9 / IPFIX sFlow NetStream(华为)
厂商/标准 Cisco 发起 / IETF 标准(RFC 5101) InterDomain 华为(兼容 NetFlow v9)
采样方式 流汇总(Full Flow 或采样) 报文随机采样 + 计数器 流汇总 / 报文采样
粒度 每条流生成一条记录 每个采样报文生成一条记录 可配置(流或报文级)
开销 低(流汇总,同流只记录一次) 中(每采样报文导出头部) 低~中
精度 高(Full Flow 100% 精确) 中(统计估算,采样率影响精度) 高
报文头导出 不导出报文头 导出报文头部(默认前 128 字节) 可选导出报文头
适用场景 流量分析、安全审计、计费 高速接口(40G/100G)监控 华为设备生态

2.2 流的定义

"流"(Flow)是具有相同特征的一组报文。NetStream 使用"五元组"定义一条流:

字段 说明
源 IP 地址 报文源 IP
目的 IP 地址 报文目的 IP
源端口 TCP/UDP 源端口(ICMP 为类型+代码)
目的端口 TCP/UDP 目的端口
协议类型 IP 协议号(6=TCP, 17=UDP, 1=ICMP)

可选扩展字段:

扩展字段 说明
源/目的 MAC 地址 二层 MAC 地址
VLAN ID 报文所属 VLAN
入/出接口 报文进入和离开交换机的接口
DSCP/802.1p 报文优先级标记
TCP Flags TCP 标志位(SYN/ACK/FIN/RST)

2.3 NetStream 记录结构

NetStream 记录结构 - 图示

三、技术细节

3.1 NetStream 数据采集流程

NetStream 数据采集流程 - 图示

3.2 超时参数

参数 默认值 说明
活跃超时(Active Timeout) 15 秒 流持续活跃时的最大缓存时间
非活跃超时(Inactive Timeout) 15 秒 流不活跃(无新报文)时的最大缓存时间
导出间隔(Export Interval) 30 秒 批量导出到 Collector 的间隔
模板超时(Template Timeout) 1800 秒 模板缓存超时时间

3.3 sFlow 工作原理

sFlow 采用随机报文采样 + 计数器统计的组合方式:

组件 说明
sFlow Agent 交换机上的采样进程
sFlow Collector 收集和分析采样数据的服务器
Sampling Rate 采样率(如 1/2048,每 2048 个包采样 1 个)
Header Export 导出采样报文的头部(前 128 字节),包含二层到四层信息
Counter Data 接口计数器(总流量、错包等),周期性导出

sFlow 采样率配置:

采样率 说明 适用场景
1/256 每 256 个包采样 1 个 1Gbps 以下低速接口
1/2048 每 2048 个包采样 1 个 10Gbps 接口
1/16384 每 16384 个包采样 1 个 40G/100G 接口

3.4 NetStream v9 vs IPFIX

特性 NetStream v9(NetFlow v9) IPFIX(RFC 5101)
标准化 Cisco 事实标准 IETF 国际标准
模板机制 模板定义字段格式 模板 + 扩展更灵活
可扩展性 有限 强(支持任意新字段)
华为支持 NetStream v9 NetStream IPFIX
推荐 与 Cisco 设备互通 与多厂商设备互通

四、实战配置/案例分析

4.1 华为 NetStream 完整配置

# ========== 场景:在汇聚交换机上启用 NetStream 采集 ==========
<HUAWEI> system-view
[HUAWEI] sysname Agg-SW-01

# 步骤 1:创建 NetStream Exporter(指定收集器地址)
[Agg-SW-01] netstream exporter 1
[Agg-SW-01-netstream-exporter-1] destination 10.100.0.200 9996
# NetStream 收集器 IP 和端口

[Agg-SW-01-netstream-exporter-1] version v9
# 使用 NetStream v9 格式

[Agg-SW-01-netstream-exporter-1] source interface LoopBack 0
# 指定导出的源 IP 地址

[Agg-SW-01-netstream-exporter-1] ttl 255
# 导出报文的 TTL

[Agg-SW-01-netstream-exporter-1] quit

# 步骤 2:创建 NetStream Selector(定义采样规则)
[Agg-SW-01] netstream selector 1
[Agg-SW-01-netstream-selector-1] sampler direction inbound probability 1 mode one-out-of-n
# 全量采集(采样率 1/1,即每个报文都统计)

# 如需要采样(高速接口推荐):
# [Agg-SW-01-netstream-selector-1] sampler direction inbound probability 1/2048 mode one-out-of-n
[Agg-SW-01-netstream-selector-1] quit

# 步骤 3:创建 NetStream Monitor(关联 Exporter 和 Selector)
[Agg-SW-01] netstream monitor 1
[Agg-SW-01-netstream-monitor-1] selector 1
[Agg-SW-01-netstream-monitor-1] exporter 1

# 配置超时参数
[Agg-SW-01-netstream-monitor-1] cache active-timeout 15 inactive-timeout 15
# 活跃超时 15 秒,非活跃超时 15 秒

# 配置采集字段(二层 + 三层信息)
[Agg-SW-01-netstream-monitor-1] record source-mac destination-mac vlan
[Agg-SW-01-netstream-monitor-1] record source-ipv4 destination-ipv4 protocol tcp-port
[Agg-SW-01-netstream-monitor-1] record incoming-interface outgoing-interface
[Agg-SW-01-netstream-monitor-1] quit

# 步骤 4:在接口上应用 NetStream Monitor
[Agg-SW-01] interface HundredGigE 1/0/1
[Agg-SW-01-HundredGigE1/0/1] netstream monitor 1 both-direction
# 双向采集(入方向 + 出方向)

[Agg-SW-01] interface HundredGigE 1/0/2
[Agg-SW-01-HundredGigE1/0/2] netstream monitor 1 both-direction

# ========== 验证 ==========
[Agg-SW-01] display netstream monitor 1
# Monitor ID            : 1
# State                 : Enabled
# Exporter              : 1
# Selector              : 1
# Cache Flows           : 15234(当前缓存的流数)
# Exported Flows        : 487621(已导出的流数)

[Agg-SW-01] display netstream interface HundredGigE 1/0/1
# 查看接口的 NetStream 统计信息

4.2 故障案例:NetStream 帮助定位 DDoS 攻击

场景描述

某园区网出口带宽突然被占满,用户无法访问互联网。运维人员通过 NetStream 数据快速定位了 DDoS 攻击源。

排查过程

# 步骤 1:确认出口带宽饱和
[Edge-RW] display interface GigabitEthernet 0/0/1
# Input rate: 985000000 bps(接近 1Gbps 上限)

# 步骤 2:查看 NetStream 数据(从收集器分析)
# 按目的 IP 聚合:
# Top Talker 分析结果:
#   DstIP: 10.10.10.50(Web 服务器) → 850 Mbps(占比 86%)
#   DstIP: 10.10.10.51(DNS 服务器) → 50 Mbps
#   DstIP: 其他                    → 85 Mbps

# 步骤 3:深入分析 10.10.10.50 的流量特征
#   协议: TCP(占比 99%)
#   目的端口: 80(HTTP)
#   TCP Flags: SYN(占比 95%,SYN Flood 攻击特征)
#   源 IP 分布: 2000+ 个不同 IP(分布式攻击)
#   每个源 IP 的流量: 约 400 bps(小流量慢速攻击)

根因分析

典型的分布式 SYN Flood 攻击:大量源 IP 向 Web 服务器(10.10.10.50)的 80 端口发送 SYN 报文,占用服务器的连接资源并占满出口带宽。

处理措施

# 在防火墙上配置 Anti-DDoS 策略
# 1. 限制 SYN 报文速率
# firewall policy
#  rule 10 deny tcp destination-port eq 80 tcp-flag syn rate 1000

# 2. 启用 SYN Cookie
# tcp syncookie enable

# 3. 封禁攻击源 IP 段(如果来自特定 CDN 或僵尸网络)
# firewall ip black-list
#  add 185.0.0.0/8

4.3 故障案例:NetStream 缓存溢出导致采集数据不完整

场景描述

某核心交换机的 NetStream 缓存达到上限,大量流记录被丢弃,收集器收到的数据不完整,流量报表出现明显偏差。

排查

# 查看 NetStream 缓存统计
[Core-SW] display netstream monitor 1
# Cache Flows    : 1000000/1000000(缓存已满)
# Cache Dropped  : 45678(丢弃的流数)
# Exported Flows : 1234567

# 根因:
# 1. 缓存容量 100 万条,不足以容纳当前并发流数
# 2. 活跃超时设置过长(60 秒),缓存占用时间过长

处理

# 缩短超时时间,加快缓存释放
[Core-SW] netstream monitor 1
[Core-SW-netstream-monitor-1] cache active-timeout 5 inactive-timeout 10
# 活跃超时 5 秒,非活跃超时 10 秒

# 如仍不足,启用报文采样(牺牲精度换容量)
[Core-SW] netstream selector 1
[Core-SW-netstream-selector-1] sampler direction inbound probability 1/256 mode one-out-of-n

五、总结

项目 说明
NetStream 华为流汇总协议,兼容 NetFlow v9
sFlow 随机报文采样,适合高速接口(40G/100G)
IPFIX IETF 标准流导出协议,多厂商互通首选
流记录 包含五元组 + 流量统计(报文数、字节数)
缓存超时 活跃超时 + 非活跃超时控制缓存容量
采样率 全量采集精度高但开销大;高速接口建议采样
华为推荐 NetStream v9/IPFIX + 合理超时 + 关键字段采集
收集器 需要独立的 NetStream/sFlow 收集器(如 nProbe、ntopng、StreamBank)

思考

  1. NetStream 全量采集每个流的记录。如果一个 100G 接口上有数百万并发流(如 CDN 出口或大型数据中心),全量采集是否会导致交换机 CPU 过载?如何平衡采集精度和性能开销?

  2. sFlow 使用随机采样。如果采样率设置为 1/16384,在分析小流量异常(如 C2 通信,每分钟仅发送几次心跳)时,能否可靠捕获?有什么替代方案?

  3. NetStream 记录通过 UDP 发送到 Collector。UDP 不保证到达。如果 Collector 处理不过来,交换机缓存填满后的流记录会怎样?

下篇预告:第129篇:园区网 QoS 基础:队列调度与拥塞管理