Answers:
据我了解,作为特殊地址的“网络地址”是过去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。一些旧版软件/ IP堆栈可能会出现问题。
更新:通过妖精
根据RFC 1812(第5.3.5.2节),我们所谓的网络地址最初用于“定向广播”,该广播会将广播数据包发送到所需的网络。由于SMURF攻击,此功能已过时。该功能已在RFC 2644中正式更改。随后,其他实现应静默丢弃具有所描述的源地址(网络地址)的数据包。尽管这应该发生,但我对实际上有多少种实现感到好奇。
当解决/ 31子网划分时,这会进一步添加到RFC 3021中。
因此,实际答案是:确实取决于。这取决于:
在测试此网站时,我没有遇到任何问题。看来,最终这一切都取决于网络管理员的想法。上游设备通常无法得知地址是网络地址还是广播地址的一部分,因为它只是一个更大的地址范围,因此,没有ISP会阻止您分配和分配地址。使用您的网络地址,除非他们将其分配给您,并且其网络管理员已明确阻止它。
我敢肯定,那里有安全分析人员和黑客,他们疯狂地详细统计了确切的TCP-IP堆栈实现的变体以及可以做什么,不允许或不允许的事情以及确切的方式和位置。 。
实际上,我正在从我的网络地址浏览并发布此信息。
除非您有更好的解决办法来修复这套纸牌屋,否则不要称呼我为坏网民:事实是,如果可能的话,那将会发生。现实是,没有一个真正聪明的人坐下来思考所有可能发生的事情,以便在人们开始使用它之前就想出一个完全防呆的设计,就像生活中的大多数事物一样。结果?不会在翻译中加总和/或丢失很多东西的标准。
欢迎来到真实的世界。不要让这种情况阻止您追逐难以捉摸的最佳理想……只是不要期望来自“官方”渠道或论坛的支持,除非您愿意动手并为之付出时间和生命,必要的共识,并以此围绕政治。
因此,我认为其他发布者想说的是:如果您要制定此正式政策并在生产中使用它,那您就该靠自己了。(但是,您不是吗?)也许我们会很幸运,并有计算机智能为我们设计了一个IPv8,该IPv8向后兼容IPv4和IPv6及其所有坏的实现。
我是网络新手,但我也会给我2美分。
如果我有一个从xxx0到xxx15的/ 28子网,根据预定义的规则,我们将有14个可用主机和2个剩余主机。其余的用于网络和广播。
让我们实际使用所有16个主机,而不是遵循上面的规则。那样的话一切都会好的,没有问题。但是,如果需要在网络外部进行通信,则由于缺乏发送或接收信息的资源而将不可能。
我不是很擅长解释,而是换一种说法。
如果我住在一条街上的房子里,那条街上有14座房子。进出主要道路的车道。
我的邮寄地址范围为网络路外的1-14 Personal Street。
对于邮递员来说,那将不是问题。现在,假设开发人员贪婪并添加了2栋房子,并且摆脱了巷道。
然后我的新邮寄地址范围为1-16 Personal Street
在这种情况下,邮递员将有麻烦。
这是一个猜测,让我知道我是否在说公牛。
网络地址允许您使用固定大小(4字节的IPv4)目标列和固定大小的二进制操作来构建路由表,以便主机路由和网络路由实际上是同一回事。
想象一下这样的路由表:(此PC与另一台PC和网卡具有并行连接)
Dest Mask Dev
192.168.0.123 /32 plip0 # This is a single host
192.168.0.0 /24 eth0 # This is a network
IP地址和网络掩码之间的AND可以满足您的需求,它是一个4字节的数字,可以与每一行进行比较,而无需进行进一步的计算。
因此,主机号零在某种意义上是特殊的,因为AND操作后其地址自然代表了整个网络。
如果您决定将网络号用作主机号,则将产生如下表:
Dest Mask Dev
192.168.0.0 /32 eth0 # This is the host (it's a redundant line)
192.168.0.0 /24 eth0 # This is the network
这似乎是合法的,因此我认为网络地址的概念是出于路由原因而使用的,因此可以任意决定将其标记为特殊地址,并禁止将其用作主机地址。
好吧...实际上并不是那么简单。我决定尝试一下(!!!):
# route add -net 192.168.0.0/32 eth0
# ping 192.168.0.0
Do you want to ping broadcast? Then -b
# telnet 192.168.0.0
Trying 192.168.0.0...
telnet: connect to address 192.168.0.0: Network is unreachable
目前,网络程序不允许我使用网络号作为常规地址。
在寻找该问题的答案时,我从Cisco 看到了这篇文章。我认为该文章的以下引言很好地总结了这一点。
[...]考虑IP地址172.16.1.10。如果计算与该IP地址相对应的子网地址,则得出的答案是子网172.16.0.0(子网零)。请注意,该子网地址与首先被子网划分的网络地址172.16.0.0相同,因此,无论何时执行子网划分,都会得到一个网络和一个地址(无法区分)的子网(子网零)。以前这是造成极大混乱的根源。
对我来说,避免混淆是一个足够好的理由。
网络地址不被视为主机地址,而只是一个数字。在地址受限的区域(如点对点网络)中,经常使用/ 30掩码,但仍使用主机地址。较少的实践,但达到相同的原理是使用/ 31掩码,并将一端作为网络地址,另一端作为广播。
例如
Router(config)#int gi0/0
Router(config-if)#ip add 10.0.0.0 255.255.255.254
Router(config-if)#no shut
Router2(config)#int gi0/0
Router2(config-if)#ip add 10.0.0.1 255.255.255.254
Router2(config-if)#no shut
.0 .1
[Router]-----------[Router2]
network broadcast