子网掩码计算与子网划分实战:AND/OR运算、广播地址与Python自动化
简介这份专业课件面向计算机网络初学者与备考学生聚焦子网划分与子网掩码这一核心难点帮助读者理清网络号、主机号、子网号之间的关系掌握子网掩码的计算与广播地址的推导方法。资源包内含1个pptx文件整体约142KB以幻灯片形式组织知识点便于课堂讲解与自学翻阅。课件共19页从子网概念入手依次讲解子网掩码的作用、利用掩码划分子网的实现过程、网络号与广播地址的计算并配有地址类别判断、网段地址求解等实践练习还涉及同一子网内主机能否通信的典型问题。目前已有296人学习适合需要系统梳理子网知识、通过例题巩固计算思路的读者参考使用。1. 子网掩码到底在算什么从一份 19 页 PPT 教案说起很多人第一次接触子网划分是在一道「192.168.1.14/28 和 192.168.1.17/28 能不能通」的题上翻的车。这份《子网及子网掩码 PPT 学习教案》一共 19 页讲的正是这类问题的底层逻辑IP 地址 网络号 子网号 主机号子网掩码负责把这三段切出来。它不堆概念而是用 AND 运算、广播地址计算、子网划分练习把「网络号怎么来、广播地址怎么算、两个 IP 在不在同一网段」串成一条线。适合正在备考计算机网络、准备网络工程师认证或者被255.255.255.192这类掩码绕晕的从业者。下面我按这份教案的脉络把它拆成能直接抄作业的步骤。2. 子网掩码的运算原理AND 求网络号、OR 求广播地址2.1 为什么是 AND 和 OR 这两个运算教案第 3 页给了一个很干脆的定义网络号 IP 地址 AND 子网掩码。这句话背后是二进制位的对齐关系——子网掩码某位为 1说明 IP 地址对应位属于网络部分AND 运算保留它某位为 0说明对应位是主机部分AND 运算把它清零。所以172.16.2.160 AND 255.255.0.0得到172.16.2.0网络号就出来了。广播地址则相反它要把主机位全部置 1。教案第 7 页的表格写得很清楚网络地址不动主机地址全为 1。用 OR 运算实现就是「网络号 OR 主机位全 1 的掩码」。以10.217.123.7 / 255.255.240.0为例网络号是10.217.112.0广播地址是10.217.127.255。这两个运算不是玄学是位运算的必然结果理解了位对齐后面所有计算都是体力活。2.2 用 Python 把 AND / OR 运算跑一遍光看 PPT 容易「眼睛会了手不会」我一般会写几行脚本把每一步打印出来对照教案的表格验证。import ipaddress def net_and_broadcast(ip_str, mask_str): # 把点分十进制转成 32 位整数 ip_int int(ipaddress.IPv4Address(ip_str)) mask_int int(ipaddress.IPv4Address(mask_str)) # 网络号 IP AND 掩码 net_int ip_int mask_int # 广播地址 网络号 OR 掩码取反主机位全 1 broadcast_int net_int | (~mask_int 0xFFFFFFFF) net ipaddress.IPv4Address(net_int) broadcast ipaddress.IPv4Address(broadcast_int) print(fIP: {ip_str} 掩码: {mask_str}) print(f网络号: {net}) print(f广播地址: {broadcast}) return net, broadcast # 教案第 7 页的例子 net_and_broadcast(10.217.123.7, 255.255.240.0) # 教案第 9 页练习里的例子 net_and_broadcast(201.222.10.60, 255.255.255.248)逻辑说明ip_int mask_int就是教案说的 AND 求网络号~mask_int 0xFFFFFFFF先把掩码取反主机位变 1再和网络号做 OR得到广播地址。参数说明ip_str和mask_str都传点分十进制字符串函数内部用ipaddress模块做转换避免手写移位出错。跑完对照教案第 10 页的答案表201.222.10.60 / 255.255.255.248的网络号是201.222.10.56广播地址是201.222.10.63能对上就说明运算逻辑没问题。2.3 默认子网掩码与「借位」的关系教案第 8 页列了 A、B、C 三类的默认掩码A 类255.0.0.0B 类255.255.0.0C 类255.255.255.0。默认掩码意味着「不划分子网」网络号就是 IP 和默认掩码 AND 的结果。一旦你看到255.255.255.192这种比默认掩码长的就说明从主机位借了位给子网。教案第 5、6 页用172.16.2.160演示了这个过程默认255.255.0.0时网络号是172.16.2.0换成255.255.255.0网络号变成172.16.2.0但主机位少了一段再换成255.255.255.192网络号变成172.16.2.128因为借了 2 位给子网。这里的关键是掩码越长子网越多每个子网能放的主机越少。教案第 15 页给了公式——借 n 位生成 2ⁿ 个子网剩 m 位主机则每个子网可用主机数为 2ᵐ - 2。减 2 是因为网络号和广播地址不能分配给主机。3. 子网划分实操从需求反推掩码和地址空间3.1 划分步骤先算子网数再算主机数教案第 15 页把划分步骤写成了三步根据子网数和主机数推算 n求出子网掩码列出所有子网和主机地址。第 16 页的例题是「C 类地址 202.97.227.0 分 5 个子网」。因为 2² 4 52³ 8 ≥ 5所以 n 3从主机位借 3 位新掩码是255.255.255.224也就是/27。借 3 位后主机位剩 5 位每个子网可用主机数是 2⁵ - 2 30 台。教案列出的地址空间从202.97.227.1~202.97.227.30一直到202.97.227.225~202.97.227.254一共 8 个子网每个子网 32 个地址含网络号和广播地址。这里有个容易忽略的点题目要 5 个子网实际划出 8 个多出来的 3 个是「浪费」但必须接受因为子网数只能是 2 的幂。3.2 用脚本批量列出所有子网手工列 8 个子网还行列 16 个、32 个就容易出错。我一般用ipaddress模块的subnets()方法直接生成再对照教案的地址范围。import ipaddress def list_subnets(network_str, new_prefix): # network_str 是原始网络new_prefix 是借位后的前缀长度 net ipaddress.IPv4Network(network_str) subnets list(net.subnets(new_prefixnew_prefix)) print(f原始网络: {network_str} 新前缀: /{new_prefix}) print(f子网数量: {len(subnets)}) for i, sub in enumerate(subnets, 1): # 第一个可用地址和最后一个可用地址 hosts list(sub.hosts()) print(f子网{i}: {sub.network_address} f可用范围 {hosts[0]}~{hosts[-1]} f广播 {sub.broadcast_address}) # 教案第 16 页例题202.97.227.0 分 5 个子网借 3 位得 /27 list_subnets(202.97.227.0/24, 27)逻辑说明net.subnets(new_prefix27)会把/24的网络按/27切分自动生成 8 个子网。sub.hosts()返回可用主机地址自动排除网络号和广播地址hosts[0]和hosts[-1]就是可用范围的起止。参数说明network_str传原始网络地址加前缀new_prefix传借位后的前缀长度。跑出来的结果和教案第 16 页的地址范围一一对应202.97.227.0/27的可用范围是.1~.30202.97.227.32/27是.33~.62以此类推。3.3 判断两个 IP 是否在同一子网教案第 12 页抛了一个很实用的问题192.168.1.14/28和192.168.1.17/28能不能通讯判断方法就是把两个 IP 分别和同一个掩码 AND看网络号是否相同。/28的掩码是255.255.255.240192.168.1.14 AND 255.255.255.240 192.168.1.0192.168.1.17 AND 255.255.255.240 192.168.1.16网络号不同所以不在同一子网不能直接通讯需要经过路由器。import ipaddress def same_subnet(ip1, ip2, mask): m ipaddress.IPv4Address(mask) net1 ipaddress.IPv4Address(int(ipaddress.IPv4Address(ip1)) int(m)) net2 ipaddress.IPv4Address(int(ipaddress.IPv4Address(ip2)) int(m)) print(f{ip1} 网络号: {net1}) print(f{ip2} 网络号: {net2}) print(f是否同子网: {net1 net2}) same_subnet(192.168.1.14, 192.168.1.17, 255.255.255.240)逻辑说明分别对两个 IP 做 AND 运算得到网络号比较是否相等。参数说明mask传点分十进制掩码字符串。这个函数可以直接嵌到网络排查脚本里批量判断一批 IP 的网段归属。4. 广播地址与网段地址计算避开「全 0 全 1」的坑4.1 广播地址的两种类型教案第 7 页区分了「本地网络广播地址」和一般广播地址。本地网络广播地址是主机位全 1比如10.217.123.7 / 255.255.240.0的广播地址是10.217.127.255。这个地址不能被分配给任何主机它的作用是让子网内所有主机都能收到数据包。教案第 9 页的练习表里153.50.6.27 / 255.255.255.128的广播地址是153.50.6.127网络号是153.50.6.0可用范围是.1~.126。这里有个血泪经验很多人算广播地址时忘了「网络地址不动主机地址全 1」这个规则直接把 IP 的主机位全置 1结果把网络位也改了。正确做法是先 AND 出网络号再把主机位全置 1。4.2 网段地址与广播地址的边界教案第 14 页给了一道选择题172.16.10.17 / 255.255.255.252的网段地址和广播地址是什么/30的掩码意味着主机位只有 2 位每个子网只有 4 个地址可用主机 2 台。172.16.10.17 AND 255.255.255.252 172.16.10.16广播地址是172.16.10.19。所以答案是172.16.10.16和172.16.10.19。这种/30掩码常见于点对点链路比如路由器之间的互联。因为只有 2 个可用地址刚好够两端各一个。如果你在配路由器接口时看到/30不要惊讶这是正常操作。4.3 用表格核对练习答案教案第 9、10 页给了一张练习表我把关键列整理出来方便对照验证IP 地址子网掩码类别网络号广播地址201.222.10.60255.255.255.248C201.222.10.56201.222.10.6315.16.193.6255.255.248.0A15.16.192.015.16.199.255128.16.32.13255.255.255.252B128.16.32.12128.16.32.15153.50.6.27255.255.255.128B153.50.6.0153.50.6.127这张表可以直接当自测题用遮住后两列自己算一遍再对照。如果算出来的网络号和广播地址对不上大概率是掩码的二进制位数没对齐或者忘了减 2。5. 避坑与排查子网计算里最容易翻车的五个地方5.1 现象网络号和广播地址算出来「差一位」原因掩码的二进制位数没对齐尤其是非 8 位边界的掩码比如255.255.240.0对应/20主机位是 12 位不是 8 位。很多人习惯按字节算遇到跨字节的掩码就出错。解决先把掩码转成二进制数清楚 1 的个数确认前缀长度。用ipaddress模块的IPv4Network直接传前缀长度避免手算。5.2 现象子网数算出来是 5实际划出 8 个以为算错了原因子网数必须是 2 的幂。教案第 15 页的公式是 2ⁿ ≥ 所需子网数n 取最小整数。需要 5 个n 3实际生成 8 个多出来的 3 个是正常的。解决接受这个「浪费」或者在规划时就把子网数定成 2 的幂比如直接按 8 个子网规划留足扩展空间。5.3 现象两个 IP 明明在同一网段却 ping 不通原因可能不在同一子网。教案第 12 页的例子就是192.168.1.14/28和192.168.1.17/28看着像同一网段实际网络号不同。另外防火墙、VLAN 划分、交换机端口隔离也会导致 ping 不通。解决先用 AND 运算确认网络号是否相同再检查二层配置。如果网络号相同还不通查 ARP 表和交换机 MAC 地址表。5.4 现象广播地址被分配给了主机导致网络异常原因广播地址和网络号不能分配给主机。教案第 15 页明确写了「网络号、主机号不能全 0 或者全 1」。如果 DHCP 服务器把广播地址分出去会导致地址冲突或广播风暴。解决检查 DHCP 地址池范围确保排除了网络号和广播地址。用ipaddress模块的hosts()方法生成可用地址列表天然排除这两个地址。5.5 现象借位后忘了更新默认网关原因划分子网后每个子网的路由器接口地址变了但主机的默认网关还指向旧地址。教案第 13 页提到「不在同一子网的主机通过路由器通讯」网关配错就出不去。解决划分后重新规划网关地址通常取每个子网的第一个可用地址。批量修改可以用 DHCP 的 option 3 下发或者用配置管理工具推送。6. 进阶技巧用 Python 做子网规划验证与自动化检查教案第 18 页留了一道练习「已知 C 类网络 192.168.6.0 将其划分为 20 个子网每个子网 5 台主机」。这道题有个陷阱20 个子网需要借 5 位2⁵ 32 ≥ 20但借 5 位后主机位只剩 3 位可用主机数是 2³ - 2 6 台刚好满足 5 台。如果借 4 位只能生成 16 个子网不够 20 个。所以 n 5掩码是255.255.255.248也就是/29。我一般会写一个校验函数把「子网数」和「每子网主机数」两个约束同时检查避免顾此失彼。import ipaddress def plan_subnet(network_str, need_subnets, need_hosts): net ipaddress.IPv4Network(network_str) base_prefix net.prefixlen # 从借 1 位开始尝试直到同时满足子网数和主机数 for borrow in range(1, 32 - base_prefix): new_prefix base_prefix borrow subnet_count 2 ** borrow host_bits 32 - new_prefix usable_hosts 2 ** host_bits - 2 if subnet_count need_subnets and usable_hosts need_hosts: print(f借位: {borrow} 新掩码: /{new_prefix} f({net.netmask})) print(f子网数: {subnet_count} 每子网可用主机: {usable_hosts}) return new_prefix print(无解需要更大的地址块) return None # 教案第 18 页练习 plan_subnet(192.168.6.0/24, 20, 5) # 教案第 16 页例题 plan_subnet(202.97.227.0/24, 5, 30)逻辑说明从借 1 位开始遍历每次计算子网数和可用主机数两个条件都满足就返回。参数说明need_subnets是所需子网数need_hosts是每子网所需主机数。跑192.168.6.0/24会输出借 5 位、/29、32 个子网、每子网 6 台主机跑202.97.227.0/24会输出借 3 位、/27、8 个子网、每子网 30 台主机。这个函数的好处是把「试错」过程自动化不用手算每一位。还有一个我常做的检查把规划好的子网列表导出成 CSV和实际网络设备上的配置做 diff。具体做法是用subnets()生成所有子网再用paramiko或netmiko登录交换机拉show ip interface brief逐条比对。这一步能抓出「规划了但没配」「配了但掩码写错」两类问题。从那以后我每次做子网规划都强制走一遍「脚本生成 → 设备核对 → 主机验证」三步再也没出现过网关配错导致整层楼断网的事故。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

