【网络基础系列】08告别反人类的二进制!CIDR与网络计算的“十进制秒杀法则”
大家好,我是那个坚信“基础不牢,地动山摇”,正在向数据平台可靠性工程师(DPRE)死磕的 28 岁转行新人。
前两天我刚把 IPv4 的 A、B、C 类地址和子网划分背得滚瓜烂熟,结果翻开教材下一页,直接给我看破防了:原来传统的 A、B、C 类地址在现实中早就被淘汰了!
因为哪怕是划分子网,按 A、B、C 类那种死板的切法,IPv4 地址也早就耗尽了。为了续命,网络大佬们在 1993 年搞出了一个大杀器——无分类域间路由选择 (CIDR)。
如果你以后想考 AWS 架构师,或者自己搭云服务器,你一定见过 10.0.0.0/16 这种写法。今天,我就把这个 /16 背后的 CIDR 逻辑,以及一套能让软考网络计算题变成“小学加减法”的十进制秒杀神技,毫无保留地记录下来!
一、 什么是 CIDR?打破 A、B、C 类的枷锁
传统的 IP 分类太死板:A 类太大,C 类太小。
CIDR 的核心思想就是:把 A、B、C 类的界限彻底砸碎!不再规定前几个字节必须是网络号,而是用一个“斜杠 ( / )”来自由指定。
这就叫**“斜线记法”**。
比如:128.14.35.7/20
这根斜杠后面的 20,就代表这个 32 位的 IP 地址里,前 20 位是“网络前缀”,剩下的 12 位(32-20)是“主机号”。
只要知道这一个带着斜杠的地址,我们就能扒出这个网段的祖宗十八代(通过将主机号全填 0 或全填 1):
最小地址(网络地址):128.14.32.0
最大地址(广播地址):128.14.47.255
地址数量:剩下的 12 位主机号,2^12 =4096 个。
相当于多少个传统的 C 类网:4096 ÷ 256 =16 个。
在学这段的时候,我老老实实地在草稿纸上把十进制转成二进制 0 和 1 去算。虽然算对了,但头晕眼花,极容易出错。对于未来的高效运维来说,这种算力消耗是不可接受的。
二、 路由聚合:把碎布条缝成大毯子
懂了 CIDR 把网络切块,反过来想:我们能不能把多个相邻的小网络,合并成一个大网络呢?
看上面这张图。R1 路由器连着 5 个小网段,如果它老老实实把这 5 条路都告诉旁边的 R2 路由器,R2 的脑子(路由表)就要多记 5 条信息。如果互联网上几千万个路由器都这么干,全世界的网络早就瘫痪了。
解决办法就是“路由聚合(构造超网)”:找共同前缀!
我们把这 5 个子网的第三个字节拆开看二进制:
172.1.00000100.0
172.1.00000100.128
172.1.00000101.0
172.1.00000110.0
172.1.00000111.0
发现了吗?它们前面22个比特(8+8+6)是一模一样的!
那好,R1 就不发 5 条路由了,直接发一条聚合后的:172.1.4.0/22。一句话涵盖所有小弟,极大减轻了路由器的负担。
🚨 【云架构师实战】AWS 云平台的“最长前缀匹配”铁律
学到这里,我解开了一个萦绕在心头很久的疑惑。
既然大网包含了小网,如果一个数据包同时匹配了大网和小网,路由器该听谁的?
网际层铁律:最长前缀匹配!谁的斜杠后面的数字大,谁就更具体,就听谁的!
云端排错场景:
在 AWS 的 VPC 路由表里,你通常会看到一条 0.0.0.0/0(代表所有公网地址)指向互联网网关(IGW)。
但如果你把 MySQL 放在私有子网,你会加一条 10.0.1.0/24 指向 NAT 网关。
当一个去往 10.0.1.5 的包来到路由器时,它虽然符合 /0,但也符合 /24。因为 /24 前缀更长、更精确,路由器会强制把它送进内部的 NAT。
如果不懂这个底层逻辑,未来排查云端数据库连通性故障时,绝对会抓瞎!
三、 震撼我一整年的“十进制秒杀法则”
如果每次碰到软考真题,或者在配置交换机时,都要掏出笔算二进制,那太掉价了。
接下来,我要记录一套让我瞬间顿悟的**“块大小(Block Size)与超网聚合口算法”**。不用转二进制,纯十进制小学加减法!
绝招 1:根据子网掩码,十秒算出子网范围
假设有一个 IP 是 180.80.77.55,掩码是 255.255.252.0。求它的网络地址和广播地址。
算块大小(跨度):找到掩码里不是 255 和 0 的那个“特殊数字”(这里是 252)。用魔法公式256 - 252 = 4。这就是这个子网的跨度!
找网络地址(向下找倍数):原 IP 里发生变化的是第三个字节 77。找一个比 77 小,且是 4 的倍数的数字。心算一下,4 × 19 =76。
👉秒出最小地址(网络地址): 180.80.76.0找广播地址(下一个网段退一格):当前网段是 76,跨度是 4,下一个网段就是 80(180.80.80.0)。把它退一格(第三字节减1,第四字节拉满)。
👉秒出最大地址(广播地址): 180.80.79.255
绝招 2:路由聚合(找超网)的十进制逆向法
给你 4 个网段:35.230.32.0/21、35.230.40.0/21、35.230.48.0/21、35.230.56.0/21,让你聚合它们。
定龙头:聚合后的大网,网络地址必须和最小的那个小网一样。一眼看过去,必定是35.230.32.0 / X。
算总跨度:/21 的单个网段跨度是多少?(看文末的表可知是 8)。现在有 4 个这样的网,总跨度就是4 × 8 = 32。
反推新掩码:用魔法公式 256 - 总跨度32 = 224。新的掩码就是 255.255.224.0。
转为 CIDR:掩码里的 224 代表几个 1?(上篇笔记背过:128是1个,192是2个,224是3个)。前两个字节满了是 16,加上这 3 个就是19。
👉秒出聚合地址: 35.230.32.0/19
四、 📓 我的 DPRE 学习附录:终极条件反射表
这两个绝招之所以能行云流水,全靠把二进制的换算固化成了条件反射。
我把这张表抄在了我笔记本的第一页,只要背熟这张表,所有网络层的计算题,真的就只是小学一年级的加减法:
比如刚才路由聚合的最后一步:
看到块大小跨度是 32,查表对应的是特殊数字 224,对应增加了 3 个 1,原本前面有 16 个,直接秒出 /19!
呼,这应该是计算机网络基础里最耗脑细胞的计算部分了。啃下了这块硬骨头,感觉我对底层架构的掌控感又强了一分。
网络层的修行快要告一段落了,下一个阶段,我终于可以安心去配置我的 Linux 权限体系了!
我们下篇博客见。
💡 致谢说明:
本文理论模型与计算口诀,学习整理自优质网络公开课。为了方便日后备战软考与云架构师认证,摆脱繁琐的二进制计算,由本人记录核心笔记后,交予 AI 进行大白话润色与行文排版,特此致谢。
主要内容来源:B站 湖科大教书匠《计算机网络微课堂》