位于两个路由器之间的子网中未使用的 IP 地址会发生什么情况?

网络工程 IPv4 子网
2022-02-10 01:25:53

这可能是一个不切实际的问题,但仍然是一个困扰我很久的问题。考虑下面的网络图,其中 R1 是10.0.0.0/8网络的一部分(子网用椭圆表示),它进一步将网络分成几个/16网络,其中一个是10.1.0.0/16. 现在路由器的接口(由绿色链接表示)具有10.1.0.1R1(子网中的第一个 IP)和10.1.0.2R2 的地址。此外,R2 将/16分配给它的网络分成两个/24网络。逻辑类似。 在此处输入图像描述

回到这个问题,如果我们查看 R1 和 R2 之间的链路,在该子网中可用的 2^16 个主机地址(由于 /16 掩码)中,只有两个用于路由器接口。该子网中的其余地址会发生什么情况?由于 R2 必须使用比其子网中的 16 个可用位更多的位,以创建更多子网,R1 和 R2 之间的子网会进入黑洞并且永远不会被再次使用吗?


编辑: 在评论中讨论后更新图表。我现在正在从问题中删除无关的部分,只保留我有疑问的相关网络。

基本上,在线子网/CIDR 文献告诉我,您可以通过从分配的掩码中借用网络位来进一步将分配的网络范围划分为更小的范围。这就是 R1 和 R2 正在做的事情,如图所示。我真的很困惑这是否是重叠,如果是,如何避免它,以及 R1 和 R2 应该宣传什么。

任何有助于清除此概念的帮助将不胜感激。

更新#2:这篇文章完全展示了我想要实现的目标——https : //cse.buffalo.edu/~hungngo/classes/2010/589/reading-materials/IP-addressing2.pdf,但它提到了 VLSM我认为类似于 CIDR,但适用于有类网络。

在此处输入图像描述


更新:(最终解决方案)

在与所有尊敬的成员讨论之后,似乎最初图表的唯一问题是浪费了地址空间。此外,在将地址分配给主机时需要采取一些特定于 CIDR 的预防措施,以避免出现路由问题。牢记这一切,我制作了一个最终图表,它使用 /30 的链接子网和相应的广告。

在此处输入图像描述

进一步细化图表以添加一些层次结构:

在此处输入图像描述

4个回答

是的,这是浪费。剩余的 IP 地址将丢失。

这就是我们通常在此类链接上配置 /31 的原因。

(实际上,如果这个 /16 子网没有向其他路由器宣布,从技术上讲,它可以在其他地方使用,但这将是一个非常肮脏的配置)。

与尊敬的论坛成员讨论后的共识是链接子网(两个路由器之间的子网)是浪费的:由于接口上只有两个设备,所以不需要一个/16/24子网。

我遗漏的一个关键概念是:为了表示层次结构并将网络逐步分解为更小的部分,子网不需要连续并相互连接。包含主机和(具有逐渐变小的掩码,如 、 等)的子网可以/16层次结构中,但连接路由器的链路可以是较小子网子网的一部分。/24/26/30/31

可以使用适当的通告和路由表来配置层次结构和路由。

为了在两个路由器之间的链路中使用子网,可以为此专门预留一个子网。在下面的示例中,该公司保留了一个/24子网,专门用于/30根据链接的需要划分子网。

在此处输入图像描述

感谢论坛成员 @Zac67、@RonTrunk、@JFL 和 @Effie 的帮助和耐心

它们“当前未使用”。在永远不会有很多节点的链接上,永远不会使用 /16。即使是 /24 也会浪费 >90% 的空间。对于点对点链接,通常使用 /30(或 /31,如果硬件支持的话)。(就我个人而言,我在内部将 /28 和 /29 用于“设备”网络,但您的需求可能会有所不同。)

这不是问题的直接答案,但从评论来看,我认为地址聚合和地址分配之间存在混淆。

更新:我认为您可以从不相交的集合和集合并集的角度来考虑这一点。每个子网都是一组 IP 地址。所有子网必须是不相交的,即每个子网都是唯一的。层次结构适用于联合,而不是单独的集合。也就是说,当集合的并集可以通过单个地址聚合时,汇总是可能的。因此,R1 可以汇总橙色、绿色和红色(以及 R3 和 R4 后面的任何内容)的并集。R2 可以总结绿色和红色的联合。

update2:你能用橙色跨越整个网络、红色跨越 R2 和 R3 之间的链接以及 R3 后面的任何东西来绘制你的图片,并且绿色相同。网络中的每个第 2 层网段都必须具有唯一的地址/掩码。但是您的地址可以在圆圈边界上汇总。

(1) 路线汇总仅在一个方向上起作用。如果所有路由到地址 10.1.*.*,R1 可以汇总路由,这意味着您图片之外的路由器将只学习到 10.1 的一个地址。. /16 通过 R1。相反,如果没有总结,他们可以学习到 10.1.100 的路线。, 10.1.200。分别。路由汇总不会影响内部发生的事情,内部发生的事情对路由汇总没有直接影响。

