为什么我可以与本地子网中的机器通信,但本地子网的路由表中没有条目?

为什么我可以与本地子网中的机器通信,但本地子网的路由表中没有条目?

运行 Ubuntu Linux 16.04,通过以太网连接,地址为 192.168.11.22,子网掩码为 /24。路由器位于 192.168.11.1。

我期望路线表看起来像这样:

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.11.1    0.0.0.0         UG    100    0        0 enx50
192.168.11.0    0.0.0.0         255.255.255.0   U     1000   0        0 enx50

但它缺少本地子网的路由,如下所示:

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.11.1    0.0.0.0         UG    100    0        0 enx50

但我仍然可以与子网上的主机通信。这是怎么可能的?

我认为如果没有本地子网的路由,我甚至无法与网关(192.168.11.1)通信。

答案1

路由是仅有的当 IP 数据包必须从一个 IP 子网移动到另一个 IP 子网时需要这样做。

未离开本地子网的数据包已经到达其目标网络,因此无需路由。

当一台计算机想要与同一 LAN 上的另一个节点开始对话时,会发生以下情况:

  1. 节点 A(IP 为 10.0.0.1)想要向节点 B(IP 为 10.0.0.2)发送一个文件。
  2. 节点 A 查看自己的 IP 地址和子网掩码(255.255.255.0),并意识到 IP 地址 10.0.0.2位于本地 IP 子网。因此,它需要将数据直接发送到该设备,而不是默认网关。
  3. 节点 A 使用ARP 协议获取局域网中IP地址为10.0.0.2的计算机的MAC地址,并将数据发送给该节点。

将此与计算机需要与不同 IP 子网上的节点通信的情况进行比较:

  1. 节点 A(IP 为 10.0.0.1)想要向节点 B(172.25.0.2)发送一个文件。
  2. 节点 A 查看自己的 IP 地址和子网掩码(255.255.255.0),并意识到 IP 地址 172.25.0.2 是不是在本地 IP 子网上。因此,它必须将数据包发送到其默认网关 (10.0.0.254)。
  3. 节点A使用ARP协议获取局域网内IP地址为10.0.0.254(默认网关)的设备的MAC地址,并将数据发送给该设备。
  4. 默认网关(即路由器)使用其路由表来决定下一步将数据发送到哪里。此过程重复进行,直到数据到达目标网络。此时此时,上述过程将按计划进行,因为两个设备将位于同一个 IP 子网上。

更多信息

相关内容