统一管理Cursor、Claude Code与Antigravity的Skills:基于Git的同步方案

统一管理Cursor、Claude Code与Antigravity的Skills:基于Git的同步方案

上周我差点在三个工具窗口之间被逼疯。一边开着 Cursor 写日常代码,一边挂着 Claude Code 跑长链路过任务,另一边还留着 Antigravity 玩图形化 agent 工作流,三个都得用,三个都得装 Skills。结果我发现,自己居然还在手…

2026/9/23 15:46:22 阅读更多 →
子网掩码与子网划分:二进制原理、实战规划与排错指南

子网掩码与子网划分:二进制原理、实战规划与排错指南

简介:一份面向网络初学者和网络管理岗位人员的PPT学习教案,系统讲解子网与子网掩码的核心概念,并延伸到默认网关、DNS与ping命令等配套知识点。资源采用单个PPTX文件发布,包体大小约70KB,共6页课件,内容精炼…

2026/9/23 15:46:22 阅读更多 →
3步搞定正规投彩赚钱的平台实战项目

3步搞定正规投彩赚钱的平台实战项目

3步搞定正规投彩赚钱的平台实战项目 配置环境就卡半天?别急,很多转行做后端或全栈的朋友,在搭建第一个 实战项目 时,最容易在依赖安装和权限配置上掉坑。尤其是涉及到像“正规投彩赚钱的平台”这类需要高并发、强校验的业务场景,环境没调通,代码写得…

