確定NetFlow數據包中數據流的絕對時間的最佳方式是什麼?看起來只有相對時間信息包含在流程中(流程開始和結束時的SysUpTime)。NetFlow時間戳
對於Netflow v5和v9,可以通過Unix Seconds計算包頭中的一個SysUptime字段:UnixSeconds - SysUptime + FlowStartSysUptime。但是,UnixSeconds字段只有一秒的精度。在IPFIX(v10)中,報頭僅包含創建數據包的系統時間,但不包含系統正常運行時間。
確定NetFlow數據包中數據流的絕對時間的最佳方式是什麼?看起來只有相對時間信息包含在流程中(流程開始和結束時的SysUpTime)。NetFlow時間戳
對於Netflow v5和v9,可以通過Unix Seconds計算包頭中的一個SysUptime字段:UnixSeconds - SysUptime + FlowStartSysUptime。但是,UnixSeconds字段只有一秒的精度。在IPFIX(v10)中,報頭僅包含創建數據包的系統時間,但不包含系統正常運行時間。
某些IPFIX導出程序通過使用較新的絕對時間戳字段(例如flowStartSeconds(150),flowEndSeconds(151))來避免此問題。有毫秒精度,微秒精度等變體。請參閱: http://www.iana.org/assignments/ipfix/ipfix.xhtml
(另請注意,在IPFIX報頭中的絕對時間應該是接近當數據包實際完成並送到,所以你至少有一個鏡頭在造型時鐘出口商之間的偏移和你的收藏家: https://tools.ietf.org/html/rfc7011#page-14)
但正如你指出,問題當IPFIX出口發送老式字段flowEndSysUpTime(21)和flowStartSysUpTime(22)出現。這對於NetFlow v1-9來說是可以的,因爲頭文件的時間戳也是用sysUpTimeSeconds表示的,但是使用IPFIX它會讓你擱淺。
一個簡單的解決方法是假設流動總是及時沖洗,計算出它們的持續時間,並與現在排隊:
duration = flowEndSysUpTime - flowStartSysUpTime
start = (NOW - duration)
end = NOW
另一種方法是假設至少一些流及時刷新,並使用flowEndSysUpTime數保持每個設備啓動時間的估計:
boot-time = MIN(NOW - flowEndSysUpTime)
start = boot-time + flowStartSysUpTime
end = boot-time + flowEndSysUpTime
但你必須要小心,以檢測啓動時,如果在德維你估計的階躍變化ce實際上是重新啓動的。如果連續快速重啓兩次,該步驟更改可能只有約30秒。有些事情需要考慮 - 但由於這些傳統領域只能精確到1秒,所以並不清楚聰明是值得的。