关注

第 9 篇:子网掩码:如何划分“小区”


网络基础系列第 9 篇:子网掩码——IP 地址的“小区围墙”

上一篇我们讲了 IP 地址:互联网的门牌号。今天继续问一个更容易把人绕晕的问题:同样是 IP 地址,系统到底怎么判断“你和我是不是同一个网段”?


开场:为什么 192.168.1.10 和 192.168.1.20 算邻居?

你可能见过这样的 IP 配置:

192.168.1.10/24
192.168.1.20/24

很多人会下意识觉得:

这俩一看就是同一个网段。

再看这个:

192.168.1.10/24
192.168.2.10/24

又会觉得:

这俩应该不是同一个网段。

直觉通常没错。

但问题是:

操作系统不是靠“看起来像不像”判断同网段的。

它不懂你的直觉。

它只认规则

这个规则,就是子网掩码

子网掩码的核心作用:

它告诉操作系统:一个 IP 地址里,哪部分是“小区地址”(网络号),哪部分是“房间号”(主机号)。

一句话总结:

子网掩码决定 IP 地址的网络边界,用来判断两个 IP 是否在同一个网段。

再通俗一点:

IP 地址像门牌号,子网掩码决定这个“小区”有多大。

同一个门牌号前缀,不一定就同小区。

同一个小区,也不一定是你肉眼看到的前三段一样。

网络世界不按眼缘分组。它按二进制。这就很工程,也很不浪漫。


🔧 核心概念:为什么需要子网掩码?

在 IPv4 地址的 32 位中,子网掩码用连续的 1 表示网络部分,连续的 0 表示主机部分。

IP 地址:      192.168.1.10  (11000000.10101000.00000001.00001010)
子网掩码:     255.255.255.0 (11111111.11111111.11111111.00000000)
                 └───────── 网络位 ─────────┘ └─ 主机位 ─┘

为什么要划分网络位和主机位?

因为路由器需要聚合路由。如果每个 IP 都单独一条路由,互联网瞬间瘫痪。

路由表按“网段”组织,而不是按“单个 IP”:

去 192.168.1.0/24 → 走 A 方向
去 10.0.0.0/8    → 走 B 方向

这就像快递分拣:

先按“省 → 市 → 区 → 小区”,最后才到“门牌号”。

子网掩码的根本价值:

  1. 路由聚合:减少路由表条目
  2. 广播域控制:隔离广播流量
  3. 地址规划:合理分配有限 IPv4 资源

🔧 同网段判断:系统到底怎么算的?

当一个 IP 包要发出时,操作系统执行以下精确判断流程

Step 1: 取出本机 IP 和本机掩码
Step 2: 本机网络地址 = 本机 IP & 本机掩码(按位与)
Step 3: 目标网络地址 = 目标 IP & 本机掩码
Step 4: 比较两个网络地址是否相等

按位与规则(只有两个都是 1,结果才是 1):

1 & 1 = 1
1 & 0 = 0
0 & 1 = 0
0 & 0 = 0

举例:判断 192.168.1.10/24 和 192.168.1.20/24

本机 IP:   192.168.1.10 → 11000000.10101000.00000001.00001010
本机掩码:  255.255.255.0 → 11111111.11111111.11111111.00000000
按位与:                   11000000.10101000.00000001.00000000 → 192.168.1.0

目标 IP:   192.168.1.20 → 11000000.10101000.00000001.00010100
本机掩码:  255.255.255.0 → 11111111.11111111.11111111.00000000
按位与:                   11000000.10101000.00000001.00000000 → 192.168.1.0

网络地址相同 → 同网段 ✅

举例:判断 192.168.1.10/24 和 192.168.2.10/24

本机网络地址: 192.168.1.0
目标网络地址: 192.168.2.0(计算过程同上)
网络地址不同 → 不同网段 ❌

相等

不相等

本机 IP: 192.168.1.10/24

本机网络地址
192.168.1.0

目标 IP: 192.168.1.20

目标网络地址
192.168.1.0

目标 IP: 192.168.2.10

目标网络地址
192.168.2.0

比较

同网段
直接通信

比较

不同网段
走网关

这个判断的结果直接影响转发行为:

判断结果下一跳通信方式
同网段目标 IP 本身ARP 找目标 MAC,二层转发
不同网段网关 IPARP 找网关 MAC,三层路由

