
📚 本文收录于「流浪」的系列专栏
| 🐧 Linux系统 | ⚙️ C++ |
| 📊 数据结构与算法 | 🐍 Python |
| 🔗 LangChain & LangGraph | 🗄️ MySQL 数据库 |
| 🌿 Git 工具 | 🌐 计算机网络 |
| 🤖 LLM | 💯 大厂面试、八股 |
| 📚 学习筑基专栏 |
🏠 博客主页:流浪 | 📝 原创首发于 CSDN
前言: 篇20 把 IPv4 报头十二个字段拆完,收在「IP 只承诺尽力而为」。报头里的源地址和目的地址各占 32 位,可这 32 位从来不是一串没有结构的数字,它天生分成网络号和主机号两段。这篇讲这两段怎么切、切点由谁定,掩码和 CIDR 怎么把切点写成能算的形式,以及切完之后一个子网里还剩多少个地址真能用。
一、网络是被设计出来的:学号、学院群与 IP 的分段结构
1.1 学号的分段:学院号加学院学生序号
- 学号不是随机生成的数字,它被拆成两段:
学号 = 学院号 + 学院学生序号,不同字段各自承担不同含义。 - 计算机学院的学院号是
01,那么01123里的01说明这个人属于计算机学院,123说明他在这个学院里排第 123 号。 - 这个结构带来一个直接好处:只看前两位就知道这人归哪个学院,不必把全校名单从头翻到尾。
编号结构本身就是一种索引,分段位置决定了一次查找能砍掉多少无关对象。
1.2 钱包案例:一条信息怎么从学院群走到校群
- 计算机学院的小明(
01123)捡到一个钱包,钱包里只剩一条可用信息:一张学生证,上面写着学号06321。 - 学校的组织形态是两层:每个学院一个学院群,成员是本学院所有人;学院群之上还有一个校群,成员是各学院的学生会主席,由主席负责把学院和校群连起来。
- 小明把「捡到钱包、这是我的电话」发到本学院群里,学院的学生会主席看到
06不是本院的号,把信息转发到校群;校群里机械学院的主席认出06是自己学院,又转回机械学院群。 - 丢钱包的李四(
06321)看到自己的学号,和小明联系上,钱包归还。 - 这条路径的形状是:信息在学院内部传一次,跨学院传一次,再在目标学院内部传一次,一共三段,每一段只在需要它的那个圈子里流转。

