免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 12655 | 回复: 18

关于UDP广播中如何提高可靠性 [复制链接]

论坛徽章:
0
发表于 2008-08-22 19:56 |显示全部楼层
20可用积分
请教一下,在进行广播的时候,网络环境较好,即内部网中,如果某一台机器广播数据包,它发送的速度较快,传送的内容较大,在接收数据的主机中,有的主机可能运行较慢,以致于不能够接收完整个数据,我已经调整了接收端的SO_RCVBUF,使其最大,但还是会出现丢包的情况。那么该怎样来解决这个问题呢?

我目前是这样想的:
1. 在发送端每次发送时调用 usleep(100)进行流量控制,目前的测试效果来看,运行较慢的主机基本上不会掉包。但是感觉这种方法不太可靠。
2. 若在UDP中采用超时,重传的机制的话,由于是广播的方式,我不知道某个主机A是否正在监听该端口,所以不好采用请求-应答的方式。

我个人更倾向于流量控制的方式,毕竟原因在于接收机处理不过来。不过怎样在广播中进行流量控制?

还请各位指教一下,谢谢!

最佳答案

查看完整内容

那建议考虑这样: 1. 发送方用广播的方式,而且包中有发送序号SNsend,并且打开一个UDP端口 Psr 进行接收反馈信号. 2. 接收方在收到数据包后,向发送方的psr端口发送确认信号,确认信号里有SNsend和本机的接收计数序号ncount 3. 发送方在接到确认信号后进行判断哪些已经接收到数据包了. 4. 如果全部都收到了,则顺利进行下一个包的发送. 5. 如果发送端发现没有收到某些client端(即接收端)的确认信号,则进行重发,若重发超过设定的值, ...

论坛徽章:
0
发表于 2008-08-22 19:56 |显示全部楼层
原帖由 scutan 于 2008-8-22 20:30 发表
广播的内容是在变化,不过每次发送之间的时间间隔还是有的,足够让数据都发送完。

嗯,是的,接收端必须保证每一个包都不能丢失。(所以我感觉必须自己进行某种检验)

所以的机器都是已经开机了,在内部网 ...


那建议考虑这样:
  1. 发送方用广播的方式,而且包中有发送序号SNsend,并且打开一个UDP端口 Psr 进行接收反馈信号.
  2. 接收方在收到数据包后,向发送方的psr端口发送确认信号,确认信号里有SNsend和本机的接收计数序号ncount
  3. 发送方在接到确认信号后进行判断哪些已经接收到数据包了.
  4. 如果全部都收到了,则顺利进行下一个包的发送.
  5. 如果发送端发现没有收到某些client端(即接收端)的确认信号,则进行重发,若重发超过设定的值,则根据一个算法将其标记为不可用(因为有可能client脱网或故障)
...

论坛徽章:
0
发表于 2008-08-22 20:00 |显示全部楼层
   UDP本来就靠不住!

能不能先TCP一下,转数据的时候在用UDP!

论坛徽章:
0
发表于 2008-08-22 20:03 |显示全部楼层

回复 #2 amxiaomao 的帖子

其实之前是TCP的方式,一台机器向多台发送相同的内容,但是又说这样效率不高,如果用UDP广播的话就要快一些。
你说的先TCP,后UDP是不是说先用TCP和对方建立连接,然后再用UDP进行传输?相当于FTP那种一个控制,一个传输的方式

论坛徽章:
0
发表于 2008-08-22 20:07 |显示全部楼层
你要非用UDP,我想只能用这个方法了吧!

楼下的同志,有什么好方法!发上来学习学习么!

论坛徽章:
0
发表于 2008-08-22 20:10 |显示全部楼层

回复 #4 amxiaomao 的帖子

UDP确实不能够很好地提供可靠性,不过现在还只是在论证看是否可行。

[ 本帖最后由 scutan 于 2008-8-22 20:16 编辑 ]

论坛徽章:
0
发表于 2008-08-22 20:17 |显示全部楼层
原帖由 scutan 于 2008-8-22 20:10 发表
UDP确实不能够很好地提供可靠性,不过现在还只是在论证看是否可行。


当然可行,只不过麻烦点罢了!

论坛徽章:
0
发表于 2008-08-22 20:19 |显示全部楼层
原帖由 system888net 于 2008-8-22 20:17 发表


当然可行,只不过麻烦点罢了!


嗯,是的。
主要是看与TCP传输相比,能否明显提高性能。

论坛徽章:
0
发表于 2008-08-22 20:25 |显示全部楼层
原帖由 scutan 于 2008-8-22 20:19 发表


嗯,是的。
主要是看与TCP传输相比,能否明显提高性能。


补充问一下:
广播的内容是在实时的变化吗?
还有接收端是要保证每一个包都不丢失?
或者说对后来(其它的机器已经接收数据一会了)才开机的机器是如何要求的?

论坛徽章:
0
发表于 2008-08-22 20:29 |显示全部楼层
你要传送的电脑越多,你的数据量越大,用udp广播比起tcp越高效吧
当然麻烦的是你要自己实现重传机制如果数据包不可以丢失的话
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP