轉(zhuǎn)帖|行業(yè)資訊|編輯:龔雪|2014-09-28 15:13:54.000|閱讀 162 次
概述:貪婪TCP協(xié)議
# 界面/圖表報(bào)表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
已不記得多少次玩游戲時(shí),被隔壁loser下片卡掉線。
已不記得多少次瀏覽網(wǎng)頁(yè)時(shí),被隔壁sb下片卡得動(dòng)彈不了。
為什么帶寬總是被P2P下載搶光呢?
是因?yàn)镻2P太流氓了嗎?
有句老話說(shuō)得好,人背不能歸社會(huì)。與其抱怨P2P協(xié)議太流氓,不如說(shuō)tcp協(xié)議太憨厚老實(shí)了。tcp協(xié)議的擁塞控制算法,會(huì)根據(jù)丟包、重傳、延時(shí)等現(xiàn)象,判斷當(dāng)前網(wǎng)絡(luò)狀態(tài)。當(dāng)網(wǎng)絡(luò)狀況不好時(shí),tcp協(xié)議會(huì)自動(dòng)降低傳輸速率,以降低網(wǎng)絡(luò)壓力,避免網(wǎng)絡(luò)因過(guò)重的壓力而崩潰。當(dāng)P2P拼命搶帶寬時(shí),tcp協(xié)議卻不停的降低自己的速度,結(jié)果就是帶寬被P2P吃完而tcp的速度接近于0。
tcp擁塞控制,是針對(duì)PCà服務(wù)器的整條線路進(jìn)行流量控制。保護(hù)的是“整條互聯(lián)網(wǎng)線路”。這是一個(gè)舍己為人的“君子”協(xié)議。在帶寬大而且p2p不是很泛濫的國(guó)家(除中國(guó)外的全世界),tcp能讓大家都過(guò)上網(wǎng)絡(luò)通暢的好日子。但是在中國(guó),“流氓”軟件越來(lái)越多。各種P2P下載工具、視屏插件瘋狂搶帶寬。使得TCP擁塞控制變得越來(lái)越不合時(shí)宜。
我們需要對(duì)TCP協(xié)議的擁塞控制做一次革命!!!
我們真的需要擁塞控制嗎?
需要的,但不是針對(duì)“整條互聯(lián)網(wǎng)線路”,而是僅僅針對(duì)我們的出口帶寬做擁塞控制。假如我的出口帶寬只有10MB,那么我們的擁塞控制就應(yīng)該針對(duì)10MB來(lái)做,正好占滿這10MB帶寬。至于電信小區(qū)出口帶寬不夠了,電信移動(dòng)間連接節(jié)點(diǎn)帶寬不夠了,這些位置的擁塞都和我們沒(méi)關(guān)系。P2P只管自己死活,我們的tcp也必須以同樣的策略對(duì)抗才能保證用戶正常上網(wǎng)。這就是我們的貪婪TCP協(xié)議:僅針對(duì)自身的網(wǎng)絡(luò)出口帶寬進(jìn)行擁塞控制。
說(shuō)來(lái)容易實(shí)現(xiàn)難
tcp協(xié)議中的擁塞控制是由發(fā)送方控制的,也就是說(shuō),當(dāng)我們用PC瀏覽網(wǎng)頁(yè)時(shí),PC只能控制自己上傳數(shù)據(jù)的速率,無(wú)法控制服務(wù)器發(fā)送數(shù)據(jù)的速率。所以貪婪tcp協(xié)議主要是做在服務(wù)器端的。通過(guò)在服務(wù)器端采用貪婪tcp協(xié)議來(lái)提高用戶訪問(wèn)網(wǎng)站/玩游戲的流暢度。很多大公司都會(huì)采用“把擁塞控制初始窗口改大幾十倍”的辦法來(lái)達(dá)到提高擁塞窗口的效果。不過(guò)我們作為一家自己寫內(nèi)核的公司,順手做一個(gè)貪婪tcp協(xié)議能達(dá)到更好的效果。
在實(shí)現(xiàn)貪婪tcp協(xié)議時(shí)主要涉及到幾個(gè)技術(shù)點(diǎn):
1、出口帶寬的監(jiān)控和各個(gè)連接間的速率分配
我們是通過(guò)流量控制模塊來(lái)實(shí)現(xiàn)的(因?yàn)橹耙呀?jīng)有流控了,這樣做成本最小),將各個(gè)tcp連接的數(shù)據(jù)包接入流控管理隊(duì)列,流控管理隊(duì)列根據(jù)當(dāng)前出口帶寬情況控制選擇合適的數(shù)據(jù)包通過(guò)網(wǎng)卡發(fā)送出去;然后再將積壓未發(fā)送的數(shù)據(jù)長(zhǎng)度反饋給各個(gè)tcp連接,減小tcp發(fā)送速率。一個(gè)更高性能的實(shí)現(xiàn)方案是:各個(gè)tcp連接將自己的發(fā)送狀態(tài)反饋到一個(gè)per-cpu流量管理中心,per-cpu流量管理中心為tcp連接分配當(dāng)前時(shí)間周期能發(fā)送的數(shù)據(jù)量;各個(gè)per-cpu的流量管理中心則隔幾十毫秒同步一次數(shù)據(jù)。
2、流量控制窗口
tcp協(xié)議中,接收方可以通過(guò)流量控制窗口來(lái)限制發(fā)送方的發(fā)送速率。一般來(lái)說(shuō),當(dāng)接收方的接收緩沖區(qū)不夠時(shí),就會(huì)通過(guò)tcp流量控制窗口來(lái)限制發(fā)送方的發(fā)送速率。正常情況下,這種限制是很少發(fā)生的。但是為了保險(xiǎn)起見(jiàn),我們需要對(duì)tcp流量控制窗口進(jìn)行支持。
3、別真的發(fā)的太快了
因?yàn)槲覀冎豢紤]了服務(wù)器端出口帶寬,沒(méi)有考慮客戶端的出口帶寬。如果真的拼命發(fā)到1GB/s的數(shù)據(jù),有可能把PC用戶的出口帶寬沖垮。因?yàn)槲覀冎皇怯秘澙穞cp協(xié)議來(lái)支持游戲、網(wǎng)頁(yè)瀏覽這種耗流量較小的服務(wù)器,很少會(huì)碰到一次發(fā)送數(shù)據(jù)超過(guò)1MB的情況,所以基本不會(huì)碰到“發(fā)的太快”的情況。
如果要支持大文件傳輸,則必須對(duì)客戶端出口帶寬進(jìn)行預(yù)測(cè)。我們可以假定客戶端的網(wǎng)絡(luò)帶寬在若干小時(shí)內(nèi)一般是固定的。然后計(jì)算當(dāng)我們提高/降低速率時(shí)丟包率的變化。例如當(dāng)我們以10KB/s傳輸數(shù)據(jù)時(shí),丟包率就已經(jīng)達(dá)到了20%;100KB/s時(shí)丟包率僅僅升高為23%,就可以認(rèn)為丟包主要不是由我們引起的,可以進(jìn)一步提高發(fā)送速率,提高我們搶帶寬的能力。
原文://blog.chinaunix.net/uid-29873073-id-4498350.html
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請(qǐng)務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請(qǐng)郵件反饋至chenjj@fc6vip.cn
文章轉(zhuǎn)載自:慧都控件網(wǎng)