增大了mtu到9000后发现ping使用-s 8962时可以ping通,而包大于8962时就收不到了,找了半天没有找到问题在哪里?
无奈只好把debug模式打开了跑,可是debug打开了跑就可以了,搞得我莫名其妙。
问题的解决:
由于Linux内核会在IP的payload上附加ip头,在加上fcs等标志,所以,ETH_DATA_LEN默认定为1500而ETH_FRAME_LEN为1514,所以,使用长度为mtu的数据缓冲区就导致数据接收不完整。把缓冲区长度设置为MTU+14问题解决。
而打开debug模式没有问题估计是由于debug模式下多创建了几个变量,长度多于14字节了,缓冲区没有溢出,所以就正确了。
还好没有溢出导致死机,不如更难调了,啊弥陀佛。。。。
不过发现大的mtu也还是没有什么明显的性能提升,看来还要找找别的原因。。。
阅读(1592) | 评论(0) | 转发(0) |