子网掩码不只考试用。它直接决定数据包第一跳发给谁。掩码配错,包可能第一步就走错。


子网掩码的两种写法

子网掩码常见有两种写法,完全等价

写法一:点分十进制

255.255.255.0

写法二:CIDR 前缀长度

/24

为什么 255.255.255.0 = /24

写二进制就清楚了:

255.255.255.0 = 11111111.11111111.11111111.00000000
                 └────────────── 24 个 1 ──────────────┘

常见掩码对照表(建议熟记):

CIDR点分十进制二进制总地址数可用主机数
/8255.0.0.011111111.00000000.00000000.0000000016,777,21616,777,214
/16255.255.0.011111111.11111111.00000000.0000000065,53665,534
/24255.255.255.011111111.11111111.11111111.00000000256254
/25255.255.255.12811111111.11111111.11111111.10000000128126
/26255.255.255.19211111111.11111111.11111111.110000006462
/27255.255.255.22411111111.11111111.11111111.111000003230
/28255.255.255.24011111111.11111111.11111111.111100001614
/29255.255.255.24811111111.11111111.11111111.1111100086
/30255.255.255.25211111111.11111111.11111111.1111110042
/32255.255.255.25511111111.11111111.11111111.1111111111

⚠️ 重要:可用主机数 = 总地址数 - 2(网络地址 + 广播地址)。但 /31/32 有特殊用途(点对点链路),这里暂不展开。


🔧 为什么不能只看前三段?(打破直觉的案例)

案例一:/23 打破“第三段不同”的直觉

192.168.1.10/23
192.168.0.20/23

很多人第一反应:第三段不一样,不同网段。

/23 的掩码是 255.255.254.0,网络位是 23 位:

192.168.1.10:  11000000.10101000.00000001.00001010
192.168.0.20:  11000000.10101000.00000000.00010100
掩码/23:       11111111.11111111.11111110.00000000
                   网络位(23位)          主机位(9位)

比较前 23 位:完全相同同一个网段

这个网段的地址范围是:192.168.0.0 - 192.168.1.255

192.168.0.0/23
范围: 192.168.0.0 - 192.168.1.255

192.168.0.20

192.168.1.10

案例二:/25 打破“前三段相同”的直觉

192.168.1.10/25
192.168.1.200/25

前三段完全一样。

/25 的掩码是 255.255.255.128,把 /24 切成两个子网:

192.168.1.0/25   范围:192.168.1.0 - 192.168.1.127
192.168.1.128/25 范围:192.168.1.128 - 192.168.1.255
  • 192.168.1.10 → 属于 192.168.1.0/25
  • 192.168.1.200 → 属于 192.168.1.128/25

不是同一个网段

192.168.1.0/24

192.168.1.0/25
0-127

192.168.1.128/25
128-255

192.168.1.10

192.168.1.200

工程教训:永远不要靠“看起来像”判断网段。/24 的巧合让“前三段相同”成了伪规律,一换掩码就翻车。


🔧 特殊地址:网络地址和广播地址

在一个传统 IPv4 子网中,有两个地址不能分配给普通主机

192.168.1.0/24 为例:

类型地址二进制(最后 8 位)用途
网络地址192.168.1.000000000标识整个网段
可用主机192.168.1.1 - 25400000001 - 11111110分配给设备
广播地址192.168.1.25511111111发给网段内所有主机

192.168.1.0/24

网络地址
192.168.1.0
标识网段

可用主机
192.168.1.1 - 192.168.1.254

广播地址
192.168.1.255
发给所有主机

网络地址的作用:

  • 在路由表中表示“这个网段的存在”
  • 不能配置在普通网卡上作为通信地址

广播地址的作用:

  • 目标 MAC = FF:FF:FF:FF:FF:FF
  • 网段内所有设备都会接收并处理
  • ARP 请求就是典型例子

⚠️ 工程提醒:虽然某些特殊场景(如 /31 点对点链路)可以不遵守这个规则,但入门和多数生产环境请严格遵守。如果你把服务器配成 192.168.1.255/24 然后问为什么不通——先深呼吸,再改 IP。


子网大小怎么算?

核心公式:

总地址数 = 2^(32 - 前缀长度)
可用主机数 = 总地址数 - 2(网络地址 + 广播地址)

为什么 2^(32 - 前缀长度)

IPv4 共 32 位,前缀长度 = 网络位数量,剩余 = 主机位数量。每个主机位可以取 0 或 1,所以总地址数 = 2^主机位数。

