似乎通常的做法是不使用子网中的第一个地址,即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
在这种情况下不仅仅是64
? 64
地址是一个有效的地址,对不对? 无论答案如何,IPv6是否也适用?
也许略有相关:也可能使用TCP端口0和UDP端口0.这些有效或在任何地方使用?
正如Wesley,Chopper3和Willy所指出的,现代约定使用子网的首地址(全零主机号码)和最后一个地址(全1主机号码)作为广播地址。
由于历史原因,许多操作系统将第一个地址视为广播。 例如,从本地(/ 24)networking上的OS X,Linux和Solaris ping xxx0就会得到响应。 Windows不允许您默认ping第一个地址,但是您可以使用SetIPUseZeroBroadcast WMI方法启用它。 我想知道是否可以在全Windowsnetworking上使用.0作为主机地址。
我知道这是一个古老的线程,但我自己正在研究这个,我并没有停止在“主机零不使用,因为它是networking号码”,因为我不明白为什么这个问题。 即使是networking号码,它也不应该停止将其用作有效地址,因为确定networking号码的机制(与networking掩码的AND操作)仍将与它一起工作来确定networking号码。
不使用全1的主机地址,因为它与我感到舒服的广播地址一致,因为它是一个有效的目的地址,所以在使用时它是不可能区分的。
我们不能使用主机零的更充分解释的原因是,它也是一个广播地址 – 尽pipeRFC1812第4.2.3.1节指出,接收到数据包的路由器“应该默默地丢弃”他们(他们的重点 – 不是我的)。 然而,同一款确实允许将这些数据包视为广播。
这是完整的小节
(2) SHOULD silently discard on receipt (ie, 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.
因为子网中的第一个地址是指子网本身并用于路由目的。
子网中的第一个号码是networking的地址本身。 所以192.168.0.0/24是用于引用该子网的号码。 当然,最后一个地址是广播地址,广播发送到那个广播地址,然后被下推到那个子网的所有客户端。 在IPnetworking中,您总是从广播地址中删除2来查找可寻址IP地址的总数。 192.168.0.0/24广播192.168.0.255,因此有253个可寻址地址。 192.168.0.0/26广播192.168.0.64,因此有62个可寻址地址。
(砍和威利殴打我 – 但我脾气暴躁,不想删除我的post=))
在互联网的早期,xxx0被用作networking的广播地址。 后来改成xxx255。 我记得在那段时间SunOS上有选项可以configuration为.0或.255。 所以我想为了安全起见,.0和.255总是一个保留的数字。
xxx0(或子网上的第一个地址)是networking地址,用于标识哪个stream量在同一个子网上,哪个stream量需要路由到不同的networking。
每个CIDR块有两个保留的IP地址。 一个是“networking号”,它会是偶数(位0)。 另一种是定向braodcast(子网广播),它将networking的主机部分设置为全部(奇数)。 这里是我的子网计算器的一个例子:
Network Net Broadcast CIDR Mask UsableHosts 192.168.254.0 192.168.254.31 27 255.255.255.224 30 AVL isPrivate, isClassC 192.168.254.32 192.168.254.47 28 255.255.255.240 14 AVL isPrivate, isClassC 192.168.254.48 192.168.254.55 29 255.255.255.248 6 AVL isPrivate, isClassC 192.168.254.56 192.168.254.59 30 255.255.255.252 2 REQ 2 isPrivate, isClassC 192.168.254.60 192.168.254.63 30 255.255.255.252 2 REQ 2 isPrivate, isClassC
每个子网中的主机号码 0被保留,主要是因为它曾经是一个广播地址。
RFC表示, 应该放弃,但应该作为广播使用,但也可以通过某些非默认选项作为主机号码使用。
现在,xyz0中的octet 0可能是一个完全有效的非零CIDR主机号码,但是在过去,偶尔在孤立的站点上会出现问题,这是由于站点HW中的实现错误(可能是剩余的class-full代码)或SW。
如今,octet 0的运行效果已经足够好,可以由ISP和云平台进行分配,但是毫无疑问,有些服务根据以往的经验不会交出。
有趣的是,在任何特定的站点支持主机0所需的全部资源都是由本地子网上的确切设备支持的……一旦数据包在上游聚合,甚至不可能知道它实际上已经(CIDR )主机号码0正在使用中。 广域网根本不在乎。
最后,如果本地子网的主机使用全1的主机号码进行广播,并且不是全部0的主机号码,则可以将路由器设置为默认,并且只有本地的“隐藏”站点。 这可能对于保护embedded式系统非常有用,比如易受黑客攻击的廉价消费者路由器。