最近对手件反馈,在传输文件的时候,我们这边发包太快,导致对手件网络出现了拥塞,把他们程序给搞死了。他们抓了一下他们收到的包,发现我们发送的数据包都大于了MTU设置的值。现在被要求更改。
排查方法:为什么我们发送的数据包会大于MTU的值。
可能性一:配置了Don't Fragment
验证:我们去抓我们发送出去的包,发现确实配置了Don't Fragment。如下图:
接下来就是取消Don't Fragment。取消代码如下:
int val = 0;
// 设置MTU发现选项
if (setsockopt(sock, IPPROTO_IP, IP_MTU_DISCOVER, &val, sizeof(val)) < 0)
{
error("setsockopt IP_MTU_DISCOVER failed");
}
然后再次验证,发现Don't Fragment确实取消了,但是发包数据量还是大于了MTU。如下图: