iptables的性能 – iprange与子网

我想允许一系列的IP地址 – 两/ 24子网,不属于/ 23。 我有两个select:

  1. 使用两个 / 24掩码和-s选项的规则
  2. 使用-m iprange 单个规则 ,指定ip的全部范围

哪个是最快,更优化的性能方式?

在这种情况下,一个iprange规则可能比两个CIDR规则稍微快一些,但差别非常小,可能并不明显。 除非你每秒路由多个千兆比特,否则在这里优化是不值得的,如果你是这样的话,你应该可以购买专用路由器。

无论如何,我build议你使用CIDR比较,因为如果你添加不相交的范围,这将会更快(你可能迟早会)。 它更清洁,更易于理解。


这里发生了什么?

假设您将IP地址192.0.2.87与192.0.2.0/24的networking和前缀进行比较。 首先,前缀被用作networking掩码,这实际上是32位的值,networking侧的位被设置为1,而主机侧的位被设置为0.因此,/ 24将被写入255.255.255.0,尽pipe内部它以及IP地址和networking都以原始的32位值存储。 (我在这里忽略sorting,因为它与理解这个工作是无关的。)

会发生什么事是IP地址将与networking掩码进行按位与运算,并将结果与​​networking进行比较。 如果它们相同,则IP地址在networking/前缀内。

在IP范围内,你需要两个比较。 在这种情况下,首先将IP地址与起始IP地址进行比较。 如果它更大或相等,我们继续并将其与结束IP地址进行比较。 如果不大或者相等,我们有一场比赛。

这些比较之间的处理器时间的差异是微不足道的,特别是因为每个规则都有大量的开销,所以在你进行比较的相关机器语言指令(寄存器加载等)之前。

对于512个来源IP,不会有什么轻微的显着差异。