UDP 最高效率的稳定传输 - VC十年技术群聊天笔记

来源:互联网 发布:matlab画椭圆的编程 编辑:程序博客网 时间:2024/05/22 12:37

阿呆 -假装高手(40133435) 17:10:45
我近一星期对UDP的程序,重写了. 等于我写了两个工程.
发现重写后的工程很优秀.
我不是神,我写程序也会出错.
我是得想想设计了. 可是也无法改变清高的我对此的藐视.

 

阿呆 -假装高手(40133435) 17:12:44
我最近写的程序,居然可以叫所有网络程序全部SB. 把所有带宽抢过来. 而且还能保证数据的实时性,连续性.


猥琐的蜗牛(25291****) 17:13:12
 
阿呆 -假装高手(40133435) 17:13:23
过年的时候, 我在写错误的设计下的代码

 

我就是张三(1080***) 17:13:26
阿呆你说说原理

 

猥琐的蜗牛(25291****) 17:13:35
今天下午,在学习nat2p


猥琐的蜗牛(25291****) 17:13:38
原理
猥琐的蜗牛(25291****) 17:13:40
原理


阿呆 -假装高手(40133435) 17:13:44

阿呆 -假装高手(40133435) 17:13:48
你说
阿呆 -假装高手(40133435) 17:13:51
你好.
阿呆 -假装高手(40133435) 17:13:52
阿呆.
稍息--西安(280852348) 17:13:56

阿呆 -假装高手(40133435) 17:13:59
你们看到我说了什么?


阿呆 -假装高手(40133435) 17:14:22
所有网络通信程序希望的是: 数据的连续性. 实时性, 速度快.
他们对我前面说的话, 不太友好.

 

其实我前面说了:阿呆你说说原理

 

另外一点, 1024 和 1500 区别很大.

当然在下面来说可能是53个字节这种东西.但是我们不需要关心.

我需要关心的是ip 层以上的东西.

 

有关抢占的事情,是这样的.

普通的程序以为掉包率高, 就应该降速度

 

但是我们的目的是什么?
我们的目的不是让掉包率变小.
而是数据最快的实时传到目的的.

所以, 有关掉包率,我们应该去让他变. 泛了说可以从:0->100% 的变.

不管怎么样, 只要在实时性许可内, 速度最快的掉包率.
是我们需要的.

 

一秒我发:100个包, 只收到:23  与:  77%掉包率.
一秒我发:10个包, 只收到:8个包比.   20%掉包率

我们应该选择: 77%的掉包率. 而不是:20%的.

因为这样我们一秒可以成功发送:23个数据包.


当然可能很大的掉包率引起实时性不好.

你总不能先看到我拉完了屎后, 再脱裤子.

 

那样的话,你会很奇怪, 为了保证你不奇怪. 掉包率是有一定控制的.

另外一个: 23个数据包=23KB吗?

 

对于IP层来说, 他能保证:1500字节一个包的完整性.

 

yi-北(30915*****) 17:22:01
那你的程序能自己选择一秒内发送多少呢

比如对于二十几K的网速与上M的网速就不一样了

 

阿呆 -假装高手(40133435) 17:22:22
而所有程序几乎都是1024 字节+头的大小.

我说的情况基本上只考虑网络差的情况.


网络好的情况我们不需要讨论.

所以我建议包的大小定义为:1400->1460之间.
>1464 肯定不行.


阿呆 -假装高手(40133435)  17:21:58
对于IP层来说, 他能保证:1500字节一个包的完整性.


发送一个1400大小的包和:1大小的包,速度是一样的. 情况基本相同的. 因为我们只考虑ip层以上.

 

我就是张三(1080***) 17:24:12
这是规则???

 

我就是张三(1080***) 17:24:47
你意思自定义的包大小,在1400字节左右?

 

阿呆 -假装高手(40133435) 17:25:00
如果从ip层下面说,事实上网络上在传输的都是pppoe包.
再下面来说, 53字节一个分片.

但是我们不需要考虑这些,因为我们是基于ip 在写程序.

 

蚊子(9924****) 17:25:48
对于IP层来说, 他能保证:1500字节一个包的完整性.
==================
阿呆,你指的是报数据的大小,还是整个包含了地址信息的包的大小?

 

阿呆 -假装高手(40133435) 17:26:32
对于1024->1400的调整,可以增加传输的数据量.

 

蚊子(9924****) 17:26:35
1500是我们要发的数据的大小,还是加上了数据后的tcp/ip协议包的大小?

 

阿呆 -假装高手(40133435) 17:26:48
加上了数据后的tcp/ip协议包的大小

 

阿呆 -假装高手(40133435) 17:28:06
我再说一个细节. 我是今天3- 6 点的时候在认真测试的.

udt 这个是udp 的程序. 在codeproject 上有.


使用了高效率的延时机制.
达到了: 想停几tick 就能停几tick 的功能.

但是, 我不得不说这样做没有意义
整个OS 的空闲时, 发送数据的成功率大.

我想说的是这个.


那么我很武断的去停一个tick 发一个数据包.

其实是没有任何意义, 只会让发送的数据变多, 而成功发送的数据并不能变多.

我建议直接使用: WaitForSingleObject ( event,  n tick )

这样的方式来停线程, 而后发下一个数据包. 更优秀.

我测试过: tick, timeGetTime, WaitFor 这三种方式.

 

猥琐的蜗牛(25291****) 17:31:40
研究这个目的是啥?

 

阿呆 -假装高手(40133435) 17:32:03
目的就是udt 的目的. 最高效率的稳定的传输数据.

而且还能保证一定的实时性.

以此为基础可以开发: ppstream

 
阿呆 -假装高手(40133435) 17:36:09
另外, 有关over socket WSASendTo 与普通sendto 方式 比较
我没有测试出优秀性. 测试结果是: 一样.


阿呆 -假装高手(40133435) 17:39:38
tcp 实现的滑动窗口很粹弱.

原因在于tcp 要求的实时性太高.

他不许可一个数据一秒时间还不到目的的.

原创粉丝点击