sflow是一种用来统计网络流量的采样方案。
采样方式
按照包数采样
比如采样率是1000,每经过一个包,计数器减一,如果计数器为0,采样当前的数据包,然后计数器重置。
随机采样
由于按照固定包数采样,有可能会采到有规律的包,影响采样有效性。比如采样率是1000,每1000个包中,999个都是从A->B的数据,就只有一个是从C->D的数据,并且是有规律的,每1000出现一次,也就是与采样率匹配。这样会一直采到C->D的数据包,认为网络中都是C->D的流量。为了解决这个问题,就出现了随机数采样。就是指定一个数值范围,比如[0, 10),每次数据包过滤都产生一个[0, 10000)的随机数,如果在[0, 10)以内,就采样,不在就丢弃。这样既满足了1/1000的采样率,又避免了上面的问题。
按照时间间隔采样
还有一种就是固定多少时间采样一次。
原理
sflow的原理就是当满足采样条件时,会把当前包的包头截取下来,发送出去。接收者就可以根据包头信息进行分析。
https://sflow.org/
https://sflow.org/sflow_version_5.txt
https://en.wikipedia.org/wiki/SFlow
https://www.rfc-editor.org/rfc/rfc3176
https://www.rfc-editor.org/rfc/rfc1014