所以……我学习过 CCNA 之类的课程,并且至少在过去 8 年左右的时间里一直在从事 IP 网络工作。我一直看到并被告知子网的网络地址不是有效的主机地址。现在,首先我要说我知道这是真的。我的问题是……是否有技术原因导致它不能使用,还是在设计规范时只是任意商定的?我理解为什么不能使用广播地址(因为它确实被使用)。问题是,当我看到使用网络地址时,它通常仅在路由中使用,路由专门使用网络地址。在这种情况下,(仅在您期望网络地址时才使用网络地址)是否有一些技术原因导致他们不能将网络地址作为实际有效的主机地址?
答案1
据我所知,“网络地址”作为一种特殊地址,是过去有类 IP 网络的产物。如今,我们使用无类域间路由 (跨域路由) 在互联网上,它没有网络地址的概念(如果你查看上面链接的 RFC 4632,你会发现它列出了每个传统“C”块 256 个可能的 IP 地址,例如,没有为网络或广播地址保留的地址(尽管在其他 RFC 中将广播定义为必需的)。
尽管如此,您仍然不应该将网络地址分配给网络中的任何特定主机:网络地址对于路由至关重要。此概念在 RFC 中被广泛使用(RFC 1812)。只需查看路由表(route
命令),您就会看到如何使用本地网络地址将本地网络流量与必须通过路由器的流量分开。如果将该本地网络地址分配给某个主机会怎样?
更糟糕的是:最好不要分配以零结尾的 IP 地址,即使这个地址不是网络地址。例如,如果您的网络是 10.10.0.0/255.255.0.0,则 IP 地址 10.10.5.0 不是您的网络地址,但您最好不要分配这样的 IP,即使它在有类 IP 网络上也完全有效。一些旧版软件/IP 堆栈可能会出现问题。
更新:来自 goblinlord
根据RFC 1812(第 5.3.5.2 节)我们所说的网络地址最初用于“定向广播”,即向目标网络发送广播数据包。由于 SMURF 攻击,该功能已过时。该功能于 2009 年正式更改。RFC 2644.随后,进一步实施应该默默地丢弃具有所述源地址(网络地址)的数据包。虽然这应该是发生的事情,但我很好奇有多少实现实际上这样做了。
这进一步添加到RFC 3021当解决/31 子网问题时。
答案2
因此,实际的答案是:这确实取决于以下因素:
- 确切的地址,以及它在众多 RFC 中的含义
- 您的操作系统的版本和修订版本
- ...以及你的路由器和其他每个上游路由器的路由器
- ...以及所有这些路由器的网络管理员的智慧和老练...
在测试中,我没有遇到任何访问网站的问题;似乎最终一切都取决于网络管理员的意愿。上游设备通常无法判断某个地址是网络地址还是广播地址,因为对他们来说,它只是一个更大地址块中的一个地址……因此,没有 ISP 会阻止您分配和使用您的网络地址,除非他们将其分配给您并且他们的网络管理员明确阻止了它。
我确信有很多安全分析师和黑客拥有极其详细的统计数据,可以准确了解 TCP-IP 堆栈实现的变体数量、它们可以容纳或允许什么、不能容纳或允许什么,以及它们究竟在哪些方面没有达到目标。
事实上,我正在从我的网络地址浏览并发布此内容。
除非你有更好的办法来修复这个纸牌屋,否则不要叫我坏网民:事实是,如果可能,它就会发生。事实是,在人们开始使用它之前,没有人真正聪明地坐下来,从所有可能的迭代中考虑整个事情,以便想出一个完全万无一失的设计——就像生活中的大多数事情一样。结果呢?标准中很多东西不合逻辑和/或翻译时丢失了。
欢迎来到现实世界。不要让这阻止你追求永远难以捉摸的最佳理想……只是不要指望“官方”渠道或论坛的支持,除非你愿意亲自动手,为之奉献时间和生命,建立必要的共识,并驾驭周围的政治。
所以,我认为其他发帖者想说的是:如果你想制定这个官方政策并在生产中使用它,那你就得靠自己了。(但你不是吗?)也许我们会碰碰运气,让计算机智能为我们设计一个向后兼容 IPv4 和 IPv6 及其所有不完善的实现的 IPv8。
答案3
我是网络新手,但我也想发表一下我的意见。
如果我有一个从 xxx0 - xxx15 的 /28 子网,根据预定义规则,我们将有 14 个可用主机和 2 个剩余主机。其余的用于网络和广播。
让我们不遵循上述规则,而是实际使用所有 16 台主机。那么在这种情况下,一切都会好起来,没有问题。但如果需要在网络外进行通信,那么由于缺乏发送或接收信息的资源,就不可能实现。
我不太擅长解释,但可以换句话说。
如果我住在一条街上的一所房子里,这条街上有 14 栋房子。一条小巷可以通往主干道。
我的邮寄地址是 1-14 Personal Street, Off Network Road。
这对邮递员来说不是问题。现在让我们假设开发商变得贪婪,又加盖了 2 栋房子,并拆除了巷道。
那么我的新邮寄地址范围是 1-16 Personal Street
在这种情况下,邮递员就会遇到麻烦。
这只是猜测,如果我说的是胡说八道的话,请告诉我。
答案4
在寻找这个问题的答案时,我偶然发现了本文来自思科。我认为该文章中的以下引言很好地概括了这一点。
[...] 考虑 IP 地址 172.16.1.10。如果计算与此 IP 地址对应的子网地址,则得到的答案是子网 172.16.0.0(子网零)。请注意,此子网地址与首先进行子网划分的网络地址 172.16.0.0 相同,因此无论何时执行子网划分,都会得到一个具有不可区分地址的网络和一个子网(子网零)。这曾经是一个很大的混乱之源。
避免混淆对我来说是一个足够好的理由。