Math 确定两个IP地址是否在同一子网上-是否从IP地址中删除前导0或尾随0?

Math 确定两个IP地址是否在同一子网上-是否从IP地址中删除前导0或尾随0?,math,networking,ip-address,subnet,Math,Networking,Ip Address,Subnet,我知道如果两个IP地址使用子网掩码,如果结果相同,则它们位于同一网络上。如果结果不同,则它们位于不同的网络上。我的问题是,当给定的IP地址省略了一些0时,额外的0放在哪里 例如,如果子网掩码为255。128 . 0 . 0,您拥有IP 126。1.0 . 10和IP 126。127 . 0 . 1如果您只是盲目地使用子网掩码和IP,即使它们位于同一网络上,也会得到不同的结果 126.1.0.10是变成126.100.000.100还是126.001.000.100 阅读回复后编辑: 255128

我知道如果两个IP地址使用子网掩码,如果结果相同,则它们位于同一网络上。如果结果不同,则它们位于不同的网络上。我的问题是,当给定的IP地址省略了一些0时,额外的0放在哪里

例如,如果子网掩码为255。128 . 0 . 0,您拥有IP 126。1.0 . 10和IP 126。127 . 0 . 1如果您只是盲目地使用子网掩码和IP,即使它们位于同一网络上,也会得到不同的结果

126.1.0.10是变成126.100.000.100还是126.001.000.100

阅读回复后编辑:

255128000000和126001000010=1085496376*32*255128000000和126127000001=1085276323*84*

我遗漏了什么吗?

尽管这是一个相当奇怪的问题,但我会尝试回答您的具体问题:

第二个八位组中的数字“1”实际上是数字1,因此它是“001”,而不是“100”

这就是说,您的示例应该是有效的,所以我怀疑您的实现有问题。你不需要担心填充物或任何事情。这些是数字,按位排列,应该“正常工作”


您可能需要提供更多有关出错原因的详细信息。

IPv4地址被写成四个由点分隔的普通十进制数(

普通的十进制数字1是“一”,也可以写为001。然而,100是一个不同的数字,即“100”


AND操作始终是位AND,因此要理解它,您必须首先了解点十进制地址和网络掩码如何对应于原始二进制32位地址:

        126   .    127   .     0    .    1
     01111110   01111111   00000000   00000001

        255   .    128   .     0    .    0
AND  11111111   10000000   00000000   00000000
 -----------------------------------------------
     01111110   00000000   00000000   00000000
        126   .      0   .     0    .    0
因此,带有网络掩码255.128.0.0的126.127.0.1位于子网126.0.0.0/9中

在软件中,通常将IPv4地址存储在一个32位变量中——因此126.127.0.1是011111111111100000000000001二进制(它也编码2122252289十进制,只是没有人关心32位IP地址的十进制值是多少),只有当需要向人类用户显示时,才会转换为点十进制。这种表示法就是GLGL将256乘以几次的结果


如果32位变量(11111111100000000000000000000000二进制或4286578688十进制)中也有网络掩码,则可以在一条机器指令中对它们进行排序,以获得网络地址01111100000000000000000000000。

您完全缺少了一些东西:您不只是将数字连在一起,因为和在二进制级别上工作

因此,要么按字节处理IPv4地址,要么将其转换为十进制数,但不是使用因子1000,而是使用因子256

这是说,而不是做

((126 * 1000 + 1) * 1000 + 0) * 1000 + 10 = 126001000010
你应该这样做

((126 * 256 + 1) * 256 + 0) * 256 + 10 = 2113994762
。如果你把这个应用到其他数字上,你应该会成功

或者,您可以将这4个数字分别合并在一起

255 & 126 = 126 (in both cases), 128 & (1 resp. 127) = 0, 0 & (anything) = 0, 0 & (anything) = 0.

因此,这两个地址都将得到
126.0.0.0
,使它们属于同一子网。

将这些地址与给定的子网掩码进行ANDing后,不应得到不同的结果。你得到了什么结果?如果你能展示一些代码就最好了。我不理解第一种方法。因此,您使用此方法转换IP和子网掩码,然后执行什么?@Celeritas:按位和结果。请参阅我的扩展答案。