【问题标题】:Path MTU discovery - where are ICMP responses?路径 MTU 发现 - ICMP 响应在哪里?
【发布时间】:2011-10-10 23:37:43
【问题描述】:

我正在 Linux 中做一些关于路径 MTU 发现的实验。据我从 RFC 1191 了解,如果路由器接收到一个非零 DF 位的数据包,并且该数据包无法在没有分片的情况下发送到下一个主机,那么路由器应该丢弃该数据包并将 ICMP 消息发送到初始发件人。

我在我的电脑上创建了几个虚拟机,并以下列方式链接它们:

VM1 (192.168.100.2)

R1  (192.168.100.1, 
     192.168.150.1)

R2  (192.168.150.2, 
     192.168.200.1)

VM2 (192.168.200.2)

Rx - 是安装了 Linux 的虚拟机,它们有两个带有静态路由的网络接口。从 V1 ping V2,反之亦然成功。

traceroute from 192.168.100.2 to 192.168.200.2 (192.168.200.2)
 1  192.168.100.1 (192.168.100.1)  0.437 ms  0.310 ms  0.312 ms
 2  192.168.150.2 (192.168.150.2)  2.351 ms  2.156 ms  1.989 ms
 3  192.168.200.2 (192.168.200.2)  43.649 ms  43.418 ms  43.244 ms

tracepath 192.168.200.2
 1:  ubuntu-VirtualBox.local                               0.211ms pmtu 1500
 1:  192.168.100.1                                         0.543ms 
 1:  192.168.100.1                                         0.546ms 
 2:  192.168.150.2                                         0.971ms 
 3:  192.168.150.2                                         1.143ms pmtu 750
 3:  192.168.200.2                                         1.059ms reached

Segment 100.x 和 150.x 的 MTU 为 1500。Segment 200.x 的 MTU 为 750。

我正在尝试发送启用了 DF 的 UDP 数据包。事实上,如果数据包的大小大于 750(我收到 send() 调用的 EMSGSIZE 错误),VM1 根本不会发送数据包。

但是我希望大小超过 1500 的数据包会出现这种行为。并且我希望 VM1 将大小在 750 到 1500 之间的数据包发送到 R1,然后 R1(或 R2)丢弃此类数据包并返回 ICMP 数据包到 VM1。但这不会发生。

有两个问题:

1) 为什么?

2) 是否可以根据 RFC 1191 设置我的虚拟网络以接收 ICMP 数据包?

谢谢。

【问题讨论】:

    标签: icmp mtu


    【解决方案1】:

    VM1 可能缓存了 PMTU 信息。默认情况下,这些缓存条目的超时时间为 10 分钟。您可以通过写入 /proc/sys/net/ipv4/route/mtu_expires(秒)来更改超时。

    对于您的实验,请在发送 1500 字节数据包之前尝试刷新缓存(删除 PMTU 缓存):

    echo "0" > /proc/sys/net/ipv4/route/flush 
    

    您将收到一条需要 ICMP 分段的消息,该消息将再次填充此目的地的 PMTU 条目!因此,在重试实验之前,您需要不断刷新此缓存。

    【讨论】:

      【解决方案2】:

      使用ping6时遇到同样的问题, 因为 /proc/sys/net/ipv6/conf/default/mtu 是 1280。 而/proc/sys/net/ipv4/route/min_pmtu默认为552。

      所以你可以修改里面的值。 您可以使用 -M 选项。您不会收到 EMSGSIZE 错误。

      -M pmtudisc_opt
                Select  Path MTU Discovery strategy.  pmtudisc_option may be 
                 either do (prohibit fragmentation, even local one), want (do 
                 PMTU discovery, fragment locally when packet size
                 is large), or dont (do not set DF flag).
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-07-15
        • 2011-09-05
        • 2015-03-29
        • 1970-01-01
        • 2023-01-17
        相关资源
        最近更新 更多