计算机网络篇21:网络层——网段划分与子网掩码,从分类地址到 CIDR 与可用主机数


📚 本文收录于「流浪」的系列专栏

🐧 Linux系统 ⚙️ C++
📊 数据结构与算法 🐍 Python
🔗 LangChain & LangGraph 🗄️ MySQL 数据库
🌿 Git 工具 🌐 计算机网络
🤖 LLM 💯 大厂面试、八股
📚 学习筑基专栏

🏠 博客主页:流浪 | 📝 原创首发于 CSDN


前言: 篇20 把 IPv4 报头十二个字段拆完,收在「IP 只承诺尽力而为」。报头里的源地址和目的地址各占 32 位,可这 32 位从来不是一串没有结构的数字,它天生分成网络号和主机号两段。这篇讲这两段怎么切、切点由谁定,掩码和 CIDR 怎么把切点写成能算的形式,以及切完之后一个子网里还剩多少个地址真能用。


一、网络是被设计出来的:学号、学院群与 IP 的分段结构

1.1 学号的分段:学院号加学院学生序号

  1. 学号不是随机生成的数字,它被拆成两段:学号 = 学院号 + 学院学生序号,不同字段各自承担不同含义。
  2. 计算机学院的学院号是 01,那么 01123 里的 01 说明这个人属于计算机学院,123 说明他在这个学院里排第 123 号。
  3. 这个结构带来一个直接好处:只看前两位就知道这人归哪个学院,不必把全校名单从头翻到尾。

编号结构本身就是一种索引,分段位置决定了一次查找能砍掉多少无关对象。

1.2 钱包案例:一条信息怎么从学院群走到校群

  1. 计算机学院的小明(01123)捡到一个钱包,钱包里只剩一条可用信息:一张学生证,上面写着学号 06321。
  2. 学校的组织形态是两层:每个学院一个学院群,成员是本学院所有人;学院群之上还有一个校群,成员是各学院的学生会主席,由主席负责把学院和校群连起来。
  3. 小明把「捡到钱包、这是我的电话」发到本学院群里,学院的学生会主席看到 06 不是本院的号,把信息转发到校群;校群里机械学院的主席认出 06 是自己学院,又转回机械学院群。
  4. 丢钱包的李四(06321)看到自己的学号,和小明联系上,钱包归还。
  5. 这条路径的形状是:信息在学院内部传一次,跨学院传一次,再在目标学院内部传一次,一共三段,每一段只在需要它的那个圈子里流转。

信息没有广播给全校每一个人,它沿着「学院 → 校 → 学院」的层级走了三跳就找到目标,这正是分段编号带来的效率。

1.3 这套模型逐条映射到网络

  1. 每个学院对应一个子网,学院内部转发对应内网转发,包在同一个子网里从一台主机交到另一台主机。
  2. 学生会主席对应出入口路由器:它是本院唯一能和外界打交道的角色,院内的事它不管,跨院的事必须经它。
  3. 校群对应公网转发:信息出了学院、在公共那张网上按网络号找下一个学院。
  4. 01、06 对应网络号;01123、06321 对应源主机和目标主机;123、321 对应主机号。
  5. 学校对应运营商:它把全校切成若干学院、给每个学院分配一段号段,这件事发生在你入学之前,你只需要按规则填后几位。

一套「子网加出入口加公共骨干」的组织结构,就是网络分层的现实版本;地址分段只是把这套结构写成了数字。

二、为什么要划分子网:从线性遍历到先查网络

2.1 不划分子网的代价是线性遍历

  1. 如果全校只有一张大名单、学号里也不带学院号,找一个人只能从头到尾挨个问,这种找法叫线性遍历。
  2. 线性遍历的开销和总人数成正比:全校三万人,平均要问一万五千次才碰到目标,最坏情况要问满三万人。
  3. 一旦学号里带了学院号,第一步就能砍掉其他五个学院,只剩本院名单里再找。

分段的意义不在编号好看,而在它把一次全局查找变成了一次局部查找。

2.2 路由的本质是查找主机,是一个淘汰的过程

  1. 报文路由剥掉所有细节之后只剩一个动作:在茫茫多的主机里找到目标那一台,而找的办法是淘汰。
  2. 先按网络号把不可能是目标的网络整片排除,剩下的那一小片里再按主机号定位;一次能排除的范围越大,剩下的候选就越少。
  3. 所以子网划分的目的只有一条:让查找主机必须先经过「查找目标网络」这一步,网络号一确定,其余网络在一次判断里就被淘汰。

