Keyboard shortcuts

Press ← or → to navigate between chapters

Press ? to show this help

Press Esc to hide this help

子网与 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 用前缀长度表示地址范围
  • 同网则本地交付,不同网则交给默认网关

参考资料

  1. Wikipedia(zh):无类别域间路由:用前缀长度表示地址范围的方法
  2. Wikipedia(zh):子网:把网络进一步划分出的地址范围

思考题答案(仅供参考)

思考题 1

  是否同网取决于各自配置的前缀长度,而不只看点分十进制的外观。数字相近不代表前缀一致,前缀不同就可能分属不同网络。

思考题 2

  因为同网和不同网的处理方式完全不同:同网可以直接在本地链路上寻找目标,不同网则必须先交给网关。提前判断,能让主机知道该走哪条路,避免把本该本地交付的数据绕到网关,省下了不必要的转发和延迟。

协议

  本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。

封面图

![](https://raw.githubusercontent.com/TinySnow/computer-science-guide-resources/master/computer-science-guide/cover/计算机网络/子网与 CIDR.png)

设计师 | 南国微雪