2026/9/23 15:45:22 阅读更多 →

最新新闻

Java Swing+MySQL员工工资管理系统:课程设计实战与排错指南

Java Swing+MySQL员工工资管理系统:课程设计实战与排错指南

简介:面向Java初学者的员工工资管理系统,采用Java Swing搭建桌面界面、MySQL负责数据持久化,实现了管理员与普通用户双角色体系,覆盖员工信息增删改查、部门维护、工资标准设置、工资查询与统计等业务模块,适合作为课程…

2026/9/23 16:27:25 阅读更多 →
操作系统进程管理实验C语言实现:fork、IPC与调度模拟全解析

操作系统进程管理实验C语言实现:fork、IPC与调度模拟全解析

简介:《操作系统进程管理实验(C语言实现)》是一份面向操作系统课程学习者与自学者的C语言实践资料,围绕进程创建、撤销、同步、通信与调度等核心主题,演示Unix/Linux下系统调用的实际用法,以弥补纯理论学习…

2026/9/23 16:27:25 阅读更多 →
Quick Reference 速查手册:SSH 连接、SCP 传输与密钥管理实战指南

Quick Reference 速查手册:SSH 连接、SCP 传输与密钥管理实战指南

文档知识库教程开发工具 【免费下载链接】reference 为开发人员分享快速参考备忘清单(速查表) 项目地址: https://gitcode.com/jaywcjlove/reference 点击查看 免费下载 本指南是 jaywcjlove/reference 开源速查表仓库中 docs/ssh.md 的中文深度解读,覆…

