1.问题定位
首先抓包工具进行抓包
wireshark勾选UDP 协议的checksum选项
抓包以后发现是udp的checksum有问题
2.原因剖析
有些网卡的硬件校验对于小于1500字节的数据的校验计算是正确的,大于1500字节的数据的校验计算是错误的,导致接收端无法接收。
3.解决之道
根据以上原因我们应该禁用网卡的硬件校验,使能lwip的软件校验便可以成功解决这个问题。另外还需要打开IP_FRAG 和 IP_REASSEMBLY两个宏定义,打开分包发送功能,使能这两个宏,只要传输数据大于mtu(1500)lwip就会使用分包发送功能,这两个宏默认是使能的。
问题成功解决
ps:一定要彻底禁用网卡的硬件校验功能,禁用不彻底可能会导致ping不通,但是可能tcp通讯没有问题的问题。