你面试时被问过"192.168.1.1的二进制是多少"吗?我见过一个五年经验的后端工程师当场愣住——不是不会,是突然忘了那套128-64-32的减法游戏。这篇文章就是来治这个"突然失忆"的。

一个反常识:字节和八位组根本不是一回事

打开网易新闻 查看精彩图片

先说个冷知识。你在代码里写的byte,和网络配置里的"octet(八位组)",技术上都是8个比特(bit,比特,即0或1的最小单位)。但用法完全不同。

字节(byte)是存储单位。你硬盘里的文件、内存里的变量,按字节算。

八位组是网络专属术语。IP地址192.168.1.10写成192.168.1.10,不是程序员偷懒,是因为网络协议栈里它真的被切成4个八位组处理。

原文作者强调这个区分,我猜是踩过坑——用存储思维搞网络配置,容易在子网掩码上栽跟头。

为什么每个数字不能超过255?

8个比特能表示多少种状态?2的8次方,256种。从0开始数,正好0到255。

这是硬性天花板。你不可能有IP地址192.168.1.256,就像不可能有13月32号。不是"约定俗成",是数学上装不下。

IPv4地址32位,4个八位组拼起来。IPv6涨到128位,所以写成8组16进制数——不是设计师喜欢冒号,是十进制写出来太长,人类记不住。

盒子法:把192拆成128+64的暴力美学

现在进入实操。原文教的"盒子法",本质是把十进制二进制变成一道小学减法题。

画8个格子,从左到右填:128、64、32、16、8、4、2、1。

这些数是2的7次方到2的0次方。作者没展开讲幂次,我猜是觉得对目标读者太基础——但如果你是转行的,记住这个规律就行:每个数都是右边那个的两倍。

拿192开刀:

192 ≥ 128?是,填1,余64。
64 ≥ 64?是,填1,余0。
后面全是0。

结果:11000000。

168稍微麻烦点:

168-128=40,第一位1。
40<64,第二位0。
40≥32,第三位1,余8。
8<16,第四位0。
8≥8,第五位1,余0。
后面000。

结果:10101000。

注意到规律了吗?1和0交替出现,像某种二进制心跳。

IP地址的完整二进制长什么样

把四个八位组拼起来:

192 → 11000000
168 → 10101000
1 → 00000001
10 → 00001010

完整版:11000000.10101000.00000001.00001010

32个0和1。这就是路由器眼里你家的IP地址。人类看十进制是为了方便,机器只认这个。

原文作者加了个记忆技巧:大数字在左,小数字在右。翻译一下——盒子法从左往右减,和十进制数位的高低顺序一致。不用死记硬背,符合直觉。

这套知识到底用在哪

不是面试炫技。子网划分(subnetting)时,你要算网络地址和广播地址,得在二进制层面操作。CIDR表示法比如/24,意思是前24位是网络位——也就是前三个八位组固定,最后一个留给主机。

云厂商的安全组配置、K8s的CNI插件调优、甚至抓包分析时的掩码过滤,底层都是这套。不会算,就只能死记硬背"255.255.255.0是C类",出了问题抓瞎。

原文标题叫"VERY IMPORTANT FOUNDATION",全大写加括号,透着一股被坑过的愤怒。我懂——基础不牢,排查网络故障时就像在黑箱子里摸象,全靠猜。

数据收束

8个比特,256种可能,4组拼成32位IPv4,8组扩到128位IPv6。盒子法用128-64-32-16-8-4-2-1这串数字,把二进制转换变成连小学生都能做的减法。192.168.1.10的二进制是11000000.10101000.00000001.00001010,共32位,其中1出现8次,0出现24次。记住这组数字,下次面试或排障时,至少能省下30秒翻笔记的时间。