为什么指向本地网络接口的路由规则接受多个目标 IP 地址?

为什么指向本地网络接口的路由规则接受多个目标 IP 地址?
$ /sbin/route -n 
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.122.1   0.0.0.0         UG    0      0        0 ens3
192.168.122.0   0.0.0.0         255.255.255.0   U     0      0        0 ens3

$ /sbin/ifconfig
ens3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.122.202  netmask 255.255.255.0  broadcast 192.168.122.255
        inet6 fe80::5054:ff:fe99:5eee  prefixlen 64  scopeid 0x20<link>
        ether 52:54:00:99:5e:ee  txqueuelen 1000  (Ethernet)
        RX packets 14906  bytes 18020195 (17.1 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 7390  bytes 786783 (768.3 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 35568

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1  (Local Loopback)
        RX packets 496  bytes 39840 (38.9 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 496  bytes 39840 (38.9 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

当数据包到达主机并且该数据包的目的地是私有 IP 地址 (192.168.122.2) 时,

  • 根据路由表中的第二个条目,数据包是否传送到作为最终目的地的 ens3 (192.168.122.202)?

  • 如果是,那不是错误的吗,因为预期的目的地 192.168.122.2 不在本地主机中?换句话说,为什么第二个条目会定向目的 IP 地址不同的数据包?一个范围到本地网络接口只有一个IP地址?

谢谢。

答案1

您忘记了该界面提供了对网络,(如果是 IP 网络)由基本 IP 地址和网络掩码(或 IPv6 中的前缀长度)定义。

192.168.122.0   0.0.0.0         255.255.255.0   U     0      0        0 ens3

表示发送到 192.168.122/24 网络的数据包将被发送到ens3网络接口(然后数据包将被发送到适当的主机,但这不是本系统关心的问题)。

网络应该为网络上的所有主机提供平等的访问权限,因此ens3允许数据包以点对点方式有效地发送到 192.168.122/24 网络中的任何主机,而无需任何网关的帮助或路由器。

0.0.0.0         192.168.122.1   0.0.0.0         UG    0      0        0 ens3

表示内核不知道如何处理的数据包应该发送到网关 192.168.122.1,网关将适当地转发它(如果可以的话)。网关可以访问通过 ens3

这些都不能保证任何给定的数据包实际上会到达其目的地;这就是为什么网络(甚至接口)会报告诸如“目标主机无法访问”之类的错误。

(坚持者可能会抱怨我忽略了 L2/L3 问题,但它们与这里无关,最终只会令人困惑。)

相关内容