路由不是一次算出完整路径,而是每一步都把不可能的选项砍掉一片;粒度越细砍得越狠,但每层要维护的规则也越多。

三、网段划分的本质:把 32 位切成网络号与主机号

3.1 IP 等于网络号加主机号,切点决定一切

一个正常的IP地址是 192.168.56.1------由三个点划分出四个八位段

  1. 一个 IPv4 地址是 32 位,它被切成两段:前面是网络号(network),后面是主机号(host)。
  2. 网段划分的本质,就是把 32 位比特位进行划分,确定网络号占多少位。
  3. 切点位置一变,同一个地址串的含义就全变:切在第 24 位,192.168.1 是网络号;切在第 16 位,192.168 才是网络号。

地址不是天生带结构的,结构是被划分规则临时赋予的,这也是掩码和 CIDR 存在的理由。

3.2 网络号与主机号的两条约束

  1. 网络号的作用是保证相互连接的两个网段具有不同的标识:两个网段连在同一个路由器上,网络号必须不同,否则路由器分不清包该往哪边走。
  2. 主机号的作用是同一网段内区分主机:同一网段内所有主机的网络号相同,主机号必须各不相同。
  3. 举一组实例: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。
  4. 两个网段经路由器相连:上半段 192.168.128/24、下半段 192.168.144/24,网段不同就必须配置不同的网络号,同一网段内则必须保持一致、主机号互不重复。

网络号管「你在哪一片」,主机号管「你在这片里的哪一格」,两者一起才构成全局唯一。

3.3 子网的定义:网络号相同的主机放到一起

  1. 不同的子网,其实就是把网络号相同的主机放到一起。
  2. 在子网里新增一台主机,它的网络号必须和这个子网一致,主机号则不能和子网里已有的任何一台重复。
  3. 把这两条守住,就能保证相互连接的所有网络里,每台主机的 IP 地址都不相同。

唯一性从来不是靠一个全局大编号实现的,而是靠「网络号加主机号」两层组合出来的。

四、分类划分法:五类地址与它注定浪费的原因

4.1 五类地址的固定切法

  1. 最早的划法是分类划分法:不看具体需求,只看地址的第一个字节,把整块地址空间预先切成五类。
  2. 每一类的网络号位数和主机号位数都写死,切点不由使用者决定。
类别 首字节范围 固定前缀 网络号位数 主机号位数 单块地址数
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 不划分 不划分 保留
  1. B 类那 2 位固定前缀 10 是类别标记,真正可分配的只有后面 14 位网络号,加起来才是「2 位前缀加 14 位网络号加 16 位主机号」。
  2. D 类不划分网络号与主机号,整块用作组播;E 类整块保留,只作实验用途。

分类法把切点交给了地址的第一个字节,用起来省事,代价是所有地址都被迫按三种尺寸装箱。

4.2 为什么要分类:地址稀缺与早期视野

  1. 早期定这套规则时,地址总量看起来还很宽裕,按块整段分配是最省事的做法:一个机构申请,就直接给一整类。
  2. 另一个现实是 IP 地址总量有限,各国运营商都在抢,谁先在自己国家搭起国家子网,谁就先占住号段。
  3. 分类法恰好适合这种整段划走的分配方式:一个 B 类就是 65536 个地址,一个 C 类就是 256 个,边界清清楚楚。

分类法是资源充裕时代的产物,它的设计前提是地址够用、分配图省事,而不是地址要省着用。

4.3 浪费在哪:一个 B 类只用了三台主机

  1. 分类法的局限是硬伤:切点固定,申请到的整块地址必须整块用,用不完的部分就空着。
  2. 举例(数字只为说明,不是真实案例):某学院申请到一个 B 类地址段,实际只有三台主机联网,那么这个 B 类里 65536 个地址中有 65533 个永远用不上。
  3. 这种浪费不是个别现象:成千上万个机构都在占一整类、用一小角,空出来的地址谁也拿不走。

浪费的根子不在使用者贪心,而在规则只允许整块申请,切点不可调就没有按需分配这回事。

地区或国家IP分布总结表 :

https://zh-hans.ipshu.com/country-list

五、子网掩码:把切分规则写成 32 位

