OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5995|回复: 13

STM32F1 LWIP UDP 广播发送数据到同一个物理网络上的N台设备上时数据丢包严重,怎么办?

[复制链接]

12

主题

73

帖子

0

精华

新手上路

积分
29
金钱
29
注册时间
2017-5-2
在线时间
45 小时
发表于 2017-10-25 20:25:24 | 显示全部楼层 |阅读模式
26金钱
如题:STM32F1 LWIP UDP 一个设备广播发送数据到同一个物理网络上的其他 N 个设备上,接收广播数据的设备数量不固定而且IP也不确定,这些设备都通过网线连接到一个交换机上,接受广播数据的设备经常丢一两个包,怎么解决?

最佳答案

查看完整内容[请看2#楼]

UDP通信只管发出,不管对方是否收到,可以按照485总线通信对照理解。 在通信的环节通道上(无论有线或无线),都可能出现阻塞或丢失的情形,所以对于UDP这种通信方式,丢包是不可避免的。 如果你想不丢包或者少丢包,那么可以改用TCP方式,TCP方式系统在底层有包括ACK和重发等机制在内的各种算法,来努力确保不仅管把数据给发出,而且还会管对方是否收到,可以按照CAN总线通信来对照理解。 或者,如 ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

18

主题

453

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2014
金钱
2014
注册时间
2016-12-27
在线时间
136 小时
发表于 2017-10-25 20:25:25 | 显示全部楼层
本帖最后由 anylinkin 于 2017-10-26 08:40 编辑

      UDP通信只管发出,不管对方是否收到,可以按照485总线通信对照理解。
      在通信的环节通道上(无论有线或无线),都可能出现阻塞或丢失的情形,所以对于UDP这种通信方式,丢包是不可避免的。

      如果你想不丢包或者少丢包,那么可以改用TCP方式,TCP方式系统在底层有包括ACK和重发等机制在内的各种算法,来努力确保不仅管把数据给发出,而且还会管对方是否收到,可以按照CAN总线通信来对照理解。
      或者,如果你继续使用UDP,那么可以在应用层自己加上一定的ACK校验机制。

      TCP通信的可靠性高,但是效率不如UDP.

      如果你对通信的可靠性要求不是非常严格,也不想自己做ACK,你也可以考虑如下方法,提高UDP通信的可靠性和降低丢包率:提高信号强度例如调整天线方向缩短距离或者外接高增益天线。



ESP8266高速通信模块,在F1上实测TCP速度到700K字节每秒,F4和F7上达到和超过M字节每秒,提供单片机例程和技术支持
回复

使用道具 举报

12

主题

73

帖子

0

精华

新手上路

积分
29
金钱
29
注册时间
2017-5-2
在线时间
45 小时
 楼主| 发表于 2017-10-26 14:13:38 | 显示全部楼层
anylinkin 发表于 2017-10-26 08:32
UDP通信只管发出,不管对方是否收到,可以按照485总线通信对照理解。
      在通信的环节通道上(无 ...

接收广播数据的设备数量和IP都是不固定的,所以用不了TCP,就算加上ACK机制也没用,因为有的设备应答ACK,有的设备没有应答ACK,主机该如何确保全部设备都接收到了数据?
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165352
金钱
165352
注册时间
2010-12-1
在线时间
2108 小时
发表于 2017-10-27 01:36:28 | 显示全部楼层
帮顶
回复

使用道具 举报

18

主题

453

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2014
金钱
2014
注册时间
2016-12-27
在线时间
136 小时
发表于 2017-10-27 16:43:17 | 显示全部楼层
ylsljp 发表于 2017-10-26 14:13
接收广播数据的设备数量和IP都是不固定的,所以用不了TCP,就算加上ACK机制也没用,因为有的设备应答ACK ...

针对没有应答的设备,再重发。

网络通信的特点,就是这样的呢。
回复

使用道具 举报

32

主题

171

帖子

0

精华

高级会员

Rank: 4

积分
697
金钱
697
注册时间
2017-1-7
在线时间
75 小时
发表于 2017-10-27 17:26:48 | 显示全部楼层
如果数据发生错误,考虑加上校验位,会不会好点?
回复

使用道具 举报

12

主题

73

帖子

0

精华

新手上路

积分
29
金钱
29
注册时间
2017-5-2
在线时间
45 小时
 楼主| 发表于 2017-10-30 10:37:35 | 显示全部楼层
Jevin乐动 发表于 2017-10-27 17:26
如果数据发生错误,考虑加上校验位,会不会好点?

不是数据错误,是丢包
回复

使用道具 举报

12

主题

73

帖子

0

精华

新手上路

积分
29
金钱
29
注册时间
2017-5-2
在线时间
45 小时
 楼主| 发表于 2017-10-30 10:42:46 | 显示全部楼层
anylinkin 发表于 2017-10-27 16:43
针对没有应答的设备,再重发。

网络通信的特点,就是这样的呢。

目前这样做:主机广播一条指令,收到广播指令的设备就从主机上获取固定长度的数据,获取完成后就不再获取了,这样的话每条数据数据都能获取到,但是有一个隐患,如果设备接收不到第一条广播指令,那么这个设备就不会去获取数据了,虽然目前测试了都成功,但是这个隐患还是存在的。
暂时没想到什么好办法,就先这样做了
回复

使用道具 举报

57

主题

358

帖子

0

精华

高级会员

Rank: 4

积分
981
金钱
981
注册时间
2014-9-29
在线时间
261 小时
发表于 2017-10-30 10:45:01 | 显示全部楼层
这个是交换机的问题
性能好的话  可能会少丢包
性能不好的可能丢很多包
我有在不同的网    发过广播包试过
回复

使用道具 举报

91

主题

186

帖子

0

精华

初级会员

Rank: 2

积分
118
金钱
118
注册时间
2016-3-22
在线时间
122 小时
发表于 2017-10-30 11:18:27 | 显示全部楼层
能问一下发的是什么样的数据和数据包的大小,我之前做的有UDP通信,加交换机,数据量也很大,但是没有发生丢包的情况
回复

使用道具 举报

32

主题

171

帖子

0

精华

高级会员

Rank: 4

积分
697
金钱
697
注册时间
2017-1-7
在线时间
75 小时
发表于 2017-10-31 10:19:59 | 显示全部楼层
ylsljp 发表于 2017-10-30 10:37
不是数据错误,是丢包

丢包也可以加,减少丢包现象
回复

使用道具 举报

12

主题

73

帖子

0

精华

新手上路

积分
29
金钱
29
注册时间
2017-5-2
在线时间
45 小时
 楼主| 发表于 2017-11-1 14:01:49 | 显示全部楼层
xp1179926265 发表于 2017-10-30 11:18
能问一下发的是什么样的数据和数据包的大小,我之前做的有UDP通信,加交换机,数据量也很大,但是没有发生 ...

什么什么样的数据?
数据包大小时1030字节。
回复

使用道具 举报

12

主题

73

帖子

0

精华

新手上路

积分
29
金钱
29
注册时间
2017-5-2
在线时间
45 小时
 楼主| 发表于 2017-11-1 14:21:28 | 显示全部楼层
xp1179926265 发表于 2017-10-30 11:18
能问一下发的是什么样的数据和数据包的大小,我之前做的有UDP通信,加交换机,数据量也很大,但是没有发生 ...

大哥,能给你的代码参考一下吗?
回复

使用道具 举报

12

主题

73

帖子

0

精华

新手上路

积分
29
金钱
29
注册时间
2017-5-2
在线时间
45 小时
 楼主| 发表于 2018-2-2 15:06:34 | 显示全部楼层

原子老师你好,有个问题想请教一下你,STM32 TCP Server 的 http_poll 周期性回调函数里如何发送2000字节左右的大数据包?数据包超过1500字节了,数据包被分成2包,但是客户端只接收到一包数据。请问怎么如何解决呢?
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-24 22:01

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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