TCP / IP高效数据包过滤

时间:2019-03-06 10:12:11

标签: algorithm networking tcp filtering

我正在尝试创建一种基于源IP地址和目标IP地址以及目标端口和源端口来过滤TCP / IP数据包的算法。基本上,我有一组规则来指定IP地址范围,例如192.168.0.0/24,用于目标和源IP地址,以及等效于目标和源端口([1:65535])。

简而言之,给定一个数据包,我想找到与其IP地址和端口相关的规则。目前,到目前为止,我唯一的想法是从源IP地址或目标IP地址中构建一个Trie,该Trie可以快速过滤任意一个,但是仍然需要线性搜索其余参数并导致{ 1}}个O(n)规则。有没有更好的方法可以降低时间复杂度?

1 个答案:

答案 0 :(得分:2)

假设您将IP编码为[0,2 ^ 32]范围内的整数,则可以通过一个四维矩形来定义源范围和目标范围

min = [src_ip_min, src_prt_min, dst_ip_min, dst_prt_min]
max = [src_ip_max, src_prt_max, dst_ip_max, dst_prt_max]

您可以使用诸如R-Tree之类的空间索引结构来索引多维矩形,以有效地回答空间查询。在您的情况下,您需要进行范围搜索(范围= 0)以获取适用于特定查询的所有矩形(规则)。

4个维度仍然应该可以很好地索引,因此根据您的范围分布,您可以期望查询时间更接近O(log n)