5.1 掩码与 IP 按位与,得到网络号

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

掩码不是另一个地址,它是一张模板,按位与就是用这张模板把主机号擦掉、只留下网络号。

5.2 B 类例子:14 位网络号加 16 位主机号

  1. 假如运营商申请到一个 B 类网络,它的结构是 2 位固定前缀 10、14 位网络号、16 位主机号。
  2. 默认掩码是 255.255.0.0,二进制写成 11111111.11111111.00000000.00000000,前 16 位是 1、后 16 位是 0。
  3. 问题在于主机位给了 16 位,一个网段就有 65536 个地址,现实中一个机构根本用不到这么多。

主机位给得越多,单个子网越臃肿;掩码存在的第一个理由,就是把用不完的主机位收回来。

5.3 把主机位从 16 缩到 4:255.255.255.240

  1. 只想要最后 4 位做主机号,就把掩码改成前 28 位是 1、后 4 位是 0,二进制 11111111.11111111.11111111.11110000,点分十进制就是 255.255.255.240。
  2. 这样按位与之后,后 4 位依旧是 0,前面各位保持不变,网络号从 16 位变成 28 位。说白了就是通过设置掩码里 1 的个数,重新设置网络号的位数。
  3. 掩码存在的意义就在这里:让分类划分下来的那块地址被充分利用,在该类网络下构建更多子网。一个 B 类网络 /28,借走 12 位,理论上能切出 2 的 12 次方个子网,每个子网 16 个地址。
  4. 代价是子网变小:每个子网的地址数从 65536 降到 16,划得更细,单个子网能容纳的主机数变

掩码不是免费的午餐,它拿单个子网的容量换子网的数量,这笔交换要按实际需求来定。

六、CIDR:网络号位数不再由类别决定

6.1 CIDR 的四条规则

B 类 140.252.0.0,掩码 255.255.255.240(/28)

----->140.252.20.64/28

  1. 针对分类法浪费的问题,后来提出了新的划分方案,叫 CIDR(Classless Interdomain Routing,无类别域间路由)。
  2. 它引入一个额外的子网掩码来区分网络号和主机号:掩码不再由类别隐含,而是跟着地址一起写出来。
  3. 子网掩码是一个 32 位的正整数,通常用一串 0 来结尾,这就是前缀必须连续的意思。
  4. 把 IP 地址和子网掩码做按位与,得到的结果就是网络号,这一步与分类法时代完全一样。
  5. 关键的一条:网络号和主机号的划分,与这个 IP 地址是 A 类、B 类还是 C 类无关。

CIDR 把切点从地址的第一个字节里解放出来,变成每个地址自带的一个参数,这才有了按需切分。

6.2 前缀写法怎么读:/24、/26、/28

  1. 写法是「地址/前缀长度」,例如 192.168.32.1/24,24 表示子网掩码前 24 位为 1。
  2. 三个常用前缀与掩码的对应关系要记死:
    • /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
  3. 读法固定:斜杠后面的数字就是 1 的个数,32 减去它就是主机位的个数。

前缀长度是掩码的简写,两者是同一件事的两种记法,看到斜杠数字就该立刻换算出主机位数。

6.3 与分类法的区别:同一串地址可以按任意前缀切

  1. 分类法下 192.168.x.x 只能是 C 类、主机位固定 8 位;CIDR 下同一串地址可以写成 /24、/26、/28,切点随需求走。
  2. 更彻底的是,一个 /24 还能继续切成 /26,切出来的每一块都是独立子网,各自有各自的网络号,同一块地址里不同子网还能用不同长度的掩码。

CIDR 的意义不只是省地址,更是把切点变成每个子网自己的选择,这让地址分配第一次能贴合真实需求。

七、子网划分的算法与地址范围演算

7.1 反向:从掩码算出主机位数与可用主机数

  1. 拿到一个掩码,先数 1 的个数得到前缀长度,再用 32 减去它得到主机位数 n。
  2. 这个子网里的地址总数是 2 的 n 次方,可用主机数是 2 的 n 次方减 2。
  3. 减掉的两个是特殊地址:主机号全 0 的那个代表网络本身,主机号全 1 的那个是广播地址,两者都不能当普通主机用。
  4. 举例:/24 的主机位 8 位,2 的 8 次方是 256,可用 254 台;/28 的主机位 4 位,2 的 4 次方是 16,可用 14 台。

