Algorithm TCP/IP高效数据包过滤

Algorithm TCP/IP高效数据包过滤,algorithm,networking,tcp,filtering,Algorithm,Networking,Tcp,Filtering,我正在尝试创建一个算法来根据源和目标IP地址以及目标和源端口过滤TCP/IP数据包。基本上,我有一套规则,用于指定目标和源IP地址的IP地址范围,例如,192.168.0.0/24,以及目标和源端口的等效IP地址([1:65535]) 简而言之,给定一个数据包,我想找出哪些规则与它的IP地址和端口相关。目前为止,我唯一的想法是用源IP地址或目标IP地址构建一个Trie,这将快速过滤其中任何一个,但仍然需要对其余参数进行线性搜索,并导致O(n)规则的复杂性。有没有更好的方法可以降低时间复杂度?假设

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


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

假设您将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]
您可以使用空间索引结构(如索引)为多维矩形编制索引,以高效地回答空间查询。在您的情况下,您需要一个范围搜索(范围=0)来获取应用于某个查询的所有矩形(=规则)

4维仍然可以很好地进行索引,因此根据您的范围分布,您可以期望查询时间接近
O(logn)