信息没有广播给全校每一个人,它沿着「学院 → 校 → 学院」的层级走了三跳就找到目标,这正是分段编号带来的效率。
1.3 这套模型逐条映射到网络
- 每个学院对应一个子网,学院内部转发对应内网转发,包在同一个子网里从一台主机交到另一台主机。
- 学生会主席对应出入口路由器:它是本院唯一能和外界打交道的角色,院内的事它不管,跨院的事必须经它。
- 校群对应公网转发:信息出了学院、在公共那张网上按网络号找下一个学院。
01、06对应网络号;01123、06321对应源主机和目标主机;123、321对应主机号。- 学校对应运营商:它把全校切成若干学院、给每个学院分配一段号段,这件事发生在你入学之前,你只需要按规则填后几位。
一套「子网加出入口加公共骨干」的组织结构,就是网络分层的现实版本;地址分段只是把这套结构写成了数字。
二、为什么要划分子网:从线性遍历到先查网络
2.1 不划分子网的代价是线性遍历
- 如果全校只有一张大名单、学号里也不带学院号,找一个人只能从头到尾挨个问,这种找法叫线性遍历。
- 线性遍历的开销和总人数成正比:全校三万人,平均要问一万五千次才碰到目标,最坏情况要问满三万人。
- 一旦学号里带了学院号,第一步就能砍掉其他五个学院,只剩本院名单里再找。
分段的意义不在编号好看,而在它把一次全局查找变成了一次局部查找。
2.2 路由的本质是查找主机,是一个淘汰的过程
- 报文路由剥掉所有细节之后只剩一个动作:在茫茫多的主机里找到目标那一台,而找的办法是淘汰。
- 先按网络号把不可能是目标的网络整片排除,剩下的那一小片里再按主机号定位;一次能排除的范围越大,剩下的候选就越少。
- 所以子网划分的目的只有一条:让查找主机必须先经过「查找目标网络」这一步,网络号一确定,其余网络在一次判断里就被淘汰。
路由不是一次算出完整路径,而是每一步都把不可能的选项砍掉一片;粒度越细砍得越狠,但每层要维护的规则也越多。
三、网段划分的本质:把 32 位切成网络号与主机号
3.1 IP 等于网络号加主机号,切点决定一切
一个正常的IP地址是 192.168.56.1------由三个点划分出四个八位段
- 一个 IPv4 地址是 32 位,它被切成两段:前面是网络号(network),后面是主机号(host)。
- 网段划分的本质,就是把 32 位比特位进行划分,确定网络号占多少位。
- 切点位置一变,同一个地址串的含义就全变:切在第 24 位,
192.168.1是网络号;切在第 16 位,192.168才是网络号。
地址不是天生带结构的,结构是被划分规则临时赋予的,这也是掩码和 CIDR 存在的理由。
3.2 网络号与主机号的两条约束
- 网络号的作用是保证相互连接的两个网段具有不同的标识:两个网段连在同一个路由器上,网络号必须不同,否则路由器分不清包该往哪边走。
- 主机号的作用是同一网段内区分主机:同一网段内所有主机的网络号相同,主机号必须各不相同。
- 举一组实例:
192.168.128.10/24与192.168.128.11/24在同一个网段,网络号都是192.168.128,主机号10和11不同;192.168.144.10/24与192.168.144.11/24在另一个网段,网络号是192.168.144。 - 两个网段经路由器相连:上半段
192.168.128/24、下半段192.168.144/24,网段不同就必须配置不同的网络号,同一网段内则必须保持一致、主机号互不重复。

网络号管「你在哪一片」,主机号管「你在这片里的哪一格」,两者一起才构成全局唯一。
3.3 子网的定义:网络号相同的主机放到一起
- 不同的子网,其实就是把网络号相同的主机放到一起。
- 在子网里新增一台主机,它的网络号必须和这个子网一致,主机号则不能和子网里已有的任何一台重复。
- 把这两条守住,就能保证相互连接的所有网络里,每台主机的 IP 地址都不相同。
唯一性从来不是靠一个全局大编号实现的,而是靠「网络号加主机号」两层组合出来的。
四、分类划分法:五类地址与它注定浪费的原因
4.1 五类地址的固定切法
- 最早的划法是分类划分法:不看具体需求,只看地址的第一个字节,把整块地址空间预先切成五类。
- 每一类的网络号位数和主机号位数都写死,切点不由使用者决定。
| 类别 | 首字节范围 | 固定前缀 | 网络号位数 | 主机号位数 | 单块地址数 |
|---|---|---|---|---|---|
| A 类 | 1 ~ 126 |
首位 0 | 7 | 24 | 16,777,216 |
| B 类 | 128 ~ 191 |
10 |
14 | 16 | 65,536 |
| C 类 | 192 ~ 223 |
110 |
21 | 8 | 256 |
| D 类 | 224 ~ 239 |
1110 |
不划分 | 不划分 | 组播专用 |
| E 类 | 240 ~ 255 |
11110 |
不划分 | 不划分 | 保留 |



