
你配置服务器 IP 时写过192.168.1.100/24也见过 Docker 网段172.17.0.0/16。这个/24和/16到底是什么意思为什么不能随便乱写它们就是子网掩码和CIDR的简写决定了你的设备属于哪个“网络小区”。就像城市里的门牌号前面是街道网络号后面是门牌主机号。选错了你的服务可能就在错误的“街道”上谁也找不到。大家好我是Evan一个在 Docker 网段规划中曾因/16和/24配错导致容器跨宿主机通信失败的 JavaAI 学生。今天我们从子网掩码和CIDR讲起带你搞懂网络号、主机号、广播地址的计算并落到真实开发场景配置application.yml、规划 Docker 网段。读完这篇你再看到/24或/16能立刻算出这个子网有多大、广播地址是什么。 写在前面刚学计网时看到192.168.1.100/24我以为/24就是“24 小时在线”的意思。直到我在知识汇项目中用 Docker Compose 启动多个服务自定义网络时随手写了个172.18.0.0/8结果容器 IP 分配了172.18.0.2但和另一个宿主机上的服务死活不通。查了半天才明白/8 表示这个网络有 1600 多万个 IP跨了太多子网路由器根本不认识。从那以后我老老实实学透了子网掩码和 CIDR。一、IP 地址 网络号 主机号一个 IPv4 地址如192.168.1.100由两部分组成问题IP 地址本身没有“分隔线”——192.168.1.100中前多少位是网络号答案子网掩码说了算。二、子网掩码IP 地址的“分隔符”子网掩码Subnet Mask是一个 32 位的二进制数1 对应网络号0 对应主机号。CIDR 表示法斜线表示法192.168.1.100/24表示前 24 位是网络号剩下的 8 位是主机号。三、/24vs/16一张表看懂计算公式子网内 IP 总数 2 ^ (32 - 掩码位数)可用主机数 IP 总数 - 2网络地址 广播地址四、手把手计算192.168.1.100/24的广播地址广播地址是子网内用于“群发”的地址主机号全为 1。步骤 1写出 IP 和掩码的二进制text IP: 192.168.1.100 → 11000000.10101000.00000001.01100100 掩码: /24 → 11111111.11111111.11111111.00000000步骤 2计算网络号IP 掩码text IP: 11000000.10101000.00000001.01100100 掩码: 11111111.11111111.11111111.00000000 ───────────────────────────────────────────── 网络号: 11000000.10101000.00000001.00000000 → 192.168.1.0步骤 3计算广播地址网络号 主机号全 1text 网络号: 11000000.10101000.00000001.00000000 主机号全 1: 00000000.00000000.00000000.11111111 ───────────────────────────────────────────── 广播地址: 11000000.10101000.00000001.11111111 → 192.168.1.255结论192.168.1.100/24的广播地址是192.168.1.255。快速口算/24的广播地址 网络号前 3 段不变最后一段 255。五、开发场景实战5.1 配置 SpringBoot 的server.address# application.yml server: address: 192.168.1.100 # 指定服务绑定的 IP port: 8080如果写0.0.0.0表示监听所有网卡。如果写具体的192.168.1.100服务只在该 IP 的网卡上监听。注意你指定的 IP 必须属于某个已存在的子网且是该子网内的可用主机地址。5.2 Docker 网段规划Docker 默认使用172.17.0.0/16这意味着每个容器可以获得从172.17.0.1到172.17.255.254的 IP共 65534 个。# 创建自定义网络避免和默认冲突 docker network create --subnet192.168.100.0/24 mynet docker run --netmynet --ip192.168.100.10 nginx为什么不能随便用/8/8子网太大广播域过大ARP 请求会淹没网络。跨子网通信需要路由器如果两个容器被分配在不同/8的网段它们之间的通信必须经过三层路由而不是二层交换。5.3 子网掩码配置错误的典型症状六、CIDR 聚合路由汇总互联网能跑起来的原因互联网有几十亿个 IP路由器不可能记住每个 IP。它通过CIDR 聚合将多个连续子网合并成一条路由条目。例如text 192.168.1.0/24 192.168.2.0/24 192.168.3.0/24可以聚合成text 192.168.0.0/22因为/22覆盖了192.168.0.0到192.168.3.255共 4 个/24子网。这就是你打开路由器管理界面看到路由表里只有几十条记录的原因——它们都被“压缩”了。 总结核心结论子网掩码决定了“你属于哪个网络”选错掩码 选错网络。开发中配置 IP 时确保 IP 掩码一致否则网络不通。Docker 网段规划时优先用/16或/24避免超大子网导致广播风暴。思考题你的办公室有 500 台设备网络管理员分配给你一个网段192.168.0.0/23。你需要在 SpringBoot 的application.yml中配置server.address使服务只能被同一子网内的设备访问但不能被其他子网的设备访问。问题/23的可用 IP 范围是多少广播地址是多少如果误写成了/24会有多少台设备访问不到你的服务欢迎在评论区留下你的计算结果 —— 下一篇我会聊聊“MAC 地址与 IP 地址为什么两个都是‘地址’却不能互相替代”