|
IPv4地址本质上是地址一个32位二进制数,只是转换制为了让人类好记,才被拆成四组十进制数字。为进比如你看到的地址192.168.1.1,它的转换制真面目其实是11000000.10101000.00000001.00000001。 转换的为进逻辑不复杂。每个十进制数都在0到255之间,地址对应8位二进制。转换制拿192来说,为进它等于128+64,地址所以二进制是转换制11000000。168等于128+32+8,为进二进制是地址10101000。1就是转换制00000001。就这么简单——把四段分别转成8位二进制,为进中间的点号保留。 实际动手时,我习惯用“减权值”的方法。从最高位128开始,如果当前数大于等于该权值,就写1并减去,否则写0。拿200举例:200≥128,写1剩72;72<64?不对,72≥64,写1剩8;8<32写0;8<16写0;8≥8写1剩0;后面三位全是0。结果就是11001000。熟练之后,你甚至能口算——前提是记住128、64、32、16、8、4、2、1这串权值。 为什么要费劲转二进制?因为子网掩码、路由聚合、ACL规则全在二进制层面运作。举个例子,/24子网掩码255.255.255.0,二进制就是连续24个1加8个0。你只有看到二进制形式,才能直观理解“网络位”和“主机位”的边界在哪里。有一次排查一个跨网段通信故障,同事盯着十进制IP看了半天没头绪,我随手转成二进制,立刻发现两台机器虽然十进制前缀相似,但第24位之后的主机位有重叠——这问题用十进制根本看不出来。 转换过程中有个坑常被忽略:十进制数转二进制时,不足8位要在前面补零。比如5转成二进制是101,但作为IP地址的一段,必须写成00000101。漏掉前导零会导致整个地址长度错误,甚至改变网络位的划分。我见过有人把10.0.0.5写成1010.0.0.101,那就是完全跑偏了。 另一个容易出错的地方是十六进制与二进制的混用。某些网络工具会显示十六进制形式的IP,比如0xC0A80101。如果你熟悉二进制,一眼就能看出C0是11000000,A8是10101000——每两位十六进制正好对应8位二进制,这比十进制转换还快。 说到底,二进制转换不是考试题,而是一个排障工具。当网络行为不符合直觉时,把IP剥到最底层看看,往往比在十进制里绕圈子更直接。练熟了,你甚至能像读十进制一样快速扫出二进制里的模式——比如看到11111111就知道这是广播地址的最后一个字节,看到00000000就知道是网络号。这种直觉,是那些只记十进制的人永远体会不到的。 |