第3章 第13.2天
好的,同学们!今天咱们来啃一个让无数网工专业同学头疼的硬骨头——子网划分与CIDR。别被这些术语吓到,其实它就是给IP地址"分宿舍楼"和"分房间"的技术。我会用咱们熟悉的校园网场景,带你一步步掌握如何合理分配IP地址,解决"B栋WiFi不够用"、"实验室网络太卡"这些实际问题。放心,全是干货,附带子网计算器和Wireshark验证技巧!( •̀ ω •́ )✧
标题:校园网IP规划指南:从子网划分到CIDR的超详细拆解(含计算器公式)
一、IP地址基础:理解"网络号"与"主机号"
1. IP地址的本质:校园里的"楼号+房间号"
结构解析: IPv4地址是 32位二进制数,通常写成4个十进制数(如 192.168.1.100)。它包含两部分:
网络号 (Network ID): 相当于宿舍楼编号,标识一个物理网络(如"3号教学楼")。
主机号 (Host ID): 相当于房间号*,标识该网络中的具体设备(如"301教室的第三台电脑")。
*传统分类(已过时但需了解):
// IPv4地址分类 (历史遗留,CIDR前使用)
// -------------------------------------------------------------------
// | 类别 | 首字节范围 | 网络号位数 | 主机号位数 | 默认掩码| 典型用途|
// |------|------------|------------|------------|---------------|-------------------|
// | A| 1-126| 8| 24| 255.0.0.0| 超大型机构|
// | B| 128-191| 16| 16| 255.255.0.0| 大学/中型企业|
// | C| 192-223| 24| 8| 255.255.255.0 | 小型网络|
// | D| 224-239| -| -| -| 组播 (Multicast)|
// | E| 240-255| -| -| -| 实验保留|
// -------------------------------------------------------------------
问题: 这种固定分类导致B类地址很快耗尽(一个学校拿整个B类太浪费),而C类又太小(最多254台设备)。于是有了子网划分和CIDR*。
2. 子网掩码:区分"楼号"和"房间号"的标尺
作用: 告诉设备IP地址中哪部分是网络号,哪部分是主机号。也是32位二进制,网络号部分全1,主机号部分全0*。
*示例: 255.255.255.0(二进制 11111111.11111111.11111111.00000000)表示前24位是网络号,后8位是主机号。
*计算网络号: IP地址 AND 子网掩码(按位与运算)。
# Python示例:计算网络地址
ip = "192.168.1.100"
mask = "255.255.255.0"
network = ".".join(str(int(a) & int(b)) for a, b in zip(ip.split("."), mask.split(".")))
print(network)# 输出: 192.168.1.0
*特殊地址:
*网络地址: 主机号全0(如 192.168.1.0)→ 代表整个子网,不能分配给设备。
*广播地址: 主机号全1(如 192.168.1.255)→ 发给该子网所有设备,不能分配。
*私有地址(可重复使用):
*10.0.0.0/8、172.16.0.0/12、192.168.0.0/16 → 宿舍内网常用这些,出校园需NAT转换。
二、子网划分:解决"B栋人太多,C栋住不满"的问题
1. 基本思想:向主机号"借位"
场景: 假设学校给你一个 192.168.1.0/24(C类,254个主机),但需要分给6个实验室,每个不超过30台设备。
步骤:
1.确定子网数:** 需要6个子网,2^3=8 ≥6,所以向主机号借3位。
2.新子网掩码: 原24位网络号 + 3位子网号 = 27位,即 255.255.255.224(最后字节 11100000)。
3.计算子网块大小: 剩余主机号位数=5,每个子网可用IP数=2^5-2=30(减掉网络地址和广播地址)。
4.划分子网:
// 子网划分表 (192.168.1.0/24 → /27)
// ---------------------------------------------------------
// | 子网| 网络地址| 可用IP范围| 广播地址|
// |--------|---------------|-----------------------|---------------|
// | 子网0 | 192.168.1.0| 192.168.1.1-30| 192.168.1.31|
// | 子网1 | 192.168.1.32| 192.168.1.33-62| 192.168.1.63|
// | 子网2 | 192.168.1.64| 192.168.1.65-94| 192.168.1.95|
// | ...| ...| ...| ...|
// | 子网7 | 192.168.1.224 | 192.168.1.225-254| 192.168.1.255 |
// ---------------------------------------------------------
*验证工具:
# Linux/Mac: ipcalc 工具
ipcalc 192.168.1.0/27
# 输出每个子网的网络地址、掩码、范围等
# 或使用在线子网计算器
2. VLSM(变长子网掩码):更精细的分配
场景: 如果6个实验室规模不同(网络实验室50人,软件实验室20人...),固定子网划分浪费IP。这时用 VLSM 动态调整子网大小。
步骤:
1.从大到小分配:** 先满足最大子网需求。
*网络实验室需50主机 → 2^6-2=62 ≥50 → 掩码 /26(255.255.255.192),分配 192.168.1.0/26(IP范围1-62)。
2.剩余部分继续划分: 下一个可用网络地址是 192.168.1.64。
*软件实验室需20主机 → 2^5-2=30 ≥20 → 掩码 /27,分配 192.168.1.64/27(IP范围65-94)。
3.重复直到分完:
// VLSM划分示例
// ---------------------------------------------------------
// | 部门| 需求 | 分配子网| 实际可用IP数 |
// |------------|------|-------------------|--------------|
// | 网络实验室 | 50| 192.168.1.0/26| 62|
// | 软件实验室 | 20| 192.168.1.64/27| 30|
// | 硬件实验室 | 10| 192.168.1.96/28| 14|
// | ...| ...| ...| ...|
// ---------------------------------------------------------
三、CIDR:无类域间路由(解决路由表爆炸)
1. 核心思想:抛弃ABC类,用"前缀长度"自由划分
斜线记法: IP地址/前缀长度,如 192.168.1.0/24 表示前24位是网络号。
优势:
灵活分配: ISP可以给学校分配 203.179.24.0/21(2046个IP),学校再自行划分子网。
路由聚合: 多个连续子网可合并为一条路由条目(如 192.168.0.0/16 包含所有 192.168.x.x),大幅减少全球路由表大小。
*示例:校园网规划
// 某大学CIDR分配方案
// ---------------------------------------------------------
// | 区域| 需求| 分配地址块| 备注|
// |--------------|------------|-------------------|---------------|
// | 主校区| 2000 IP| 210.45.128.0/20| 16个子网/256IP|
// | 东校区| 500 IP| 210.45.144.0/22| 4个子网/128IP |
// | 教职工宿舍| 1000 IP| 210.45.148.0/23| 2个子网/512IP |
// ---------------------------------------------------------
2. 路由聚合实战
*场景: 学校有4个连续子网:
*210.45.150.0/24(计算机学院)
*210.45.151.0/24(通信学院)
*210.45.152.0/24(自动化学院)
*210.45.153.0/24(机电学院)
*聚合方法: 找到共同前缀位数:
*前22位相同(210.45.150.0 和 210.45.153.0 二进制前22位一致)。
*聚合后路由条目: 210.45.150.0/22 → 对外只需通告这一条,减少路由器负担!
四、实战:用Wireshark验证子网划分
1.抓包观察IP分配:
*在宿舍WiFi抓包,过滤 dhcp 看DHCP分配的IP是否在预期的子网范围内(如 192.168.1.64/27)。
2.验证路由聚合:
*在跨校区网络抓包,观察路由器通告的路由条目是否是聚合后的CIDR块(如 210.45.150.0/22)。
3.子网计算器代码:
# Python简易子网计算器 (计算CIDR信息)
import ipaddress
def subnet_calculator(ip_cidr):
net = ipaddress.IPv4Network(ip_cidr, strict=False)
print(f"网络地址: {net.network_address}")
print(f"广播地址: {net.broadcast_address}")
print(f"可用IP数: {net.num_addresses - 2}")
print(f"子网掩码: {net.netmask}")
print(f"可用IP范围: {list(net.hosts())[0]} - {list(net.hosts())[-1]}")
# 示例:计算192.168.1.64/27
subnet_calculator("192.168.1.64/27")
五、总结:子网划分与CIDR的核心价值
1.解决地址浪费: 通过子网划分和VLSM,让IP分配更精细。
2.提升路由效率: CIDR聚合减少路由表条目,缓解IPv4压力。
3.规划思维: 像分配宿舍楼一样规划IP,先大后小,留冗余。
动手时间: 用 ipcalc 或上述Python代码,规划你们宿舍楼的IP分配方案吧!遇到问题欢迎讨论~ (◕‿◕)
感谢浏览和学习,作者:鱼油YOU,转载请注明原文链接:https://www.cnblogs.com/OmegaYOU3/p/19020792,或者可以➕主播WX:OmegaAnimeman_desu;QQ:3819054512
浙公网安备 33010602011771号