此外,R1 执行此操作的能力不需要您网络中的任何内容实际上是分层的。它只要求所有地址都匹配 10.1.*.* (并且网络的其他部分没有匹配的地址)。无论您如何在网络中分配地址,这都不会改变。

R1 和 R2 之间的链接具有 /30 或 /31 地址并不会阻止 R1 进行汇总。

(2) IP 互连第 2 层段。因此,IP 区分系统,可直接使用第 2 层和系统,不可访问,地址必须实际转发(这里路由意味着〜相同)。如果接口具有地址 10.1.0.1 和掩码 255.255.0.0,则 IP 可以假定所有匹配 10.1.*.* 的地址都是本地的,而不是转发的。这意味着,10.1.*.* 应该使用相应接口的第 2 层传送(对于 IP -> 执行 ARP,获取 MAC 地址,并将数据包发送到 MAC 地址)

在这种情况下,10.1.*.* 是本地的,但必须转发 10.1.100.* 的配置,虽然从最长前缀匹配的角度来看可能有意义,但实际上是不正确的。我找不到任何说明会发生什么的规范。我认为可以肯定地说,目前尚不清楚这是否会奏效。

因此,您可以拥有一个路由表:10.1.100.* -> 接口 3 通过 R_X(转发)和 10.1.*.* -> 接口 2 通过 R_Y(再次转发)(这将使用最长前缀匹配解决) ,但你不能有这样的情况 10.1.100.* -> interface 2 via R_Y (forwarded), 10.1.*.* -> interface 2, local。

(3)同样 IP 不知道 R1 和 R2 之间的链路是电缆。如果电缆是以太网,也不能保证它保持这种方式。您可以将其替换为交换机,并将 2 台路由器和 N 台主机插入交换机。如果这样做,并且这 N 台主机位于网络 10.1.*.* 中,理论上它们可以在该网络中拥有任何 IP,包括 10.1.100.1。如果发生这种情况,您的重叠子网将导致问题。

因此建议使用 /30 或 31/ 地址,因为它们只允许子网中的 2 个系统,如果您尝试让第三个系统进入,它将无法正常工作。

(4)作为示例,让我们考虑一种情况,您也希望在 R2 上进行路由汇总。R1 已经在汇总路由。

  • 请注意,R1 和 R2 不能总结彼此之间的联系。他们必须了解这个链接。让我们将 10.1.0.0/31 分配给链接(以便 10.1.0.0000 000*(最后一个二进制文件)分配给此链接。

R2 有两个网络,绿色和红色,它要汇总地址。为此,这些网络必须具有具有公共前缀的地址,并且该前缀不应与上面的链接重叠。由于您有所有 10.1.*.* 可供选择,让我们为它们分配匹配任意地址10.1.1*** ****. **** ****(即 10.1.128.0/17)。然后红色的可以得到10.1.10 ** ****.*,绿色的可以得到10.1.11 ** ****.**** ****,或者 10.1.128.0/18 和 10.1.192.0/18 然后 R2 可以向 R1 宣布一个地址 10.1.128.0/17。R2 不能向其他任何人宣布它,因为它必须能够在绿色和红色之间进行路由。[请验证我的二进制到十进制转换!]

现在,在红色区域中,R2 和 R3 之间存在链接。我们可以为它分配一个匹配 10.1.128.0/18 的 /31 地址,或者10.1.10** ****.**** ****. 让我们使用全零并有 10.1.1000 0000.0000 000* 或 10.1.128.0/31。所有其他地址都可以分配给 R3 后面的任何地址。

因此,这就是您在分配子网时所做的事情。每个子网都有一个唯一的地址。但是,所有汇总的子网都可以由具有较短前缀的唯一地址覆盖。

这让我想到了最后的笔记

(5)何时可以执行路由汇总实际上取决于您的协议。距离矢量协议可以在任何地方做到这一点,而链路状态路由则不能。链路状态路由协议必须知道拓扑,因此无法进行路由汇总。OSPF 将其域划分为单独的区域,每个区域单独进行链路状态路由,但区域间通信不是基于链路状态方法进行的。OSPF 只能在区域边界上进行汇总。外部路由和路由重新分配的情况更复杂,但它们遵循相同的模式。有“边界”路由器,可以从区域外获取路由并注入到区域中。路由汇总只能由这样的路由器完成。

(6)路由汇总与保留小表不同。路由汇总会影响路由协议本身交换的信息。即使您的路由器使用 OSPF 并且实际上无法汇总任何内容,它们(我认为)仍然能够在路由表中拥有更少的条目。

PS 我使用符号 .0100 0000. 作为 IP 地址中八位字节的二进制表示。而地址中的*表示,一个位可以有任意值,即不被前缀长度覆盖。10.1.10** **** 是一个 IP 地址,其中前 8 位是十进制 10,第二个 8 位是十进制 1,其余 2 个八位位组是二进制表示法,其中第三个八位位组必须以 10 开头,并且所有其他位都是任意或不相关的。