硬汉嵌入式论坛

 找回密码
 立即注册
查看: 2495|回复: 3
收起左侧

[LwIP] 求救:在LWIP中 UDP协议第一个数据包丢失问题

[复制链接]

1

主题

1

回帖

7

积分

新手上路

积分
7
发表于 2018-8-11 10:21:05 | 显示全部楼层 |阅读模式
对LWIP一知半解,在使用UDP过程中,有时候第一个数据包发送后没有响应。于是搜索在百度文库看到如下文章,但是没有搞明白在哪里修改?如何改?请问有木有高手遇到同样问题,修改哪个函数哈?

UDP协议发送第一个数据包丢失问题 
                                杨 
                                       2015.11.17 
 
UDP Client——PC+Labview UDP Server——STM32+Lwip  
程序流程: 
UDP Client 发送采集数据指令,UDP Server 收到指令后,开始采集AD数据,采集结束后发送采集结果以UDP数据包形式。每包512字节,多个包同时发送。  
问题描述:  
Client第一次发送指令后,UDP Server 有时只发送了多个UDP包中的最后一个,导致采集数据失败。网络抓包Server发送了许多ARP请求包,而后发送最后一个UDP数据包,其他包均丢弃。 
问题分析: 
经过分析,发现UDP与ARP之间有交互作用。  简单说,就是Lwip在发送UDP包之前,会检测ARP缓存中是否有该目的地址,如果没有的话会进行ARP询问,有几个UDP包就会询问几次。如果没有收到ARP应答的话,Lwip会丢弃UDP数据包,只保留最后一个,这是由TCP/IP协议决定的。 
原程序中,server收到数据包后,即进行解析、采集数据、回复UDP包,此过程中,收不到IP数据包,所以导致Client发送ARP请求包时,无法回复ARP,也就无法更新ARP缓存。所以出现这个问题。  即主循环中send_SRAM_ADC_results()函数占用了系统时间,使得Lwip无法及时响应ARP。 
解决办法: 
必须在UDP发送数据包前,响应ARP数据包,使ARP缓存中存在目的地址。 
在发送UDP数据包之间的延时过程中(bsp_DelayMS_plus ( ) )加入对IP数据包的处理,这样可以保证发送UDP前的延时中,也能响应ARP,从而可以及时更新ARP缓存。 
网络抓包过程如下:Client发送UDP指令之前,首先发送ARP请求;Server收到ARP请求后,发送ARP回复命令,更新ARP缓存,此后进行正常UDP通讯。


回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107122
QQ
发表于 2018-8-11 10:22:51 | 显示全部楼层
LwIP不清楚,使用RL-TCPnet吧,无此问题
http://www.armbbs.cn/forum.php?m ... &extra=page%3D1
回复

使用道具 举报

29

主题

77

回帖

164

积分

初级会员

积分
164
发表于 2018-8-11 13:52:13 | 显示全部楼层
你这用的是裸机吧
回复

使用道具 举报

1

主题

1

回帖

7

积分

新手上路

积分
7
 楼主| 发表于 2018-8-11 22:27:26 | 显示全部楼层
带freertos啊
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-19 07:46 , Processed in 0.210547 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表