运行 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 上的另一个节点开始对话时,会发生以下情况:
- 节点 A(IP 为 10.0.0.1)想要向节点 B(IP 为 10.0.0.2)发送一个文件。
- 节点 A 查看自己的 IP 地址和子网掩码(255.255.255.0),并意识到 IP 地址 10.0.0.2位于本地 IP 子网。因此,它需要将数据直接发送到该设备,而不是默认网关。
- 节点 A 使用ARP 协议获取局域网中IP地址为10.0.0.2的计算机的MAC地址,并将数据发送给该节点。
将此与计算机需要与不同 IP 子网上的节点通信的情况进行比较:
- 节点 A(IP 为 10.0.0.1)想要向节点 B(172.25.0.2)发送一个文件。
- 节点 A 查看自己的 IP 地址和子网掩码(255.255.255.0),并意识到 IP 地址 172.25.0.2 是不是在本地 IP 子网上。因此,它必须将数据包发送到其默认网关 (10.0.0.254)。
- 节点A使用ARP协议获取局域网内IP地址为10.0.0.254(默认网关)的设备的MAC地址,并将数据发送给该设备。
- 默认网关(即路由器)使用其路由表来决定下一步将数据发送到哪里。此过程重复进行,直到数据到达目标网络。此时那此时,上述过程将按计划进行,因为两个设备将位于同一个 IP 子网上。