举例:

前缀主机位数计算总地址数可用主机数
/2432-24=82^8256254
/2632-26=62^66462
/1632-16=162^1665,53665,534

前缀长度越短

网络位越少

主机位越多

总地址数越多

前缀长度越长

网络位越多

主机位越少

总地址数越少

⚠️ 易错点/24/16 ,不是大。前缀长度数字越大,网段越小。别记反。


子网划分:把大网段切成小网段

子网划分的核心:从主机位借位,变成网络位

案例:把 /24 切成四个 /26

原始: 192.168.1.0/24
     网络位24位,主机位8位

需要4个子网 → 4 = 2^2 → 借2位 → 网络位变成26位

划分结果:

子网地址范围可用主机数二进制(最后 8 位)
192.168.1.0/26192.168.1.0 - 1.636200xxxxxx
192.168.1.64/26192.168.1.64 - 1.1276201xxxxxx
192.168.1.128/26192.168.1.128 - 1.1916210xxxxxx
192.168.1.192/26192.168.1.192 - 1.2556211xxxxxx

192.168.1.0/24
256个地址

192.168.1.0/26
办公网

192.168.1.64/26
服务器网

192.168.1.128/26
访客网

192.168.1.192/26
摄像头网

划分的好处:

  • 控制广播域大小(减少广播影响范围)
  • 便于安全隔离(不同子网间走路由,可加防火墙)
  • 便于路由聚合(减小路由表)
  • 地址规划更清晰

🔧 掩码配错会发生什么?(典型故障案例)

掩码配错是非常经典的网络故障来源。来看两个典型案例:

案例一:掩码配得太大(/24 配成 /16)

正确配置:A: 192.168.1.10/24  网关: 192.168.1.1
错误配置:A: 192.168.1.10/16  ← 掩码从 /24 被改成了 /16

故障现象:

  • A ping 192.168.2.20 失败
  • A 的 ip neigh 显示 192.168.2.20 的条目为 FAILED
  • 抓包能看到 A 发出 ARP 请求 who-has 192.168.2.20

根本原因:
A 用 /16 掩码计算后发现 192.168.2.20 和自己同网段(都在 192.168.0.0/16 内),于是尝试 ARP 直连。但 B 实际在另一个二层网络,ARP 永远没人回复。

主机A
192.168.1.10/16
掩码配大了

误判:目标 192.168.2.20
和我同网段

直接 ARP 问 192.168.2.20 的 MAC

对方不在同一二层网络
ARP 无响应

通信失败 ❌

案例二:掩码配得太小(/24 配成 /25)

主机A: 192.168.1.10/25  网关: 192.168.1.1/25
主机B: 192.168.1.200/25 网关: 192.168.1.129/25(假设)

故障现象:

  • A 和 B 互相 ping 不通
  • 但 A 能 ping 通自己的网关
  • B 能 ping 通自己的网关

根本原因:
/25 将原来的 /24 切成了两个子网,A 和 B 不在同一个子网,需要经过路由器才能通信。但如果路由器没配置两个子网之间的路由,就无法通信。

排障提示:掩码配错时,IP 看起来没错,网关也配了,但系统根本没打算用网关。它以为对方就在隔壁,结果隔壁其实是另一个城市。掩码错了,世界观就错了。


🔧 Linux 命令速查

查看本机 IP 和掩码:

ip addr

输出示例:

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP>
    inet 192.168.1.10/24 brd 192.168.1.255 scope global eth0
字段含义
192.168.1.10/24本机 IP + 前缀长度
brd 192.168.1.255广播地址
scope global全局有效(非本地回环)

查看路由表(确认直连网段和默认网关):

ip route

输出示例:

192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.10
default via 192.168.1.1 dev eth0
字段含义
192.168.1.0/24 dev eth0直连网段,从 eth0 出去
default via 192.168.1.1默认网关

判断两个 IP 是否同网段(手动计算):

# 安装工具(如果需要)
sudo apt install ipcalc   # Debian/Ubuntu
# 或
sudo yum install ipcalc   # CentOS/RHEL

ipcalc 192.168.1.10/24 192.168.1.20

