划分子网、子网掩码与默认网关
4.2.3 在王道里是一节,这里拆成两页:本页讲把一个网络切小(子网、子网掩码、默认网关、定长与变长划分),下一页讲把许多网络合并(CIDR、路由聚合、最长前缀匹配)。两页用的是同一个动作——把 IP 地址和掩码逐位相与。
本节是整个计网计算题最密集的地方,真题从 2009 年到 2022 年几乎年年出现。 本页的错题集中在三处:分类网络本来的网络号有多长(它决定”借了几位”)、一个地址是不是落在全 0 或全 1 上、主机的默认网关应该是哪个接口。
机制
为什么要划分子网
两级 IP 地址有三个缺点:IP 地址空间的利用率有时很低;给每个物理网络分配一个网络号会使路由表变得太大,进而使网络性能变坏;两级 IP 地址不够灵活。
从 1985 年起,在 IP 地址中又增加了一个”子网号字段”,使两级 IP 地址变成了三级 IP 地址,这种做法称为划分子网。划分子网已成为互联网的正式标准协议。基本思路如下:
- 划分子网纯属一个单位内部的事情,单位对外仍然表现为没有划分子网的一个网络。
- 划分子网的方法是从网络的主机号借用若干位作为子网号,主机号也相应减少了相同的位数。三级 IP 地址的结构为:IP 地址 ::= {<网络号>, <子网号>, <主机号>}。
- 路由器转发分组根据的仍然是 IP 数据报的目的网络号,本单位的路由器收到 IP 数据报后,再按目的网络号和子网号找到目的子网,最后把 IP 数据报交付给目的主机。
例如,将一个 C 类网络 208.115.21.0 划分为 4 个子网,子网号占用 2 位,主机号就只有 6 位,各子网的网络地址分别为 208.115.21.0、208.115.21.64、208.115.21.128、208.115.21.192,每个子网可分配的 IP 地址数为
关于子网,王道特别强调三点:
- 划分子网只是把 IP 地址的主机号部分进行再划分,而不改变 IP 地址原来的网络号。因此,从一个 IP 地址本身无法判断该主机所连接的网络是否进行了子网划分。
- 子网中的主机号全 0 或全 1 的地址不能被指派:主机号全 0 的地址为子网的网络地址,主机号全 1 的地址为子网的广播地址。
- 划分子网增加了灵活性,但减少了能够连接在网络上的主机总数——每多一个子网,就多浪费两个地址。
子网掩码
子网掩码用来指明分类 IP 地址的主机号部分被借用了多少位作为子网号。子网掩码是一个与 IP 地址相对应的、长 32 位的二进制串,由一串 1 和跟随的一串 0 组成:1 对应于 IP 地址中的网络号及子网号,0 对应于主机号。主机或路由器只需将 IP 地址和其对应的子网掩码逐位”与”(AND 运算),就可得出相应子网的网络地址(根据 IP 地址和子网掩码求网络地址 2022 年考过)。
现在的互联网标准规定:所有网络都必须使用子网掩码。若一个网络未划分子网,则该网络的子网掩码就使用默认子网掩码:A、B、C 类地址的默认子网掩码分别为 255.0.0.0、255.255.0.0、255.255.255.0。例如,某主机的 IP 地址为 192.168.5.56,子网掩码为 255.255.255.0,逐位”与”后得出该主机所在子网的网络号为 192.168.5.0。
子网掩码是一个网络的重要属性。路由器相互之间交换路由信息时,必须将自己所在网络的子网掩码告诉对方;分组转发时,路由器将分组的目的地址和某网络的子网掩码按位相与,若结果与该网络地址一致,则路由匹配成功,路由器将分组转发至该网络。在使用子网掩码的情况下:
- 一台主机在设置 IP 地址信息的同时,必须设置子网掩码。
- 同属于一个子网的所有主机及路由器的相应端口,必须设置相同的子网掩码。
- 路由器的路由表中所包含的信息主要内容有目的网络地址、子网掩码、下一跳地址。
掩码最后一个非 255 的字节只可能是 128、192、224、240、248、252、254 之一(分别对应该字节里有 1~7 个 1)。常用对照:
| 前缀长度 | 最后一个非 255 字节 | 块大小(该字节步长) | 可分配地址数 |
|---|---|---|---|
| /25 | 128 | 128 | 126 |
| /26 | 192 | 64 | 62 |
| /27 | 224 | 32 | 30 |
| /28 | 240 | 16 | 14 |
| /29 | 248 | 8 | 6 |
| /30 | 252 | 4 | 2 |
默认网关
默认网关是子网与外部网络连接的设备,也就是连接本机或子网的路由器接口的 IP 地址。当主机发送数据时,根据所发送数据的目的 IP 地址,通过子网掩码来判定目的主机是否在本子网中:若目的主机在本子网中,则直接发送;若目的主机不在本子网中,则将该数据发送到默认网关,由网关(路由器)将其转发到其他网络,进一步寻找目的主机(默认网关和子网掩码的配置分析 2015、2016、2019、2022 年考过)。
默认网关必须与主机在同一个子网内,否则主机连把分组交给网关都做不到。所以题目给出一张拓扑图、问某主机的默认网关时,答案是与该主机同在一个子网的那个路由器接口的地址,而不是离得最近的任意路由器地址;该主机的子网掩码也与这个接口的子网掩码相同。
错题复盘:默认网关是与主机同在一个子网的那个路由器接口,掩码也跟它一样
2022 年统考真题(王道 4.2.8 第 69 题):上图所示网络中的主机 H 的子网掩码与默认网关分别是(A. 255.255.255.192,192.168.1.1 B. 255.255.255.192,192.168.1.62 C. 255.255.255.224,192.168.1.1 D. 255.255.255.224,192.168.1.62)。答案 D。
默认网关可以理解为到当前主机最近的路由器的端口地址,所以是 192.168.1.62;该主机的子网掩码和网关的子网掩码相同,/27 即为 255.255.255.224。
192.168.1.1 是两台路由器之间那条 /30 链路(192.168.1.0/30)上的接口,H 与它不在同一个子网,把它当网关,分组根本交不过去。H 所在的子网是 192.168.1.62/27 所在的 192.168.1.32/27(.32~.63),H 的 192.168.1.60 恰好在其中。
子网划分的两种方法
采用定长的子网掩码划分子网(2009、2010、2017、2018):所划分的每个子网使用相同的子网掩码,并且每个子网所分配的 IP 地址数量也相同,因此容易造成地址资源的浪费。
王道的例子:某单位拥有一个 CIDR 地址块 208.115.21.0/24,有三个部门,各部门的主机台数分别为 50、20、5。部门 1 需要 51 个 IP 地址(含一个路由器接口地址),部门 2 需要 21 个,部门 3 需要 6 个。从主机号部分借用 2 位作为子网号,可以划分为
| 子网 | 最后一个字节 | 地址块 | 分配 |
|---|---|---|---|
| 00 | 00000000~00111111 | 208.115.21.0/26 | 部门 1 |
| 01 | 01000000~01111111 | 208.115.21.64/26 | 部门 2 |
| 10 | 10000000~10111111 | 208.115.21.128/26 | 部门 3 |
| 11 | 11000000~11111111 | 208.115.21.192/26 | 留作以后用 |
子网掩码为 255.255.255.11000000,即 255.255.255.192。
采用变长的子网掩码划分子网(2019、2021):所划分的每个子网可以使用不同的子网掩码,并且每个子网所分配的 IP 地址数量可以不同,这样就尽可能地减少了对地址资源的浪费。
同一个例子改用变长掩码:部门 1 的主机号需 6 位,剩余 26 位作为网络前缀;部门 2 的主机号需 5 位,网络前缀 27 位;部门 3 的主机号需 3 位,网络前缀 29 位。从 208.115.21.0/24 中划分出 1 个 /26、1 个 /27、1 个 /29 地址块。每个子网的最小地址只能选取主机号全 0 的地址,划分方案不唯一,建议从大的子网开始划分:
| 最后一个字节 | 地址块 | 子网掩码 | 可分配 | 分配 |
|---|---|---|---|---|
| 00000000~00111111 | 208.115.21.0/26 | 255.255.255.192 | 62 | 部门 1 |
| 01000000~01011111 | 208.115.21.64/27 | 255.255.255.224 | 30 | 部门 2 |
| 01100000~01100111 | 208.115.21.96/29 | 255.255.255.248 | 6 | 部门 3 |
| 01101000~11111111 | —— | —— | —— | 剩余 |
对于一段连接两个路由器的链路,可以分配一个 /30 地址块,这样可分配地址为 2 个,恰好可分配给链路两端的路由器接口。
计算模板
已知地址和掩码,求网络地址、广播地址、可分配范围
- 找到掩码中第一个不是 255 的字节,记其值为
,块大小 。 - 地址在这个字节上的值向下取到块大小的整数倍,得网络地址(后面各字节全 0)。
- 网络地址 + 块大小 − 1,得广播地址(后面各字节全 255)。
- 两者之间的地址可分配,共
个( 为主机号位数)。
例:172.31.128.255/18。掩码 255.255.192.0,第三字节块大小 64;128 恰是 64 的倍数,网络地址 172.31.128.0,广播地址 172.31.191.255。所以 172.31.128.255 在范围中间,是一个普通的单播地址——第四字节是 255 不代表它是广播地址,主机号跨越了第三、第四两个字节。
错题复盘:判断广播地址要看主机号是否全 1,主机号可能跨字节
王道 4.2.8 第 15 题:在下列 4 个地址中,属于单播地址的是(A. 172.31.128.255/18 B. 10.255.255.255 C. 192.168.24.59/30 D. 224.105.5.211)。答案 A。
- A:/18 的主机号是后 14 位,即第三字节的低 6 位加第四字节。128 = 10000000,低 6 位全 0,主机号不是全 1,是普通的单播地址。
- B:没有斜线,按类别看:10 开头是 A 类,主机号为后 24 位,全 1,是广播地址。
- C:/30 的主机号只有最后 2 位,59 = 00111011,后 2 位为 11,全 1,是广播地址。
- D:224 开头的是 D 类多播地址。
A 以 255 结尾看上去最像广播,C 看上去最普通,陷阱正好反过来。
从需求反推前缀长度
每个子网需要
变长划分中”最小子网最小能多小”
子网数不是 2 的幂时无法平均划分。要让某个子网尽可能小,就让其余子网尽可能大:从原地址块开始每次对半分,一半留作一个子网,另一半继续分;最后剩下的一块不能再分(再分就多出一个子网),直接对半成为最后两个子网。
错题复盘:把 /20 分成 5 个子网,最小子网只能到 /24
2019 年统考真题(王道 4.2.8 第 65 题):若将 101.200.16.0/20 划分为 5 个子网,则可能的最小子网的可分配 IP 地址数是(A. 126 B. 254 C. 510 D. 1022)。答案 B。
为了保证有子网的可分配 IP 地址数尽可能小,要让其他子网的可分配地址数尽可能大,不能采用平均划分的方法,而要采用变长的子网划分方法:最大子网用 1 位子网号,第二大子网用 2 位子网号,以此类推。
子网 前缀 可分配地址范围 可分配数 1 /21 101.200.16.1~101.200.23.254 2046 2 /22 101.200.24.1~101.200.27.254 1022 3 /23 101.200.28.1~101.200.29.254 510 4 /24 101.200.30.1~101.200.30.254 254 5 /24 101.200.31.1~101.200.31.254 254 五个块的地址数
,正好是 /20 的大小。若想要一个 /25(126 个),就得在第 4、5 块里再切一刀,子网数变成 6 个。
判断两个地址是否在同一子网
两个地址分别与同一个掩码相与,结果相同则在同一子网。只需比较第一个非 255 字节:看两个值落在不是同一个块里。
边界
“最多分成几个子网”受主机号至少留 2 位的限制。 主机号只剩 1 位时,两个地址一个全 0、一个全 1,都不能分配,这样的子网没有意义。所以一个主机号
错题复盘:/27 的网段最多分 8 个子网,每个子网最多 30 个可分配地址
王道 4.2.8 第 22 题:一个网段的网络号为 198.90.10.0/27,最多可以分成( )个子网;此网段划分成若干子网后,每个子网最多具有( )个可分配给主机的 IP 地址(A. 8,30 B. 4,62 C. 16,14 D. 32,6)。答案 A。
王道以 /27 本身为待划分的网段:主机号有
位。若主机号只占 1 位,则没有有效的 IP 地址可供分配(除去全 0 和全 1),因此最少 2 位表示主机号,还剩 3 位表示子网号,所以最多可以分成 个子网;而当 5 位都表示主机号,即只有 1 个子网时,每个子网最多具有 个有效的 IP 地址。 两问各取一个极端,不是同一种划分方案下的两个数:子网最多时每个子网只剩 2 个可用地址,每个子网地址最多时只有 1 个子网。
默认网关必须与主机在同一个子网。 路由器有多个接口,每个接口属于不同的子网;主机只能以同一子网上的那个接口为网关。
/30 是点对点链路的标准答案。 两端各一个地址,再加网络地址和广播地址,正好 4 个。
错题复盘:点对点链路只需 4 个地址,掩码 255.255.255.252
王道 4.2.8 第 37 题:在一条点对点链路上,为了减少 IP 地址的浪费,子网掩码应指定为(A. 255.255.255.252 B. 255.255.255.248 C. 255.255.255.240 D. 255.255.255.196)。答案 A。
在一条点对点链路中,只需要两个主机 IP 地址、一个网络地址和一个广播地址这 4 种组合,主机号只需 2 位,因此子网掩码应指定为 255.255.255.252,或用 CIDR 表示为 /30。D 的 196 = 11000100,1 不连续,不是合法的掩码。
王道在解析中注明:在新标准中,该题的子网掩码可指定为 255.255.255.254(/31)。统考仍按旧标准,见下方口径差异。
子网掩码的 1 必须连续。 255.255.255.196(11000100)这样中间夹 0 的掩码不合法。
口径差异:子网号全 0、全 1 与 /31
教材口径:子网中主机号全 0、全 1 的地址不分配;两个路由器之间的点对点链路用 /30。王道注意框提到,最新标准允许直连两个路由器的接口使用 /31(两个地址的主机号分别是 0 和 1),这是谢希仁第 8 版教材的改动,但近年的统考真题仍在使用旧标准。
工程口径:更早的标准(RFC 950)还禁止子网号全 0 和全 1,后来的标准已取消这一限制——王道的例子里 208.115.21.0/26(子网号 00)和 208.115.21.192/26(子网号 11)都可以使用。/31 用于点对点链路的规定见 RFC 3021。
考试按旧标准:点对点链路答 255.255.255.252,子网号全 0、全 1 可用,主机号全 0、全 1 不可分配。
对照速查
| 说法 | 对错 |
|---|---|
| 划分子网改变了 IP 地址原来的网络号 | ❌ |
| 从一个 IP 地址本身可以判断它所在的网络是否划分了子网 | ❌ |
| 划分子网后,能连接的主机总数增加了 | ❌(减少了) |
| 同一子网的所有主机和路由器接口必须使用相同的子网掩码 | ✅ |
| 默认网关是离主机最近的路由器的任意一个接口 | ❌(必须是同一子网上的那个接口) |
| 最后一个字节是 255 的地址一定是广播地址 | ❌(要看掩码) |
| 定长子网掩码划分的各子网地址数相同 | ✅ |
| 变长子网掩码划分时,每个子网的起始地址可以任取 | ❌(必须是主机号全 0) |
| 两个路由器之间的点对点链路用 255.255.255.252 最省地址 | ✅(按统考口径) |
考点
- 三级 IP 地址;子网号从主机号借位
- IP 与掩码逐位相与得网络地址(2022)
- 默认网关 = 同一子网上的路由器接口(2015、2016、2019、2022)
- 定长划分(2009、2010、2017、2018)与变长划分(2019、2021)
- 每个子网可分配
;部门需求要加上路由器接口 - 点对点链路 /30
链接
- 🏠 返回总览:计算机网络第 4 章:网络层总览
- ⬅️ 上一节:4.2.2 IPv4 地址与 NAT
- ➡️ 同节续:4.2.3 CIDR 与路由聚合
- 🔗 4.2.4 网络层转发分组的过程(主机怎样用掩码决定直接交付还是交给网关)
- 📖 名词库:第 4 章名词库