减 2 不是约定俗成,是那两个地址在网络里另有职务,占着位置但不干活。

7.2 正向:要划 N 个子网,借几位

  1. 正向算的是另一件事:手上有一块地址,要切成 N 个子网,需要从主机位里借几位给网络号。
  2. 办法是找最小的 k,使 2 的 k 次方大于等于 N;借 k 位之后,主机位剩 n 减 k 位,每个子网 2 的 n 减 k 次方个地址。
  3. 常见需求量对应的借位数可以直接背:
    • 要 2 个子网,借 1 位
    • 要 3 到 4 个,借 2 位
    • 要 5 到 8 个,借 3 位
  4. 举例:一个 /24 要切成 5 个子网,2 的 2 次方是 4 不够、2 的 3 次方是 8 够,所以借 3 位,前缀变成 /27,每个子网 32 个地址、可用 30 台。

正向和反向是同一件事的两个方向,一个从需求推位数,一个从掩码推容量,两边都要会算。

7.3 演算例①:140.252.20.68 配 /24

  1. IP 地址 140.252.20.68,子网掩码 255.255.255.0,两者按位与得到网络号 140.252.20.0。
  2. 子网地址范围是 140.252.20.0 ~ 140.252.20.255,主机位 8 位,一共 256 个地址。
  3. 0 和 255 这两个不能用,所以可用主机数是 256 减 2 等于 254 台。

算地址范围只要三步:按位与得网络号,网络号加 2 的 n 次方减 1 得末地址,总数减 2 得可用数。

7.4 演算例②:140.252.20.68 配 /28

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

同一个地址配不同掩码,会落进不同的子网、拿到不同的可用数,掩码才是决定你在哪一段的那个参数。

7.5 VLSM:同一块地址里用不同掩码

  1. VLSM(Variable Length Subnet Mask,可变长子网掩码)指的是在同一个大网段内部,不同子网使用不同长度的掩码。
  2. 典型用法是先切大的、再在剩下的空间里切小的:主机多的部门给 /26,只有几台设备的给 /28。
  3. 前提是切出来的子网不能重叠:每一块的网络号必须互不相同,否则按位与之后会出现两个子网抢同一个网络号。

VLSM 是 CIDR 能力的直接落地,它让地址分配第一次能按实际有多少台机器来定,而不是按整块多大来定。

八、路由表与最长前缀匹配:淘汰在实现里长什么样

8.1 路由表里存的是前缀,不是单个地址

  1. 路由表里的一条记录不是某个 IP 该往哪走,而是某个前缀该往哪走,前缀就是网络号加掩码长度。
  2. 一条记录的形态是「目的前缀加下一跳」:192.168.128.0/24 走 A 口,192.168.144.0/24 走 B 口。
  3. 转发时拿目的地址和每一条记录的前缀比对,比得上就说明这个包属于那个网段。

路由表能装下全网,靠的是按网段记账而不是按主机记账,这正是前面先查网络那一步的物理形态。

8.2 最长前缀匹配:越具体的规则越优先

  1. 一个目的地址可能同时匹配多条记录,比如 192.168.128.10 的包同时命中下面两条:
    • 192.168.0.0/16,指向默认网关
    • 192.168.128.0/24,指向内侧那个接口
  2. 这时选前缀最长的那一条,因为它描述的范围最小、最具体。
  3. 这条规则叫最长前缀匹配(longest prefix match),它是 CIDR 带来的必然结果:前缀长度可变,就必须有优先级规则。

淘汰在实现里就是匹配加排序:先按前缀筛出所有候选,再挑最具体的那条,剩下的候选全部作废。

8.3 每一跳都查一次表

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

route 查看路由表

bash 复制代码
route print

划分粒度、表规模、查表开销三者互相牵制,网络设计的取舍基本都在这条线上。

九、特殊 IP 地址:全 0、全 1 与环回

9.1 主机号全 0:代表这个局域网

  1. 把 IP 地址中的主机地址全部设为 0,这个地址就成了网络号,代表这个局域网。
  2. 它不能分配给任何一台主机,因为它的含义是这一整片,不是某一台。
  3. 举例:192.168.128.0/24 里的 192.168.128.0 就是这一片的网络号,写路由表、写配置时用它指代整个网段。

全 0 地址是整片的代号,它的存在让指向一个网段这件事有了一个可写的值。

