网络地址(xxx0)用于什么?

网络地址(xxx0)用于什么?

不使用子网中的第一个地址(即 IP 192.168.0.0/24,或者更奇特的例子)似乎是一种常见的做法172.20.20.64/29

我经常使用的工具ipcalc也遵循同样的做法:

$ ipcalc -n -b 172.20.20.64/29
Address:   172.20.20.64         
Netmask:   255.255.255.248 = 29 
Wildcard:  0.0.0.7              
=>
Network:   172.20.20.64/29      
HostMin:   172.20.20.65         
HostMax:   172.20.20.70         
Broadcast: 172.20.20.71         
Hosts/Net: 6                     Class B, Private Internet

但为什么在这种情况下情况HostMin就不一样了呢?这个地址是有效的地址,对吧?无论答案是什么,这同样适用于 IPv6 吗?6464

可能略有相关:似乎也可以使用 TCP 端口 0 和 UDP 端口 0。这些是否有效或在任何地方使用?

答案1

正如 Wesley、Chopper3 和 Willy 指出的那样,现代惯例使用第一个地址(全零的主机号)作为子网,使用最后一个地址(全一的主机号)作为广播地址。

由于历史原因,许多操作系统将第一个地址视为广播。例如,在我的本地 (/24) 网络上从 OS X、Linux 和 Solaris ping xxx0 会得到响应。默认情况下,Windows 不允许您 ping 第一个地址,但您可以使用 SetIPUseZeroBroadcast WMI 方法启用它。我想知道您是否可以在全 Windows 网络上使用 .0 作为主机地址。

答案2

我知道这是一个老话题,但我自己也在研究这个问题,我没有止步于“主机零未被使用,因为它是网络号”,因为我看不出这有什么关系。即使它是网络号,也不应该阻止它被用作有效地址,因为确定网络号的机制(与网络掩码进行 AND 运算)仍将使用它来确定网络号。

不使用全一的主机地址,因为它与我熟悉的广播地址一致,因为它已经是一个有效的目标地址,所以在使用时无法区分它们。

我们不能使用主机零的更充分的原因是它也是一个广播地址 - 尽管RFC1812部分4.2.3.1规定路由器在收到发往它的数据包时“应当默默丢弃”这些数据包(这是他们的重点 - 不是我的)。但是,同一段确实允许将这些数据包视为广播。

以下是完整子部分

   (2) SHOULD silently discard on receipt (i.e., do not even deliver to
    applications in the router) any packet addressed to 0.0.0.0 or {
    <Network-prefix>, 0 }.  If these packets are not silently
    discarded, they MUST be treated as IP broadcasts (see Section
    [5.3.5]).  There MAY be a configuration option to allow receipt
    of these packets.  This option SHOULD default to discarding
    them.

答案3

因为子网中的第一个地址是指子网本身并用于路由目的。

答案4

子网中的第一个数字是网络本身的地址。因此 192.168.0.0/24 是用于指代该子网的数字。当然,最后一个地址是广播地址,广播被发送到该地址,然后向下推送到该子网上的所有客户端。在 IP 网络中,您总是从广播地址中删除 2 以找到可寻址 IP 地址的总数。192.168.0.0/24 的广播为 192.168.0.255,因此有 253 个可寻址地址。192.168.0.0/26 的广播为 192.168.0.64,因此有 62 个可寻址地址。

(Chop 和 Willy 抢先了一步——但我很暴躁,不想删除我的帖子。=))

相关内容