gpt4 book ai didi

icmp - 路径 MTU 发现 - ICMP 响应在哪里?

转载 作者:行者123 更新时间:2023-12-02 03:20:09 27 4
gpt4 key购买 nike

我正在 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 的虚拟机,它们有两个带有静态路由的网络接口(interface)。从 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

网段 100.x 和 150.x 的 MTU 1500。网段 200.x 的 MTU 750。

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

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

有两个问题:

1)为什么?

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

谢谢。

最佳答案

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

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

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

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

关于icmp - 路径 MTU 发现 - ICMP 响应在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6789305/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com