- B 类那 2 位固定前缀
10是类别标记,真正可分配的只有后面 14 位网络号,加起来才是「2 位前缀加 14 位网络号加 16 位主机号」。 - D 类不划分网络号与主机号,整块用作组播;E 类整块保留,只作实验用途。
分类法把切点交给了地址的第一个字节,用起来省事,代价是所有地址都被迫按三种尺寸装箱。
4.2 为什么要分类:地址稀缺与早期视野
- 早期定这套规则时,地址总量看起来还很宽裕,按块整段分配是最省事的做法:一个机构申请,就直接给一整类。
- 另一个现实是 IP 地址总量有限,各国运营商都在抢,谁先在自己国家搭起国家子网,谁就先占住号段。
- 分类法恰好适合这种整段划走的分配方式:一个 B 类就是 65536 个地址,一个 C 类就是 256 个,边界清清楚楚。
分类法是资源充裕时代的产物,它的设计前提是地址够用、分配图省事,而不是地址要省着用。
4.3 浪费在哪:一个 B 类只用了三台主机
- 分类法的局限是硬伤:切点固定,申请到的整块地址必须整块用,用不完的部分就空着。
- 举例(数字只为说明,不是真实案例):某学院申请到一个 B 类地址段,实际只有三台主机联网,那么这个 B 类里 65536 个地址中有 65533 个永远用不上。
- 这种浪费不是个别现象:成千上万个机构都在占一整类、用一小角,空出来的地址谁也拿不走。
浪费的根子不在使用者贪心,而在规则只允许整块申请,切点不可调就没有按需分配这回事。
地区或国家IP分布总结表 :
https://zh-hans.ipshu.com/country-list

五、子网掩码:把切分规则写成 32 位
5.1 掩码与 IP 按位与,得到网络号
- 子网掩码(subnet mask)是一个 32 位的正整数,用一串 1 后面接一串 0 表示,1 的段覆盖网络号、0 的段覆盖主机号。
- 把 IP 地址和子网掩码做按位与(AND)运算,得到的结果就是网络号。
- 按位与的规则很朴素:1 与任何位保留原值,0 与任何位一律清零,所以掩码里 0 的位置正好把主机号抹掉。
- 举例:
140.252.20.68与255.255.255.0按位与,前 24 位原样保留、后 8 位清零,得140.252.20.0。

掩码不是另一个地址,它是一张模板,按位与就是用这张模板把主机号擦掉、只留下网络号。
5.2 B 类例子:14 位网络号加 16 位主机号

- 假如运营商申请到一个 B 类网络,它的结构是 2 位固定前缀
10、14 位网络号、16 位主机号。 - 默认掩码是
255.255.0.0,二进制写成11111111.11111111.00000000.00000000,前 16 位是 1、后 16 位是 0。 - 问题在于主机位给了 16 位,一个网段就有 65536 个地址,现实中一个机构根本用不到这么多。
主机位给得越多,单个子网越臃肿;掩码存在的第一个理由,就是把用不完的主机位收回来。
5.3 把主机位从 16 缩到 4:255.255.255.240
- 只想要最后 4 位做主机号,就把掩码改成前 28 位是 1、后 4 位是 0,二进制
11111111.11111111.11111111.11110000,点分十进制就是 255.255.255.240。 - 这样按位与之后,后 4 位依旧是 0,前面各位保持不变,网络号从 16 位变成 28 位。说白了就是通过设置掩码里 1 的个数,重新设置网络号的位数。
- 掩码存在的意义就在这里:让分类划分下来的那块地址被充分利用,在该类网络下构建更多子网。一个 B 类网络
/28,借走 12 位,理论上能切出 2 的 12 次方个子网,每个子网 16 个地址。 - 代价是子网变小:每个子网的地址数从 65536 降到 16,划得更细,单个子网能容纳的主机数变