2026/9/23 16:27:25 阅读更多 →
倒V短波天线DIY全指南:原理、计算与调试避坑

倒V短波天线DIY全指南:原理、计算与调试避坑

简介:一份完整的倒V天线DIY制作指南,面向业余无线电爱好者、电子初学者及希望自制天线的学习者。文档系统讲解了倒V天线的设计原理:利用电磁感应效应,由两根铜棒构成倒V字形双臂天线,在电流驱动下形成交变电磁场向外辐…

2026/9/23 16:27:25 阅读更多 →
Formily Reactive 类型检查 API 完全指南:isObservable / isAnnotation / isSupportObservable 深入解析

Formily Reactive 类型检查 API 完全指南:isObservable / isAnnotation / isSupportObservable 深入解析

前端UI组件 【免费下载链接】formily 📱🚀 🧩 Cross Device & High Performance Normal Form/Dynamic(JSON Schema) Form/Form Builder -- Support React/React Native/Vue 2/Vue 3 项目地址: https://gitcode.com/gh_mirrors…

2026/9/23 16:27:25 阅读更多 →
Bun 开发实战指南:基于 agentic-awesome-skills 技能库全面掌握 Bun 运行时

Bun 开发实战指南:基于 agentic-awesome-skills 技能库全面掌握 Bun 运行时

