IPV4 路由缓存已从 3.6 版及以上 Linux 内核中删除

IPV4 路由缓存已从 3.6 版及以上 Linux 内核中删除

在浏览 3.6 Linux 内核更改日志时,我偶然发现了一封邮件(http://article.gmane.org/gmane.linux.network/238256) 来自 David S Miller 关于在内核中删除 IPV4 路由缓存的问题。我想知道现在 ICMP 重定向、PMTU 功能将如何工作?邮件还提到路由将被预先缓存,但取决于子网掩码的多个路由可以有多个可能的条目,这将如何工作?有人对此有任何想法吗?

谢谢。

答案1

只需阅读实际的补丁。

PMTU 和 ICMP 重定向不是存储在路由缓存中,而是存储在“路由例外”结构中,该结构是路由条目的一部分。对于任何(源、输入接口、tos、目的地、标记),只有一个路由条目被选中。因此,只要路由条目没有更改,路由例外就会一直被使用。

答案2

您可以按如下方式获取有关主机路径 MTU 的详细信息。请注意,必须先填充缓存信息。此测试使用 3.13 Ubuntu 内核执行。我首先验证主机的当前缓存,我尚未与其通信,也没有任何信息:

johnf@mtutest:~$ ip ro get 192.168.3.48
192.168.3.48 dev eth0  src 192.168.1.22
    cache

然后我尝试使用大于 MTU 的数据包对其进行 ping(但不要太大,以免数据包必须由操作系统进行分段)。测试时,您可能会错过前几次 ping,但您应该会看到 Frag required 消息。

johnf@mtutest:~$ ping -s 1460 192.168.3.48 -c 10
PING 192.168.3.48 (192.168.3.48) 1460(1488) bytes of data.
From 192.168.2.0 icmp_seq=1 Frag needed and DF set (mtu = 1220)
1468 bytes from 192.168.2.0: icmp_seq=2 ttl=252 time=1973 ms
[...]
--- 192.168.3.48 ping statistics ---
10 packets transmitted, 9 received, +1 errors, 10% packet loss, time 9016ms
rtt min/avg/max/mdev = 95.681/516.815/1973.697/568.969 ms, pipe 2

收到 ICMP MTU 超出消息后,内核应该调整路由缓存以反映路径限制:

johnf@mtutest:~$ ip ro get 192.168.3.48
192.168.3.48 dev eth0  src 192.168.1.22
    cache  expires 588sec mtu 1220

相关内容