如何确定两个IP地址是否属于同一个网络段

5
一个简单的问题经常困扰我:有两个IP(v4)地址,192.168.0.1/30 和 192.168.0.2/24,我想知道它们是否属于同一个网络段。
如何判断?
1个回答

4

/24 表示地址中组成网络部分的位数,此处为 24 (或30)。

如果您将 IP 地址与仅包含最小网络部分的地址进行 AND 运算,则相同的网络将包含相同的值。

例如,以下是一个 C 实现(未经测试):

unsigned int ip1 = (192<<24) | (168<<16) | (0<<8) | (1);
unsigned int ip2 = (192<<24) | (168<<16) | (0<<8) | (2);
unsigned int nm1 = (-1) << (32 - 24);
ip1 &= nm1; // Note: we use nm1 as its the smallest number of bits in the network
ip2 &= nm1;
if (ip1 == ip2) { }  // Same network

从技术上讲,你的 /30 和 /24 是 不同的网络,并且将使用路由器来到达不同的地址(即,/24 不会使用路由器来处理 1-254 的 IP 地址,而 /30 将使用路由器来处理这些地址的大部分)。但是,它们在相同的地址空间中重叠。


谢谢您的回答,Ramin。您的意思是,如果(ip1和subnet1的结果)==(ip2和subnet2的结果),那么最终结果就可以了,无论subnet1是否等于subnet2。我理解得对吗? - danspeed

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接