青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

Fork me on GitHub
隨筆 - 215  文章 - 13  trackbacks - 0
<2017年5月>
30123456
78910111213
14151617181920
21222324252627
28293031123
45678910


專注即時通訊及網(wǎng)游服務端編程
------------------------------------
Openresty 官方模塊
Openresty 標準模塊(Opm)
Openresty 三方模塊
------------------------------------
本博收藏大部分文章為轉載,并在文章開頭給出了原文出處,如有再轉,敬請保留相關信息,這是大家對原創(chuàng)作者勞動成果的自覺尊重??!如為您帶來不便,請于本博下留言,謝謝配合。

常用鏈接

留言簿(1)

隨筆分類

隨筆檔案

相冊

Awesome

Blog

Book

GitHub

Link

搜索

  •  

積分與排名

  • 積分 - 220955
  • 排名 - 117

最新評論

閱讀排行榜

http://blog.csdn.net/skywind/article/details/8804912

KCP是一個快速可靠協(xié)議,能以比 TCP浪費10%-20%的帶寬的代價,換取平均延遲降低 30%-40%,且最大延遲降低三倍的傳輸效果。純算法實現(xiàn),并不負責底層協(xié)議(如UDP)的收發(fā),需要使用者自己定義下層數(shù)據(jù)包的發(fā)送方式,并以 callback的方式提供給 KCP。連時鐘都需要外部傳遞進來,內部不會有任何一次系統(tǒng)調用。

整個協(xié)議只有 ikcp.h, ikcp.c兩個源文件,可以方便的集成到用戶自己的協(xié)議棧中。也許你實現(xiàn)了一個P2P,或者某個基于 UDP的協(xié)議,而缺乏一套完善的 ARQ可靠協(xié)議實現(xiàn),那么簡單的拷貝這兩個文件到現(xiàn)有項目中,稍微編寫兩行代碼,即可使用。

技術特性

TCP是為流量設計的(每秒內可以傳輸多少KB的數(shù)據(jù)),講究的是充分利用帶寬。而KCP是為流速設計的(單個數(shù)據(jù)包從一端發(fā)送到一端需要多少時間),以10%-20%帶寬浪費的代價換取了比 TCP快30%-40%的傳輸速度。TCP信道是一條流速很慢,但每秒流量很大的大運河,而KCP是水流湍急的小激流。KCP有正常模式和快速模式兩種,通過以下策略達到提高流速的結果:

  • RTO翻倍vs不翻倍:TCP超時計算是RTOx2,這樣連續(xù)丟三次包就變成RTOx8了,十分恐怖,而KCP啟動快速模式后不x2,只是x1.5(實驗證明1.5這個值相對比較好),提高了傳輸速度。
  • 選擇性重傳 vs 全部重傳:TCP丟包時會全部重傳從丟的那個包開始以后的數(shù)據(jù),KCP是選擇性重傳,只重傳真正丟失的數(shù)據(jù)包。
  • 快速重傳:發(fā)送端發(fā)送了1,2,3,4,5幾個包,然后收到遠端的ACK: 1, 3, 4, 5,當收到ACK3時,KCP知道2被跳過1次,收到ACK4時,知道2被跳過了2次,此時可以認為2號丟失,不用等超時,直接重傳2號包,大大改善了丟包時的傳輸速度。
  • 延遲ACK vs 非延遲ACK :TCP為了充分利用帶寬,延遲發(fā)送ACK(NODELAY都沒用),這樣超時計算會算出較大RTT時間,延長了丟包時的判斷過程。KCP的ACK是否延遲發(fā)送可以調節(jié)。
  • UNA vs ACK+UNA :ARQ模型響應有兩種,UNA(此編號前所有包已收到,如TCP)和ACK(該編號包已收到),KCP有單獨ACK,且數(shù)據(jù)包和ACK包都帶UNA信息,有效降低ACK丟失成本。
  • 非退讓流控:KCP正常模式同TCP一樣使用公平退讓法則,即發(fā)送窗口大小由:發(fā)送緩存大小、接收端剩余接收緩存大小、丟包退讓及慢啟動這四要素決定。但傳送及時性要求很高的小數(shù)據(jù)時,可選擇通過配置跳過后兩步,僅用前兩項來控制發(fā)送頻率。以犧牲部分公平性及帶寬利用率之代價,換取了開著BT都能流暢傳輸?shù)男Ч?/li>

