$ /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 问题,但它们与这里无关,最终只会令人困惑。)