前言
今天在ping一个v4的IP时,漏写了两段数字,执行后发现也能ping而不是提示错误的参数,我执行了ping 127.1命令,实际上是对127.0.0.1这个IP进行了ping操作;对此,我进行了研究,看看为什么可以进行缩写
IPv4组成
通常情况下,一个IPv4的地址由4个0~255之间的整数组成,并且每个数字之间通过一个点“.”连接,例如127.0.0.1;在计算机中,数据都使用二进制进行存储,IP也是同理,127.0.0.1这个IP用二进制表示就是:11111111 00000000 0000000 00000001。
允许缩写的原因
上面提到,IPv4地址本质上是一个32位的二进制数据,在十进制下通过点分隔开的每一位数字都对应一个8位的二进制数字;但是理论上每一位十进制数字都应该小于256(即0~255),那么如果超过255,这个数字就无法使用8位二进制进行表示,就会变为一个16位的二进制数,可以同时表示两段数字;还有另一种情况,就是我开头提到的情况,在少写两段数字的情况也能找到IP,这个就是IPv4的补位,在IP的位数不足时,会将最后一段二进制进行补位,使整个IP的二进制位数达到32位;下面将对这些情况详细解释
IP位数不足32位
例如我ping一个IP:127.1,其中127对应11111111,而第二段的1对应00000001,这样组成一个IP只有16位,就是不正确的情况,就需要对其补位,如果在127前面补位,对应IP会是0.0.127.1,那么这样不太合理,就将最后一段进行补位,将8位二进制变为24位二进制,也就是00000000,00000000,00000001,这样连起来后,二进制到达了32位,IP是127.0.0.1,就非常合理
最后一段数字大于255
如果最后一段数字大于255,且IP没有到4段数字时,最后这段数字就会代替前面缺少的数字,结合上面一个知识点,例如127.0.256,其中256对应二进制00000001,00000000,就达到了32位
缩写为一段
如果一个IP只有一段数字,其中没有点分隔,那么这个数字将会直接变为32位二进制数字,再根据8位进行分组,例如127.0.0.1,二进制为11111111,00000000,00000000,00000001,这32位二进制连起来后转换成十进制通过下面公式:
127.0.0.1 => 127*256^3 + 0*256^2 + 0 *256^1 + 1*256^0 => 2130706433
那么127.0.0.1可以缩写成 2130706433,测试后发现可以解析到
结尾
这篇文章到这里就结束了,感谢耐心阅读,如果遇到问题可以在下方评论区中讨论。
评论区