关于提高UDP传输效率问题(高手进)

mzf333 2009-11-04 11:12:51
现在遇到的问题是这样的:

有大量的数据包,用UDP的方式,从另一端传输到另一端,暂时不考虑丢失的问题,硬性规定数据包的传输率不能低于某个范
围。怎么提高传输效率呢?大家有什么思路?

我想到的思路是:1.将数据包标号,分成两个进程去传输。效率的确有提高,但是还没达到要求。
2.而是使用BUFFER的方法,但是效率还是不高。
...全文
2241 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
dawn1314 2009-11-28
  • 打赏
  • 举报
回复
报文大小是4的整数倍 好象和网卡的缓存参数有关,可以了解一下如何获得该参数。
但丢包问题与网络所有经过的设备及设备配置有关,如过想智能一点,可以考虑收发双方拟订一个协议智能交流调整发包频率和包大小,怕这个传输也不可靠,这个可以考虑用TCP,或你不闲麻烦基于于UDP所个收报确认机制也可以。UDP本身就是一个协议,只是我们现在发现他的智能程度为满足我们的需要,那么我们可以基于他去改造他啊。
APOLLO_TS 2009-11-09
  • 打赏
  • 举报
回复
报文大小是4的整数倍---N*[大小]略低于网速即可。F频段适中
daidodo 2009-11-09
  • 打赏
  • 举报
回复
mark
Caballeroo 2009-11-08
  • 打赏
  • 举报
回复
关注!
phpjspasp 2009-11-07
  • 打赏
  • 举报
回复
我觉得这个很难做。因为网络中的东西是你无法左右的。你发的太快,就会收到ICMP源抑制报文,发了也没用。
mzf333 2009-11-06
  • 打赏
  • 举报
回复
具体问题是需要把数据包在限定时间内传输过去,包与包相隔的时间不能太长,如连个包相隔在XX秒内。

所以加快把包传过去,才考虑用两个线程去传,一个传一半。至于包与包的间隔时间问题,我开始想是否能有控制的算法处理。能调整之间的传输时间。有什么想法吗?TCP太慢了,不可能用它。

这里我们先考虑的是1对1,当解决了再去想1对N。
feiyangdn 2009-11-05
  • 打赏
  • 举报
回复
传输速度跟分几个进程传和用BUFFER基本没有关系,如果你的程序有很大关系是说明你程序设计不合理。如果不考虑丢包,传输速度可以说跟上层程序没有任何关系。
对于UDP而言,上层传输速度的增益为报文丢包控制带来的增益,通过良好的报文控制能够在网络拥塞较为严重的情况下提高性能,从而在一定程度上提高整体的平均性能。

只要保持底层发送缓冲区一直有数据可供发送,就达到比特流速度上限了。

不考虑丢包,编程尽量不要发送很小的报文,Send尽力而为一般就能达到网络最快速度。
arczee 2009-11-05
  • 打赏
  • 举报
回复
观注中,有谁能说出一个详细来
feiyangdn 2009-11-05
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 mzf333 的回复:]
谢谢你的答复。良好的报文控制一般有什么方法?
[/Quote]
1--1连接时要UDP要解决丢包问题,多长时间没响应算丢包,要是客户响应的那个报文丢了呢?
1--n连接时各个用户的通信质量并不一样,各路都尽力而为还是按比例划分带宽?网络中的通信质量还和时间有关系,如何处理?

做的简单的情况都不要考虑这些,把丢包看做一个小概率事件,对于程序而言就是一个异常分支,简单的重传就可以,重传指定次数都失败,结束这个虚连接,要是客户端需要继续通信重新来过,底层已经做了很多工作了,在UDP层上想要获得高的通信速率增益不太可能。
wolffan3150 2009-11-05
  • 打赏
  • 举报
回复
UDP只要设置上没问题,
数据包长度恰当,
send的速度应该可以达到上限,
但是有一点“保持底层发送缓冲区一直有数据可供发送”,
内存拷贝,是影响效率很重要的原因,应当尽量减少,
另外可以使用环形buf
mzf333 2009-11-05
  • 打赏
  • 举报
回复
谢谢你的答复。良好的报文控制一般有什么方法?
hlwang_1984 2009-11-04
  • 打赏
  • 举报
回复
非高手,关注。。。

33,027

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