适当的数据包缓冲区数据结构

时间:2010-05-31 16:35:34

标签: c networking data-structures

如何实现每个数据包格式为的数据包缓冲区:

typedef struct{
   int32 IP;     //4-byte IP-address
   int16 ID;     //unique sequence id
}t_Packet;

最合适的数据结构应该是什么:

(1)允许收集至少8000个这样的包(快速插入和删除操作)
(2)允许使用IP地址进行非常快速的过滤,因此只选择具有给定IP的数据包 (3)允许使用ID作为键的非常快速的查找操作 (4)允许非常快(2),然后(3)在过滤结果中?

RAM大小很重要,例如没有大的查找表可以使用。

2 个答案:

答案 0 :(得分:4)

您可以使用Patricia Trie进行IP地址过滤。我相信大多数网络路由器都将此数据结构用于IPV4 IP地址。您还可以考虑使用其他针对IP地址设计的文献。这是一个:http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.35.4871

对应每个IP地址,您现在可以拥有基于ID的哈希表。

如果IP地址“足够”随机,你可能最好使用散列表来进行基于IP的过滤,因为IP地址非常适合大多数机器的单词,使哈希查找真的很快,特里可能不会为你节省太多空间。

当然,正确的选择取决于你的情况......

答案 1 :(得分:1)

为数据创建两个索引(非顺序存储以便快速插入等),一个是按ID分割的树,另一个是按IP分割的树。

如果您无法承受至少8000 * sizeof(数据包)+ 8000 * 12 + 8000 * 12的数据+两个索引,那么说实话,只迭代8000个项目并不会花费很长时间。

这在c ++中比c更容易实现(如果只是因为你可以使用boost :: multi_index,或者类似的话)

相关问题