UDP传送文件速率如何提高速率

ll4124222875 2010-06-15 02:16:07
大家好:我做了一个UDP传送文件的程序:
思路是发送者一次丢200个包过去,然后接受者接受后返回没有接收到的包,然后重发
但是速度不行,主要问题是一次狂丢200个包过去,然后重发,每次都要验证5-8次左右,才能完成;我定义的每个包大小为8k,这样每次发送1.5m数据,感觉双方验证时间远远大于发送时间,目前好的情况可以达到7m,差的情况是0.5m,都是以1G文件作为测试,
是不是一次性丢包太多,那个接受者缓存不能够容纳这么多数据,从而照成了大量包的丢失呢?还有就是每次传送包大小多少是最好的呢?
希望高手指点
...全文
494 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
cqsfd 2010-06-17
  • 打赏
  • 举报
回复
这个问题我也一直在留意,当做兴趣爱好来做
楼主你这段
“但是速度不行,主要问题是一次狂丢200个包过去,然后重发,每次都要验证5-8次左右,才能完成;我定义的每个包大小为8k,这样每次发送1.5m数据,感觉双方验证时间远远大于发送时间,目前好的情况可以达到7m,差的情况是0.5m,都是以1G文件作为测试”
看不太明白
首先你的做法是发送方每轮发200个包,对面验证再返回,每次都待这200包接全再发下200个包?
然后你说的,好的情况可以达到7m,差的情况是0.5m,是指每秒?
如果能达到7M,基本可以断定你的测试环境是在局域网
我特意去查看过局域网的协议。个人认为,局域网的速度瓶颈是接收缓存的溢出造成的。也就是说接收方操作系统的网络协议缓冲栈满了,来不及处理,但新的包还不停的到来,只能被默默丢弃,在你的程序里好像没收到这个包一样。我试过在局域网中用UDP不停发包,接收方收到的都保存,没人确认重发机制,接收到的1半都不到;用本机两个端口也试过,基本排除网络丢包,接收到的也是1半不到
至于每次传送多大的包,这个我不太清楚。你可以查查关键字“MTU”。但我觉得这并非影响传输速率的因素。一般网络MTU都是1.5K左右,局域网是多少我就不太清楚了,有人和我说也是1.5K。按道理,每个包越大,发送同样大小的数据,需要的UDP包越少,需要的额外UDP,IP协议头开销越小,发送速度应该越快。我自己写的协议中,也是接收方每次发一组包(也就几十个),等待接收方确认再发没收到的。试过每个包0.5K和1k,发现每次发0.5k的包,整体速率远远高于每次发1K。我认为这也从侧面应证了接收方缓冲溢出。
另外,如果你能做到7M/S的速度,相当了不起了!我做的没你这么快...局域网一般用100Mb的线,理论速度12.5MB/S,以前QQ的文件传输功能,撑死也就7M/S这个速度;但现好像改过了,传输速度快了很多,有一次我发现有近10M/S,基本不可能再提升了!要能找到它的源码来分析下是最好的。
大家多交流
木头菇 2010-06-17
  • 打赏
  • 举报
回复
用udt,开源
UDX协议 2010-06-17
  • 打赏
  • 举报
回复
http://topic.csdn.net/u/20091130/12/0ea2c403-b7bd-4b27-bc17-6e5b5cd4cd55.html
cqsfd 2010-06-17
  • 打赏
  • 举报
回复
8楼关于MTU的理解是对的
我前面说的MTU对速率的影响,指的是局域网;我提到的所有测试都是基于局域网的,而我想楼主做的工作也是在局域网的。希望不要误会
个人经验
局域网丢包是接收方的接收缓冲溢出,解决关键在于接收方的控制
而广域网是由于网络拥塞,解决关键在于拥塞控制机制,在拥塞发生后尽快抢占网络
shenyi0106 2010-06-17
  • 打赏
  • 举报
回复
局域网还是广域网传输?这个很关键!
局域网不存在MTU问题(或者说存在,但是不用去考虑其带来的影响)
但是广域网存在MTU问题,如果按你所说的一个包8K,那么在广域网上传输时,会被至少分成5个包,接收端
要接收到这5个包后才会提交给应用层处理,如果你中间丢了一个包,那么剩下的4个包也会被接收端丢弃,
由于UDP是不可靠协议,丢包是很正常的(尤其在广域网上传输),所以极端情况下,你的方法速率会很慢很慢很慢。
所以建议你,要么用TCP传输文件,要么用FTP,如果有特殊需求必须用UDP,那么你应该将每个发送包变的小一点(<=MTU,以太网的MTU=1492),设计个发送窗口,包验证和丢包重传机制,应该可以快点
Squall_zy 2010-06-16
  • 打赏
  • 举报
回复
ok,你会用 sendto 和 recvfrom 了。
下一步,去看看 TCP 协议吧。
向立天 2010-06-16
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 zhouzhangkui 的回复:]
那么大的文件
用FTP吧
[/Quote]
有道理
周药师 2010-06-16
  • 打赏
  • 举报
回复
那么大的文件
用FTP吧
lijianli9 2010-06-16
  • 打赏
  • 举报
回复
改TCP吧,
ga6840 2010-06-16
  • 打赏
  • 举报
回复

中场休息

帮顶一下
buptzwp 2010-06-15
  • 打赏
  • 举报
回复
如果说传送大的文件的话,还真不如用TCP。除非实时,一般不用UDP。

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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