为什么网络地址不能是有效的主机地址?

Gob*_*ord 23 networking ip

所以...我为 CCNA 等学习过,并且至少在过去 8 年左右的时间里一直在使用 IP 网络。我一直看到并被告知子网的网络地址不是有效的主机地址。现在首先我要说我知道这是真的。我的问题更多......是否有技术原因无法使用它,还是只是在设计规范时随意商定的?我明白为什么不能使用广播地址(因为它是实际使用的)。问题是当我看到使用的网络地址时,它通常只在专门使用网络地址的路由中。在这种情况下,(仅在您需要网络地址时才使用网络地址)是否存在某种技术原因,使网络地址无法成为实际有效的主机地址?

hai*_*img 20

据我了解,作为特殊地址的“网络地址”是过去有类IP网络的产物。今天,我们在 Internet 上使用无类别域间路由 ( CIDR ),它没有网络地址的概念(如果您查看上面链接的 RFC 4632,您会看到它列出了每个旧版的 256 个可能的 IP 地址“C”块,例如没有为网络或广播地址保留地址(尽管广播在其他 RFC 中被定义为必不可少的)。

尽管如此,您仍然不应该为网络中的任何特定主机分配网络地址:网络地址对于路由至关重要。这个概念在 RFC ( RFC 1812 ) 中被广泛使用。只需查看路由表(route命令),您就会看到如何使用本地网络地址将本地网络流量与必须通过路由器的流量分开。如果将该本地网络地址分配给某个主机会怎样?

更糟糕的是:即使该地址不是网络地址,也最好不要分配以零结尾的 IP地址。例如,如果您的网络是 10.10.0.0/255.255.0.0,则 IP 地址 10.10.5.0 不是您的网络地址,但您最好不要分配这样的 IP,即使它在分类 IP 网络上也是完全有效的。一些旧版软件/IP 堆栈可能存在问题。

更新:由地精领主

根据RFC 1812(第 5.3.5.2 节),我们所说的网络地址最初用于“定向广播”,它将向所需网络发送广播数据包。由于 SMURF 攻击,此功能已过时。该功能已在RFC 2644 中正式更改。随后,进一步的实现应该默默地丢弃具有所描述的源地址(网络地址)的数据包。虽然这是应该发生的事情,但我很好奇有多少实现实际上这样做了。

当解决 /31 子网划分时,这将进一步添加到RFC 3021 中

  • @grawity:并非总是如此。仅在大于 /31 的网络中。例如,P2P 可以有两个地址而没有广播地址。 (5认同)
  • 嗯……我喜欢答案的第一部分……它是有类 IP 网络的产物。我对第二部分的问题再次是路由表专门用于路由到网络。据我了解,路由表仅用于路由到接收器不在的网络(目标 IP 不属于您的子网/网络)。情况就是这样...当查看路由表时,很明显其中的地址是网络地址而不是主机地址,因此将其与主机数据包目标 IP 分开。在实际流量中,从不使用网络地址的目标IP。 (3认同)

Dag*_*elf 5

所以实际的答案是:这真的取决于。这取决于:

  • 确切地址及其在许多 RFC 中的含义
  • 您操作系统的版本和修订版
  • ...还有你的路由器,以及所有其他上游路由器
  • ...以及这些路由器的所有网络管理员的智能和复杂性...

在测试这个时,我没有遇到任何访问任何站点的问题;似乎最终这一切都取决于网络管理员的心血来潮。上游设备通常无法判断一个地址是否是网络或广播地址的一部分,因为它只是一个更大块中的地址对他们来说......所以没有 ISP 会阻止你分配和使用您的网络地址,除非他们将其分配给您并且他们的网络管理员已明确阻止它。

我敢肯定,那里有安全分析师和黑客,他们对 TCP-IP 堆栈实现的确切变体有多少种疯狂详细的统计数据,哪些可以做,哪些不能容纳或允许,以及他们究竟如何以及在哪里错过了他们的标记.

事实上,我是从我的网络地址浏览和发布的。

除非你有更好的解决方案来修复这个纸牌屋,否则不要称我为坏网友:现实是,如果可能,它就会发生。现实情况是,在人们开始使用它之前,没有人真正足够聪明地坐下来,在所有可能的迭代中仔细考虑这整个事情,以便提出一个完全万无一失的设计——就像生活中的大多数事情一样。结果?很多东西不会累加和/或在翻译中丢失的标准。

欢迎来到真实的世界。不要让它阻止你去追求永远难以捉摸的最佳理想......只是不要指望来自“官方”渠道或论坛的支持,除非你愿意亲自动手并将你的时间和生命奉献给它,构建必要的共识,并围绕这一点引导政治。

所以,我想其他发帖人想说的是:如果你想制定这个官方政策并在生产中使用它,你就靠你自己了。(但你不是吗?)也许我们会很幸运,让计算机智能为我们设计一个 IPv8,它向后兼容 IPv4 和 IPv6 以及它们所有损坏的实现。