做网络这行,早晚都要过一次这样的坎:看到 192.168.1.0/24 能秒懂,看到 10.1.16.0/20 就得开始心算,等到需要判断两个网段能不能合并、合并之后会不会吞掉别的网段,那就必须掰着手指头数二进制了。实验十四这个“IPv4地址的无分类编址方法”,我第一次做的时候觉得不过是写几个掩码、敲两条命令,直到后来在一个小局域网里亲眼看着四个 /26 聚合成一条 /24,随即又亲手制造出一个路由黑洞,才真正意识到 CIDR 是整个 IP 网络里最值得花时间的数学基础。
这篇文章我会把整个实验完整重做一遍,按照“为什么会有 CIDR → 怎么算 CIDR → 怎么在路由器上配出来 → 聚合验证 → 踩坑排查 → 生产环境迁移”的顺序展开。无论你是正在为实验报告发愁的网络专业学生,还是想在 eNSP、GNS3 里把地址规划练成肌肉记忆的新人,或者是单纯想弄明白“为什么电脑老显示无网络访问权限”的普通用户,都能在下面找到对应段落。
1. 为什么这个实验到今天还值得认真做
1.1 有类编址留下的历史包袱
学 IP 地址的时候,大家都背过那张分类表:A 类的前 8 位是网络号,默认掩码 255.0.0.0,地址范围从 0.0.0.0 到 127.0.0.0;B 类前 16 位是网络号,默认掩码 255.255.0.0,从 128.0.0.0 到 191.255.0.0;C 类前 24 位是网络号,默认掩码 255.255.255.0,从 192.0.0.0 到 223.255.255.0。这套体系在互联网早期确实简单直观,但它有两个非常要命的问题。
第一个问题是地址浪费。一个公司如果只需要 300 个 IP,C 类只有 254 个可用地址,不够;B 类有 65534 个可用地址,又远远超出需求。那就只能给它分一个 B 类,结果几万个地址就这么闲置了。在 IPv4 地址总量只有 43 亿的背景下,这种“按类分配”的方式是极大的浪费。第二个问题是路由表膨胀。那个年代每个 C 类网段都要在骨干路由器的路由表里占一条记录,A/B/C 类又没办法把连续的小网段合并成一条大路由,导致互联网骨干路由表迅速膨胀,路由器内存和查表性能都吃不消。
后来大家想了一个缓和办法,叫“子网划分”:在某个主类网络内部,把主机位的一部分借出来当子网位。比如公司分到一个 B 类 172.16.0.0/16,内部可以按 /24 切成 256 个子网,每个子网容纳 254 台设备,这样内部不浪费。但问题在于,对外部网络来说,它就是一条 B 类路由,没法把内部结构汇总给外面看,骨干路由表依然很臃肿。
1.2 CIDR 到底改了什么
到了 1993 年,RFC 1518 和 RFC 1519 正式提出了 CIDR,中文叫“无分类域间路由”,也叫“无分类编址”。它的核心思想就一句话:彻底废除 A/B/C 类的固定网络位长度,改用“前缀长度”来描述网络位。192.168.1.0/24 里的 /24 就表示前 24 位是网络前缀,后面 8 位是主机位;同样,10.1.16.0/20 表示前 20 位是网络前缀,后面 12 位是主机位。
这样一来,地址划分就从“只能按 8、16、24 位切”变成了“任意位都能切”。你需要 300 个可用地址,就找一个 /23 的块,512 个地址,去掉网络地址和广播地址还剩 510 个,非常合适。同时,路由聚合也顺势成为可能:连续的几个小网段,如果在前缀长度上具备相同的二进制前缀,就能合并成一条大路由,大大减轻骨干路由表的负担。
这里顺便回应一下很多人搜过的“ipv4报文格式”问题。IPv4 报文头里关于源地址和目的地址的字段一直没变,变的不是报文格式,而是路由器对地址的解释方式。收到一个目的地址后,路由器会把路由表里每条路由的前缀长度和目的地址做“与”运算,看结果是否等于该路由的网络地址;如果有多个条目同时匹配,就选择前缀最长的那一条,这就是“最长前缀匹配”。比如目的地址是 10.1.1.130,路由表里同时有 10.1.1.128/26 和 10.1.1.0/24 两条路由,那么数据包会走 /26 这条精确路由,而不是 /24 那条汇总路由。
1.3 无分类让网络管理变简单,也变复杂了
说它变简单,是因为地址可以按需分配,不再受类的束缚;说它变复杂,是因为所有计算都必须回到二进制,凭感觉很容易出错。CIDR 里藏着一堆“陷阱”:/22 到底覆盖多大范围?两个 /24 能不能成功聚合?聚合之后会不会吞掉邻居的地址?这些问题如果没想清楚,轻则网段配置错误,重则出现路由环路和黑洞。这个实验的价值,就是把这些换算和边界判断练成肌肉记忆,而不是靠网上的 CIDR 计算器帮你兜底——毕竟考试不让你用,生产环境排障时你也未必有时间打开网页。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. CIDR 的核心换算:前缀、掩码、可用地址一次算清
2.1 前缀长度和子网掩码其实是同一件事
很多初学者会被两种表示法绕晕:/26 和 255.255.255.192 到底什么关系?其实它们说的是同一件事。子网掩码就是前缀长度对应的“连续 1”序列,比如 /26 表示前 26 位是 1,后 6 位是 0,转成十进制就是:
第一段 8 个 1 = 255,第二段 8 个 1 = 255,第三段 8 个 1 = 255,第四段前 2 位是 1、后 6 位是 0,也就是 11000000 = 192,所以 /26 = 255.255.255.192。
平时常用的对应关系,我整理成了下面这张表:
| 前缀长度 | 子网掩码 | 地址总数 | 可用地址数 | 典型用途 |
|---|---|---|---|---|
| /30 | 255.255.255.252 | 4 | 2 | 点对点互联链路 |
| /29 | 255.255.255.248 | 8 | 6 | 小型接入网段 |
| /28 | 255.255.255.240 | 16 | 14 | 小规模子网 |
| /27 | 255.255.255.224 | 32 | 30 | 小型办公网 |
| /26 | 255.255.255.192 | 64 | 62 | 分支子网 |
| /25 | 255.255.255.128 | 128 | 126 | 中等规模子网 |
| /24 | 255.255.255.0 | 256 | 254 | 最常见的子网 |
| /23 | 255.255.254.0 | 512 | 510 | 需要约 300 IP 的场景 |
| /22 | 255.255.252.0 | 1024 | 1022 | 大容量网段 |
| /16 | 255.255.0.0 | 65536 | 65534 | 大型私有网络 |
| /8 | 255.0.0.0 | 16777216 | 16777214 | 超大网络 |
换算技巧很简单:看到 /N,就知道掩码前 N 位是 1;反过来,看到一