9.2 主机号全 1:给同一链路所有主机发

  1. 把主机地址全部设为 1,这个地址就成了广播地址,用于给同一个链路中相互连接的所有主机发送数据包。
  2. 广播只在本地链路有效,出了这个网段就没有意义,路由器不会把广播转发到别的网段。
  3. 举例:192.168.128.0/24 的广播地址是 192.168.128.255,发给它的包,这一片里所有主机都会收到。

全 1 地址是所有人的代号,它和全 0 一样占着位置不干活,这也是可用数要减 2 的原因。

9.3 127 开头的地址:本机环回

  1. 127.* 的 IP 地址用于本机环回(loopback)测试,通常是 127.0.0.1。
  2. 环回地址的包不会真的发到网卡上,内核直接把它转回本机的协议栈,用来验证协议实现本身是否正常。
  3. 它不占任何真实网段,也不参与路由,纯属本机自测用的工具地址。

环回地址是协议栈的自检通道,它证明本机的 TCP/IP 实现能跑通,与外部网络无关。

十、43 亿不够用:IPv6、动态分配与 NAT 三条路

10.1 32 位地址空间的上限

  1. IPv4 地址是 32 位,总共 2 的 32 次方,大概是 43 亿个左右。
  2. 这个数量在互联网早期看起来用不完,但地址是整块分配的,再叠加分类法的浪费,实际可用的远少于 43 亿。
  3. 结果就是 IP 地址不够用,这不是使用不当,是地址空间的天花板到了。

地址不够用是结构问题,不是数量问题,所以三条解法都在改结构,而不是单纯地多发点地址。

10.2 三条路各解决了什么

  1. 针对地址不够用,工程上有三条路,分别改的是空间、周转和复用:
    • IPv6:把地址从 32 位扩到 128 位,从根上扩大地址空间
    • 动态分配:地址不长期绑在主机上,用的时候才给,用完可以回收给别的主机
    • NAT:把私网地址在出口处换成公网地址,让多台主机共用一个公网地址
  2. IPv6 没能一夜替换掉 v4:现网设备、操作系统、应用全都要改,升级成本决定了这是一场长期过渡。
  3. 过渡方式是双栈(dual stack):一台主机同时配 v4 和 v6 地址,按对端支持情况选一套。

三条路各有代价:扩空间要换全链路设备,动态分配要维护租约,NAT 让外部再也连不进来,所以今天网络里 v4 仍然占大头。

十一、私有 IP 与公网 IP:NAT 把全局唯一降级成局部唯一

11.1 RFC 1918 的三段与地址数量

  1. 一个组织内部组建局域网,IP 地址只用于局域网内通信、不直接连到 Internet 上,理论上用任意地址都可以。
  2. 但为了避免和公网地址撞车,RFC 1918 规定了用于局域网的私有 IP 地址,共三段。
私有段 网络号位数 地址数量
10.* 前 8 位 16,777,216
172.16.* ~ 172.31.* 前 12 位 1,048,576
192.168.* 前 16 位 65,536
  1. 落在这三个范围里的都是私有 IP,其余的都叫全局 IP,也就是公网 IP。
  2. 用 ipconfig 或 ifconfig 看一眼本机地址,落在 10.*、172.16.* ~ 172.31.*、192.168.* 里,说明你在一张私网里。

私有地址的本质是约定好的重复:全世界都可以用同一段号,靠约定避免撞车,靠 NAT 在出口处翻译。

11.2 路由器两套 IP:WAN 口与 LAN 口

  1. 一个路由器可以配置两个 IP 地址,一个是 WAN 口 IP,一个是 LAN 口 IP,后者就是子网 IP;LAN 口连接的主机都从属于当前这个路由器的子网。
  2. 主机连上路由器,本质就是向路由器申请一个 IP,路由器从自己的子网号段里挑一个没被占用的主机号给它。
  3. 不同的路由器,子网 IP 其实都是一样的,通常都是 192.168.1.1;子网内的主机 IP 不能重复,但子网之间的 IP 可以重复。
  4. 每一个家用路由器,其实又作为运营商路由器的子网中的一个节点,这样的运营商路由器可能有很多级,最外层的那个 WAN 口 IP 才是公网 IP。

NAT 不是一层,是一串,地址在每一层出口被翻译一次,越往外越接近全局唯一。