掩码不是免费的午餐,它拿单个子网的容量换子网的数量,这笔交换要按实际需求来定。
六、CIDR:网络号位数不再由类别决定
6.1 CIDR 的四条规则
B 类 140.252.0.0,掩码 255.255.255.240(/28)
----->140.252.20.64/28
- 针对分类法浪费的问题,后来提出了新的划分方案,叫 CIDR(Classless Interdomain Routing,无类别域间路由)。
- 它引入一个额外的子网掩码来区分网络号和主机号:掩码不再由类别隐含,而是跟着地址一起写出来。
- 子网掩码是一个 32 位的正整数,通常用一串 0 来结尾,这就是前缀必须连续的意思。
- 把 IP 地址和子网掩码做按位与,得到的结果就是网络号,这一步与分类法时代完全一样。
- 关键的一条:网络号和主机号的划分,与这个 IP 地址是 A 类、B 类还是 C 类无关。
CIDR 把切点从地址的第一个字节里解放出来,变成每个地址自带的一个参数,这才有了按需切分。
6.2 前缀写法怎么读:/24、/26、/28
- 写法是「地址/前缀长度」,例如
192.168.32.1/24,24表示子网掩码前 24 位为 1。 - 三个常用前缀与掩码的对应关系要记死:
/24对应255.255.255.0,主机位 8 位- 11111111.11111111.11111111.00000000
/26对应255.255.255.192,主机位 6 位- 11111111.11111111.11111111.11000000
/28对应255.255.255.240,主机位 4 位- 11111111.11111111.11111111.11110000
- 读法固定:斜杠后面的数字就是 1 的个数,32 减去它就是主机位的个数。
前缀长度是掩码的简写,两者是同一件事的两种记法,看到斜杠数字就该立刻换算出主机位数。
6.3 与分类法的区别:同一串地址可以按任意前缀切
- 分类法下
192.168.x.x只能是 C 类、主机位固定 8 位;CIDR 下同一串地址可以写成 /24、/26、/28,切点随需求走。 - 更彻底的是,一个 /24 还能继续切成 /26,切出来的每一块都是独立子网,各自有各自的网络号,同一块地址里不同子网还能用不同长度的掩码。
CIDR 的意义不只是省地址,更是把切点变成每个子网自己的选择,这让地址分配第一次能贴合真实需求。
七、子网划分的算法与地址范围演算
7.1 反向:从掩码算出主机位数与可用主机数
- 拿到一个掩码,先数 1 的个数得到前缀长度,再用 32 减去它得到主机位数 n。
- 这个子网里的地址总数是 2 的 n 次方,可用主机数是 2 的 n 次方减 2。
- 减掉的两个是特殊地址:主机号全 0 的那个代表网络本身,主机号全 1 的那个是广播地址,两者都不能当普通主机用。
- 举例:/24 的主机位 8 位,2 的 8 次方是 256,可用 254 台;/28 的主机位 4 位,2 的 4 次方是 16,可用 14 台。
减 2 不是约定俗成,是那两个地址在网络里另有职务,占着位置但不干活。
7.2 正向:要划 N 个子网,借几位
- 正向算的是另一件事:手上有一块地址,要切成 N 个子网,需要从主机位里借几位给网络号。
- 办法是找最小的 k,使 2 的 k 次方大于等于 N;借 k 位之后,主机位剩 n 减 k 位,每个子网 2 的 n 减 k 次方个地址。
- 常见需求量对应的借位数可以直接背:
- 要 2 个子网,借 1 位
- 要 3 到 4 个,借 2 位
- 要 5 到 8 个,借 3 位
- 举例:一个 /24 要切成 5 个子网,2 的 2 次方是 4 不够、2 的 3 次方是 8 够,所以借 3 位,前缀变成 /27,每个子网 32 个地址、可用 30 台。
正向和反向是同一件事的两个方向,一个从需求推位数,一个从掩码推容量,两边都要会算。
7.3 演算例①:140.252.20.68 配 /24
- IP 地址
140.252.20.68,子网掩码255.255.255.0,两者按位与得到网络号140.252.20.0。 - 子网地址范围是
140.252.20.0 ~ 140.252.20.255,主机位 8 位,一共 256 个地址。 0和255这两个不能用,所以可用主机数是 256 减 2 等于 254 台。

