我正在
Linux中进行路径MTU发现的一些实验.据我所知,从RFC 1191中,如果路由器接收到一个非零DF位的数据包,并且数据包无法在没有分段的情况下发送到下一个主机,那么路由器应丢弃数据包并将ICMP消息发送到初始发件人.
我在我的计算机上创建了几个VM,并按以下方式链接它们:
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
段100.x和150.x具有MTU 1500.段200.x具有MTU 750.
我正在尝试发送启用了DF的UDP数据包.事实上,在数据包大小超过750的情况下,VM1根本不发送数据包(我收到了send()调用的EMSGSIZE错误).
但是我期望大小超过1500的数据包的这种行为.我希望VM1将大小介于750和1500之间的数据包发送到R1,R1(或R2)丢弃此类数据包并将ICMP数据包返回给VM1 .但这不会发生.
有两个问题:
1)为什么?
2)是否可以根据RFC 1191设置我的虚拟网络以接收ICMP数据包?
谢谢.