第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 记录结构

三、技术细节
3.1 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) |
思考
-
NetStream 全量采集每个流的记录。如果一个 100G 接口上有数百万并发流(如 CDN 出口或大型数据中心),全量采集是否会导致交换机 CPU 过载?如何平衡采集精度和性能开销?
-
sFlow 使用随机采样。如果采样率设置为 1/16384,在分析小流量异常(如 C2 通信,每分钟仅发送几次心跳)时,能否可靠捕获?有什么替代方案?
-
NetStream 记录通过 UDP 发送到 Collector。UDP 不保证到达。如果 Collector 处理不过来,交换机缓存填满后的流记录会怎样?
下篇预告:第129篇:园区网 QoS 基础:队列调度与拥塞管理