iptables 性能 - iprange 与子网

iptables 性能 - iprange 与子网

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

  1. 使用两条规则带有/24 掩码和-s选项
  2. 使用单一规则-m iprange指定整个 IP 范围

哪种方式最快、性能更优?

答案1

在这种特殊情况下,一条iprange规则可能比两条 CIDR 规则稍快,但差异很小,可能不明显。除非您每秒路由几千兆位,否则不值得尝试优化,如果您这样做,您可能还是应该购买专用路由器。

无论如何,我建议您使用 CIDR 比较,因为如果您添加不相交的范围(并且您迟早会这样做),这会更快。而且它更清晰,更容易理解。


这里发生了什么?

假设您正在将 IP 地址 192.0.2.87 与网络和前缀 192.0.2.0/24 进行比较。首先,前缀用作网络掩码,它实际上是 32 位值,网络端的位设置为 1,主机端的位设置为 0。因此 /24 应该写为 255.255.255.0,尽管在内部,它以及 IP 地址和网络都存储为原始 32 位值。(我在这里忽略了字节序,因为它与理解其工作原理无关。)

实际情况是,IP 地址将与网络掩码进行按位与运算,并将结果与​​网络进行比较。如果它们相同,则 IP 地址在网络/前缀内。

在 IP 范围内,您需要比较。在这种情况下,IP 地址首先与起始 IP 地址进行比较。如果大于或等于,我们继续并将其与结束 IP 地址进行比较。如果小于或等于,则匹配。

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

答案2

对于 512 个源 IP,不会有丝毫明显的差异。

相关内容