首页/网络/IP 与子网速查/合法掩码判定:二进制必须连续 1
掩码与 CIDR 速算50 条

合法掩码判定:二进制必须连续 1

子网掩码从最高位开始必须是连续的 1,再接连续的 0;255.0.255.0、255.255.254.1 这类夹心掩码非法,设备会直接拒绝。

IP 与子网速查网络更新于 2026-10-13

合法掩码的判定

子网掩码本质上是前缀长度的等价写法:从最高位开始必须是连续的 1,后面接连续的 0。因此 255.255.254.0 合法,255.0.255.0 与 255.255.254.1 这类“夹心”或中间夹 0 的值非法,配置到设备上会被直接拒绝。掌握这条规则,任何掩码都能在几秒内判断是否合法。

基本信息

合法示例255.255.254.0(/23)、255.255.192.0(/18)
非法示例255.0.255.0、255.255.254.1、255.255.255.127
根本原因掩码是前缀长度的等价写法,1 必须连续
判定方法把掩码写成二进制,检查 0 与 1 是否只出现一次分界
设备行为拒绝该配置或提示掩码非法
例外说明ACL 的通配符掩码没有连续要求,两者不可混淆

二进制判定示例

二进制判定示例
255.255.254.0
11111111.11111111.11111110.00000000
1 连续 → 合法,对应 /23

255.0.255.0
11111111.00000000.11111111.00000000
中间夹 0 → 非法

255.255.255.127
11111111.11111111.11111111.01111111
低位夹 0 → 非法

程序校验

程序校验
import ipaddress
for m in ['255.255.254.0', '255.0.255.0', '255.255.254.1']:
    try:
        ipaddress.ip_network('10.0.0.0/' + m, strict=False)
        print(m, '合法')
    except ValueError as e:
        print(m, '非法:', e)
# 仅第一个合法,后两个抛出掩码非法异常

易混案例

值是否合法说明
255.255.254.0合法对应 /23
255.255.252.0合法对应 /22
255.0.255.0非法中间出现 0 后又出现 1
255.255.255.127非法低位不连续
0.0.3.255非法作掩码这是通配符掩码的形态

典型使用场景

  • 配置设备前自查掩码是否连续,避免下发后被拒绝或静默归位
  • 读取工具输出时判断掩码是否被误改,尤其是手工转录配置的场景
  • 代码里用库函数校验用户输入,避免非法掩码进入系统
  • 排查“配置成功但网段不对”:可能是设备把非法掩码归位成了另一个合法值
  • 教学与考试:作为区分“掩码”与“通配符掩码”的基本题型
ACL 的通配符掩码没有连续要求,0.1.0.255 这类值在访问控制列表里合法;不要用子网掩码的连续性规则去判断 ACL。

自查流程

  • 第一步把掩码写成 32 位二进制,逐位检查是否只有一次从 1 到 0 的变化
  • 第二步数一下 1 的个数,得到前缀长度,与预期规划比对
  • 第三步用程序或计算工具复核一次,尤其是手工转录的配置
  • 第四步回读设备生效配置,确认设备没有对输入做归位或截断

易错点

  • 把访问控制列表的通配符当作子网掩码使用:两者规则相反,会导致网段范围与预期完全不符
  • 手工敲入 255.255.253.0 这类值:二进制不连续,设备拒绝后才发现掩码写错
  • 用掩码减去 1 来推算广播地址:非法掩码没有对应前缀,任何推算都没有意义
  • 只在本地检查不回读配置:设备可能把非法值归位或忽略部分输入,需回读生效配置确认

数据来源与参考

  • RFC 4632(CIDR)
  • Python ipaddress 官方文档

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