为什么操作系统需要知道子网掩码?

如果我理解正确,操作系统从DHCP服务器获得IP和其他东西的子网掩码。 而且这个子网掩码似乎对于路由器来说是很重要的,因为它知道数据包是从LAN进入还是应该被发送到别的地方,或者是从Internet接收的。 但为什么操作系统需要子网掩码呢? 操作系统对子网掩码有什么了解?

networkingconfiguration有3个主要组件:

  • IP地址
  • networking掩码
  • 默认网关

操作系统需要知道networking掩码,以确定数据需要传送的位置。 您的IP地址与networking掩码结合在一起告诉操作系统在本地子网上是否存在目标IP地址,或者是否存在于子网之外。 某些计算机有多个networking连接,无论是物理(多NIC)还是逻辑(想象VPN)。 没有每个networking的子网掩码,操作系统将无法确定哪个stream量应该离开哪个接口。

如果目标存在于您的子网中:

  • 您的操作系统通过引用其ARP表来确定目标的硬件地址。 如果该地址的ARP表中没有条目,则系统发送硬件广播,该广播被泛洪到二层networking上的所有设备。 拥有该IP地址的系统然后用其硬件地址(MAC ADDR)来响应该广播。 然后操作系统会发送数据,永远不会离开本地networking。

如果目标不在您的子网中:

  • 您的操作系统根据其路由表确定发送数据包的位置。 大多数情况下,数据包将被指定为默认网关。 这个网关通常是一个路由器,它将使用自己的路由表发送数据包到达最终目的地。 发送到默认网关的过程与发送到子网上的其他主机的过程相同。 如果网关MAC地址不在ARP表中,则会发送广播来确定网关硬件地址,然后转发该帧。

正如你所看到的,子网掩码是非常重要的,因为它被用来确定目标networking的位置,并相应地路由它们。

基于IP和子网掩码的组合,操作系统可以确定用户空间应用程序要访问的目标IP是在本地networking还是需要通过某个路由器发送。 如果需要通过路由器发送,则执行路由表查找以确定使用哪个路由器。

请参阅Mauro的答案,但是此外,子网掩码允许主机确定IP广播地址 。 我认为这在基于DNS的名称parsing的这些日子里并不那么重要,但是在以前的Active Directory NETBIOS名称查找可能会失败,如果子网掩码错误,因为广播地址是错误的。