AI 技能AI 插件 【免费下载链接】agentic-awesome-skills AAS Core is the local, agent-first control plane for complete catalog discovery, agent-owned selection, stack validation, and planning, backed by 2,400 agentic skills. Includes CLI, local MCP, catalog, …

2026/9/23 16:26:25 阅读更多 →

日新闻

3招搞定手机怎么下载微信面试难题实战项目解析

3招搞定手机怎么下载微信面试难题实战项目解析

3招搞定手机怎么下载微信面试难题实战项目解析 面试被问“手机怎么下载微信”背后的原理,90%的人答不上来。别笑,这看似弱智的问题,实则是考察你对移动应用分发机制、安全校验及网络协议理解的试金石。我带过不少校招新人,他们背了八股文,却连一个A…

2026/9/23 0:00:23 阅读更多 →
2k显示屏性能优化踩坑:版本升级后API全变了,这份源码解析救了我

2k显示屏性能优化踩坑:版本升级后API全变了,这份源码解析救了我

2k显示屏性能优化踩坑:版本升级后API全变了,这份源码解析救了我 刚把开发环境的显示器从1080P换到2K,跑老项目直接报错,版本升级后 API…

2026/9/23 0:01:25 阅读更多 →
3步搞定美眉图实战项目,告别官方文档抓不住重点

3步搞定美眉图实战项目,告别官方文档抓不住重点

3步搞定美眉图实战项目,告别官方文档抓不住重点 官方文档翻了三遍还是云里雾里?别急,美眉图在实战项目中常被用来做数据可视化,但它的原理比你想的简单。今天咱们直接上手,用一个完整的小项目把美眉图跑通,不再死磕那些冗长的理论说明。…

2026/9/23 0:01:25 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/23 4:55:02 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/23 4:49:06 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/23 9:53:41 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/23 9:53:40 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/23 9:53:40 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/23 9:53:40 阅读更多 →