子网掩码与 IP 地址范围

网络工程 ip ipv4 子网 协议理论 IP地址
2021-07-31 01:44:31

假设我有一个包含 17 台设备的网络。

我可以用来容纳这 17 个设备的最小掩码是 255.255.255.224(即 /27),它本身可以包含 30 个有用的地址(不包括广播和网络地址)。

这意味着如果我只有 17 个设备,则浪费了 13 个有用的地址

我的问题是:为什么不只使用 IP 地址范围

为什么网络中的地址数量需要是 2 的幂?

例如,为什么不直接说:Network A: 192.168.1.1 - 192.168.1.17 (inclusive)

除了必须存储 8 个八位字节(起始地址和结束地址)而不是 4 个八位字节(子网掩码)之外,这样做的缺点是什么?

2个回答

您对起始地址和结束地址的想法会大大减慢路由决策的速度,并且数据包可能会穿越多个路由器到达目的地;与 compare for 相比,mask 和 compare for 相等使用的 CPU 周期要少得多>= AND <=更多的 CPU 周期等于更多的时间和更多的 CPU 负载。在软件或特殊硬件 (ASIC) 中,使用掩膜既快速又容易。您必须记住,路由器是单独交换数据包的,路由器必须为通过它的每个数据包确定以哪种方式交换数据包,并且数据包通过的每个路由器都需要做同样的事情。

路由聚合如何与奇数大小的子网配合使用?Internet 路由的数量已经失控,并且 ISP 不会通告任何超过 /24 的 IPv4 前缀。

您的想法为数据包交换增加了不可接受的开销和延迟。您还需要考虑严格限制子网以致没有增长空间。如果您已经为子网 1 分配了 192.168.1.1 到 192.168.1.17,并且每个后续子网都具有同样的限制,那么当子网 1 上的管理员想要添加打印机、扫描仪、新 PC 等时会发生什么。突然,您需要移动每个人都连接到一个新的更大的子网,而您有一个未使用的子网,它可能永远不会合适,从而浪费了这 17 个地址。

这个想法并没有真正解决任何问题,因为即使将可用 IPv4 地址的数量增加一倍也无法解决 IPv4 地址短缺的问题,而且它大大增加了路由器开销和现实世界的实现支持。

不断地想事情,但意识到有很多非常聪明的人,他们生活、吃饭、呼吸和睡觉这些东西,多年来,没有想过如何让它更好地工作。关于知识产权的一切都在不断审查中,如果达成共识,就可以更改。证据是支持 CIDR 和 VLSM 的 IP 类的消亡。

在设计 IP 时,性能比节省地址空间要重要得多。检查某物是否在任意范围内比根据单个数字和位掩码检查它更复杂。这在软件中有点正确,在硬件中更是如此。一旦 IP 地址短缺变得如此严重,改变这一点是值得的,这将是一项艰巨的任务。

话虽如此,如果您感到绝望,有几种方法可以解决此问题。不过,它们都是有代价的。

一种选择是在同一链路上运行多个子网。缺点是你浪费了更多的网络/广播/网关地址和更多的流量通过路由器反弹。它仍然可以保存一些地址(例如,在您的情况下,您可以使用 /28 和 /29。

如果您使用的是 linux,那么它支持 /32 地址作为辅助地址 ( https://www.zmonkey.org/blog/content/using-32-netmask-linux )。因此,如果您正在运行 linux 并且非常需要 IP 空间,您可以使用私有空间作为您的主要地址,然后手动将您的少量公共地址路由到各个盒子。这使您可以实现近乎完美的公共 IP 利用率,但显然您付出的代价是路由器上更大的路由表,并且在某些情况下,本地流量通过路由器反弹而不是直接传输。https://www.zmonkey.org/blog/content/using-32-netmask-linux

另一种选择是在内部使用私有 IP(或 IPv6),然后在您的网络边界放置 NAT 或负载平衡器。

另一种选择是将您的网络掩码设置为全开,然后使用 arp 代理来获取客户端认为是其子网本地但实际上并非本地的流量。再次使这项工作对路由器来说需要更多的工作,但这是可能的(至少对于 linux 路由器)。