lwip udp无法发送大于1472字节数据问题解决

1.问题定位

首先抓包工具进行抓包

wireshark勾选UDP 协议的checksum选项

lwip udp无法发送大于1472字节数据问题解决_第1张图片

抓包以后发现是udp的checksum有问题

lwip udp无法发送大于1472字节数据问题解决_第2张图片

2.原因剖析

有些网卡的硬件校验对于小于1500字节的数据的校验计算是正确的,大于1500字节的数据的校验计算是错误的,导致接收端无法接收。

3.解决之道

根据以上原因我们应该禁用网卡的硬件校验,使能lwip的软件校验便可以成功解决这个问题。另外还需要打开IP_FRAG 和 IP_REASSEMBLY两个宏定义,打开分包发送功能,使能这两个宏,只要传输数据大于mtu(1500)lwip就会使用分包发送功能,这两个宏默认是使能的。

lwip udp无法发送大于1472字节数据问题解决_第3张图片

问题成功解决

lwip udp无法发送大于1472字节数据问题解决_第4张图片

ps:一定要彻底禁用网卡的硬件校验功能,禁用不彻底可能会导致ping不通,但是可能tcp通讯没有问题的问题。

你可能感兴趣的:(嵌入式,网络,lwip,stm32,udp)