确定两个IP地址是否在同一子网上 - 是从IP地址删除的引导还是落后0



我了解是否有两个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*
我想念什么吗?

ipv4 addresers写为四个普通十进制数字(每个拟合到一个字节中)被点分开。

普通的十进制数字1是"一个",也可以写入001。但是100是不同的数字,即"一百"。


操作始终是 bitwise ,因此,要了解它,您必须首先查看点上的decimal地址和netmask如何对应于原始的二进制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

so 126.127.0.1与NetMask 255.128.0.0在子网中 126.0.0.0.0 /9

在软件中,通常商店 ipv4地址在一个32位变量中 - 因此126.127.0.1是011111111111111111111000000000000000001二进制文件(也编码212222222289)em> 32位IP地址的小数值是多少),并且仅在需要向人类用户显示时才将其转换为点decimal。此表示是GlglGl将乘以256次乘以几次。

如果您还具有32位变量中的NetMask(1111111111100000000000000000000000二进制或4286578688 DICMAL),则可以在单个机器指令中使用网络地址011111111100000000000000000000000。

您完全缺少某些东西:您不仅可以将数字插入在一起,因为并且在二进制级别上工作。

因此,您要么处理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,使其属于同一子网。

尽管这是一个奇怪的问题,但我会尝试回答您的特定查询:

第二个八位位的数字'1'实际上是数字1,因此是'001',而不是'100'。

也就是说,您的示例应该 ,所以我怀疑您的实施情况有问题。您不必担心填充或任何东西。这些是数字,并且应该"只能工作"。

您可能想提供有关出了什么问题的更多详细信息。

最新更新