route -n 给出:
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.20.254 0.0.0.0 UG 0 0 0 eth0
192.168.20.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
ifconfig 给出:
eth0 Link encap:Ethernet HWaddr 00:0c:29:f1:76:32
inet addr:192.168.20.10 Bcast:192.168.20.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fef1:7632/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:6387084 errors:0 dropped:24 overruns:0 frame:0
TX packets:374481 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:712509342 (712.5 MB) TX bytes:37312703 (37.3 MB)
Interrupt:18 Base address:0x2024
为什么这里需要 2 条路线而不是 1 条?这条线有什么意义?
192.168.20.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
我的接口地址192.168.20.X
的网络掩码是255.255.255.0
,因此堆栈肯定可以告诉我们如何到达192.168.20.Y
,为什么我在路由表中有第二个条目?
答案1
第二行实际上是您在设备配置中陈述的精确信息(与路由有关)。
如果我们可以将信息放入路由表本身,那么让内核在每次路由决策时总是从设备数据库中查找信息是不合理的。
想象一下路由器上连接了多个网络的相同情况。此处介绍的技术也适用于此,并大大简化了路由决策(路由表中仅多一行,而需要扫描 5 个接口)。
答案2
这意味着无需网关即可访问此子网内的地址,因为具有这些地址的主机/NIC 位于您的本地网络中,而不是在任何路由器后面。据我所知,除了某些仅点对点隧道的设置外,此类条目始终存在,并且如果您向 NIC 添加更多地址,则添加的每个子网都应该产生这样的条目。
每个子网都列在路由表中,以便将所有相关信息集中在一个地方,供内核做出路由决策 - 它比通过分析接口配置来查找连接的子网更有效,并且对于大型路由器的性能而言很可能至关重要。
答案3
你的第二行路线-n命令
192.168.20.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
表示所有前 3 位数字为 192.168.20 的地址都不需要网关。 0.0.0.0不是合法的 IPv4 地址。您的计算机将目标与 Gen Mask(也称为 Netmask)进行逻辑 AND255.255.255.0在这种情况下,因为前 3 个字节是 255,所以前 3 个数字必须完全匹配。因为最后一个字节是 0。最后一个数字可以是任何数字。
你的第一行路线-n命令
0.0.0.0 192.168.20.254 0.0.0.0 UG 0 0 0 eth0
说使用这个网关192.168.20.254对于所有其他 IP 地址。这可能是您的路由器的地址,