知识点编号:022
难度等级:⭐⭐⭐(必掌握)
面试频率:🔥🔥🔥🔥
🎯 一句话总结
子网划分就像切蛋糕,把大网络切成小网络;CIDR就是灵活的切法!🍰
🔪 什么是子网划分?
问题:
一个C类网络:192.168.1.0/24
可以有254个主机
但我只需要50个主机,剩下的浪费了!
解决:子网划分
把一个大网络分成多个小网络
比喻:
一个大蛋糕(254人份)
切成4个小蛋糕(每个60人份)
更灵活!
📐 子网掩码
什么是子网掩码?
作用:区分网络号和主机号
示例:192.168.1.10/24
IP地址: 192.168.1.10
二进制: 11000000.10101000.00000001.00001010
子网掩码:255.255.255.0
二进制: 11111111.11111111.11111111.00000000
↑________________________↑ ↑______↑
网络号(24位) 主机号(8位)
网络号: 192.168.1.0
主机号: 10
广播地址:192.168.1.255
常见子网掩码
/8 = 255.0.0.0 (A类默认)
/16 = 255.255.0.0 (B类默认)
/24 = 255.255.255.0 (C类默认,最常见)
/25 = 255.255.255.128
/26 = 255.255.255.192
/27 = 255.255.255.224
/28 = 255.255.255.240
/29 = 255.255.255.248
/30 = 255.255.255.252 (点对点连接)
🍰 子网划分示例
示例:把192.168.1.0/24分成4个子网
原网络:
192.168.1.0/24
主机数:254个
需求:分成4个子网
计算:
4个子网需要2位(2^2 = 4)
原来主机位8位,借2位给网络
新子网掩码:/26(24 + 2)
子网1:192.168.1.0/26
- 范围:192.168.1.0 ~ 192.168.1.63
- 可用:192.168.1.1 ~ 192.168.1.62(62个主机)
- 广播:192.168.1.63
子网2:192.168.1.64/26
- 范围:192.168.1.64 ~ 192.168.1.127
- 可用:192.168.1.65 ~ 192.168.1.126
- 广播:192.168.1.127
子网3:192.168.1.128/26
- 范围:192.168.1.128 ~ 192.168.1.191
- 可用:192.168.1.129 ~ 192.168.1.190
- 广播:192.168.1.191
子网4:192.168.1.192/26
- 范围:192.168.1.192 ~ 192.168.1.255
- 可用:192.168.1.193 ~ 192.168.1.254
- 广播:192.168.1.255
🌐 CIDR(无类域间路由)
什么是CIDR?
传统分类(有类):
- A类:/8固定
- B类:/16固定
- C类:/24固定
太死板!浪费地址!
CIDR(无类):
- 可以是任意长度:/1 ~ /32
- 灵活划分
- 节省地址
示例:
需要500个主机
- 有类:必须用B类(65534个,浪费!)
- 无类:用/23(510个主机,刚好)
CIDR表示法:
192.168.1.0/24
↑ ↑
网络地址 掩码长度
CIDR计算
公式:
主机数 = 2^(32-掩码长度) - 2
示例:
/24:2^(32-24) - 2 = 2^8 - 2 = 254个主机
/25:2^(32-25) - 2 = 2^7 - 2 = 126个主机
/26:2^(32-26) - 2 = 2^6 - 2 = 62个主机
/27:2^(32-27) - 2 = 2^5 - 2 = 30个主机
/28:2^(32-28) - 2 = 2^4 - 2 = 14个主机
/29:2^(32-29) - 2 = 2^3 - 2 = 6个主机
/30:2^(32-30) - 2 = 2^2 - 2 = 2个主机
💻 Java代码示例
public class SubnetCalculator {
/**
* 计算网络地址
*/
public static String getNetworkAddress(String ip, int cidr) {
long ipLong = ipToLong(ip);
long mask = ~((1L << (32 - cidr)) - 1);
long network = ipLong & mask;
return longToIp(network);
}
/**
* 计算广播地址
*/
public static String getBroadcastAddress(String ip, int cidr) {
long ipLong = ipToLong(ip);
long mask = ~((1L << (32 - cidr)) - 1);
long network = ipLong & mask;
long broadcast = network | ~mask;
return longToIp(broadcast);
}
/**
* 计算可用主机数
*/
public static int getHostCount(int cidr) {
return (int) Math.pow(2, 32 - cidr) - 2;
}
/**
* IP转Long
*/
private static long ipToLong(String ip) {
String[] parts = ip.split("\\.");
long result = 0;
for (int i = 0; i < 4; i++) {
result = (result << 8) | Integer.parseInt(parts[i]);
}
return result;
}
/**
* Long转IP
*/
private static String longToIp(long ip) {
return String.format("%d.%d.%d.%d",
(ip >> 24) & 0xFF,
(ip >> 16) & 0xFF,
(ip >> 8) & 0xFF,
ip & 0xFF
);
}
public static void main(String[] args) {
String ip = "192.168.1.10";
int cidr = 24;
System.out.println("IP地址:" + ip + "/" + cidr);
System.out.println("网络地址:" + getNetworkAddress(ip, cidr));
System.out.println("广播地址:" + getBroadcastAddress(ip, cidr));
System.out.println("可用主机数:" + getHostCount(cidr));
}
}
// 输出:
// IP地址:192.168.1.10/24
// 网络地址:192.168.1.0
// 广播地址:192.168.1.255
// 可用主机数:254
🐛 常见面试题
Q1:什么是子网划分?如何划分?
答案:
子网划分是将一个大网络分成多个小网络。
目的:
1. 节省IP地址
2. 提高网络性能(减少广播域)
3. 便于管理
划分方法:
1. 确定需要的子网数量
2. 计算需要借用的位数:n位可以分2^n个子网
3. 新掩码 = 原掩码 + 借用位数
4. 计算每个子网的范围
示例:192.168.1.0/24分成4个子网
- 需要2位(2^2=4)
- 新掩码:/26
- 子网大小:64个地址
子网1:192.168.1.0/26 (0-63)
子网2:192.168.1.64/26 (64-127)
子网3:192.168.1.128/26 (128-191)
子网4:192.168.1.192/26 (192-255)
Q2:CIDR是什么?有什么优势?
答案:
CIDR(Classless Inter-Domain Routing)
无类域间路由
传统分类的问题:
- A类:1677万主机(太大,浪费)
- B类:65534主机(中等)
- C类:254主机(太小)
- 只能选这三种,不灵活
CIDR的优势:
1. 灵活划分
- 可以是任意长度:/1 ~ /32
- 按需分配,不浪费
2. 减少路由表大小
- 路由聚合
- 多个网络合并成一条路由
3. 延缓IPv4地址耗尽
- 更高效利用地址空间
表示法:
IP地址/掩码长度
例如:192.168.1.0/24
计算主机数:
2^(32-掩码长度) - 2
例如:
/24: 2^8 - 2 = 254
/25: 2^7 - 2 = 126
/26: 2^6 - 2 = 62
📊 快速参考表
| CIDR | 子网掩码 | 主机数 | 用途 |
|---|---|---|---|
| /8 | 255.0.0.0 | 16,777,214 | 超大型网络 |
| /16 | 255.255.0.0 | 65,534 | 大型网络 |
| /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 | 点对点连接 |
| /32 | 255.255.255.255 | 1 | 单个主机 |
🎓 总结
子网划分和CIDR的关键点:
- 子网划分:把大网络分成小网络
- 子网掩码:区分网络号和主机号
- CIDR:灵活的、无类的划分方式
- 计算:主机数 = 2^(32-掩码) - 2
记忆口诀:
借位划分子网络 🔪
CIDR灵活又高效 ⚡
掩码决定主机数 📏
二的幂次减去二 ➖
文档创建时间:2025-10-31