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

Fork me on GitHub
隨筆 - 215  文章 - 13  trackbacks - 0
<2016年3月>
282912345
6789101112
13141516171819
20212223242526
272829303112
3456789


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

常用鏈接

留言簿(1)

隨筆分類

隨筆檔案

相冊(cè)

Awesome

Blog

Book

GitHub

Link

搜索

  •  

積分與排名

  • 積分 - 219795
  • 排名 - 117

最新評(píng)論

閱讀排行榜

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

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

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

技術(shù)特性

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

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

基本使用

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

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

協(xié)議配置

協(xié)議默認(rèn)模式是一個(gè)標(biāo)準(zhǔn)的 ARQ,需要通過配置打開各項(xiàng)加速開關(guān):

  • 工作模式

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

內(nèi)存分配器

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

ikcp_allocator(my_new_malloc, my_new_free);

前向糾錯(cuò)

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

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

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

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


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

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


感謝asio-kcp的作者 zhangyuan 對(duì) KCP 與 enet, udt做過的一次橫向評(píng)測,結(jié)論如下:

  • 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)絡(luò)糟糕時(shí),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 思月行云 閱讀(1501) 評(píng)論(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>
            国产一区二区三区电影在线观看 | 久久se精品一区二区| 亚洲三级观看| 欧美日韩国产精品| 亚洲美女电影在线| 一区二区三区精品在线| 国产精品久久久久毛片软件| 欧美在线播放一区二区| 久久国产精品99国产精| 亚洲欧洲精品一区| 一本久久精品一区二区| 国产目拍亚洲精品99久久精品 | 亚洲成人在线观看视频| 亚洲国产美女久久久久| 国产精品国产三级国产aⅴ无密码| 欧美一区二区三区在线观看| 久久人人看视频| 亚洲一级黄色| 久久久99精品免费观看不卡| 久久影院午夜片一区| 在线视频亚洲欧美| 欧美一区二区三区四区视频| 99国产精品国产精品久久 | 免费日韩av电影| 欧美日韩国产麻豆| 久久久久久久综合日本| 欧美成人小视频| 久久精品最新地址| 欧美日韩日本视频| 美女精品一区| 国产欧美日韩伦理| 亚洲精品乱码久久久久久| 国产日韩精品在线观看| 亚洲国产欧美日韩精品| 国产性色一区二区| 一本一本久久a久久精品综合妖精 一本一本久久a久久精品综合麻豆 | 亚洲一区日韩在线| 亚洲国产网站| 欧美一区91| 亚洲免费一区二区| 欧美顶级大胆免费视频| 久久久www免费人成黑人精品| 欧美视频二区| 欧美国产亚洲另类动漫| 国产午夜精品全部视频在线播放| 亚洲精品少妇网址| 亚洲国产精品一区二区尤物区 | 亚洲网站在线播放| 在线视频日本亚洲性| 欧美国产专区| 欧美成人国产| 在线观看视频一区| 欧美自拍丝袜亚洲| 欧美在线在线| 国产日韩欧美在线观看| 亚洲影院一区| 欧美在线免费视屏| 国产精品美女久久久| 中文久久精品| 中文一区字幕| 欧美天堂亚洲电影院在线观看 | 99精品久久久| 99www免费人成精品| 欧美精品二区| 亚洲麻豆一区| 亚洲综合日韩在线| 国产精品国产三级国产aⅴ无密码| 亚洲免费成人av| 亚洲性视频网站| 国产精品成人免费精品自在线观看| 日韩一级精品视频在线观看| 日韩天堂在线观看| 欧美日韩国产色视频| 亚洲欧洲日韩综合二区| 亚洲午夜精品17c| 亚洲制服丝袜在线| 久久精品国产一区二区三| 国产综合视频| 久久在线视频| 亚洲人成在线观看| 亚洲在线播放电影| 国产亚洲aⅴaaaaaa毛片| 欧美自拍丝袜亚洲| 欧美激情在线有限公司| 一区二区三区精品久久久| 国产精品久久久久久久久久妞妞| 亚洲在线观看免费| 久久综合伊人| 一区二区av| 国产日韩亚洲| 欧美电影免费观看高清| 亚洲午夜av| 欧美韩国日本一区| 亚洲一区二区三区四区在线观看| 国产一区二区三区久久悠悠色av | 亚洲精品欧美日韩| 国产精品高潮在线| 毛片基地黄久久久久久天堂| 99热免费精品| 欧美成熟视频| 欧美在线免费看| 亚洲美女诱惑| 国内精品视频久久| 欧美日韩一区二区免费在线观看| 欧美亚洲视频| 亚洲精品国产无天堂网2021| 久久精品国产久精国产一老狼| 亚洲激情在线播放| 国产亚洲激情| 欧美午夜无遮挡| 麻豆av一区二区三区| 亚洲欧美激情视频| 亚洲精品亚洲人成人网| 美女成人午夜| 久久精品国产免费| 亚洲综合日韩在线| 一片黄亚洲嫩模| 亚洲日本va午夜在线影院| 国产欧美日韩一区二区三区在线观看| 欧美高清视频在线播放| 久久久国产精品一区二区中文| 亚洲天堂av图片| 日韩午夜激情电影| 欧美国产日本高清在线| 久久久欧美一区二区| 亚洲欧洲av一区二区| 一本色道久久综合亚洲精品不卡| 在线观看亚洲精品| 国产在线视频欧美| 国产精品一区二区三区观看| 欧美午夜不卡视频| 欧美精品国产精品| 欧美国产免费| 卡一卡二国产精品| 久久久精品国产99久久精品芒果| 亚洲视频香蕉人妖| 一区二区三区 在线观看视频| 亚洲三级免费| 亚洲免费观看高清在线观看 | 亚洲精品小视频| 亚洲国产黄色| 91久久夜色精品国产九色| 欧美大片在线看| 亚洲国产精品va| 亚洲另类视频| 艳女tv在线观看国产一区| 亚洲精品一区二区在线| 亚洲精品久久| 一区二区三区www| 亚洲午夜久久久| 午夜精品久久久久久久99黑人| 欧美亚洲一区| 麻豆成人91精品二区三区| 久久综合给合| 欧美高清hd18日本| 91久久精品国产91性色tv| 日韩视频不卡| 性欧美1819性猛交| 久久精品国产精品亚洲综合| 久久综合伊人77777蜜臀| 模特精品裸拍一区| 欧美日韩国产精品专区| 国产精品ⅴa在线观看h| 国产日韩欧美麻豆| 在线播放亚洲| 一本一本a久久| 久久9热精品视频| 欧美国产欧美亚洲国产日韩mv天天看完整 | 亚洲国产精品福利| 一本久道久久综合狠狠爱| 亚洲欧美日本视频在线观看| 久久久精品动漫| 欧美乱大交xxxxx| 国产精品毛片| 亚洲国产精品视频| 午夜精品久久久久久99热| 葵司免费一区二区三区四区五区| 亚洲激情图片小说视频| 亚洲欧美日韩国产精品| 欧美91大片| 国产欧美精品国产国产专区| 亚洲激情精品| 欧美主播一区二区三区美女 久久精品人| 久久久久国产精品一区| 亚洲精选成人| 久久久久一本一区二区青青蜜月| 欧美日本精品在线| 一区在线视频| 亚洲欧美卡通另类91av | 亚洲一区影院| 欧美国产日韩视频| 午夜在线成人av| 欧美日韩精品高清| 在线精品视频一区二区| 亚洲欧美在线免费观看| 欧美激情精品久久久六区热门| 先锋资源久久| 国产精品久久久免费| 亚洲精品系列| 亚洲电影免费观看高清完整版在线观看 |