基本使用

  1. 創(chuàng)建 KCP對象:
    // 初始化 kcp對象,conv為一個表示會話編號的整數(shù),和tcp的 conv一樣,通信雙方需要 // 保證 conv相同,相互的數(shù)據(jù)包才能夠被認可,user是一個給回調函數(shù)的指針。 ikcpcb *kcp = ikcp_create(conv, user);
  2. 設置回調函數(shù):
    // KCP的下層協(xié)議輸出函數(shù),KCP需要發(fā)送數(shù)據(jù)時會調用它 // buf/len 表示緩存和長度 // user指針為 kcp對象創(chuàng)建時傳入的值,用于區(qū)別多個 KCP對象 int udp_output(const char *buf, int len, ikcpcb *kcp, void *user) { .... }  // 設置回調函數(shù) kcp->output = udp_output;
  3. 循環(huán)調用 update:
    // 以一定頻率調用 ikcp_update來更新 kcp狀態(tài),并且傳入當前的時鐘(毫秒單位)。 // 比如 10ms調用一次,或用 ikcp_check確定下次調用 update的時間不必每次調用。 ikcp_update(kcp, millisec);
  4. 輸入一個下層數(shù)據(jù)包:
    // 收到一個下層數(shù)據(jù)包(比如UDP包)時需要調用: ikcp_input(kcp, received_udp_packet, received_udp_size);

處理了下層協(xié)議的輸出/輸入后 KCP協(xié)議就可以正常工作了,使用 ikcp_send(kcp, ptr, size)來向遠端發(fā)送數(shù)據(jù)。而另一端使用ikcp_recv(kcp, ptr, size)來接收數(shù)據(jù)。

協(xié)議配置

協(xié)議默認模式是一個標準的 ARQ,需要通過配置打開各項加速開關:

  • 工作模式

    int ikcp_nodelay(ikcpcb *kcp, int nodelay, int interval, int resend, int nc);
    • nodelay :是否啟用 nodelay模式,0不啟用;1啟用。
    • interval :協(xié)議內部工作的 interval,單位毫秒,比如 10ms或者 20ms
    • resend :快速重傳模式,默認0關閉,可以設置2(2次ACK跨越將會直接重傳)
    • nc :是否關閉流控,默認是0代表不關閉,1代表關閉。
