直接位图算法是网络测量中流计数的一种算法。在网络流测量中需要统计的一个特征就是单位时间内的流(Flow)数。在这里流既可以按严格的五元组区分,如TCP链接,也可以按更粗粒度的特征来区分,如DDOS攻击中,可以把目的地址相同的所有数据包归在一个流中。
直接位图的原理是,在内存中组织一个足够长的字节数组,清零,称之为位图。设该位图的BIT长度为L,即字节数组长度=L/8。
对采集的每一个数据包按流ID(流的区分特征,见前)做HASH,要求HASH函数的取值范围是0-(L-1)。根据HASH(FLOW_ID)的值,置位图中相应位置BIT为1,即1个BIT表示1个流。统计周期结束后,计算位图中BIT为1的个数,即为统计周期内流的总数。
优点:相较直接保存FLOW ID表格,利用查表进行统计的算法,直接位图法速度快,不用查表并且内存占用小得多。
缺点:1、与精确统计相比,直接位图法存在误差。
2、直接位图法是无状态方法,即只能统计流数而无法保留FLOW ID。
3、为求得尽可能精确结果,位图大小与流数目线性相关。
参考文献:Bitmap algorithms for counting active flows on high speed links