3.8 说"掩码是一把尺子",本节把尺子本体讲透:掩码就是一排连续的 1 接一排连续的 0——1 的个数 = 网络部分的位数,0 的个数 = 主机部分的位数,中间那道"1 变 0 的台阶"正是 IP 地址范围的分隔符。算法上只有两条规矩:1 AND 谁 = 谁(原样保留)、0 AND 谁 = 0(一律清零)。所以求网络地址一句话:网络部分照抄,主机部分清零。
一、这道"分隔符"要解决什么问题
把前几节的线索连起来看:
| 节 | 已经知道的 |
|---|---|
| 3.8 | 地址切成两截(网络部分 + 主机部分),但分界线不在数字里 |
| 3.10 | 靠这条线算出 256 个号码里哪 254 个能用 |
| 3.11 | 这条线本体是什么、怎么写、怎么算 |
一句话记住本节的定位:数字是死的,线是活的。同一串 192.168.1.100,线画在第 24 位它属于 192.168.1.0/24,线画在第 25 位它就属于 192.168.1.0/25——这就是 3.8 那个 /25 实验的根本原因。
二、掩码的规则:一串 1,一串 0
- 长度和 IP 一样,也是 32 位
- 左边全是 1,右边全是 0,中间不许夹 0
- 1 的位置 = 网络部分;0 的位置 = 主机部分
- 例:
255.255.255.0= 24 个 1 接 8 个 0
255.255.0.255、255.0.255.0 这类"夹心"掩码是非法的,路由器/系统会直接拒绝。
原因:网络部分与主机部分必须是连续的两段——路由器得能"一刀切"地只看前段做转发决策(3.7 的最长前缀匹配就是这么比的)。若网络位被切成两截,压根没法用"前缀长度"这一句话说清它。
三、两种记法:掩码 ↔ 前缀长度(CIDR)
| 写法 | 长相 | 读法 |
|---|---|---|
| 前缀长度(CIDR 记法) | 192.168.1.0/24 |
前 24 位是网络部分 |
| 子网掩码 | 255.255.255.0 |
1 的个数 = 24 |
换算口径只有一条:
前缀长度 = 掩码里 1 的个数 = 255 的个数 × 8 + 最后一个非 255 字节里 1 的个数
CIDR 这个词会认即可(Classless Inter-Domain Routing,无类别域间路由)——它就是 3.8 说的"不再按 A/B/C 类固定切、前缀长度随便写"这件事的正式名字。工程上大家写 /24,短且不产生歧义。
四、掩码值的换算阶梯
(对应上面第二张图)
| 十进制 | 二进制 | 前缀 | 该段能装 |
|---|---|---|---|
| 128 | 10000000 |
/25 | 126 台 |
| 192 | 11000000 |
/26 | 62 台 |
| 224 | 11100000 |
/27 | 30 台 |
| 240 | 11110000 |
/28 | 14 台 |
| 248 | 11111000 |
/29 | 6 台 |
| 252 | 11111100 |
/30 | 2 台 |
| 254 | 11111110 |
/31 | 0 台(见下方例外) |
| 255 | 11111111 |
/32 | 只剩单机 |
128 → 192 → 224 → 240 → 248 → 252 → 254 → 255
相邻两档的差是 +64、+32、+16、+8、+4、+2、+1——正好每次减半。顺着念一遍就记住了,不用死背八个数字。
按 3.10 的公式 2ⁿ − 2 算,/31 是 0 台——但 RFC 3021 规定点对点链路的 /31 两个地址都能正常用(这种链路不需要网络地址和广播地址)。/32 则专门用来表示"单个主机",例如回环地址常写成 127.0.0.1/32。日常组网用不到,知道有这两个特例即可。
五、本节核心算法:IP AND 掩码 = 网络地址
(对应上面第一张图)
"按位 AND"就是两个二进制位一位一位地算,规矩只有两条:
| 掩码这一位是 | 结果 |
|---|---|
| 1 | 1 AND x = x → IP 的这一位原样保留 |
| 0 | 0 AND x = 0 → IP 的这一位一律清零 |
所以落成一句人话:
网络部分照抄,主机部分清零。
完整算一遍 192.168.1.101/24:
IP 192.168.1.101 11000000.10101000.00000001.01100101
掩码 255.255.255.0 11111111.11111111.11111111.00000000
AND 结果 192.168.1.0 11000000.10101000.00000001.00000000
结果 192.168.1.0 就是 3.7 路由表里"网络目标"那一列,也是 3.10 里那个"代表整段、不能配给设备"的号——三节在这里接上了。
同一套算法管三件事:
| 你想做的事 | 算法 |
|---|---|
| 求网络地址 | IP AND 掩码 |
| 求定向广播地址 | 先求网络地址,再把主机位全变 1(即 3.10 的 .255) |
| 判断两台是否同网段 | 各自 IP AND 掩码,比较两个结果是否相同(3.8 的手工法,现在有了正式名字) |
六、掩码写错会怎样
这是本节最"实战"的一段——掩码错误的症状比 IP 写错更迷惑人:
| 写错的方式 | 会出什么事 |
|---|---|
写小(该 /24 写成 /16) |
把"其实不同段"的设备当成同段 → 它就不交给网关 → 跨网段访问不通。典型的"能上网,但死活访问不了某台设备/打印机" |
写大(该 /24 写成 /25) |
把"同段"的设备当成不同段 → 白白绕道网关,严重时不通 |
写得不连续(如 255.255.0.255) |
系统直接判定无效,配置无法生效 |
收 2.5 的旧账:打印机、NAS 这类手工配 IP 的设备,掩码写错和网段写错一样常见——而它的症状又恰好是"能 ping 通自己、别人找不到它"。
七、动手 Demo25:把掩码算一遍
-
抄自己的掩码并转前缀:
ipconfig /all找到 子网掩码 一行,数一数 1 的个数 → 写成/NN。 -
手工 AND 一遍: 拿自己的 IP 与掩码,用"网络部分照抄、主机部分清零"算出网络地址,去
route print -4的「网络目标」列里对照——应该能对上(收 3.7、3.8)。 -
拿同段判定验证: 对网关(通常是
.1)和另一台设备各算一次网络部分,判断是否同段,再ping一下看看结果对不对。 -
30 秒实验:一道掩码预算题
家里是
192.168.1.0/24,想切成"办公/25+ 访客/25"两个网段——各能装几台? 各 126 台(收 3.10 的2ⁿ − 2)。如果办公区实际要接 130 台设备,够吗? 不够,差 4 个。这就要求重新设计:要么办公用整个
/24、访客另开一个网段,要么整体放大到/23(掩码255.255.254.0,主机位 9 → 510 个)。这个"先算需求再定网段"的动作,就是 2.5 设计阶段第 3 步的实操。
-
可选:
netsh interface ipv4 show config一次看清所有网络接口的 IP、掩码与网关。
- 子网掩码的规则是什么?为什么中间不能夹 0?
255.255.255.0对应哪个前缀长度?为什么?- 掩码值
240对应哪个前缀? - 写出"按位 AND"的两条规矩,并说出那句口诀。
192.168.1.101/24与掩码 AND 之后得到什么?这个结果在路由表里叫什么?- 判断两台设备是否同网段,用本节算法怎么做?
- 把
/24写成/16会导致什么现象?
答案:
① 左边全是 1、右边全是 0,必须连续。因为网络部分和主机部分得是连续的两段,路由器要能一刀切地只看前段(最长前缀匹配);夹心掩码没法用前缀长度表达。
② /24。255 = 8 个 1,三个 255 就是 24 个 1。
③ /28。240 = 11110000,4 个 1,加上前面三个 255 的 24 个 1。
④ 1 AND x = x(原样保留)、0 AND x = 0(一律清零);口诀:网络部分照抄,主机部分清零。
⑤ 192.168.1.0,即网络地址;它在路由表里就是「网络目标」那一列(写作 192.168.1.0/24)。
⑥ 各自用 IP AND 掩码 求出网络部分,比较两个结果是否相同——相同即同网段。
⑦ 会把"其实不同网段"的设备当成同网段,导致它不把包交给网关,出现"能上外网、却访问不了某台设备"的现象。
常见误区:
- ❌ "子网掩码是另一个 IP 地址" → 它是尺子/分隔符,本身不能当门牌(3.8 提过,这里再钉一次)
- ❌ "掩码可以随便写" → 必须一串连续 1 接一串连续 0,
255.255.0.255这类非法 - ❌ "掩码里的 0 表示这些位不能用" → 0 表示"这些位留给主机",是划界不是禁用
- ❌ "
255.255.255.0和/24是两个不同的东西" → 完全等价,一个展开写一个速记写 - ❌ "掩码只影响能不能互通" → 它决定每段能装多少台,3.10 的
2ⁿ − 2全靠它 - ❌ "掩码写小一点能连更多设备" → 掩码一改,网络部分跟着变;写小常常直接把能通变成不通
- ❌ "前缀长度只能是 8 的倍数" →
/25、/26、/30都合法,只要掩码连续就行
八、下一步学什么
- ☑ 3.12(按教材顺序) ✅ 已出——连接网络的过程(IP地址的设置):链路连上之后,设备怎么从 DHCP 那儿把 IP 和掩码一起领回来。点此复习。
相关笔记
- IP地址的结构(单播IP地址) —— 本节算出的网络地址,就是它说的那个"不能配给设备的头号"
- 连接网络的过程(IP地址的设置) —— 掩码是四件套里的第二件,本节说明了它为什么要跟 IP 一起发下来
- 通信的对象(IP地址) —— "掩码是尺子""前缀长度 ≡ 掩码"的原始出处,本节把尺子本体拆开讲
- 数据的发送和接收(IP、IP数据包、路由) —— 路由表「网络目标」那一列就是本节 AND 出的结果,最长前缀匹配比的也是这个
- 接收方是1个还是多个(单播、广播、组播) —— 定向广播地址 = 网络地址 + 主机位全 1,本节给了它的严格算法
- 如何构建网络(网络的设计) —— 设计阶段"先算需求再定网段",用的就是本节的换算
- 网络为谁而生的(私有网络与互联网) —— 私有段为什么能全球重复用,掩码与网段划分是它的基础
- Java 13.1 网络基础 ——
InetAddress里那些"按地址判断"的方法,底层做的是同一件事