我想允许一系列 IP 地址 - 两个 /24 子网,不属于 /23。我有两个选择:
- 使用两条规则带有/24 掩码和
-s
选项 - 使用单一规则并
-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,不会有丝毫明显的差异。