将数据验证添加到 IP 地址设置,以便提示用户 IP 地址是否配置在同一子网中

将数据验证添加到 IP 地址设置,以便提示用户 IP 地址是否配置在同一子网中

我应该向我的软件 UI 添加验证(IP 子网 UI)允许用户输入一对 IP 地址和子网掩码。我应该确保两个网络接口未配置在同一个子网中。

我的理解是,如果我在 IP 地址和子网掩码之间执行按位与运算,我将获得一个网络 ID,如果 N/W ID 不相同,这是否足以声称两个网络接口不在同一个子网中?

此问题仅限于IPV4。

答案1

您需要使用相同的网络掩码来确定网络是否相同。您需要使用最短的网络掩码进行比较。这就是您确定两个地址是否在同一个网络中的方法。

除地址和掩码大小外,IPv4 和 IPv6 的过程完全相同。

例如,10.0.0.0/2510.0.0.64/26将返回具有最短掩码(255.255.255.128)的相同网络,但将返回具有最长掩码(255.255.255.192)的不同网络,即使第二个网络是第一个网络的子网,因此第二个网络中的任何地址都属于第一个网络。

使用最短的掩码:

       10.0.0.0 -> 00001010000000000000000000000000
255.255.255.128 -> 11111111111111111111111110000000
            AND -> ================================
                   00001010000000000000000000000000 = 10.0.0.0

      10.0.0.64 -> 00001010000000000000000001000000
255.255.255.128 -> 11111111111111111111111110000000
            AND -> ================================
                   00001010000000000000000000000000 = 10.0.0.0

戴上最长的口罩:

       10.0.0.0 -> 00001010000000000000000000000000
255.255.255.192 -> 11111111111111111111111111000000
            AND -> ================================
                   00001010000000000000000000000000 = 10.0.0.0

      10.0.0.64 -> 00001010000000000000000001000000
255.255.255.192 -> 11111111111111111111111111000000
            AND -> ================================
                   00001010000000000000000001000000 = 10.0.0.64

使用指定的掩码:

       10.0.0.0 -> 00001010000000000000000000000000
255.255.255.128 -> 11111111111111111111111110000000
            AND -> ================================
                   00001010000000000000000000000000 = 10.0.0.0

      10.0.0.64 -> 00001010000000000000000001000000
255.255.255.192 -> 11111111111111111111111111000000
            AND -> ================================
                   00001010000000000000000001000000 = 10.0.0.64

可以看到,只有使用最短掩码的例子才真正返回了正确的答案,即第二个地址在第一个地址的网络中。

答案2

首先,您实际上只需要一个子网掩码条目,因为如果它们有两个不同的掩码,则不应将它们放在同一个子网上。但除此之外,是的,您将地址与掩码相加,如果得到相同的结果,则它们位于同一个子网上。

相关内容