networking - 地址聚合连续块,为什么有些地址无法使用?
问题描述
我过去的一次考试中有一个问题是:“IP 运营商收到了这些 IP 地址:
• 192.168.1.0/26 • 192.168.1.96/27 • 192.168.1.128/27 • 192.168.1.160/27
问:对可以求和的网络求和。”
因此,我尝试将所有 IP 地址相加,但事实证明,您只能将最后两个相加,因为不存在 192.168.1.64-95 范围内的地址。但是为什么你只能总结最后两个 (192.168.1.128/27, 192.168.1.160/27) 而不是最后三个 (192.168.1.96/27, 192.168.1.128/27, 192.168.1.160/27) ?
解决方案
要理解这个问题,您需要考虑二进制而不是十进制的地址。请记住,斜杠后缀指定网络地址中的位数。要组合,两个块必须在地址的网络部分的最低位之外的所有位置上匹配。这意味着它们是数字相邻网络,但只有 50% 的数字相邻网络是相邻的,因为它们的最低位不同。另一半时间,它们在其他一些方面也有所不同。这就是二进制计数的本质。
因此,例如,您可以将 10.0.2.0/24 和 10.0.3.0/24 组合成 10.0.2.0/23,因为它们在前 23 位上匹配。但是,您不能对 10.0.1.0/24 和 10.0.2.0/24 执行相同的操作,因为它们只匹配前 22 位。
如果你有三个相邻的网络(具有相同的网络掩码长度),那么中间的一个肯定可以与其邻居之一合并,而绝对不能与另一个合并。
推荐阅读
- gatsby - 列表页面上的完整帖子 [Gatsby 入门博客]
- typescript - Firebase 云函数数据库触发器有时无法正确运行
- python - 导入 ADASYN 的问题
- angular - npm 错误!尝试下载代码 ELOOP
- mediawiki - 检索定义子页面的子页面
- excel - 将字符串正常运行时间 [d hh:mm] 转换为 Excel 时间值 [hh:mm]
- python - 如何使用 SQLAlachemy 进行选择?
- jquery - Jquery ajax - 让一个函数等到前一个函数被执行
- java - Hibernate Envers - 传递自定义字段
- c# - 如何理解玩家是否在统一移动