算地址范围只要三步:按位与得网络号,网络号加 2 的 n 次方减 1 得末地址,总数减 2 得可用数。
7.4 演算例②:140.252.20.68 配 /28
- 同一个 IP,掩码换成
255.255.255.240,二进制是11111111.11111111.11111111.11110000,主机位只剩 4 位。 - 按位与得网络号
140.252.20.64:68 的二进制是01000100,与11110000相与后低 4 位被清零,剩下01000000就是 64。 - 主机位 4 位,2 的 4 次方等于 16,取值区间是 0 到 15,所以末地址是 64 加 15 等于 79。
- 子网地址范围是
140.252.20.64 ~ 140.252.20.79,其中全 0 与全 1 那两个不能用,可用主机数是 16 减 2 等于 14 台。

同一个地址配不同掩码,会落进不同的子网、拿到不同的可用数,掩码才是决定你在哪一段的那个参数。
7.5 VLSM:同一块地址里用不同掩码
- VLSM(Variable Length Subnet Mask,可变长子网掩码)指的是在同一个大网段内部,不同子网使用不同长度的掩码。
- 典型用法是先切大的、再在剩下的空间里切小的:主机多的部门给 /26,只有几台设备的给 /28。
- 前提是切出来的子网不能重叠:每一块的网络号必须互不相同,否则按位与之后会出现两个子网抢同一个网络号。
VLSM 是 CIDR 能力的直接落地,它让地址分配第一次能按实际有多少台机器来定,而不是按整块多大来定。
八、路由表与最长前缀匹配:淘汰在实现里长什么样
8.1 路由表里存的是前缀,不是单个地址
- 路由表里的一条记录不是某个 IP 该往哪走,而是某个前缀该往哪走,前缀就是网络号加掩码长度。
- 一条记录的形态是「目的前缀加下一跳」:
192.168.128.0/24走 A 口,192.168.144.0/24走 B 口。 - 转发时拿目的地址和每一条记录的前缀比对,比得上就说明这个包属于那个网段。
路由表能装下全网,靠的是按网段记账而不是按主机记账,这正是前面先查网络那一步的物理形态。
8.2 最长前缀匹配:越具体的规则越优先
- 一个目的地址可能同时匹配多条记录,比如
192.168.128.10的包同时命中下面两条:192.168.0.0/16,指向默认网关192.168.128.0/24,指向内侧那个接口
- 这时选前缀最长的那一条,因为它描述的范围最小、最具体。
- 这条规则叫最长前缀匹配(longest prefix match),它是 CIDR 带来的必然结果:前缀长度可变,就必须有优先级规则。
淘汰在实现里就是匹配加排序:先按前缀筛出所有候选,再挑最具体的那条,剩下的候选全部作废。
8.3 每一跳都查一次表

- 查表不是只在源主机做一次,每一个收到包的路由器都要拿目的地址查自己的表、决定下一跳。
- 所以一条路径是逐跳拼出来的,每个路由器只知道下一站,不知道全程。
- 掩码切得越细,表里的前缀条目越多,查表要比较的候选也越多,这是细粒度划分要付的另一笔账。
route 查看路由表
bash
route print