普通模式:`ikcp_nodelay(kcp, 0, 40, 0, 0); 極速模式: ikcp_nodelay(kcp, 1, 10, 2, 1);
  • 最大窗口
    int ikcp_wndsize(ikcpcb *kcp, int sndwnd, int rcvwnd);
該調用將會設置協(xié)議的最大發(fā)送窗口和最大接收窗口大小,默認為32.
  • 最大傳輸單元
純算法協(xié)議并不負責探測 MTU,默認 mtu是1400字節(jié),可以使用ikcp_setmtu來設置該值。該值將會影響數(shù)據(jù)包歸并及分片時候的最大傳輸單元。
  • 最小RTO
不管是 TCP還是 KCP計算 RTO時都有最小 RTO的限制,即便計算出來RTO為40ms,由于默認的 RTO是100ms,協(xié)議只有在100ms后才能檢測到丟包,快速模式下該值為30ms,可以手動更改該值:
kcp->rx_minrto = 10;

內存分配器

默認KCP協(xié)議使用 malloc/free進行內存分配釋放,如果應用層接管了內存分配,可以用ikcp_allocator來設置新的內存分配器,注意要在一開始設置:

ikcp_allocator(my_new_malloc, my_new_free);

前向糾錯

為了進一步提高傳輸速度,下層協(xié)議也許會使用前向糾錯技術。需要注意,前向糾錯會根據(jù)冗余信息解出原始數(shù)據(jù)包。相同的原始數(shù)據(jù)包不要兩次input到KCP,否則將會導致kcp以為對方重發(fā)了,這樣會產生更多的ack占用額外帶寬。

比如下層協(xié)議使用最簡單的冗余包:單個數(shù)據(jù)包除了自己外,還會重復存儲一次上一個數(shù)據(jù)包,以及上上一個數(shù)據(jù)包的內容:

Fn = (Pn, Pn-1, Pn-2)  P0 = (0, X, X) P1 = (1, 0, X) P2 = (2, 1, 0) P3 = (3, 2, 1)

這樣幾個包發(fā)送出去,接收方對于單個原始包都可能被解出3次來(后面兩個包任然會重復該包內容),那么這里需要記錄一下,一個下層數(shù)據(jù)包只會input給kcp一次,避免過多重復ack帶來的浪費。


http://blog.csdn.net/kxg99/article/details/50696336

如果不丟包那么 KCP()和 TCP性能差不多,KCP不會有任何優(yōu)勢,但是網(wǎng)絡會卡,造成卡的原因就是丟包和抖動,有同學在內網(wǎng)這樣好的環(huán)境下沒有用任何丟包模擬直接跑,跑出來的數(shù)據(jù)是差不多的,但是放到公網(wǎng)上,放到3G/4G網(wǎng)絡情況下,差距就很明顯了,公網(wǎng)在高峰期有平均接近10%的丟包,wifi/3g/4g下更糟糕,這正是造成各種網(wǎng)絡卡頓的元兇。


感謝asio-kcp的作者 zhangyuan 對 KCP 與 enet, udt做過的一次橫向評測,結論如下:

  • ASIO-KCP hasgood performace in wifi and phone network(3G, 4G).
  • Extra using 20% ~ 50% network flow for speed improvement.
  • The kcp is the first choice for realtime pvp game.
  • The lag is less than 1 second when network lag happen.3 times better than enetwhen lag happen.
  • The enet is a good choice if your game allow 2 second lag.
  • UDT is a bad idea.It always sink into badly situation of more than serval seconds lag. And the recovery is not expected.
  • enet has the problem of lack of doc. And it has lots of functions that you may intrest. kcp’s doc is chinese. Good thing is the function detail which is writen in code is english. And you can use asio_kcp which is a good wrap.
  • The kcp is a simple thing. You will write more code if you want more feature.
  • UDT has a perfect doc. UDT may has more bug than others as I feeling.

具體見:橫向比較這里。截取一段在網(wǎng)絡糟糕時,asio-kcp/enet的延遲數(shù)據(jù):

worst network lag happen: 
asio: 10:51.21 
291  295   269   268   231   195   249   230   225   204

enet: 10:51.21 
1563   1520    1470    1482    1438    1454    1412    1637    1588    1540

posted on 2017-12-08 16:22 思月行云 閱讀(1510) 評論(0)  編輯 收藏 引用 所屬分類: C\C++
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美日韩精品中文字幕| 午夜一区在线| 欧美在线免费观看视频| 亚洲在线电影| 亚洲视频欧美视频| 欧美在线视频观看免费网站| 久久久精品免费视频| 乱人伦精品视频在线观看| 亚洲国产精品久久精品怡红院 | 久久大综合网| 韩日在线一区| 国产亚洲高清视频| 在线观看成人av电影| 亚洲精品黄色| 亚洲社区在线观看| 欧美亚洲一级片| 欧美成人一区在线| 99国产精品| 久久国产福利| 欧美国产日韩免费| 国产精品亚洲不卡a| 亚洲国产高清高潮精品美女| 日韩一级黄色av| 欧美专区中文字幕| 亚洲国产欧美一区二区三区同亚洲 | 嫩草国产精品入口| 国产精品久久久久久久久免费| 国产一区二区三区高清在线观看| 亚洲激情网站免费观看| 性色av一区二区三区在线观看| 欧美大片免费观看| 亚洲欧美日韩一区二区在线 | 亚洲电影中文字幕| 亚洲欧美日韩国产综合在线 | 亚洲免费高清视频| 麻豆av一区二区三区| 国产视频一区在线观看| 夜夜嗨av一区二区三区四季av| 久久久久久久999| 在线中文字幕不卡| 欧美精品在线网站| 亚洲国产99| 另类综合日韩欧美亚洲| 亚洲欧美日韩网| 国产精品视频xxx| 亚洲淫性视频| 亚洲精品日韩一| 免费一级欧美片在线观看| 国际精品欧美精品| 欧美一区二区高清在线观看| 99精品国产高清一区二区| 欧美成人精品h版在线观看| 国产在线欧美日韩| 久久黄色小说| 亚洲欧美国产日韩中文字幕| 国产精品久久婷婷六月丁香| 午夜精品久久久| 亚洲一区二区在线免费观看视频| 日韩一区二区精品视频| 亚洲国产婷婷香蕉久久久久久| 亚洲欧美999| 中文亚洲字幕| 欧美视频在线观看| 亚洲免费中文字幕| 亚洲一区自拍| 国产色婷婷国产综合在线理论片a| 性刺激综合网| 久久www免费人成看片高清| 国产一区二区三区黄视频| 久久精品99无色码中文字幕| 欧美在线观看一二区| 玉米视频成人免费看| 欧美电影在线观看完整版| 美乳少妇欧美精品| 一本色道久久综合狠狠躁篇的优点| 亚洲免费高清视频| 国产精品一区二区在线观看不卡 | 午夜精品久久| 欧美在线视频免费| 亚洲高清不卡av| 最新日韩av| 欧美性做爰毛片| 久久精品免费| 欧美不卡一卡二卡免费版| 亚洲一区二区三区在线视频| 亚洲自拍啪啪| 亚洲欧洲一区二区三区久久| 一区二区三区波多野结衣在线观看| 国产精品一级在线| 欧美激情国产日韩精品一区18| 欧美日韩不卡合集视频| 久久精品国产精品亚洲| 欧美黄在线观看| 久久狠狠一本精品综合网| 欧美成人性生活| 久久成人精品电影| 欧美激情第9页| 久久免费视频在线| 欧美视频第二页| 免费观看一级特黄欧美大片| 欧美性片在线观看| 欧美成人精品h版在线观看| 国产精品hd| 欧美激情亚洲激情| 国产亚洲美州欧州综合国| 亚洲日本一区二区| 黄色另类av| 亚洲欧美国产77777| 99视频在线观看一区三区| 久久亚洲精品一区| 欧美在线日韩| 欧美丝袜一区二区| 亚洲第一页中文字幕| 国模吧视频一区| 午夜精品久久久久久| 亚洲欧美视频一区| 欧美日韩一区二区三区在线 | 在线播放豆国产99亚洲| 免费视频一区| 欧美一区二区三区免费视频| 久久这里有精品视频| 亚洲欧美日韩国产一区二区| 欧美大片免费看| 免费在线一区二区| 国产日韩在线视频| 亚洲性视频h| 亚洲小说欧美另类婷婷| 欧美激情在线有限公司| 免费看黄裸体一级大秀欧美| 国产婷婷成人久久av免费高清| 一二三区精品| 亚洲一区二区视频在线观看| 欧美精品一区二区久久婷婷| 亚洲电影免费| 亚洲精品在线电影| 欧美成人精精品一区二区频| 亚洲成人在线网| 亚洲毛片在线观看| 欧美日韩伦理在线免费| 亚洲精品日韩一| 午夜精品久久久久久久蜜桃app | 国产综合欧美| 欧美怡红院视频一区二区三区| 欧美专区日韩专区| 好看的日韩视频| 久久琪琪电影院| 最新成人av网站| 亚洲女性裸体视频| 国产一区二区三区四区| 久久久久久久999| 欧美激情四色| 亚洲伊人色欲综合网| 国产欧美日韩亚洲精品| 久久精品91| 亚洲国产一区二区精品专区| 亚洲一区图片| 狠狠色狠狠色综合日日五| 久久亚洲一区| 亚洲精品在线观看免费| 午夜精品福利一区二区三区av| 国产日韩欧美在线播放| 久久九九热免费视频| 亚洲高清视频一区二区| 亚洲亚洲精品在线观看| 国产日韩欧美一区二区| 女主播福利一区| 亚洲无限av看| 免费欧美日韩| 亚洲私人影吧| 合欧美一区二区三区| 欧美日韩国产小视频| 欧美一区午夜视频在线观看| 亚洲国产精品123| 香蕉尹人综合在线观看| 亚洲欧洲久久| 国产精品一区二区a| 欧美成人一品| 性色av一区二区三区在线观看 | 久久综合五月| 亚洲一二三区视频在线观看| 免费在线观看精品| 亚洲综合日韩在线| 亚洲第一精品在线| 国产精品久久网站| 国产精品视频精品视频| 99re热这里只有精品视频| 欧美亚洲在线播放| 亚洲人成网站色ww在线| 国产欧美短视频| 欧美成人精品激情在线观看| 亚洲综合激情| 99热在线精品观看| 欧美成人小视频| 久久精品天堂| 性欧美大战久久久久久久免费观看 | 一本到12不卡视频在线dvd| 韩国在线一区| 国产一区二区三区四区hd| 国产精品久久久久久久久免费樱桃| 欧美二区视频|