第4章 - 子网掩码与网络划分
嗨,朋友!
上一章我们学习了 IP 地址,知道了 IP 地址就像是互联网上的"门牌号"。但是,**怎么判断两个 IP 地址是不是在同一个网络里呢?**答案就是:子网掩码!
很多人一听到子网掩码就头疼,觉得计算太复杂。但其实,子网掩码就是一个"筛选器",我用一个简单的类比,保证让你一听就懂!
🤔 什么是子网掩码?
生活中的类比 🏘️
想象一下,你住在一个小区:
小区名称:阳光花园
你家地址:阳光花园 3号楼 201室
朋友地址:阳光花园 3号楼 302室
邻居地址:阳光花园 5号楼 101室
现在问你:
- 你和朋友在同一栋楼吗?✅ 是的(都是3号楼)
- 你和邻居在同一栋楼吗?❌ 不是(一个3号楼,一个5号楼)
子网掩码就是用来判断"是不是同一栋楼"的工具!
正式定义
定义
子网掩码(Subnet Mask)是一个32位的二进制数,用于将 IP 地址分为网络部分和主机部分,从而判断两个 IP 地址是否在同一个子网中。
简单来说:
- 网络部分:就像"小区名 + 楼号"(确定是哪个网络)
- 主机部分:就像"房间号"(确定是网络中的哪台设备)
🔢 子网掩码的格式
十进制格式
子网掩码和 IP 地址一样,由 4 个 0-255 的数字组成:
常见子网掩码:
255.255.255.0 ← 最常见(C类网络默认)
255.255.0.0 ← B类网络默认
255.0.0.0 ← A类网络默认
255.255.255.128 ← 划分子网后
二进制格式
子网掩码的二进制有个特点:连续的 1,后面跟着连续的 0
255.255.255.0 的二进制:
11111111.11111111.11111111.00000000
^^^^^^^^ ^^^^^^^^ ^^^^^^^^ ^^^^^^^^
1 1 1 0
← 网络部分(24个1) → ← 主机部分(8个0)→
规则:
- 1 的部分 → 网络地址(固定不变)
- 0 的部分 → 主机地址(可以变化)
🎯 子网掩码的作用
作用1:判断是否在同一网络
例子:
IP地址1: 192.168.1.100
IP地址2: 192.168.1.200
子网掩码: 255.255.255.0
判断步骤:
1. IP1 和子网掩码做"与运算":
192.168.1.100 & 255.255.255.0 = 192.168.1.0(网络地址)
2. IP2 和子网掩码做"与运算":
192.168.1.200 & 255.255.255.0 = 192.168.1.0(网络地址)
3. 结果相同 → 在同一网络 ✅
不在同一网络的例子:
IP地址1: 192.168.1.100
IP地址2: 192.168.2.100
子网掩码: 255.255.255.0
判断:
192.168.1.100 & 255.255.255.0 = 192.168.1.0
192.168.2.100 & 255.255.255.0 = 192.168.2.0
结果不同 → 不在同一网络 ❌
作用2:划分子网
通过调整子网掩码,可以把一个大网络划分成多个小网络。
原始网络:192.168.1.0/24(可容纳254台主机)
子网掩码:255.255.255.0
划分后:
子网1:192.168.1.0/25 (可容纳126台主机)
子网2:192.168.1.128/25 (可容纳126台主机)
子网掩码:255.255.255.128
🔍 二进制与运算(重要!)
什么是"与运算"?
与运算规则(AND 运算):
1 & 1 = 1
1 & 0 = 0
0 & 1 = 0
0 & 0 = 0
口诀:都是 1 才是 1,否则都是 0
实际例子
IP地址: 192.168.1.100
二进制: 11000000.10101000.00000001.01100100
子网掩码: 255.255.255.0
二进制: 11111111.11111111.11111111.00000000
与运算:
11000000.10101000.00000001.01100100 (IP地址)
& 11111111.11111111.11111111.00000000 (子网掩码)
= 11000000.10101000.00000001.00000000 (网络地址)
= 192.168.1.0
📊 常见子网掩码表
| 子网掩码 | CIDR | 网络位 | 主机位 | 可用主机数 | 适用场景 |
|---|---|---|---|---|---|
| 255.0.0.0 | /8 | 8 | 24 | 16,777,214 | 超大型网络 |
| 255.255.0.0 | /16 | 16 | 16 | 65,534 | 大型网络 |
| 255.255.255.0 | /24 | 24 | 8 | 254 | 中小型网络 |
| 255.255.255.128 | /25 | 25 | 7 | 126 | 小型网络 |
| 255.255.255.192 | /26 | 26 | 6 | 62 | 微型网络 |
| 255.255.255.224 | /27 | 27 | 5 | 30 | 办公室 |
| 255.255.255.240 | /28 | 28 | 4 | 14 | 小团队 |
| 255.255.255.252 | /30 | 30 | 2 | 2 | 点对点连接 |
🌐 CIDR 表示法
什么是 CIDR?
CIDR(Classless Inter-Domain Routing,无类别域间路由)是一种更简洁的表示方法。
格式:IP地址/网络位数
传统写法:
IP地址: 192.168.1.100
子网掩码: 255.255.255.0
CIDR写法:
192.168.1.100/24
↑
网络位数(24个1)
CIDR 对照表
| CIDR | 子网掩码 | 二进制中的1的个数 |
|---|---|---|
| /8 | 255.0.0.0 | 8个1 |
| /16 | 255.255.0.0 | 16个1 |
| /24 | 255.255.255.0 | 24个1 |
| /25 | 255.255.255.128 | 25个1 |
| /26 | 255.255.255.192 | 26个1 |
| /27 | 255.255.255.224 | 27个1 |
| /28 | 255.255.255.240 | 28个1 |
| /30 | 255.255.255.252 | 30个1 |
| /32 | 255.255.255.255 | 32个1(单个主机) |
为什么用 CIDR?
更简洁:
❌ 192.168.1.0 255.255.255.0
✅ 192.168.1.0/24
更灵活:
❌ 只能用 A、B、C 类地址
✅ 可以自由划分任意大小的网络
🔧 子网划分实战
案例1:划分4个子网
需求:公司有4个部门,需要把 192.168.1.0/24 划分成4个子网。
步骤:
计算需要多少位:
4个子网 = 2^2 需要借用 2 位主机位来做网络位计算新的子网掩码:
原来: /24 (255.255.255.0) 借2位: /26 (255.255.255.192) 二进制: 11111111.11111111.11111111.11000000 ^^←借的2位划分结果:
子网1: 192.168.1.0/26 (192.168.1.0 - 192.168.1.63) 子网2: 192.168.1.64/26 (192.168.1.64 - 192.168.1.127) 子网3: 192.168.1.128/26 (192.168.1.128 - 192.168.1.191) 子网4: 192.168.1.192/26 (192.168.1.192 - 192.168.1.255) 每个子网可容纳: 64 - 2 = 62 台主机 (减2:网络地址和广播地址)
案例2:小公司网络规划
需求:小公司有3个部门,需要分配 IP 地址。
部门A:需要 50 台电脑
部门B:需要 30 台电脑
部门C:需要 10 台电脑
分配方案:
总网络: 192.168.0.0/24
部门A: 192.168.0.0/26 (可容纳 62 台) ✅
部门B: 192.168.0.64/26 (可容纳 62 台) ✅
部门C: 192.168.0.128/27 (可容纳 30 台) ✅
预留: 192.168.0.160/27 (可容纳 30 台) ⚡
🧮 快速计算技巧
技巧1:记住常用子网掩码
/24 → 255.255.255.0 → 254 台主机
/25 → 255.255.255.128 → 126 台主机
/26 → 255.255.255.192 → 62 台主机
/27 → 255.255.255.224 → 30 台主机
/28 → 255.255.255.240 → 14 台主机
/30 → 255.255.255.252 → 2 台主机(点对点)
技巧2:快速计算主机数
公式: 可用主机数 = 2^主机位数 - 2
例子:
/24 → 主机位 8 位 → 2^8 - 2 = 254
/26 → 主机位 6 位 → 2^6 - 2 = 62
/30 → 主机位 2 位 → 2^2 - 2 = 2
技巧3:快速判断网络地址
IP: 192.168.1.100/26
步骤:
1. /26 的块大小 = 256 - 192 = 64
2. 100 ÷ 64 = 1 余 36
3. 网络地址 = 1 × 64 = 64
4. 结果: 192.168.1.64
这个 IP 属于 192.168.1.64/26 网络
范围: 192.168.1.64 - 192.168.1.127
💻 实际应用案例
前端开发
// 判断两个 IP 是否在同一子网
function isSameSubnet(ip1, ip2, mask) {
const ipToNumber = (ip) => {
return ip.split('.').reduce((acc, octet) =>
(acc << 8) + parseInt(octet), 0);
};
const ip1Num = ipToNumber(ip1);
const ip2Num = ipToNumber(ip2);
const maskNum = ipToNumber(mask);
const network1 = ip1Num & maskNum;
const network2 = ip2Num & maskNum;
return network1 === network2;
}
// 使用示例
console.log(isSameSubnet(
'192.168.1.100',
'192.168.1.200',
'255.255.255.0'
)); // true
console.log(isSameSubnet(
'192.168.1.100',
'192.168.2.100',
'255.255.255.0'
)); // false
后端开发
# Python 计算网络地址
import ipaddress
# 方法1:使用 ipaddress 模块
network = ipaddress.IPv4Network('192.168.1.100/24', strict=False)
print(f"网络地址: {network.network_address}") # 192.168.1.0
print(f"广播地址: {network.broadcast_address}") # 192.168.1.255
print(f"可用主机数: {network.num_addresses - 2}") # 254
# 方法2:判断 IP 是否在子网中
ip = ipaddress.IPv4Address('192.168.1.100')
network = ipaddress.IPv4Network('192.168.1.0/24')
print(ip in network) # True
# 输出所有可用 IP
for host in network.hosts():
print(host)
运维配置
# Linux 配置静态 IP 和子网掩码
sudo vim /etc/netplan/01-netcfg.yaml
network:
version: 2
ethernets:
eth0:
addresses:
- 192.168.1.100/24 # IP/子网掩码(CIDR格式)
gateway4: 192.168.1.1
nameservers:
addresses:
- 8.8.8.8
# 应用配置
sudo netplan apply
# 查看配置
ip addr show eth0
# 输出:
# inet 192.168.1.100/24 brd 192.168.1.255 scope global eth0
测试工程师
# 使用 ipcalc 计算子网信息
ipcalc 192.168.1.100/24
# 输出:
# Address: 192.168.1.100
# Netmask: 255.255.255.0 = 24
# Network: 192.168.1.0/24
# Broadcast: 192.168.1.255
# HostMin: 192.168.1.1
# HostMax: 192.168.1.254
# Hosts/Net: 254
# 测试网络连通性
ping -c 4 192.168.1.1 # 测试网关
🎯 特殊的子网掩码
/32 - 单个主机
192.168.1.100/32
子网掩码: 255.255.255.255
用途:
- 指定单个主机
- 路由表中的主机路由
- 防火墙规则中精确匹配
/30 - 点对点连接
10.0.0.0/30
子网掩码: 255.255.255.252
可用主机: 2 台
用途:
- 路由器之间的连接
- 点对点链路
示例:
网络地址: 10.0.0.0
路由器1: 10.0.0.1
路由器2: 10.0.0.2
广播地址: 10.0.0.3
/31 - 特殊的点对点
10.0.0.0/31
可用主机: 2 台(无网络地址和广播地址)
用途:
- RFC 3021 标准
- 路由器点对点链路
- 节省 IP 地址
📝 子网划分练习表
| 需求 | 主机数 | 推荐子网 | 子网掩码 | 可用主机 |
|---|---|---|---|---|
| 大型企业 | 1000+ | /22 | 255.255.252.0 | 1022 |
| 中型企业 | 200+ | /24 | 255.255.255.0 | 254 |
| 小型办公室 | 50+ | /26 | 255.255.255.192 | 62 |
| 小团队 | 10+ | /28 | 255.255.255.240 | 14 |
| 路由器连接 | 2 | /30 | 255.255.255.252 | 2 |
💡 长安的学习建议
- 理解概念最重要 - 不要死记硬背,理解"与运算"的原理
- 记住常用的 - /24、/26、/30 是最常用的,先记住这几个
- 多做计算 - 刚开始可以用计算器,慢慢就熟练了
- 联系实际 - 想想你们公司的网络是怎么划分的
- 使用工具 - 用 ipcalc、在线子网计算器辅助学习
📝 小结
这一章我们学习了:
✅ 子网掩码的作用:判断是否在同一网络、划分子网
✅ 二进制与运算:IP 地址 & 子网掩码 = 网络地址
✅ CIDR 表示法:192.168.1.0/24 更简洁
✅ 子网划分:根据需求划分不同大小的子网
✅ 快速计算:记住常用子网掩码和计算公式
✅ 实际应用:前端、后端、运维、测试都要用到
🎯 下一步
现在你已经理解了 IP 地址和子网掩码,接下来我们要学习应用层最重要的协议:HTTP 和 HTTPS!这是 Web 开发的基础,一定要好好学!
💪 练习题
判断以下 IP 是否在同一子网(子网掩码:255.255.255.0):
- 192.168.1.100 和 192.168.1.200
- 192.168.1.100 和 192.168.2.100
192.168.1.0/26 这个网络可以容纳多少台主机?
如何将 192.168.1.0/24 划分成 8 个子网?
答案提示
判断是否在同一子网:
- 192.168.1.100 和 192.168.1.200 → 在同一子网 ✅
- 网络地址都是 192.168.1.0
- 192.168.1.100 和 192.168.2.100 → 不在同一子网 ❌
- 网络地址分别是 192.168.1.0 和 192.168.2.0
- 192.168.1.100 和 192.168.1.200 → 在同一子网 ✅
192.168.1.0/26 可容纳主机数:
- /26 表示 26 位网络位,6 位主机位
- 可用主机数 = 2^6 - 2 = 64 - 2 = 62 台
- (减去网络地址和广播地址)
划分 8 个子网:
- 8 = 2^3,需要借用 3 位主机位
- 原来 /24,借 3 位变成 /27
- 子网掩码:255.255.255.224
- 8个子网:
- 192.168.1.0/27 (0-31)
- 192.168.1.32/27 (32-63)
- 192.168.1.64/27 (64-95)
- 192.168.1.96/27 (96-127)
- 192.168.1.128/27 (128-159)
- 192.168.1.160/27 (160-191)
- 192.168.1.192/27 (192-223)
- 192.168.1.224/27 (224-255)
- 每个子网可容纳 30 台主机