划分粒度、表规模、查表开销三者互相牵制,网络设计的取舍基本都在这条线上。
九、特殊 IP 地址:全 0、全 1 与环回
9.1 主机号全 0:代表这个局域网
- 把 IP 地址中的主机地址全部设为 0,这个地址就成了网络号,代表这个局域网。
- 它不能分配给任何一台主机,因为它的含义是这一整片,不是某一台。
- 举例:
192.168.128.0/24里的192.168.128.0就是这一片的网络号,写路由表、写配置时用它指代整个网段。
全 0 地址是整片的代号,它的存在让指向一个网段这件事有了一个可写的值。
9.2 主机号全 1:给同一链路所有主机发
- 把主机地址全部设为 1,这个地址就成了广播地址,用于给同一个链路中相互连接的所有主机发送数据包。
- 广播只在本地链路有效,出了这个网段就没有意义,路由器不会把广播转发到别的网段。
- 举例:
192.168.128.0/24的广播地址是192.168.128.255,发给它的包,这一片里所有主机都会收到。
全 1 地址是所有人的代号,它和全 0 一样占着位置不干活,这也是可用数要减 2 的原因。
9.3 127 开头的地址:本机环回
127.*的 IP 地址用于本机环回(loopback)测试,通常是127.0.0.1。- 环回地址的包不会真的发到网卡上,内核直接把它转回本机的协议栈,用来验证协议实现本身是否正常。
- 它不占任何真实网段,也不参与路由,纯属本机自测用的工具地址。
环回地址是协议栈的自检通道,它证明本机的 TCP/IP 实现能跑通,与外部网络无关。
十、43 亿不够用:IPv6、动态分配与 NAT 三条路
10.1 32 位地址空间的上限
- IPv4 地址是 32 位,总共 2 的 32 次方,大概是 43 亿个左右。
- 这个数量在互联网早期看起来用不完,但地址是整块分配的,再叠加分类法的浪费,实际可用的远少于 43 亿。
- 结果就是 IP 地址不够用,这不是使用不当,是地址空间的天花板到了。
地址不够用是结构问题,不是数量问题,所以三条解法都在改结构,而不是单纯地多发点地址。
10.2 三条路各解决了什么
- 针对地址不够用,工程上有三条路,分别改的是空间、周转和复用:
- IPv6:把地址从 32 位扩到 128 位,从根上扩大地址空间
- 动态分配:地址不长期绑在主机上,用的时候才给,用完可以回收给别的主机
- NAT:把私网地址在出口处换成公网地址,让多台主机共用一个公网地址
- IPv6 没能一夜替换掉 v4:现网设备、操作系统、应用全都要改,升级成本决定了这是一场长期过渡。
- 过渡方式是双栈(dual stack):一台主机同时配 v4 和 v6 地址,按对端支持情况选一套。
三条路各有代价:扩空间要换全链路设备,动态分配要维护租约,NAT 让外部再也连不进来,所以今天网络里 v4 仍然占大头。
十一、私有 IP 与公网 IP:NAT 把全局唯一降级成局部唯一
11.1 RFC 1918 的三段与地址数量
- 一个组织内部组建局域网,IP 地址只用于局域网内通信、不直接连到 Internet 上,理论上用任意地址都可以。
- 但为了避免和公网地址撞车,RFC 1918 规定了用于局域网的私有 IP 地址,共三段。
| 私有段 | 网络号位数 | 地址数量 |
|---|---|---|
10.* |
前 8 位 | 16,777,216 |
172.16.* ~ 172.31.* |
前 12 位 | 1,048,576 |
192.168.* |
前 16 位 | 65,536 |
- 落在这三个范围里的都是私有 IP,其余的都叫全局 IP,也就是公网 IP。
- 用
ipconfig或ifconfig看一眼本机地址,落在10.*、172.16.* ~ 172.31.*、192.168.*里,说明你在一张私网里。

私有地址的本质是约定好的重复:全世界都可以用同一段号,靠约定避免撞车,靠 NAT 在出口处翻译。
11.2 路由器两套 IP:WAN 口与 LAN 口

- 一个路由器可以配置两个 IP 地址,一个是 WAN 口 IP,一个是 LAN 口 IP,后者就是子网 IP;LAN 口连接的主机都从属于当前这个路由器的子网。
- 主机连上路由器,本质就是向路由器申请一个 IP,路由器从自己的子网号段里挑一个没被占用的主机号给它。
- 不同的路由器,子网 IP 其实都是一样的,通常都是
192.168.1.1;子网内的主机 IP 不能重复,但子网之间的 IP 可以重复。 - 每一个家用路由器,其实又作为运营商路由器的子网中的一个节点,这样的运营商路由器可能有很多级,最外层的那个 WAN 口 IP 才是公网 IP。
NAT 不是一层,是一串,地址在每一层出口被翻译一次,越往外越接近全局唯一。
11.3 私有地址不能出现在公网上
- 在网络通信过程中,私有 IP 不能出现在公网上:公网设备不认识私网段,包到了也送不回来。
- 子网内的主机需要和外网通信时,路由器把 IP 首部中的 IP 地址进行替换、换成 WAN 口 IP,逐级替换之后最终成为一个公网 IP,这个技术就是 NAT(Network Address Translation,网络地址转换)。
- 如果希望自己写的服务器程序能在公网上被访问到,就需要把程序部署在一台具有外网 IP 的服务器上。

