请教在公网上最合适的UDP包大小

tangrh 2004-12-27 03:35:19
UDP传输不可靠这是大家公认的,但由于它速度快,开销相对小,而且UDP打洞的成功概率一般情况下又会大于TCP打洞成功概率,因此众多P2P软件能够使用UDP时肯定使用UDP。我有这么一个疑问,假设现在A和B通过公网已经能够进行UDP包的交互,并且有一大块连续数据(如文件)要传输,那么如何确定这个UDP包的最合适大小,使得我们实现自定义可靠传输时重传的概率最小,而底层组包成功率也相对较高(太大的包在网络上传输必定要拆包,而到接收端,协议栈又要把它组合起来,如果拆太多,完整收齐组合的可能性肯定降低了,搞惯了TCP,UDP的处理还真是太麻烦而且不太习惯)。请大家畅所欲言,一起来分析分析。另外TCP一般是采用发送端超时重传(未收到确认的情况下),我想UDP下如果实现成接收端主动要求重传是否实现起来更方便点呢?比如现在完整接收100,最新收到105,那我就直接要求发送端重发101-104,这样是否可行呢?
最近要做这么一个东西(真正的P2P),还没有多少眉目,希望大家多捧场。
...全文
3414 35 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
35 条回复
切换为时间正序
请发表友善的回复…
发表回复
boyzhang 2005-07-04
  • 打赏
  • 举报
回复
GZ
greentest 2005-06-05
  • 打赏
  • 举报
回复
mark
realsuperliu 2005-01-18
  • 打赏
  • 举报
回复
弱弱的问一下,什么叫打洞?
qyii 2005-01-18
  • 打赏
  • 举报
回复
没有最合适吧...只有更合适!呵呵~
毕竟各网络环境时时刻刻都在变啊!
tangrh 2005-01-18
  • 打赏
  • 举报
回复
看来要结了
yesry 2004-12-30
  • 打赏
  • 举报
回复
1043
tangrh 2004-12-30
  • 打赏
  • 举报
回复
????呵呵,不解,还有很多困惑啊
cnpeople 2004-12-30
  • 打赏
  • 举报
回复
取最小的MTU
tangrh 2004-12-30
  • 打赏
  • 举报
回复
现在很想问why,而不想问怎么做
tangrh 2004-12-29
  • 打赏
  • 举报
回复
继续讨论,谁实践过啊,继续吧
zyg0 2004-12-29
  • 打赏
  • 举报
回复
忘了,文件传送的时候不是1个net下的也不要紧,就用点对点。如果不支持net的话,还得用tcp
zyg0 2004-12-29
  • 打赏
  • 举报
回复
to : qyii(向范敬宜同志学习!)
我的那个方法是避免不了完全丢包的那种情况,但是那种情况很少的,如果是互联网的话我会采用另一种方法
1.尽量小包。我用1k没有问题,但是最好是1k以下的,网络环境有时候不好,反正我采用的是1k
2.包头包头是必不可少的,如果想实现bt那种的断点续传的话就要+2各包头,1个是包的大小,一个是序号
3,重要的信息采用tcp发送,如文件的总长度,以便于以后的和包和以后的重发。
4,接收完包后在接到不完全包时就叫服务器从发,在接到包序号少的情况也从发
我个人见解,vc我不怎么样,要是vb的话,我恐怕能实现,但是现在我没有时间,项目太紧
Sander 2004-12-28
  • 打赏
  • 举报
回复
实际上每个公网的router都有MTU,可能不同,但都是1k,或512,而你的程序首先1k测试(自动测试)丢包率超出你设定的数据,就改小的packet.
--------------------------------------
另外,我想问的问题是:http://community.csdn.net/Expert/topic/3660/3660951.xml?temp=.4984705
----------
哪位有实现过 “用UDP实现可靠文件传输” 的完整的封装类

“用UDP实现可靠文件传输”的相关连接:
http://blog.csdn.net/pclili/archive/2004/12/12/213631.aspx
希望高手赐教!

zyg0 2004-12-28
  • 打赏
  • 举报
回复
只是本人的见解,没有什么最好的p2p方案,最好的 方案是tcp和udp结合用,tcp发指令,udp传大消息,文件,如果不支持net都改tcp 至少qq现在是怎么做的
晕,怎么是vb版
whwjn 2004-12-28
  • 打赏
  • 举报
回复
今天blog怎么打不开了?
godsaveme888 2004-12-28
  • 打赏
  • 举报
回复
多找点临床验证,好坏环境皆要
zyg0 2004-12-28
  • 打赏
  • 举报
回复
在公网我测试最大的 包是1k,因为多了就 会丢包,建议单位越小越好,我设置2k tcp 都有问题(仅限于某些网络环境,的某些机器 如adsl,我家机器)
qyii 2004-12-28
  • 打赏
  • 举报
回复
像BT一样...对每个包计算特征码.把特征码传过去,先进行特征码校验.通过C,S双方确定特征码无误!再由一方发送相应的包.收方收到后,可以按先后次序用对应包的特征码进行校验.

哈哈哈...这也太BT了吧!不过对于两个内网,又要通信.没办法啦!
zyg0啊,我想说的是你在VB版那个方法是防止不了UDP掉包的...

不过自己没实力...连windows网络编程也没看完!谈不上写网络程序,所以随便吹吹牛!大家当没看见好了!
qyii 2004-12-28
  • 打赏
  • 举报
回复
有意思...
暂时没什么话说,等着大的进展消息.
碧螺春的马甲 2004-12-28
  • 打赏
  • 举报
回复
公司内部局域网内 UDP 还会丢吗?因该不会了吧?
加载更多回复(15)

18,363

社区成员

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

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