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

Sht*_*ééf 29 networking ip subnet

不使用子网中的第一个地址(即 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
Run Code Online (Sandbox Code Playgroud)

但为什么HostMin不只是64在这种情况下呢?该64地址是有效的地址,对不对?不管答案是什么,这同样适用于 IPv6 吗?

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

小智 35

我知道这是一个旧线程,但我自己正在研究这个问题,我并没有停留在“未使用主机零,因为它是网络号”,因为我不明白为什么这很重要。即使它是网络号,也不应该阻止它被用作有效地址,因为确定网络号(与网络掩码)的机制仍然可以使用它来确定网络号。

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

我们不能使用主机零的更充分解释的原因是它也是一个广播地址 - 尽管RFC18124.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.
Run Code Online (Sandbox Code Playgroud)

  • +1 表示不会停留在“它是网络号”上。作为一个想法,这个 RFC 标准显然浪费了 IP 地址,因为似乎没有丢弃此类数据包的技术原因,也没有理由每个子网有两个广播地址。想一想在这个用尽的 IPv4 地址世界中可以使用多少主机地址! (13认同)
  • +1 mask.0 越界的概念可能源于早期的惯例。前段时间,一个基于 Linux 的服务器曾经有一个 IP 地址 xxx0/24,它工作正常,除了一些 Windows 应用程序拒绝连接到它,理由是 IP 地址无效。等式中没有涉及 IP 路由器,只有交换机。 (2认同)

Cho*_*er3 20

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

  • 子网中的第一个主机地址*不*用于路由目的——我一直看到这种误解。IP 地址和子网掩码用于路由和执行必要的比较。将作用域中的第一个地址用作主机地址不会影响促进路由的能力。网络地址显示在路由表中是为了清晰和便于计算,而不是因为它在路由过程中被分配或用完。192.168.32.5/16-&gt;192.168.0.1 的路由和 192.168.0.0/16-&gt;192.168.0.1 一样有效——你更愿意看哪个? (4认同)
  • +1 用于提及网络地址的路由表意义。一个衬垫也很重要... =) (3认同)
  • 我要道歉。关于子网划分时网络 0 和网络全 1 的使用,我一直在争论。昨天,在多个场合,当主持人这个词时,我阅读了网络。所以我很抱歉。我考虑过删除我的其他帖子,但这并不诚实。 (2认同)

Ger*_*mbs 15

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

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


mdp*_*dpc 8

在互联网时代的早期,xxx0 被用作网络的广播地址。后来改为xxx255。我记得在那段时间里,SunOS 上有一些选项可以将广播配置为 .0 或 .255。所以我想为了安全起见,.0 和 .255 一直是保留数字。

  • +1 用于回答为什么在真正需要一个地址时有两个保留地址。 (4认同)

Wes*_*ley 6

子网中的第一个数字是网络地址本身。所以 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 个可寻址地址。

(乔普和威利打败了我——但我脾气暴躁,不想删除我的帖子。=))

  • 许多操作系统将第一个地址视为广播。例如,在本地 (/24) 网络上从 OS X、Linux 和 Solaris ping xxx0 会得到响应。默认情况下,Windows 不允许您 ping 第一个地址,但您显然可以使用 SetIPUseZeroBroadcast WMI 方法启用它。我想知道您是否可以在全 Windows 网络上使用 .0 作为主机地址。 (3认同)
  • A /24 有 *254* 个主机可分配地址(从 .1 到 .254),而 /26 有 62 个主机可分配地址(正确,但因为您使用 .64 作为广播地址,这是错误的。您的“减法” 2" 规则是错误的,您不是从广播地址中获取它,而是从该子网中有效地址的数量中获取它,即 2^(32-n) 其中 n 是前缀长度 (/n)。例如, 192.168.0.252/30 没有 253 个可用地址(这是荒谬的),但确实有 2^(32-30) - 2 = 2^2 - 2 = 4 - 2 = 2 个可用地址。 (2认同)

Dig*_*oss 5

每个子网中的主机号0被保留,主要是因为它曾经是广播地址。

RFC 表示,解释一下,应该丢弃,但也可以用作广播,但也可以通过某些非默认选项用作主机号码。

现在, xyz0 中的八位字节0 很可能是完全有效的非零 CIDR 主机号,但在过去,由于站点硬件中的实现错误(可能是剩余的类完整代码),它偶尔会在孤立的站点上出现问题或SW。

如今,八位字节 0 工作得足够好,可以由 ISP 和云平台分配,尽管毫无疑问,某些服务根据过去的经验故意不分配它。

有趣的是,在任何特定站点支持主机 0 所需的只是本地子网上存在的确切设备的支持...一旦数据包在上游聚合,它甚至不可能知道它实际上具有(CIDR ) 主机号 0 正在使用。WAN根本不在乎。

最后,如果本地子网的主机使用全 1 的主机号进行广播,并且不对全 0 的主机号进行特殊处理,则可以将路由器保留为默认状态,并拥有一个仅限本地的“隐藏”站。这对于保护嵌入式系统可能很有用,例如容易遭受黑客攻击的廉价消费路由器......