NAT 用改写地址换来了地址空间的复用,代价是外部无法主动连进来,要对外提供服务就得有一台真正持公网地址的机器。
十二、全篇总结
1. 地址的结构是约定出来的,不是天生的
- 32 位本身没有说话的能力,切点落在第几位,才决定这串数字属于哪一片、还剩多少格能分配。
- 所以「这个地址在哪个网段」从来不是能单独回答的问题,必须连着掩码一起看。
2. 划分粒度换来的是淘汰效率
- 路由每一步都在做减法:先用网络号排掉不相关的整片,再在剩下的那片里定位主机。
- 切得越细,单次排掉的范围越大;代价是路由表条目变多,每跳要比较的候选也跟着变多。
3. 分类法的错在把切点写死
- 五类的边界由第一个字节决定,申请必须整块拿、整块用,用不完的空着也退不回去。
- CIDR 把掩码变成随地址一起写的参数,切点才第一次能按实际有多少台机器来定。
4. 算可用地址只有三步
- 按位与得网络号,网络号加 2 的 n 次方减 1 得末地址,总数减 2 得可用数。
- 减掉的那两位各有职务:全 0 指整片网络,全 1 指全片广播,127 指本机环回。
5. 唯一性分两层成立
- 子网内靠主机号不重复,子网之间靠网络号不同;私网地址全世界都能重复,靠 NAT 在出口翻译。
- 32 位不够用,三条解法分别改空间、改周转、改复用,代价各不相同。
6. 特殊地址是规则的一部分,不是例外
- 全 0、全 1、127 都占着地址位却不能分给主机,漏掉哪一个,可用数都会算错。
- 把三者串成一条线记:全 0 是网络自己,全 1 是全网广播,127 是回到本机。
7. 掩码是网段的公共基准,不是主机私事
- 每台主机都拿自己的掩码做按位与来判断网段,掩码不一致,同一对地址会被与出不同的网络号。
- 同网段掩码必须统一,配错的主机会得出和邻居相反的交付判断,通信变成单边。
十三、文末面试题
13.1 推导题
1. 给定 192.168.1.0/24,可用主机数是多少,地址范围到哪为止?
答(推导):前缀 24 位,主机位就是 32 减 24 等于 8 位,这个子网一共 2 的 8 次方等于 256 个地址。可用数要减掉两个特殊地址,主机号全 0 的 192.168.1.0 是网络号、主机号全 1 的 192.168.1.255 是广播地址,所以可用 254 台,可分配的范围是 192.168.1.1 到 192.168.1.254。这里要注意问的是「地址范围」还是「可分配范围」,前者是 0 ~ 255,后者才是 1 ~ 254。
2. 掩码 255.255.255.240 下,192.168.1.10 和 192.168.1.25 在同一个子网吗?
答(推导):255.255.255.240 就是 /28,主机位 4 位,每个子网 16 个地址,切点落在最后一个字节的高 4 位。10 的二进制是 00001010,与 11110000 相与得 0;25 的二进制是 00011001,相与得 00010000 也就是 16。两个网络号是 192.168.1.0 和 192.168.1.16,不是同一个子网。判断同网段的通用做法就是各自和掩码按位与,看结果是否相等,不要拿整串地址去比。
3. 一个 /24 要划出 6 个可用子网,前缀要改成多少,每个子网剩多少地址?
答(推导):要 6 个子网,就要找最小的 k 让 2 的 k 次方不小于 6,k 取 2 只有 4 个不够,k 取 3 得 8 个够用,所以从主机位借 3 位,前缀从 /24 变成 /27。主机位剩 5 位,每个子网 2 的 5 次方等于 32 个地址,扣掉全 0 与全 1 两个,可用 30 台。这里要留意的坑是「划 6 个」不等于「正好 6 个」,实际会切出 8 个,多出来的两个空着,这是位数只能取 2 的幂决定的。
13.2 真题
1. 某学校获取到一个 B 类地址段,管理员把每个网段的子网掩码设置为 255.255.254.0,考虑每个网段需要有网关设备占用一个地址,每个网段还有多少可用的主机地址?
答(转述):255.255.254.0 的二进制是 11111111.11111111.11111110.00000000,末尾连续 0 有 9 个,所以主机位是 9 位,地址总数 2 的 9 次方等于 512。先扣掉全 0 的网络号和全 1 的广播地址得 510,题目又说网关要占一个地址,再减 1 得 509。
【真题·转述自 牛客:每个网段还有多少可用的主机地址】
2. 给定网段 192.168.0.128/28,该网段中可用的主机数目是多少?
答(转述):/28 表示掩码有 28 个 1,即 255.255.255.240,主机位是 32 减 28 等于 4 位,地址总数 2 的 4 次方等于 16。扣掉全 0 与全 1 两个特殊地址,可用主机数是 14。这道题容易错在把「地址总数 16」当成答案,或者把 CIDR 下「全 0 全 1 也能用」这个说法套进来。
【真题·转述自 牛客:给定网段 192.168.0.128/28,该网段中可用的主机数目】
3. 关于无分类编址 CIDR,下列说法错误的是哪一个?

