🌐 第三章 网络间的通用语言TCP/IP
📄 一句话概括

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

⚠️ 必须是"连续"的

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——正好每次减半。顺着念一遍就记住了,不用死背八个数字。

📝 /31 与 /32 的例外(会认级)

按 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:把掩码算一遍

  1. 抄自己的掩码并转前缀: ipconfig /all 找到 子网掩码 一行,数一数 1 的个数 → 写成 /NN。

  2. 手工 AND 一遍: 拿自己的 IP 与掩码,用"网络部分照抄、主机部分清零"算出网络地址,去 route print -4 的「网络目标」列里对照——应该能对上(收 3.7、3.8)。

  3. 拿同段判定验证: 对网关(通常是 .1)和另一台设备各算一次网络部分,判断是否同段,再 ping 一下看看结果对不对。

  4. 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 步的实操。

  5. 可选: netsh interface ipv4 show config 一次看清所有网络接口的 IP、掩码与网关。

❓ 自测一下
  1. 子网掩码的规则是什么?为什么中间不能夹 0?
  2. 255.255.255.0 对应哪个前缀长度?为什么?
  3. 掩码值 240 对应哪个前缀?
  4. 写出"按位 AND"的两条规矩,并说出那句口诀。
  5. 192.168.1.101/24 与掩码 AND 之后得到什么?这个结果在路由表里叫什么?
  6. 判断两台设备是否同网段,用本节算法怎么做?
  7. 把 /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 掩码 求出网络部分,比较两个结果是否相同——相同即同网段。 ⑦ 会把"其实不同网段"的设备当成同网段,导致它不把包交给网关,出现"能上外网、却访问不了某台设备"的现象。

常见误区:

  1. ❌ "子网掩码是另一个 IP 地址" → 它是尺子/分隔符,本身不能当门牌(3.8 提过,这里再钉一次)
  2. ❌ "掩码可以随便写" → 必须一串连续 1 接一串连续 0,255.255.0.255 这类非法
  3. ❌ "掩码里的 0 表示这些位不能用" → 0 表示"这些位留给主机",是划界不是禁用
  4. ❌ "255.255.255.0 和 /24 是两个不同的东西" → 完全等价,一个展开写一个速记写
  5. ❌ "掩码只影响能不能互通" → 它决定每段能装多少台,3.10 的 2ⁿ − 2 全靠它
  6. ❌ "掩码写小一点能连更多设备" → 掩码一改,网络部分跟着变;写小常常直接把能通变成不通
  7. ❌ "前缀长度只能是 8 的倍数" → /25、/26、/30 都合法,只要掩码连续就行

八、下一步学什么

相关笔记