UDP 最高效率的穩定傳輸 - VC十年技術羣聊天筆記

阿呆 -假裝高手(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 要求的實時性太高.

他不許可一個數據一秒時間還不到目的的.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章