UDP可靠传输UDP稳定传输技术 - 网通电信传输
1. 就上一篇 UDP传输与高延时的实现方式选择 作相关补充:
a. 假如需求是1毫秒, 那么可以使用timeSetEvent 这个多媒体的时钟来实现。
经测试,普通电脑上基本都可以达到1毫秒的精度。
而且时钟的好处就是不费CPU.
b. 假如一毫秒内需要发送多次数据, 只能采用高延时占CPU的方式来实现。
然后加上时钟延时, CPU的消费就基本为0了。
2. 网通电信的传输极其困难
经一周多时间的详细测试情况基本是这样的:
我发送30个数据包每秒,只能收到20个左右。
请问我需要多发送,还是少发送一点?
我发送100个数据包每秒,只能收到70个左右。
我发送150个数据包每秒,只能收到90个左右。
我发送200个数据包每秒,只能收到102个左右。
我发送250个数据包每秒,只能收到110个左右。
我发送300个数据包每秒,只能收到107个左右。
欢迎VC程序员加入VC 十年技术群 QQ群号: 30107096 共同研究技术
这样的网络, 很领我困惑.
a. UDP可靠传输UDP稳定传输的速度调节依据 - 掉包率
估计常见的UDP可靠传输的速度调节上是靠:掉包率来调节的。我的实现也是靠这个值来调节的。
那么请问这样的情况的掉包率如何计算。这个计算方式,直接影响传输速度。
UDP掉包率计算的指导思想是这样的:
a. 许可偿试加大发送量. 不至于发送量变大,值突然变小。
b. 许可有效值加大。许可掉包区间变大变小。
注:掉包区间 = 最早掉的包 -> 最晚掉的包 这之间的距离
b. UDP可靠传输UDP稳定传输的速度调节依据 - 有效率
发送方可以根据有效率来寻找一个发送频率。并不断偿试加大发送量。
欢迎VC程序员加入VC 十年技术群 QQ群号: 30107096 共同研究技术
c. 有关掉包区间大小的控制问题以及UDP重复收包
比如数据包ID为:1 -> 1000 假如接收方收到: 900个数据包时,向发送方索要:第1个数据包。当然因为接收方没有收到第1个数据包。
这就意味着,发送方必须要存有: 1->900个数据包。
另外一个问题就是:发送方什么时候可以丟掉第一个数据包呢?
方案一:根据接收方信息来确定。
方案二:固定大小内存循环使用。
欢迎VC程序员加入VC 十年技术群 QQ群号: 30107096 共同研究技术
了解了以上情况后,那么如何控制大小呢? 假如掉包区间 = 0 代表:延时0, 实时性最佳。有关实时性是视音频传输的重要需求。
有关视音频传输还是以后再讨论吧。
控制UDP掉包区间大小的方式一是:接收方固定时间检测掉包数据,总是从最早反馈给接受方。
方式二是:区段反馈(利于减小重复反馈与重复收包, 不利于区间控制).
有关重复收包, 我希望留给读者自己去实践。我这里只讲一点:
first dropped packet 10 -----received---dropped---received---dropped---- end received packet 100
我们需要反馈给发送方10-> 100之间的掉包情况,请求发送方重发。
这是理论,假如我们这样做,那么就是我们在浪费带宽。
最好的做法是:反馈给发送方10-> n 之间的掉包情况, 并且n 必须小于 100, n 与100越近代表重复收包越大。
----------------------------------------------------------------------------
当然有关重复收包的控制问题,我提到的方式都是可行的,但不是最好的方式。因为情况不同更适合的方式不同。
犹如视音频传输与文件传输,截然不同。一个注重实时性,一个注重速度。
欢迎VC程序员加入VC 十年技术群 QQ群号: 30107096 共同研究技术
希望我以后会有时间再多写一点这方面的经验之谈的文章。更希望能带给读者一点用处。