答(转述):错的那条是「网络前缀越短,其地址块所包含的地址数就越少」,事实正好相反,前缀越短留给主机号的位置越多,地址块越大。其余三条都成立:CIDR 用各种长度的网络前缀代替分类地址里的网络号和子网号;它把网络前缀相同的连续 IP 地址组成一个地址块;查找路由表时可能得到多个匹配结果,应当选网络前缀最长的那条,因为前缀越长路由越具体。
【真题·转述自 牛客:关于无分类编址 CIDR,下列说法错误的是】
4. 在使用 CIDR 时,路由表每个项目由什么和下一跳地址组成?
答(转述):由网络前缀和下一跳地址组成,不是网络号、子网号或主机号。CIDR 的路由表按前缀记账,前缀本身就带着长度信息,所以一条记录写「前缀加下一跳」就够,不需要再单独存一个掩码字段。查表时如果命中多条,选前缀最长的那条,这就是最长前缀匹配。
【真题·转述自 牛客:在使用 CIDR 时,路由器表每个项目由( )和下一跳地址组成】
5. 当 IP 地址的主机地址全为 1 时,代表的意思是什么?
答(转述):代表对该网络的广播,不是专用地址、不是本网络地址,也不是环回地址。主机位全 1 的地址专门用于向同一链路内的所有主机发送数据包;主机位全 0 才表示这个子网的网络号;环回是 127.* 那一段,典型是 127.0.0.1。这三个概念经常被混在一道题里考,记住全 0 是网段、全 1 是广播、127 是环回。
【真题·转述自 牛客:当 IP 地址的主机地址全为 1 时代表的意思是】
6. 下列哪个地址不属于私有地址?
答(转述):172.64.0.1 不属于。RFC 1918 规定三段私有地址:10.0.0.0/8 范围 10.0.0.0 ~ 10.255.255.255;172.16.0.0/12 范围 172.16.0.0 ~ 172.31.255.255;192.168.0.0/16 范围 192.168.0.0 ~ 192.168.255.255。另外三个选项 172.16.0.1、192.168.5.3、10.126.0.1 都落在各自范围内,只有 172.64.0.1 的第二字节 64 超出了 172.16 ~ 172.31 这个区间。
【真题·转述自 牛客:下列哪些地址不属于私有地址】
💬 结语: 32 位地址不是一串随机数字,它被切过,切点决定一个地址属于哪一片、还剩多少格能用。掩码和 CIDR 一路在改的都是这个切点。评论区聊聊,你第一次算出
192.168.0.0/26的可用主机数时,有没有把全 0 全 1 也数进去。