尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

NetStream流量统计技术详解:从原理到华为H3C设备配置实践

NetStream流量统计技术详解:从原理到华为H3C设备配置实践 NetStream这个词你要是去搜索引擎里翻至少能翻出两条完全不同的线一条是Flash年代搞视频流播放的NetStream类另一条是网络设备上的流统计技术。我今天聊的是后者——华为和H3C新华三网络设备常见的那套NetStream。简单说它是一种基于流的网络流量统计技术能让交换机或路由器告诉你某段时间里谁在跟谁通信、用了什么端口和协议、传了多少字节。它和思科的NetFlow属于同一个物种但报文格式和实现细节并不完全互通。不少人第一次听说NetStream是在做带宽分析或者异常流量排查的时候。领导一句看看出口流量都是谁在占用网工的直觉往往是先开抓包工具。可在大流量环境里抓包既撑不住性能又会把整个报文内容都留下来涉及隐私问题。这种场景下NetStream才有用武之地。这篇文章不打算写成厂商文档的复述我从原理到落地讲一遍自己的理解它统计什么、不统计什么、怎么配、怎么接、怎么排查以及几个真正用得上的场景。1. 先纠正一个常见误解NetStream不是抓包工具也不是一个软件把NetStream理解成流量抓包是最容易踩的坑。抓包是把接口上的报文原封不动复制一份存成pcap留给Wireshark分析NetStream则完全不同——它只提取报文的身份信息和统计信息比如源IP、目的IP、源端口、目的端口、协议号、报文数、字节数、时间戳然后把原始报文内容丢掉。打个比方抓包像是把整本电话录音都保存下来NetStream只记一份通话清单谁打给谁、打了多久。这个差异决定了NetStream的能力边界。它能告诉你流量是谁的、有多大、走哪个协议但还原不出具体内容。举几个实际例子你能看到IP 10.1.1.50 在这一个小时里发出 2.3GB 流量但没法知道这2.3GB是网页、文件还是视频。你能统计出TCP 443端口占比八成但看不到证书内容。你能发现某台主机每秒产生几十万条流记录但不知道它在跑什么业务逻辑。所以NetStream天生适合做粗粒度审计和长期趋势统计不适合做故障定位时的逐包分析。这不算缺点反而是优势因为丢掉内容它的性能开销才小才能7x24小时挂在核心设备上。真要抓包就放在关键链路上临时抓几分钟跟NetStream形成互补。还有人会问NetStream是不是一个开源软件装一下就行——也不是。NetStream是一套采集输出的机制搭载在交换机、路由器上设备本身负责采集统计然后通过UDP报文把流记录发到外部服务器。外部服务器上需要另配采集分析程序比如ntopng、nfdump或者商用网管平台。也就是说它是一整套东西的组合不是某个单一软件包。2. 核心机制拆解一条流是怎么被定义、采集、输出、分析完的理解NetStream关键在于把流这个概念吃透。下面我按一条数据从网线进来到最终变成报表的链路拆开讲。2.1 七元组定义一条流设备在转发报文时怎么判断两条报文同属一条流NetStream看的是七元组源IP地址、目的IP地址、源端口、目的端口、协议号、ToS服务类型、入接口。这七项都一样的报文被归成一条流然后累加字节数和报文数。这里有一点值得注意很多人习惯说五元组也就是不含ToS和入接口。但NetStream早期设计时把ToS和入接口放进来是为了区分同一个IP会话里不同QoS优先级的数据以及区分从不同接口进来的同源同目的流量。实际做分析时大部分场景五元组就够用不过你要知道设备内部用的是七元组不然看到同一条会话被拆成多条流记录时会懵。举个例子。用户访问一个网站TCP三次握手本身不算什么流量真正的大头是下载页面内容的那一段。那一段里源IP是你的手机目的IP是服务器源端口是随机大端口目的端口是443协议是TCPToS相同接口相同所以这几十MB都被归到一条流里。设备每过一段固定时间就把这条流的累计字节数、报文数、起止时间封装成一条流记录发出去。2.2 NDE、NSC、NDA三角色NetStream的体系结构可以拆成三个角色尤其NSC和NDA很多人分不清。我按数据流向说明NDENetStream Data Exporter跑在网络设备上的采集导出器。它负责识别流、维护流缓存、执行老化、把流记录封装成NetStream报文发出去。你设备上配置的ip netstream命令都是控制它的。NSCNetStream Collector负责接收网络设备发来的流记录做解析、过滤、存储。它是个仓储中心把原始记录落库但不做业务分析。NDANetStream Data Analyzer负责把NSC里的数据变成对人有意义的报表比如Top N排序、趋势图、告警。很多现代工具已经把这个角色跟NSC合体了比如ntopng一套就全吃掉但概念上最好分开记。为什么要把采集和解析拆开因为原始流记录量可能很大一台汇聚设备在繁忙时段每秒生成几千条流记录分析逻辑一旦拖后腿接收端来不及处理就会丢包。NSC只做写入NDA异步做聚合分析这样两个环节可以独立扩容也方便从多个设备往同一个采集器灌数据。2.3 老化机制与控制参数流的生命周期是NetStream里最容易被人忽略又最影响效果的一块。设备CPU和内存是有限的流缓存不能无限增长所以每条流到一定条件就必须结束、输出、腾出空间。触发输出有两个核心参数活跃老化时间流存在超过一定时长常见默认30分钟即使还在跑也强制输出。这是为了防止长连接占着缓存不放。调整它会影响报表的时间粒度——设得太小一条大流会被拆成很多段记录设得太大缓存压力大出问题后看到统计的时间粒度过粗。非活跃老化时间流超过多少秒没有新报文常见默认30秒判定结束并输出。这决定了短连接能被统计得多细。像DNS查询这类连接几十毫秒就结束非活跃老化时间设太长它们就会一直占着缓存。此外还有强制老化通常是设备内存紧张或接口状态变化时触发相当于兜底。我自己的习惯是正常内网环境先用默认值跑一周看报表再决定要不要调。如果发现流缓存占用长期过高优先调大活跃老化时间或者缩采样率而不是一味延长非活跃时间。2.4 采样高流量场景的保命手段全量统计最准确但对设备性能和出口带宽都不是小开销。在100G甚至400G的链路上逐包跟踪每一条流即使硬件卸载也够呛。所以NetStream支持采样——只抽一部分报文参与统计再把统计结果按比例放大估算。配置里常见的采样率是1:100、1:1000、1:2000意思是从每N个报文中取一个统计。比如1:1000设备统计到100MB最终报表大致就是100GB。采样率设得越低CPU越省但精度越差短连接和小流可能直接被漏掉DDoS这类脉冲型异常也可能被平均掉。我的经验是出口链路繁忙率长期超过60%建议至少1:1000起步核心机房内部的监控最好1:100以内如果要拿流量数据做计费或成本分摊建议全量统计免得扯皮。采样还有一个副作用是可能漏掉小流。比如十个报文里抽一个一条只有三五个报文的连接可能一条都抽不中。做业务流量画像时要把这个因素考虑进去别把采样误差当成真实业务变化。3. NetStream和NetFlow、sFlow、IPFIX到底有什么区别这个家族确实乱先捋一下历史。思科最早推出NetFlow靠流记录做网络监控后来华为和H3C搞了自己的版本就是NetStream同时还有基于采样的sFlow再后来IETF把NetFlow v9那一套标准化成IPFIX。四者目标一致但细节不同。三条路线的核心差异在于是否维护流状态以及输出什么形式的记录NetFlow / NetStream基于流的聚合统计。设备维护流缓存记录每条流的累计字节和报文数导出的是聚合后的记录。优点是信息密度高一条大流只需要一条记录。sFlow纯采样技术。设备不维护流状态全接口随机采样把报文头信息直接打包发到采集器由采集器自己统计。优点是设备开销极小、可量线性好适合超高速链路缺点是没有流聚合采集器要干更多活而且对长连接统计误差相对大。IPFIXIETF标准化的NetFlow v9字段用模板定义灵活性强。现在很多新设备尽管菜单里还写着NetStream底层实际已经可以走IPFIX输出。下面这张表是我常用的对比维度做技术选型时可以直接抄维度NetFlow v5/v9NetStreamsFlowIPFIX厂商Cisco华为 / H3CInMon 标准IETF 标准统计方式流聚合流聚合纯采样流聚合报文格式固定/模板类似NetFlow细节不同独立格式模板化设备开销中高中高低中高部署生态成熟华为系工具链高速链路常用新一代趋势综合来看如果你的设备是华为或H3C直接开NetStream最省事如果是混合网络最好把采集端统一到IPFIX或直接用能同时解析NetFlow和NetStream的工具避免每个厂商一套采集器。现在的ntopng、ElastiFlow、PRTG等工具基本都能兼容NetStream但你在文档里会看到一款工具说支持NetFlow却不一定标注NetStream这种时候一般要反向确认NetStream v9和NetFlow v9的封装非常接近很多工具能直接读到只是某些厂商私有字段解析不出来。4. 从零落地华为/H3C设备上的NetStream配置实战理论讲完上配置。下面这套是H3C/华为设备上最常见的经典组合。注意不同产品线的Comware版本命令有差异CloudEngine、S系列交换机、AR系列路由器之间可能不完全一致以你设备的命令手册为准。4.1 最小可运行配置先按先定义输出目标、再在接口上采集的顺序配置。假设采集服务器是10.1.1.100监听UDP 9995端口# H3C Comware 典型配置 # 1. 指定流记录导出格式V9模板格式更通用 ip netstream export version 9 # 2. 指定采集器地址和UDP端口 ip netstream export host 10.1.1.100 9995 # 3. 指定报文的源接口或源IP方便采集端做白名单 ip netstream export source ip 10.1.1.1 # 4. 设置老化参数单位为秒 ip netstream timeout active 30 ip netstream timeout inactive 300完成全局设置后进入需要统计的接口打开入方向和出方向的统计。很多朋友只开inbound结果回包方向的流量全丢了报表看起来永远是出口流量比进口少一半interface GigabitEthernet1/0/1 ip netstream inbound ip netstream outbound如果流量很大还要加上采样interface GigabitEthernet1/0/1 ip netstream sampler fix-rate 1000华为设备早期版本的命令前缀可能不同有的用netstream而不带ip关键字操作前建议先在设备上执行display netstream和display version确认支持的语法。配置完成后可以用下面的命令验证是否有流记录生成display netstream cache正常情况下这个输出能看到IP地址、协议、端口、字节数等实时缓存信息。如果一直为空说明接口上根本没有匹配的报文进入统计或者采集方向没开对。4.2 输出端和版本选择的注意事项输出到采集器时有几点我很早之前吃过亏列在这里UDP端口别乱改99%的采集软件默认监听9995/9996或2055。你可以自定义端口但采集器那边也要同步改建议直接用9995省得排查时怀疑端口不一致。版本一致性NetStream的V5是固定格式V9是模板格式。V5解析速度快但字段少V9字段灵活、兼容性好。如果采集器支持V9就优先V9如果用了IPFIX确认设备输出配置与实际流格式保持一致。源IP做白名单很多采集器会按源IP识别设备。如果不配置export source ip设备会自动用出接口IP作为源IP一旦出接口IP发生变化采集器可能把同一个设备认成两个源报表就得叠加看。固定源IP是个好习惯。切记别开防火墙NetStream报文走UDP但在设备ACL和中间防火墙上容易被丢掉。采集流量不属于用户流量调试时可以先放行源IP和UDP 9995确认通了再收缩规则。4.3 老化和采样参数怎么定参数没有万能答案但可以按场景给参考起点场景活跃老化非活跃老化采样率内网核心交换机30分钟30秒1:100数据中心出口5-10分钟30秒1:1000办公网出口30分钟60秒1:1000计费/审计场景10-30分钟10-30秒全量调整时记住一个原则先调活跃老化再动非活跃。因为活跃老化影响的是大流被切多细非活跃影响的是短连接占多少缓存。流量曲线波动剧烈的环境非活跃老化可以适当缩短但别低于10秒否则设备频繁输出短命流记录采集器压力会成倍增加。5. 采集端选型与经典排错为什么一个流记录都收不到配置好设备只是第一步。我在工单里见过太多设备那边配置完了但采集端空空的的情况。这里把采集端选型和排错思路一起讲。5.1 采集端选什么开源和商用都成熟按团队规模取舍ntopng个人项目和中小网络最顺手自带Web界面能解析NetFlow/sFlow/NetStream装完就能看top talkers也自带告警。缺点是历史数据存储较弱长周期趋势不如专业流量分析。nfdump纯命令行匹配NetFlow/Nfstream文件格式适合脚本化处理和批量分析。它本身是后处理工具要用前端接收NetStream数据再落盘搭配nfsen这类前端就比较完整。ElastiFlow Elasticsearch如果要在流数据上做自定义聚合、Kibana做可视化这是我最常用的组合。流记录字段化后扔进ES怎么切都行缺点是运维成本偏高ES本身要吃不少资源。商用平台PRTG、SolarWinds、华为eSight等开箱即用、有厂商支持适合不愿意折腾且有预算的团队。注意商用平台对NetStream私有字段的兼容性不一定最好采购前要跟销售确认支持的具体版本。如果只是要快速验证设备有没有发出数据可以先在Linux上用tcpdump抓一把UDP 9995tcpdump -i eth0 udp port 9995 -c 100 -v能看到NetStream报文持续进来问题就在采集程序配置一条都看不到问题基本在设备或中间链路。5.2 排查链路从采集器往回一路查到接口我自己的排错顺序供参考先确认设备侧有流缓存。在设备上执行display netstream cache如果没数据说明报文根本没进入统计。确认接口方向是否都开了。只开了inbound回程流量就丢了。确认出口UDP 9995是否被ACL或防火墙拦截。中间设备的ACL规则不一定只拦业务流量NetStream报文也可能被误伤。确认采集器监听端口与设备配置一致。UDP端口不一致是最常见的低级错误。确认采集器防火墙或云安全组放行了UDP 9995。服务器自带的firewalld/security group如果不放行外部设备发进来照样收不到。用tcpdump在采集器上抓包确认设备是否真的在发包。这一步能直接把问题定位在发出端还是接收端。如果抓包能看见报文但采集工具里还是没数据大概率是版本格式不匹配。比如设备输出V9采集工具默认按V5解析模板报文一上来就解析失败。很多工具设置里有个协议类型下拉菜单改成NetFlow v9/IPFIX适配模式就行。5.3 三个容易忽略的隐形坑NTP没同步流记录里的时间戳是设备本地时间。设备时间不准报表时间轴就是歪的趋势分析和告警全都对不上。NetStream监控的部署清单里一定要加NTP。把入方向和出方向流量直接相加同一份业务流量入口一条流记录、出口一条流记录统计的是同一份数据的话直接相加会让总量翻倍。分析时要按方向分开看或者只统计一个方向。采样率设置后没有记录到元数据如果报表工具不知道设备用了1:1000采样它按原始数值显示你以为流量骤降实际上只是抽样结果。最好在分析系统里配置好设备采样率让系统自动放大。这里再补一个我踩过的坑NetStream输出走的UDP没有重传采集器短暂拥塞会直接丢记录。流量大时采集器性能不足会导致采样记录丢失但设备无感知。建议给采集器加监控一旦丢包率升高要及时扩容或调低采样率别等报表缺了好些天才发现。6. 三个最值得做的落地场景配置跑通、数据在采了下一步就是用起来。基于我自己的实际经验下面三个场景投入产出比最高。6.1 出口带宽与Top N可视化这是最日常的需求。把核心设备的入方向或出方向流记录汇总到ntopng或ElastiFlow按目的端口、源IP、目的IP做Top N排名。你能一眼看出某个员工账号是不是在跑大流量下载视频会议流量为什么突然占了60%带宽某个部门占用的流量是不是跟业务预期严重不符。这个场景的核心收益不是出个报表而是建立基线。跑上一两个星期你知道正常时段的Top N是什么样后续才能谈异常。没有基线所有告警都是噪声。6.2 异常流量与DDoS的早期发现DDoS流量有个特征短时间内大量新连接、大批目的端口不重复、单流报文数极少。NetStream的流记录天然包含这些维度采集端可以设置规则比如单个源IP在5分钟内产生超过1万条流记录就触发告警。相比抓包被动在某个点看NetStream覆盖范围广能及早看到全网层面的连接数异常上升。不过要提醒一点NetStream的数据是聚合后的元数据本身不含载荷做DDoS防护决策可以做精确的攻击特征分析还是不够需要结合防火墙或专门的清洗设备。6.3 按业务/部门做流量成本分摊集团网络里经常会遇到谁用了多少带宽这种问题。NetStream可以按IP段给部门打标签统计每个部门在出口方向的实际流量生成月度报表用于成本分摊。做这件事有讲究统计周期要固定采样率要统一统计方向要一致否则每个部门交付的报表算法不一样财务会找你喝茶。具体做法上我建议在采集端先把IP段映射成部门号直接落到流记录里而不是在报表阶段临时翻译。这样历史数据回溯时口径一致不会因为部门人员调整导致统计口径变化。7. 一点个人习惯开了NetStream之后怎么维护配置上线只是开始。流统计系统最怕的是无人值守跑三个月突然要看数据发现中间丢了两个月。我自己的运维习惯很固定每个季度做一次配置巡检重点看设备侧的老化参数、采样率有没有随着业务变化失配采集器磁盘空间够不够因为原始流数据增长速度很容易被低估NTP同步状态是否正常。另外每次网络设备割接或版本升级后一定要重新确认NetStream配置还在、采集端还能收到新数据。现实中很多流统计断供不是配置错了而是设备割接时配置没同步过去。还要形成定期看原始流记录量的习惯。如果某天发现采集器每秒收到的流记录数突然断崖式下降先别急着兴奋流量变小了很可能接口统计被关了或者UDP被防火墙拦了。流记录量本身就是一个很好的健康指标。我如今遇到流量类问题第一反应不是打开抓包工具而是先看看手边有没有NetStream数据可查。它能覆盖的时间范围远远超过抓包窗口能回答很多刚才没来得及抓包的问题。设备上NetStream的配置成本不高但采集端的数据积累才是真正的价值所在。想清楚你要用流记录回答什么问题再动手配参数别为了一时好看堆一堆自己根本看不懂的报表。
返回列表