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

时间:2011-08-11 06:31:40

标签: ip-address

一个简单的问题经常让我困惑:有两个IP(v4)地址,192.168.0.1 / 30和192.168.0.2/24,我想知道它们是否属于同一个网段。

你如何确定?

1 个答案:

答案 0 :(得分:4)

/24表示构成地址网络部分的位数,在本例中为24(或30)。

如果您和仅具有最小网络部分的IP地址,相同的网络将包含相同的值。

例如,这是一个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将不使用路由器用于IP的1-254,而/ 30将使用路由器为大多数这些地址)。但是,它们在相同的地址空间中重叠。