为什么有必要在FreeBSD中为“别名”地址设置255.255.255.255的networking掩码?

从FreeBSD的虚拟主机手册上看 :

对于给定的接口,必须有一个地址正确表示networking的networking掩码。 在这个networking中的任何其他地址必须具有全1的networking掩码(表示为255.255.255.255或0xffffffff)。

有人可以解释为什么这是事实吗?

实际上你可以设置你认为有用的networking掩码。

但是,如果您从/ 32更改networking掩码,则还需要设置路由。 如果您按照build议,您可以省略设置路线。

这个页面包含了一个很好的解释:

由于别名在某种意义上是重复的标签,所以系统需要知道由标签表示的子网是否是新的,并且这由networking掩码来表示。 使用“正常”networking掩码,系统被告知这是一个新的子网,然后可以正确设置内部表。 如果子网不是新的,那么如果networking掩码是“正常的”,则表格将被错误地设置。

在networking掩码为255.255.255.255的情况下,系统知道这是现有子网的副本,因此将使用“点对点”掩码将该地址分配给回送接口。

在大多数情况下,分配一个255.255.255.0的networking掩码似乎工作。 但是,内部表将不能正确设置,如果别名被删除,则可能会出现问题。 这可以通过在添加别名时添加适当的主机路由来克服,并且在别名被移除时移除路由。 但是,该系统可以正确使用“点对点”networking掩码,并且维护更容易。

那么ifconfig上的FreeBSD手册不是很有帮助:

如果地址与该接口的第一个networking地址在同一个子网上,则必须给出一个无冲突的networking掩码。 通常0xffffffff是最合适的。

但是,上面的意思是说,一个/ 32掩码使这个特定的networking(最简单的networking,一个单一的主机,由/ 32掩码描述)。 具有与物理接口相同的networking掩码不会造成任何伤害,因为它们是同一networking上的两个接口。

现在想象别名有一个描述超级networking的掩码,而不是物理接口的掩码,例如物理是192.168.0.1/25和别名192.168.0.2/24。 networking上是192.168.0.200,这对你的别名界面意味着什么?