我正在试验涉及第 6 个(6-over-4)路由器的 IPv6 路由,我注意到当我使用足够小的数据包大小以适合在以太网上运行本机 IPv6 的路由段时,但如果数据包足够大,无法容纳 IPv6 封装在 IPv4 中的路由段(即,介于 1481 和 1500 字节之间),则数据包(可以理解)不会通过路由,除非它被分段。一旦响应主机从路由一侧的第 6 个路由器接收到数据包太大错误,它就会开始对其答复进行分段,然后继续这样做一段时间。
不过,由于 ICMPv6 是无状态的,这对我来说意味着 Linux 在某处有一个表,用于保存目标主机的数据包太大消息中的 MTU 值一段时间。它是否正确?如果是的话,我可以以某种方式查看这张表吗?我一直在查看该ip
命令的各个子命令,但找不到类似的东西。该表是用于 UDP 等协议的,还是专用于 ICMPv6 的?
小智 4
当发现的 MTU 低于可到达目标的接口上的 MTU 时,Linux 会缓存通过路径 MTU 发现 (RFC 1191) 了解的远程目标的 MTU。
要查看缓存,可以使用“ip route show cache”,例如:
me@server:~$ ip -6 route show cache
1234:8108:1111:111:1111:1111:ff38:57be via fe80::8243:abcd:4216:a4c0 dev eno12399np0 metric 1024 expires 35sec mtu 1280 hoplimit 64 pref medium
me@server:~$ ip route show cache
1.2.3.4 via 192.0.2.1 dev eno12399np0
cache expires 154sec mtu 1420
Run Code Online (Sandbox Code Playgroud)