<100分> 关于UDP通讯超时重发的"时机"问题!!!(顶着有分!)

jiudon 2005-09-27 05:19:34
环境:
udp协议/大文件传输/
问题:
采用时钟来控制超时重发, 感觉效果不理想, 不能根据网络的状况来动态的调整重发的时间!
求:
1. 怎么测试当前网络的状况(延时长短)?<最好有算法描述!丷哈>

2. 一般使用udp协议传数据采用什么样的"重发机制"效果比较好?!

3. 大家讨论"p2p Nat穿越"的时候, 总谈到"cone nat"不能穿透, 那么有没有办法识别nat的类型? 若有,怎么识别?
...全文
767 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
jiudon 2005-10-21
  • 打赏
  • 举报
回复
谢谢各位了, 经过大家的指点,我看了TCP/IP协议的重发机制, 终于搞出来一个比较晚上的解决方案,呵呵!!
skykeen 2005-10-17
  • 打赏
  • 举报
回复
1. 怎么测试当前网络的状况(延时长短)?<最好有算法描述!丷哈>
==>取上一次数据发送接收的往返RTT作为参考时间,本次波动时间RT_WAVE(取常量,属经验值,视),则本次网络延时预测为 RT_NOW = a*RTT+(1-a)RT_WAVE [a,RT_WAVE为经验值,取常量,0<=a<=1]

若超时则采用快速递减,若未超时则慢启动(步增一个段),具体方案见 flashboy(爱写程序的小绵羊)的发言

2. 一般使用udp协议传数据采用什么样的"重发机制"效果比较好?!
==>普通是滑动窗口,但其效率不算太高,理解了这个机制,可以在其基础上写自己的选择重传协议


3. 大家讨论"p2p Nat穿越"的时候, 总谈到"cone nat"不能穿透, 那么有没有办法识别nat的类型? 若有,怎么识别?
cone nat 容易穿透的
symmetric NAT很困难,能否穿透看你运气如何啦
如何区分cone,symmetric等NAT类型,你须要看cone,symmetric具体表示什么,明白后是很容易写出检测程序的,建议参考一下 shootingstars那个贴子

大约是这样(实际情况比这复杂):
假如内网一台终端c对于外部节点M,N
M发现c的映射地址为a1:p1
N发现c的映射地址为a2:p2
若a1=a2,p1=p2,则你的NAT为cone型;本型具体还可分IP受限,与Port受限
若p1!=p2(或者a1~=a2)则你的NAT为symmetric型
最完整的测试大约最少需要9个轮回发送接收解析
你需要准备两个外网(相对于内网来说)地址,即M,N
dingpiao 2005-10-17
  • 打赏
  • 举报
回复
自己做包一级别的滑动窗口啊
yayaniuniu502 2005-10-07
  • 打赏
  • 举报
回复
顶!关注
flashboy 2005-10-06
  • 打赏
  • 举报
回复
超时时间可以动态调整的, 这也是TCP实现中的一种标准算法. 大致做法是:
系统中有一个最小超时时间min 和一个最大超时时间max.
 如果当前当前初始化超时时间为n, 如果在发送数据后<n内收到确认, 则对n减小固定步长值m, n=n-m , 并且判断n不能够小于min. 如果n内没有收到确认, 则 n=n+m, 但是要判断n不能大于MAX.

就这样,可以根据网络动态变化情况实现动态调整超时间.
jiudon 2005-09-30
  • 打赏
  • 举报
回复
TCP的重发机制我看过了,算法有点复杂,有没有人有类似的简单点的算法啊!!!
tanggt006 2005-09-29
  • 打赏
  • 举报
回复
up
胜佑 2005-09-29
  • 打赏
  • 举报
回复
看看TCP里的重发机制。
weiziyuner 2005-09-28
  • 打赏
  • 举报
回复
1.就是接收字节数除以时间~
2.自己设计包头,用包的序列号。
3.已经有人做了,设计了源代码,好像也不是太准确(对于具体的运用)。
DerryZhang 2005-09-28
  • 打赏
  • 举报
回复
UP
load888 2005-09-28
  • 打赏
  • 举报
回复
嘻嘻,顶喽
rageliu 2005-09-28
  • 打赏
  • 举报
回复
ding
jiudon 2005-09-28
  • 打赏
  • 举报
回复
我顶!!1
dingpiao 2005-09-28
  • 打赏
  • 举报
回复
忙就不重发了??
zhchyg100 2005-09-27
  • 打赏
  • 举报
回复
http://community.csdn.net/Expert/topic/4297/4297692.xml?temp=.9950373
laofang 2005-09-27
  • 打赏
  • 举报
回复
发送数据包时计算当前发送速度(发送字节数/所用时间),如果速度低于设定阀值,停止发送,隔一段时间再继续发送,重复此发送过程。

就像windows资源浏览器打开一个ftp站点拷贝文件就是动态计算速度,得出剩下时间。

<script type="text/javascript"> var obj = {} Object.defineProperty(obj, 'txt', { get: function () { return obj },

18,356

社区成员

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

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