11.3 私有地址不能出现在公网上

  1. 在网络通信过程中,私有 IP 不能出现在公网上:公网设备不认识私网段,包到了也送不回来。
  2. 子网内的主机需要和外网通信时,路由器把 IP 首部中的 IP 地址进行替换、换成 WAN 口 IP,逐级替换之后最终成为一个公网 IP,这个技术就是 NAT(Network Address Translation,网络地址转换)。
  3. 如果希望自己写的服务器程序能在公网上被访问到,就需要把程序部署在一台具有外网 IP 的服务器上。

NAT 用改写地址换来了地址空间的复用,代价是外部无法主动连进来,要对外提供服务就得有一台真正持公网地址的机器。

十二、全篇总结

1. 地址的结构是约定出来的,不是天生的
  1. 32 位本身没有说话的能力,切点落在第几位,才决定这串数字属于哪一片、还剩多少格能分配。
  2. 所以「这个地址在哪个网段」从来不是能单独回答的问题,必须连着掩码一起看。
2. 划分粒度换来的是淘汰效率
  1. 路由每一步都在做减法:先用网络号排掉不相关的整片,再在剩下的那片里定位主机。
  2. 切得越细,单次排掉的范围越大;代价是路由表条目变多,每跳要比较的候选也跟着变多。
3. 分类法的错在把切点写死
  1. 五类的边界由第一个字节决定,申请必须整块拿、整块用,用不完的空着也退不回去。
  2. CIDR 把掩码变成随地址一起写的参数,切点才第一次能按实际有多少台机器来定。
4. 算可用地址只有三步
  1. 按位与得网络号,网络号加 2 的 n 次方减 1 得末地址,总数减 2 得可用数。
  2. 减掉的那两位各有职务:全 0 指整片网络,全 1 指全片广播,127 指本机环回。
5. 唯一性分两层成立
  1. 子网内靠主机号不重复,子网之间靠网络号不同;私网地址全世界都能重复,靠 NAT 在出口翻译。
  2. 32 位不够用,三条解法分别改空间、改周转、改复用,代价各不相同。
6. 特殊地址是规则的一部分,不是例外
  1. 全 0、全 1、127 都占着地址位却不能分给主机,漏掉哪一个,可用数都会算错。
  2. 把三者串成一条线记:全 0 是网络自己,全 1 是全网广播,127 是回到本机。
7. 掩码是网段的公共基准,不是主机私事
  1. 每台主机都拿自己的掩码做按位与来判断网段,掩码不一致,同一对地址会被与出不同的网络号。
  2. 同网段掩码必须统一,配错的主机会得出和邻居相反的交付判断,通信变成单边。

十三、文末面试题

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 也数进去。

相关推荐
咔_1 小时前
有IPv6地址,为什么外面还是连不进来?让同一台服务分别卡在四个位置
linux·计算机网络
流浪0011 小时前
计算机网络篇22:网络层——公网的三级地址划分与逐跳转发,从私网出口替换到 IP 分片组装
tcp/ip·计算机网络·路由器·公网搭建·报文分篇
Java成神之路-16 小时前
TCP Socket 与 UDP Socket
tcp/ip·计算机网络·udp
流浪0012 天前
计算机网络篇20:网络层——IP 协议的定位与 IPv4 报头字段,从 20 字节首部到 TTL 防环
tcp/ip·计算机网络·ttl·网络层协议·ip报头
流浪0013 天前
计算机网络篇17:传输层——TCP 超时重传、三次握手与四次挥手,TIME_WAIT 为什么要等 2MSL
网络协议·tcp/ip·计算机网络·三次握手·四次挥手·超时重传
流浪0014 天前
计算机网络篇16:传输层——TCP 报头属性字段:16 位窗口大小撑起流量控制,六个标志位标识报文类型
网络协议·tcp/ip·计算机网络·urg紧急指针·tcp报头
一条泥憨鱼5 天前
【计算机网络】短连接、长连接与连接池:从 TCP 握手到池化复用的完整链路
网络·数据库·网络协议·tcp/ip·计算机网络
鹿鸣天涯6 天前
2026年下半年网络规划设计师论文
网络·计算机网络·网络规划设计师
MicrosoftCloud6 天前
计网 14|HTTP 协议核心:报文结构、状态码、持续连接
计算机网络·考研·http·状态码·408·万维网·持续连接