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

Cel*_*tas 2 math networking ip-address subnet

我理解,如果两个IP地址与子网掩码进行AND运算,如果结果相同则它们在同一网络上.如果结果不同,则它们位于不同的网络上.我的问题是,如果给出一个省略0的IP地址,那么额外的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 AND 126001000010 = 1085496376*32*但 255128000000 AND 126127000001 = 1085276323*84*
我错过了什么?

Hen*_*olm 8

IPv4地址被写成四个以点分隔的普通十进制数(每个都适合一个字节).

普通的十进制数1是"1",也可以写成001.但是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
Run Code Online (Sandbox Code Playgroud)

所以带有网络掩码255.128.0.0的126.127.0.1位于子网126.0.0.0/9中

在软件中,通常将 IPv4地址存储在一个32位变量中 - 因此126.127.0.1是01111110011111110000000000000001二进制(也编码2122252289十进制,除了没有人关心 32位IP地址的十进制值),以及只有在需要向人类用户显示时,它才会转换为点分十进制.这种表示是glglgl描述为多次乘以256的内容.

如果在32位变量(11111111100000000000000000000000二进制或小数为4286578688)中也有网络掩码,则可以在单个机器指令中将它们与AND获取网络地址01111110000000000000000000000000.