芯片/网卡 混杂模式 广播包过滤器 ------------- ------------ --------------- Seeq8001/3c501 Yes Binary filter (1) 3Com/3c509 Yes Binary filter (1) 8390 Yes Autodin II six bit hash (2) (3) LANCE Yes Autodin II six bit hash (2) (3) i82586 Yes Hidden Autodin II six bit hash (2) (4)
这些网卡声称有一个过滤器,但只是简单地对“accept all multicast packets”或“accept no multicast packets”回答yes/no。 AUTODIN II是标准的以太网CRC校验多项式。在这种方式下,广播地址被哈希运算后在哈希表里进行查找。如果启用了相应的比特位,则数据包被接收。以太网数据包的设计使得硬件在如此处理时的开销很小——(通常)只要在前6个八进制数(目标地址)之后锁定CRC电路(用来进行错误检查)的6个比特位,把它们作为哈希表的索引(6比特——一个64比特的表)。 这些芯片使用6比特哈希,必须由主机计算并载入哈希表。这也就是说内核必须包含CRC代码。 82586内部使用6比特哈希,但是由自己从接受的广播地址列表计算出哈希表。 注意,这些芯片的过滤效果都不好,还需要一个中间层次的模块完成最后的过滤。同时还要注意,在每种情况下都必须保持一个完整的接受广播地址列表,在出现变化时以重新计算哈希表。