排查掩码问题的检查清单:

  1. ip addr 里的 /xx 是否符合预期?
  2. ip route 里的直连路由是否符合预期?
  3. 访问同网段目标时,ip neigh 能否解析到 MAC?
  4. 访问不同网段目标时,包是否走了网关?(用 tcpdump 确认)
  5. ARP 是否在错误地找远端 IP?

排障时不要只盯着 IP。IP 后面的 /24/16/26 有时候才是真凶。它们很短,但很能惹事。


🔧 与前几篇的关系:完整的数据发送流程

现在可以把前几篇的知识完整串起来了:

应用要访问目标 IP

系统查看本机 IP 和掩码

计算目标是否同网段

同网段?

下一跳 = 目标 IP

查路由表获取网关 IP

下一跳 = 网关 IP

ARP:下一跳 IP → 下一跳 MAC

封装以太网帧
目标 MAC = 下一跳 MAC

交换机根据目标 MAC 转发

到达下一跳设备

各层职责总结:

角色负责的问题上一篇
IP 地址最终目标是谁第 8 篇
子网掩码目标是否和我同网段本篇
路由表不同网段时,下一跳 IP 是谁第 10 篇预告
ARP下一跳 IP 对应哪个 MAC第 6 篇
交换机目标 MAC 在哪个端口第 7 篇

这张表非常重要。如果你能把这几个角色分清,很多网络问题会从“一团乱麻”变成“按流程排查”。排障不是玄学,排障是把问题放回正确的层次。


常见误区

误区一:前三段一样就是同网段

不对。

这只在 /24 下巧合成立。

  • /25:前三段一样可能不同网段
  • /23:第三段不一样可能是同网段

判断同网段要看掩码,不要只看眼缘。网络不相信缘分。

误区二:/24 比 /16 大

不对。

/24 前 24 位是网络位,主机位 8 位 → 256 个地址
/16 前 16 位是网络位,主机位 16 位 → 65536 个地址

前缀长度越短,网段越大;前缀长度越长,网段越小。 前缀长度不是衣服尺码。

误区三:有默认网关就一定会走网关

不对。

只有当目标不在本机直连网段时,才会查路由表找网关。

如果掩码配错,系统误判目标是直连网段,就会尝试 ARP 直连,网关配置了也没用。

网关坐在那里等半天,包根本没来。

误区四:网络地址和广播地址可以随便分配给主机

通常不行。

  • 网络地址(如 192.168.1.0/24.0)用于标识网段
  • 广播地址(如 .255)用于发给网段内所有主机

虽然点对点链路(/31)等特殊场景有例外,但入门和多数生产环境请严格遵守。

生产环境最怕“我看网上有人这么干”。网上还有人把数据库端口开公网裸奔,不能学。


小结

这一篇我们讲了子网掩码。

核心知识点:

  1. 子网掩码决定 IP 地址中哪部分是网络位、哪部分是主机位。
  2. /24 表示前 24 位是网络位,等价于 255.255.255.0
  3. 判断同网段:(本机 IP & 本机掩码) == (目标 IP & 本机掩码)
  4. 网络地址相同才是同网段,不能单看前三段。
  5. 前缀越短(如 /16)网段越大,前缀越长(如 /30)网段越小。
  6. 一个子网通常有:网络地址、可用主机地址、广播地址。
  7. 掩码配错会导致主机误判目标是否直连,引发通信失败。
  8. 同网段 → ARP 找目标 MAC;不同网段 → ARP 找网关 MAC。
  9. ip addrip route 是排查掩码问题的关键命令。

一句话总结:

IP 地址告诉你门牌号,子网掩码告诉你这个门牌属于哪个小区。 判断清楚“小区边界”,系统才知道该直接敲门还是先去物业。

和前几篇连起来:

IP 管远方,MAC 管眼前;ARP 找脸面,交换机找门牌;掩码划边界,路由定方向。


下一篇预告

下一篇我们继续讲:

第 10 篇:路由表——数据包的导航仪

当目标不在同一个网段时,系统怎么决定下一跳是谁?

默认路由是什么?

为什么有时候明明配置了网关,包却不从那里走?

路由表和掩码、ARP、交换机如何协作?

下一篇,我们把数据包出门前看的那张“导航地图”讲清楚。


转载自CSDN-专业IT技术社区

原文链接:https://blog.csdn.net/hzz812503533/article/details/161726092

评论

赞0

评论列表

微信小程序
QQ小程序

关于作者

点赞数:0
关注数:0
粉丝:0
文章:0
关注标签:0
加入于:--