子网与 CIDR
复习
- 为什么还需要 IP:MAC 地址只适合本地链路,IP 提供可路由的层次地址
- IPv4 数据包:提供跨网络的统一信封,首部含地址、协议、长度与 TTL
- IP 地址:由 32 位组成,点分十进制只是它的显示形式
TL;DR
- CIDR 用前缀长度表示一个地址范围
- 主机比较自己的前缀与目标地址,判断目标是否在本地
- 长前缀表示更小、更具体的范围
正文
上一章说,IP 地址分网络部分和主机部分,可这条分界线由前缀长度决定。那么,前缀长度该怎么写、怎么用?
用“/”数清楚前几位
常见的写法是 192.168.1.0/24。这里的 /24 表示:前 24 位是网络部分,剩下的位是主机部分。
这种“地址 / 前缀长度”的表示法,叫作 CIDR(无类别域间路由)。它用一个斜杠加数字,就把一个地址范围定义得清清楚楚。
前缀越长,网络部分越多,范围就越小、越具体。比如 /24 表示的地址范围,就比 /16 小得多。
算出该往哪送
有了前缀,主机就能做一个很关键的判断:目标地址和我,是不是在同一个网络里?
做法是:用自己的前缀,去和目标的地址比较——看前几位是否一致。
- 如果在同一个网络(前缀相同),说明目标就在本地链路上,直接在本链路上找它
- 如果不在同一个网络,就把包交给默认网关(default gateway),由它继续往外转发
这个判断极其重要,因为它决定了每一台主机的第一跳:是“我自己就能找到它”,还是“我得先交给别人”。
两个地址看着像,却未必同网
这里有个容易踩的坑:两个地址写出来很像,未必就在同一个子网。
因为是否同网,取决于各自配置的前缀长度,而不只是点分十进制的外观。192.168.1.20/24 和 192.168.2.20/24 显然不在同一网;可有些情况下,即便数字相近,只要前缀不同,结论也可能相反。
所以,判断同网,一定要带上前缀一起看。 只看数字,很容易被表象骗了。
思考题 1
两台地址看似相近的机器为何仍可能不在同一子网?
思考题 2
主机在发送数据前,为什么必须先判断“目标是否在本地网络”?这个判断省下了什么?
小结
知识点
- 子网由地址和前缀共同决定
- CIDR 用前缀长度表示地址范围
- 同网则本地交付,不同网则交给默认网关
参考资料
- Wikipedia(zh):无类别域间路由:用前缀长度表示地址范围的方法
- Wikipedia(zh):子网:把网络进一步划分出的地址范围
思考题答案(仅供参考)
思考题 1
是否同网取决于各自配置的前缀长度,而不只看点分十进制的外观。数字相近不代表前缀一致,前缀不同就可能分属不同网络。
思考题 2
因为同网和不同网的处理方式完全不同:同网可以直接在本地链路上寻找目标,不同网则必须先交给网关。提前判断,能让主机知道该走哪条路,避免把本该本地交付的数据绕到网关,省下了不必要的转发和延迟。
协议
本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。
封面图

设计师 | 南国微雪