首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >NetFlow时间戳

NetFlow时间戳
EN

Stack Overflow用户
提问于 2017-01-24 17:56:31
回答 1查看 2.4K关注 0票数 1

确定NetFlow数据包中流的绝对时间的最佳方法是什么?看起来,流中只包含了相对时间信息(SysUpTime在流的开始和结束)。

对于Netflow v5和v9,可以通过Unix秒(数据包报头中的SysUptime字段: UnixSeconds - SysUptime + FlowStartSysUptime )计算它。但是UnixSeconds字段的精度只有一秒。

在IPFIX (v10)中,报头只包含创建数据包时的系统时间,而不包含系统正常运行时间。

EN

回答 1

Stack Overflow用户

发布于 2017-01-25 23:33:27

一些IPFIX出口商通过使用较新的绝对时间戳字段(如flowStartSeconds(150)、flowEndSeconds(151) )来避免这一问题。毫秒精度、微秒精度等都有变体。请参阅:http://www.iana.org/assignments/ipfix/ipfix.xhtml

(另外,请注意,IPFIX报头中的绝对时间戳应该接近实际完成和发送数据包的时间,因此您至少可以尝试对出口商和收集器之间的时钟偏移进行建模:https://www.rfc-editor.org/rfc/rfc7011#page-14)

但是,正如您所指出的,当IPFIX导出程序发送遗留字段flowEndSysUpTime(21)和flowStartSysUpTime(22)时,会出现一个问题。对于NetFlow v1-9来说,这是可以的,因为标头时间戳也是用sysUpTimeSeconds表示的,但是对于IPFIX,它会让您陷入困境。

一个简单的解决方案是假设流总是被迅速冲洗,计算它们的持续时间,然后将它们排列起来:

代码语言:javascript
运行
复制
duration = flowEndSysUpTime - flowStartSysUpTime
start = (NOW - duration)
end = NOW

另一种方法是假设至少有一些流被迅速刷新,并使用flowEndSysUpTime编号对每个设备的启动时间保持一个估计:

代码语言:javascript
运行
复制
boot-time = MIN(NOW - flowEndSysUpTime)
start = boot-time + flowStartSysUpTime
end = boot-time + flowEndSysUpTime

但是,如果设备实际上是重新启动的,那么您必须小心地检测对启动时间的估计中的步骤更改。这个步骤的变化可能只有30秒,如果它被重新启动两次快速连续。需要考虑的是--但是由于这些遗留的字段只精确到1秒,所以不清楚聪明是否值得去做。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41835769

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档