锘??xml version="1.0" encoding="utf-8" standalone="yes"?> 鍙﹀錛岀戶鎵胯嚜TCP鎷ュ鎺у埗鐨勪笉鍏鉤鐨凴TT涔熸垚涓哄湪鍒嗗竷寮忔暟鎹瘑闆嗙▼搴忎腑鐨勪弗閲嶉棶棰樸傛嫢鏈変笉鍚孯TT鐨勫茍鍙慣CP嫻佸皢涓嶅叕騫沖湴鍒嗕韓甯﹀銆傚敖綆″湪灝忕殑BDP緗戠粶涓嬌鐢ㄩ氬父鐨凾CP瀹炵幇鏉ョ浉瀵瑰鉤絳夌殑鍏變韓甯﹀錛屼絾鍦ㄦ嫢鏈夊ぇ閲廈DP鐨勭綉緇滀腑錛岄氬父鐨勫熀浜嶵CP鐨勭▼搴忓氨蹇呴』鎵垮彈涓ラ噸鐨勪笉鍏鉤鐨勯棶棰樸傝繖涓猂TT鍩轟簬鐨勭畻娉曚弗閲嶇殑闄愬埗浜嗗叾鍦ㄥ箍鍩熺綉鍒嗗竷寮忚綆楃殑鏁堢巼錛屼緥濡傦細internet涓婄殑緗戞牸璁$畻銆?/p>
涓鐩村埌浠婂ぉ錛屽鏍囧噯鐨凾CP鐨勬彁楂樹竴鐩撮兘涓嶈兘鍦ㄩ珮BDP鐜涓晥鐜囧拰鍏鉤鎬ф柟闈㈣揪鍒版弧鎰忕殑紼嬪害錛堢壒鍒槸鍩轟簬RTT鐨勯棶棰橈級銆備緥濡傦細TCP鐨勪慨鏀癸紝RFC1423錛堥珮鎬ц兘鎵╁睍錛夛紝RFC2018錛圫ACK錛夈丷FC2582錛圢ew Reno錛夈丷FC2883錛圖-SACK錛夈佸拰RFC2988錛圧TO璁$畻錛夐兘鎴栧鎴栧皯鐨勬彁楂樹簡鐐規晥鐜囷紝浣嗘渶鏍規湰鐨凙IMD綆楁硶娌℃湁瑙e喅銆侶S TCP錛圧FC 3649錛夐氳繃鏍規湰涓婃敼鍙楾CP鎷ュ鎺у埗綆楁硶鏉ュ湪楂楤DP緗戠粶涓幏寰楅珮甯﹀鍒╃敤鐜囷紝浣嗗叕騫蟲ч棶棰樹粛鐒跺瓨鍦ㄣ?/p>
鑰冭檻鍒頒笂闈㈢殑鑳屾櫙錛岄渶瑕佷竴縐嶅湪楂楤DP緗戠粶鏀寔楂樻ц兘鏁版嵁浼犺緭鐨勪紶杈撳崗璁傛垜浠帹鑽愪竴涓簲鐢ㄧ▼搴忕駭鍒殑浼犺緭鍗忚錛屽彨UDT鎴栧熀浜嶶DP鐨勬暟鎹紶杈撳崗璁茍鎷ユ湁鐢ㄥ鎺у埗綆楁硶銆?/p>
鏈枃鎻忚堪涓や釜姝d氦鐨勯儴鍒嗭紝UDP鍗忚鍜孶DT鎷ュ鎺у埗綆楁硶銆備竴涓簲鐢ㄥ眰綰у埆鐨勫崗璁紝浣嶄簬UDP涔嬩笂錛屼嬌鐢ㄥ叾浠栫殑鎷ュ綆楁硶錛岀劧鑰岃繖浜涙湰鏂囦腑鎻忚堪鐨勭畻娉曚篃鍙互鍦ㄥ叾浠栧崗璁腑瀹炵幇錛屼緥濡傦細TCP銆?/p>
涓涓崗璁殑鍙傝冨疄鐜板彨[UDT]錛涜緇嗙殑鎷ュ鎺у埗綆楁硶鐨勬ц兘鍒嗘瀽鍦╗GHG04]涓彲浠ユ壘鍒般?/p>
2. 璁捐鐩爣 UDT鐨勪富瑕佺洰鏍囨槸鏁堢巼銆佸叕騫熾佺ǔ瀹氥傚崟涓殑鎴栧皯閲忕殑UDT嫻佸簲璇ュ埄鐢ㄦ墍鏈夐珮閫熻繛鎺ユ彁渚涚殑鍙敤甯﹀錛屽嵆浣垮甫瀹藉彉鍖栫殑寰堝墽鐑堛傚悓鏃訛紝鎵鏈夊茍鍙戠殑嫻佸繀欏誨叕騫沖湴鍏變韓甯﹀錛屼笉渚濊禆浜庝笉鍚岀殑甯﹀鐡跺姴銆佽搗濮嬫椂闂淬丷TT銆傜ǔ瀹氭ц姹傚寘鍙戦侀熺巼搴旇涓鐩翠細鑱氬彲鐢ㄥ甫瀹介潪甯稿揩錛屽茍涓斿繀欏婚伩鍏嶆嫢濉炵鎾炪?/p>
UDT騫朵笉鏄湪鐡跺姴甯﹀鐩稿杈冨皬鐨勫拰澶ч噺澶氬厓鐭枃浠舵祦鐨勬儏鍐典笅鐢ㄦ潵鍙栦唬TCP鐨勩?/p>
UDT涓昏浣滀負TCP鐨勬湅鍙嬶紝鍜孴CP騫跺瓨錛孶DT鍒嗛厤鐨勫甫瀹戒笉搴旇瓚呰繃鏍規嵁MAX-MIN瑙勫垯鐨勬渶澶ф渶灝忓叕騫沖叡浜師鍒欍傦紙澶囨敞錛屾渶澶ф渶灝忚鍒欏厑璁窾DT鍦ㄩ珮BDP榪炴帴涓嬪垎閰峊CP涓嶈兘浣跨敤鐨勫彲鐢ㄥ甫瀹斤級銆傛垜浠?/p>
3. 鍗忚璇存槑 鎺ユ敹鑰呬篃璐熻矗瑙﹀彂鍜屽鐞嗘墍鏈夌殑鎺у埗浜嬩歡錛屽寘鎷嫢濉炴帶鍒跺拰鍙潬鎬ф帶鍒跺拰浠栦滑鐨勭浉瀵規満鍒訛紝渚嬪RTT浼拌銆佸甫瀹戒及璁°佸簲絳斿拰閲嶄紶銆?/p>
UDT鎬繪槸璇曠潃灝嗗簲鐢ㄥ眰鏁版嵁鎵撳寘鎴愬浐瀹氱殑澶у皬錛岄櫎闈炴暟鎹笉澶熻繖涔堝ぇ銆傚拰TCP鐩鎬技鐨勬槸錛岃繖涓浐瀹氱殑鍖呭ぇ灝忓彨鍋歁SS錛堟渶澶у寘澶у皬錛夈傜敱浜庢湡鏈沀DT鐢ㄦ潵浼犺緭澶у潡鏁版嵁嫻侊紝鎴戜滑鍋囧畾鍙湁寰堝皬鐨勪竴閮ㄥ垎涓嶈鍒欑殑澶у皬鐨勫寘鍦║DT session涓侻SS鍙互閫氳繃搴旂敤紼嬪簭鏉ュ畨瑁咃紝MTU鏄叾鏈浼樺鹼紙鍖呮嫭鎵鏈夊寘澶達級銆?/p>
UDT鎷ュ鎺у埗綆楁硶灝嗛熺巼鎺у埗鍜岀獥鍙o紙嫻侀噺鎺у埗錛夊悎騫惰搗鏉ワ紝鍓嶈呰皟鏁村寘鐨勫彂閫佸懆鏈燂紝鍚庤呴檺鍒舵渶澶х殑浣嶈搴旂瓟鐨勫寘銆傚湪閫熺巼鎺у埗涓嬌鐢ㄧ殑鍙傛暟閫氳繃甯﹀浼拌鎶鏈潵鏇存柊錛屽畠緇ф壙鏉ヨ嚜鍩轟簬鎺ユ敹鐨勫寘鏂規硶銆傚悓鏃訛紝閫熺巼鎺у埗鍛ㄦ湡鏄及璁TT鐨勫父閲忥紝嫻佹帶鍒跺弬鏁頒緷璧栦簬瀵規柟鐨勬暟鎹埌杈鵑熷害錛屽彟澶栨帴鏀剁閲婃斁鐨勭紦鍐插尯鐨勫ぇ灝忋?/p>
3.2.1. 鏁版嵁鍖?/p>
0 1 3 4 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 0 鍖呭簭鍙鋒槸UDT鏁版嵁鍖呭ご涓敮涓鐨勫唴瀹廣傚畠鏄竴涓棤絎﹀彿鏁存暟錛屼嬌鐢ㄦ爣蹇椾綅鍚庣殑31浣嶏紝UDT浣跨敤鍖呭熀紜鐨勯渶瑕侊紝渚嬪錛屾瘡涓潪閲嶄紶鐨勫寘閮藉鍔犲簭鍙?銆傚簭鍙峰湪鍒拌揪鏈澶у?^31-1鐨勬椂鍊欒鐩栥傜揣璺熷湪榪欎簺鏁版嵁鍚庨潰鐨勬槸搴旂敤紼嬪簭鏁版嵁銆?/p>
3.2.2. 鎺у埗鍖?br>鎺у埗鍖呯粨鏋勫涓嬶細 0 1 3 4 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 1 鏈?縐嶇被鍨嬬殑鎺у埗鍖呭湪UDT涓紝bit1-3琛ㄧず榪欎簺淇℃伅銆傚墠32浣嶅湪鍖呭ご涓繀欏誨瓨鍦ㄣ傛帶鍒朵俊鎭瓧孌靛寘鎷?錛堜緥濡傦紝瀹冧笉瀛樺湪錛夋垨鑰呭涓?2浣嶆棤絎﹀彿鏁存暟錛岃繖鐢卞寘綾誨瀷鍐沖畾銆?/p>
UDT浣跨敤搴旂瓟瀛愬簭鍙風殑鏂規硶銆傛瘡涓狝CK/ACK2鍖呮湁涓涓棤絎﹀彿鐨?6浣嶅簭鍙鳳紝瀹冪嫭绔嬩簬鏁版嵁鍖呴渶瑕併傚畠浣跨敤浣?6-31銆傚簲絳旈渶瑕佷粠0鍒幫紙2^16-1錛夈備綅16-31鍦ㄥ叾浠栨帶鍒跺寘涓病鏈夊畾涔夈?/p>
綾誨瀷 2錛?2浣?鍐呴儴欏哄簭鍙?/p>
3錛?2浣?MSS錛堝瓧鑺傦級 4錛?2浣?鏈澶ф祦閲忕獥鍙eぇ灝忥紙瀛楄妭錛?/p>
2錛?2浣嶏紝RTT錛堝井縐掞級 3錛?2浣嶏紝RTT 鍙橀噺鎴栬匯TTVar (寰) 4錛?2浣嶏紝嫻侀噺紿楀彛澶у皬錛堝寘鐨勬暟閲忥級 5錛?2浣嶏紝榪炴帴瀹歸噺浼拌錛堟瘡縐掑寘鐨勬暟閲忥級 娉ㄦ剰錛屽浜庢暟鎹拰鎺у埗鍖呮潵璇達紝鍙互浠嶶DP鍗忚澶翠腑寰楀埌瀹為檯鐨勫寘澶у皬銆傚寘澶у皬淇℃伅鑳借鐢ㄦ潵寰楀埌鏈夋晥鐨勬暟鎹礋杞藉拰NAK鍖呬腑鐨勬帶鍒朵俊鎭瓧孌靛ぇ灝忋?/p>
3.3. 瀹氭椂鍣?br>UDT鍦ㄦ帴鏀剁浣跨敤4涓畾鏃跺櫒鏉ヨЕ鍙戜笉鍚岀殑鍛ㄦ湡浜嬩歡錛屽寘鎷熺巼鎺у埗銆佸簲絳斻佷涪澶辨姤鍛婏紙negative搴旂瓟錛夊拰閲嶄紶/榪炴帴緇存姢銆?/p>
UDT涓殑瀹氭椂鍣ㄤ嬌鐢ㄧ郴緇熸椂闂翠綔涓烘簮銆俇DT鎺ユ敹绔富鍔ㄦ煡璇㈢郴緇熸椂闂存潵媯鏌ヤ竴涓畾鏃跺櫒鏄惁榪囨湡銆傚浜庢煇涓畾鏃跺櫒T鏉ヨ錛屽叾鎷ユ湁鍛ㄦ湡TP錛屽皢瀹氬彉閲弔鐢ㄦ潵璁板綍鏈榪慣琚緗垨澶嶄綅鐨勬椂闂淬傚鏋淭鍦ㄧ郴緇熸椂闂磘0錛坱= t0錛夎澶嶄綅錛岄偅涔堜換浣晅1錛坱1-t>=TP錛夋槸T榪囨湡鐨勬潯浠躲?/p>
鍥涗釜瀹氭椂鍣ㄦ槸錛歊C瀹氭椂鍣ㄣ丄CK瀹氭椂鍣ㄣ丯AK瀹氭椂鍣ㄣ丒XP瀹氭椂鍣ㄣ備粬浠殑鍛ㄦ湡鍒嗗埆鏄細RCTP銆丄TP銆丯TP銆丒TP銆?/p>
RC瀹氭椂鍣ㄧ敤鏉ヨЕ鍙戝懆鏈熸х殑閫熺巼鎺у埗銆侫CK瀹氭椂鍣ㄧ敤鏉ヨЕ鍙戝懆鏈熸х殑鏈夐夋嫨鐨勫簲絳旓紙搴旂瓟鍖咃級銆俁CTP鍜孉TP鏄父閲忓鹼紝鍊間負錛歊CTP=ATP=0.01縐掋?/p>
NAK琚敤鏉ヨЕ鍙憂egative搴旂瓟錛圢AK鍖咃級銆傞噸浼犲畾鏃跺櫒琚敤鏉ヨЕ鍙戜竴涓暟鎹寘鐨勯噸浼犲拰緇存姢榪炴帴鐘舵併備粬浠懆鏈熶緷璧栦簬瀵逛簬RTT鐨勪及璁°侲TP鍊間篃渚濊禆浜庤繛緇璄XP鏃墮棿婧㈠嚭鐨勬鏁般傛帹鑽愮殑RTT鍒濆鍊兼槸0.1縐掞紝鑰孨TP鍜孍TP鐨勫垵濮嬪兼槸錛歂TP=3*RTT錛孍TP=3*RTT+ATP銆?/p>
鍦ㄦ瘡嬈ounded UDP鎺ユ敹鎿嶄綔錛堝鏋滄敹鍒頒竴涓猆DP鍖咃紝涓浜涢澶栫殑蹇呴』鐨勬暟鎹鐞嗘椂闂達級鏃舵煡璇㈢郴緇熸椂闂存潵媯鏌ュ洓涓畾鏃跺櫒鏄惁宸茬粡榪囨湡銆傛帹鑽愮殑鍛ㄦ湡綺掑害鏄井縐掋俇DP鎺ユ敹鏃墮棿婧㈠嚭鍊兼槸瀹炵幇鐨勪竴涓夋嫨錛岃繖渚濊禆浜庡驚鐜煡璇㈢殑璐熸媴鍜屼簨浠跺懆鏈熺簿紜害涔嬮棿鐨勬潈琛°?/p>
閫熺巼鎺у埗浜嬩歡鏇存柊鍖呭彂閫佸懆鏈燂紝UDT鍙戦佺浣跨敤STP鏉ュ畨鎺掓暟鎹寘鐨勫彂閫併傚亣瀹氫竴涓湪鏃墮棿t0琚彂閫侊紝閭d箞涓嬩竴嬈″寘鍙戦佹椂闂存槸錛坱0+ STP錛夈傛崲鍙ヨ瘽璇達紝濡傛灉鍓嶉潰鐨勫寘鍙戦佽姳璐逛簡t’鏃墮棿錛屽彂閫佺灝嗙瓑寰咃紙STP-t’錛夋潵鍙戦佷笅涓涓暟鎹寘錛堝鏋淪TP-t’ <0錛屽氨涓嶉渶瑕佺瓑寰呬簡錛夈傝繖涓瓑寰呴棿闅旈渶瑕佷竴涓珮綺劇‘搴︾殑瀹炵幇錛屾帹鑽愪嬌鐢–PU鏃墮挓鍛ㄦ湡綺掑害銆?/p>
3.4. 鍙戦佺綆楁硶 B錛?鍙戦佺涓㈠け閾捐〃錛氬彂閫佹涓㈠け鍒楄〃鏄竴涓繛鎺ラ摼琛紝鐢ㄦ潵瀛樺偍琚帴鏀舵柟NAK鍖呬腑榪斿洖鐨勪涪澶卞寘搴忓彿銆傝繖浜涙暟瀛椾互澧炲姞鐨勯『搴忓瓨鍌ㄣ?/p>
3.4.2. 鏁版嵁鍙戦佺畻娉?br>A錛?濡傛灉鍙戦佺鐨勪涪澶遍摼琛ㄦ槸闈炵┖鐨勶紝閲嶄紶絎竴涓湪list涓殑鍖咃紝騫跺垹闄よ鎴愬憳錛屽埌5銆?/p>
B錛?絳夊緟鏈夊簲鐢ㄧ▼搴忔暟鎹渶瑕佸彂閫?/p>
C錛?濡傛灉鏈簲絳旂殑鍖呮暟閲忚秴榪囦簡涓ら噺紿楀彛鐨勫ぇ灝忥紝杞埌1銆傚鏋滀笉鏄寘瑁呬竴涓柊鐨勫寘騫跺彂閫佸畠銆?/p>
D錛庡鏋滃綋鍓嶅寘鐨勫簭鍙鋒槸16n錛宯鏄竴涓暣鏁幫紝杞2姝ャ?/p>
E錛?鍦⊿ND PKT鍘嗗彶紿楀彛涓褰曞寘鐨勫彂閫佹椂闂?/p>
F錛?濡傛灉榪欐槸鑷笂嬈″彂閫侀熺巼闄嶄綆涔嬪悗鐨勭涓涓寘錛岀瓑澶朣YN鏃墮棿銆?/p>
G錛庣瓑澶栵紙STP – t錛夋椂闂達紝t鏄1鍒扮4姝ヤ箣闂寸殑鎬繪椂闂達紝鐒跺悗杞埌1銆?/p>
3.5. 鎺ユ敹绔畻娉?br>3.5.1. 鏁版嵁緇撴瀯鍜屽彉閲?br>A錛?鎺ユ敹绔涪澶遍摼琛細鏄竴涓猟uple榪炴帴閾捐〃錛屽厓绱犵殑鍊煎寘鎷細涓㈠け鏁版嵁鍖呯殑搴忓彿銆佹渶榪戜涪澶卞寘鐨勫弽棣堟椂闂村拰鍖呭凡緇忚鍙嶉鐨勬鏁般傚間互鍖呭簭鍙峰搴忕殑鏂瑰紡瀛樺偍銆?/p>
B錛?搴旂瓟鍘嗗彶紿楀彛錛氭瘡涓彂閫丄CK鐨勫拰鏃墮棿涓涓驚鐜暟緇勶紱鐢變簬鍏跺驚鐜殑鐗規э紝鎰忓懗鐫濡傛灉鏁扮粍涓病鏈夋洿澶氱┖闂寸殑鏃跺欐柊鐨勫煎皢瑕嗙洊鑰佺殑鍊箋?/p>
C錛?RCV PKT鍘嗗彶紿楀彛錛氫竴涓敤鏉ヨ褰曟瘡涓寘鍒拌揪鏃墮棿鐨勫驚鐜暟緇勩?/p>
D錛庡鍖呯獥鍙o細涓涓敤鏉ヨ褰曟瘡涓帰嫻嬪寘瀵逛箣闂寸殑鏃墮棿闂撮殧銆?/p>
E錛?LRSN錛氫竴涓敤鏉ヨ褰曟渶澶ф帴鏀舵暟鎹寘闇瑕佺殑鍙橀噺銆侺RSN琚垵濮嬪寲涓哄垵濮嬪簭鍙峰噺1銆?/p>
3.5.2. 鏁版嵁鎺ユ敹綆楁硶 B錛?鍚姩涓涓椂闂碽ounded UDP鎺ユ敹銆傚鏋滄瘡涓寘鍒幫紝杞?銆?/p>
C錛?璁劇疆exp-count涓?錛屽茍鏇存柊ETP涓猴細ETP=RTT+4*RTTVar + ATP銆?/p>
D錛庡鏋滄墍鏈夌殑鍙戦佹暟鎹寘宸茬粡琚簲絳旓紝澶嶄綅EXP鏃墮棿鍙橀噺銆?/p>
E錛?媯鏌ュ寘澶寸殑鏍囧織浣嶃傚鏋滄槸涓涓帶鍒跺寘錛屾牴鎹被鍨嬪鐞嗗畠錛岀劧鍚庤漿1銆?/p>
F錛?濡傛灉褰撳墠鏁版嵁鍖呯殑闇瑕佹槸16n+1錛宯鏄竴涓暣鏁幫紝璁板綍褰撳墠鍖呭拰涓婁釜鍦ㄥ鍖呯獥鍙d腑鏁版嵁鍖呯殑鏃墮棿闂撮殧銆?/p>
G錛庡湪PKT鍘嗗彶紿楀彛涓褰曞寘鍒拌揪鏃墮棿 H錛?濡傛灉褰撳墠鏁版嵁鍖呯殑搴忓彿澶т簬LRSN+1錛屽皢鎵鏈夊湪錛堜絾涓嶅寘鎷級榪欎袱涓間箣闂寸殑搴忓彿鏀懼叆鎺ユ敹涓㈠け閾捐〃錛屽茍鍦ㄤ竴涓狽AK鍖呬腑灝嗚繖浜涘簭鍙峰彂閫佺粰鍙戦佺銆傚鏋滃簭鍙峰皬浜嶭RSN錛屼粠鎺ユ敹涓㈠け閾捐〃涓垹闄ゅ畠銆?/p>
I錛?nbsp; 鏇存柊LRSN錛岃漿1銆?/p>
3.5.3. RC瀹氭椂鍣ㄥ埌 榪囩▼濡備笅錛?/p>
A錛?鎸夌収涓嬮潰鐨勫師鍒欐煡鎵炬帴鏀剁鎵鎺ユ敹鍒扮殑鎵鏈夊寘涔嬪墠鐨勫簭鍙鳳細濡傛灉鎺ユ敹鑰呬涪澶遍摼琛ㄦ槸絀虹殑錛孉CK鍙風爜鏄疞RSN+1錛屽惁鍒欐槸鍦ㄦ帴鏀朵涪澶遍槦鍒椾腑鐨勬渶灝忓簭鍙楓?/p>
B錛?濡傛灉搴旂瓟鍙蜂笉澶т簬鏇劇粡琚獳CK2搴旂瓟鐨勬渶澶у簲絳斿彿錛屾垨絳変簬涓婃搴旂瓟鐨勫簲絳斿彿騫朵笖涓ゆ搴旂瓟涔嬮棿鐨勬椂闂撮棿闅斿皬浜嶳TT+4*RTTVar錛屽仠姝紙涓嶅彂閫佸簲絳旓級銆?/p>
C錛?鍒嗛厤榪欎釜搴旂瓟涓涓敮涓澧炲姞鐨凙CK搴忓垪鍙鳳紝鎺ㄨ崘閲囩敤ACK搴忓垪鍙鋒寜姝ラ1澧炲姞錛屽茍涓旈噸鍙犲湪杈懼埌鏈澶у間箣鍚庛?/p>
D錛庢牴鎹笅闈㈢殑綆楁硶鏉ヨ綆楀寘鐨勬姷杈鵑熷害錛氫嬌鐢≒KT鍘嗗彶紿楀彛涓殑鍊艱綆楁渶榪?6涓寘鎶佃揪闂撮殧錛圓I錛変腑鍊箋傚湪榪?6涓間腑錛屽垹闄ら偅浜涘ぇ浜嶢I*8鎴栧皬浜嶢I*8鐨勫寘錛屽鏋滄渶鍚庡墿浣?涓鹼紝璁$畻浠栦滑鐨勫鉤鍧囧?AI’)錛屽寘鎶佃揪閫熷害鏄?/AI’錛堟瘡縐掑寘鐨勬暟閲忥級錛屽惁鍒欐槸0銆?/p>
E錛?鏍規嵁3.7鑺備腑鐨勫唴瀹逛負姣忕錛圵錛夎綆楁祦閲忕獥鍙c傜劧鍚庤綆楁湁鏁堢殑嫻侀噺紿楀彛澶у皬涓猴細鏈澶э紙W錛屽彲鐢ㄦ帴鏀舵柟緙撳啿澶у皬錛夛紝2錛夈?/p>
F錛?鏍規嵁涓嬮潰鐨勭畻娉曟潵璁$畻榪炴帴瀹歸噺浼拌銆傚鏋滄祦閲忔帶鍒跺揩鍚姩闃舵錛?.7錛変竴鐩寸戶緇紝榪斿洖0錛屽惁鍒欒綆楁渶榪?6涓鍖呴棿闅旓紙PI錛夛紝榪欎簺鍊煎湪瀵瑰寘紿楀彛涓紝閭d箞榪炴帴瀹歸噺灝辨槸1/PI錛堟瘡縐掑寘鐨勬暟閲忥級銆?/p>
G錛庢墦鍖呭簲絳斿簭鍒楀彿錛屽簲絳斿彿錛孯TT錛孯TT 鍙橀噺錛屾湁鏁堢殑嫻侀噺紿楀彛澶у皬騫朵及璁¤繛鎺ワ紝灝嗕粬浠斁鍏CK鍖呬腑錛岀劧鍚庡彂閫佸嚭鍘匯?/p>
H錛?璁板綍ACK搴忓垪鍙鳳紝搴旂瓟鍙峰拰榪欎釜搴旂瓟鐨勫紑濮嬫椂闂達紝騫舵斁鍏ュ巻鍙茬獥鍙d腑銆?/p>
3.5.4. 澶勭悊NAK瀹氭椂鍣ㄥ埌鏃?br>Ø 鏌ユ壘鎺ュ彈鏂圭殑涓㈠け閾捐〃錛屾壘鍒版墍鏈変笂嬈″弽棣堟椂闂存槸錛坘*錛圧TT+4*RTTVar ) 錛夊墠鐨勫寘錛宬褰撳墠榪欎釜鍖呯殑鍙嶉嬈℃暟鍔?錛屽鏋滄病鏈夊弽棣堜涪澶憋紝鍋滄銆?/p>
Ø 鍘嬬緝絎竴姝ヤ腑寰楀埌鐨勫簭鍙鳳紙瑙?.9錛夛紝鐒跺悗鍦ㄤ竴涓狽AK鍖呬腑鍙戦佷粬浠埌鍙戦佹柟銆?/p>
Ø 濡傛灉涓嶆槸鍋滄嫻侀噺鎺у埗蹇惎鍔ㄩ樁孌點?/p>
3.5.5. 澶勭悊EXP瀹氭椂鍣?br>A錛?nbsp; 濡傛灉鍙戦佺鐨勪涪澶遍摼琛ㄤ笉鏄┖鐨勶紝鍋滄 B錛?nbsp; 灝嗘墍鏈夋湭搴旂瓟鐨勫寘鏀懼埌鍙戦佺鐨勪涪澶遍摼琛ㄤ腑 C錛?濡傛灉(exp-count>16)騫朵笖鑷笂嬈′粠瀵規柟鎺ユ敹鍒頒竴涓寘浠ユ潵鐨勬繪椂闂磋秴榪?縐掞紝鎴栬呰繖涓椂闂村凡緇忚秴榪?鍒嗛挓浜嗭紝榪欒璁や負鏄繛鎺ュ凡緇忔柇寮錛屽叧闂璘DT榪炴帴銆?/p>
D錛庡鏋滄病鏈夋暟鎹紝涔熷氨娌℃湁搴旂瓟錛屽彂閫佷竴涓繚媧誨寘緇欏绔紝鍚﹀垯灝嗘墍鏈夋湭搴旂瓟鍖呯殑搴忓彿鏀懼叆鍙戦佷涪澶卞垪琛ㄤ腑銆?/p>
E錛?nbsp; 鏇存柊exp-count涓猴細exp-count= exp-count+1 F錛?nbsp; 鏇存柊ETP涓猴細ETP=exp-count*錛圧TT+4*RTTVar錛?ATP銆?/p>
3.5.6. 鏀跺埌搴旂瓟鍖?br>A錛?nbsp; 鏇存柊鏈澶х殑搴旂瓟搴忓彿 B錛?鏇存柊RTT鍜孯TTVar涓猴細RTT = rtt錛?RTTVar = rv錛況tt鍜宺v鏄疉CK鍖呬腑鐨凴TT鍜孯TTVar鍊箋?/p>
C錛?nbsp; 鏇存柊NTP鍜孍TP涓猴細NTP=RTT+4*RTTVar錛汦TP=exp-count*錛圧TT+4*RTTVar錛?ATP銆?/p>
D錛?nbsp; 鏇存柊榪炴帴瀹歸噺浼拌錛欱=錛圔*7+b錛?8錛宐鏄疉CK鍖呭甫鐨勫箋?/p>
E錛?nbsp; 鏇存柊嫻侀噺紿楀彛澶у皬涓篈CK涓殑鍊箋?/p>
F錛?nbsp; 鍙戦丄CK2鍖咃紝騫惰緗笌ACK搴忓彿鐩稿悓鐨勫簲絳斿彿鍒板绔?/p>
G錛?nbsp; 澶嶄綅EXP瀹氭椂鍣?/p>
3.5.7. 褰撴敹鍒癗AK鍖呯殑鏃跺?br>A錛?灝嗘墍鏈塏AK鍖呬腑甯︾殑搴忓彿鏀懼叆鍙戦佹柟鐨勪涪澶卞垪琛ㄤ腑 B錛?閫氳繃閫熺巼鎺у埗鏉ユ洿鏂癝TP錛堣3.6錛?/p>
C錛?澶嶄綅EXP瀹氭椂鍣?/p>
3.5.8. 褰撴敹鍒癆CK2鍖?br>Ø 鍦ˋCK鍘嗗彶紿楀彛涓牴鎹帴鏀跺埌鐨凙CK2搴忓垪鍙鋒煡鎵捐钀ョ殑ACK鍖呫?/p>
Ø 鏇存柊鏇劇粡琚簲絳旂殑鏈澶у簲絳斿彿 Ø 鏍規嵁ACK2鐨勫埌杈炬椂闂村拰ACK紱誨紑鏃墮棿璁$畻鏂扮殑rtt鍊鹼紝騫朵笖鏇存柊RTT鍜孯TTVar鍊間負錛?/p>
RTTVar = (RTTVar *3 +abs(rtt-RTT)/4 RTT = (RTT *7+rtt)/8 RTT鍜孯TTVar鐨勫垵濮嬪兼槸0.1縐掑拰0.05縐掋?/p>
Ø 鏇存柊NTP鍜孍TP涓猴細 NTP = RTT錛?/p>
ETP = (exp-count +1)* RTT+ATP 3.5.9. 褰撴敹鍒頒繚媧誨寘鐨勬椂鍊?br>浠涔堜篃涓嶅仛 3.5.10. 褰撴敹鍒拌繛鎺ユ彙鎵嬪拰鍏抽棴鍖呯殑鏃跺?br>瑙?.8鑺?/p>
3.6. 閫熷害鎺у埗綆楁硶 蹇惎鍔ㄩ樁孌典粎浠呭湪寮濮嬩竴涓猆DT榪炴帴鐨勬椂鍊欏彂鐢燂紝涓斾笉浼氬湪UDT榪炴帴鐨勪互鍚庡啀鍑虹幇銆傚湪蹇惎鍔ㄩ樁孌典箣鍚庯紝涓嬮潰鐨勭畻娉曞氨瑕佸伐浣滀簡銆?/p>
3.6.2. 褰揜C瀹氭椂鍣ㄦ椂闂村埌 2錛?nbsp; 璁$畻鍦ㄤ笂涓猂CTP鏃墮棿鍐呯殑涓㈠け鐜囷紝璁$畻鏂規硶鏄牴鎹誨叡鍙戦佺殑鍖呬笌NAK鍙嶉涓誨叡涓㈠け鍖呯殑鏁伴噺銆傚鏋滀涪澶辯巼澶т簬0.1%錛屽仠姝€?/p>
3錛?nbsp; 涓嬩釜RCTP鏃墮棿鍐呭彂閫佸寘鐨勫鍔犳暟閲忓涓嬭綆楋細(inc) If (B<=C) inc = 1/MSS Else inc = max (10^(ceil(log10((B-C)*MSS*8)))*Beta/MSS,1/MSS) B鏄繛鎺ュ閲忎及璁★紝C鏄綋鍓嶇殑鍙戦侀熷害銆備袱涓兘璁$畻涓烘瘡縐掑灝戜釜鍖呫侻SS鏄互瀛楄妭璁$畻鐨勶紱Beta鏄間負0.0000015鐨勫父閲忋?/p>
4錛?nbsp; 鏇存柊STP錛歋TP=錛圫TP*RCTP錛?錛圫TP*inc + RCTP錛?/p>
5錛?nbsp; 璁$畻鐪熸鐨勬暟鎹彂閫佸懆鏈燂紙rsp錛夛紝浠嶴ND PKT鍘嗗彶紿楀彛涓緱鍒幫紝濡傛灉錛圫TP<0.5 *rsp錛夎緗甋TP涓猴紙0.5 * rsp錛夈?/p>
6錛?nbsp; 濡傛灉錛圫TP<1.0錛夛紝璁劇疆STP涓?.0銆?/p>
3.6.3. 褰撴敹鍒癗AK鍖呮椂 2錛?nbsp; NumNAK錛氳嚜涓婃LSD鏇存柊浠ュ悗鐨凬AK鏁伴噺 3錛?nbsp; AvgNAK錛氬綋鏈澶у簭鍙峰ぇ浜嶭SD鏃朵袱嬈′簨浠朵箣闂寸殑NAK縐誨姩鐨勫鉤鍧囨暟銆?/p>
4錛?nbsp; DR錛氬湪1鍒癆vgNAK涔嬮棿鐨勯殢鏈哄鉤鍧囨暟銆?/p>
3.6.3.2. 綆楁硶 澧炲姞STP涓猴細STP=STP*錛?+1/8錛?/p>
鏇存柊AvgNAK涓猴細AvgNAK = 錛圓vgNAK *7 +NumNAK錛?8 鏇存柊DR 澶嶄綅 NumNAK = 0 璁板綍LSD 2錛?nbsp; 鍚﹀垯錛屽鍔燦umNAK鎸夌収1涓楠ゅ鍔狅紱濡傛灉NumNAK % DR = 0錛涘鍔燬TP涓猴細STP=STP*錛?+1/8錛夛紱璁板綍LSD銆?/p>
3.7. 嫻侀噺鎺у埗綆楁硶 3.7.1. 褰揂CK瀹氭椂鍣ㄥ埌鐨勬椂鍊?br>1錛?nbsp; 嫻侀噺鎺у埗蹇惎鍔細濡傛灉娌℃湁NAK浜х敓鎴栬匴娌℃湁鍒拌揪鎴栬秴榪?5涓寘錛屽茍涓擜S>0錛屾祦閲忕獥鍙eぇ灝忔洿鏂頒負搴旂瓟鍖呯殑鎬繪暟閲忋?/p>
2錛?nbsp; 鍚﹀垯錛屽鏋滐紙AS>0錛夛紝W鏇存柊涓猴細錛圓S鏄寘鐨勫埌杈鵑熷害錛?/p>
W= ceil (W *0.875+AS* (RTT +ATP) *0.125) 3錛?nbsp; 闄愬埗W鍒板鏂規渶澶ф祦閲忕獥鍙eぇ灝忋?/p>
3.8. 榪炴帴寤虹珛鍜屽叧闂?br>涓涓猆DT瀹炰綋棣栧厛浣滀負涓涓猄ERVER鍚姩錛屽綋涓涓鎴風闇瑕佽繛鎺ョ殑鏃跺欏叾鍙戦佹彙鎵嬪寘銆傚鎴風鍦ㄤ粠鏈嶅姟绔帴鏀跺埌涓涓彙鎵嬪搷搴斿寘鎴栨椂闂存孩鍑轟箣鍓嶏紝搴旇姣忛殧涓孌墊椂闂村彂閫佷竴涓彙鎵嬪寘錛堟椂闂撮棿闅旂敱鍝嶅簲鏃墮棿鍜岀郴緇無verhead鏉ユ潈琛★級銆?/p>
鎻℃墜鍖呮湁濡備笅淇℃伅錛?/p>
1錛?nbsp; UDT鐗堟湰錛氳繖涓兼槸鍏煎鐨勭洰鐨勩傚綋鍓嶇殑鐗堟湰鏄? 2錛?nbsp; 鍒濆搴忓彿錛氳繖鏄彂閫佽繖涓猆DT瀹炰綋灝嗘潵鐢ㄤ簬鍙戦佹暟鎹寘鐨勮搗濮嬪簭鍙楓傚畠蹇呴』鏄竴涓湪1鍒幫紙2^31-1錛変箣闂寸殑闅忔満鍊箋傚彟澶栵紝寤鴻榪欎釜鍊煎湪鍚堢悊鐨勬椂闂村巻鍙茬獥鍙d腑涓嶅簲璇ラ噸澶嶃?/p>
3錛?nbsp; MSS錛氭暟鎹寘鐨勫ぇ灝忥紙閫氳繃IP鏈夋晥璐熻澆鏉ュ害閲忥級 4錛?nbsp; 鏈澶х殑嫻侀噺紿楀彛澶у皬錛氳繖鏄帴鏀跺埌鎻℃墜淇℃伅鐨刄DT瀹炰綋鍏佽鐨勬渶澶ф祦閲忕獥鍙eぇ灝忥紝紿楀彛澶у皬閫氬父闄愬埗涓烘帴鏀剁鐨勬暟鎹粨鏋勫ぇ灝忋?/p>
鏈嶅姟鍣ㄦ帴鏀跺埌涓涓彙鎵嬪寘涔嬪悗錛屾瘮杈僊SS鍊煎拰浠栬嚜宸辯殑鍊煎茍璁劇疆瀹冭嚜宸辯殑鍊間負杈冨皬鐨勫箋傜粨鏋滃間篃鍦ㄦ彙鎵嬪搷搴斾腑琚彂閫佸埌瀹㈡埛绔紝鍙﹀榪樻湁鏈嶅姟鍣ㄧ殑鐗堟湰淇℃伅錛屽垵濮嬪簭鍒楀彿錛屾渶澶ф祦閲忕獥鍙eぇ灝忋?/p>
鐗堟湰瀛楁鐢ㄦ潵媯鏌ヤ袱绔殑鍏煎鎬с傚垵濮嬪簭鍒楀彿鍜屾渶澶ф祦閲忕獥鍙eぇ灝忕敤浜庡垵濮嬪寲鎺ユ敹鍒拌繖涓彙鎵嬪寘鐨刄DT瀹炰綋鍙傛暟銆?/p>
鏈嶅姟鍣ㄥ湪絎竴姝ュ畬鎴愪互鍚庡氨鍑嗗鍙戦佹垨鎺ユ敹鏁版嵁銆傜劧鑰岋紝鍙浠庡悓涓涓鎴風鎺ユ敹浠諱綍鎻℃墜鍖咃紝鍏跺簲璇ュ彂閫佸搷搴斿寘銆?/p>
瀹㈡埛绔竴鏃﹀緱鍒版湇鍔″櫒鐨勪竴涓彙鎵嬪搷搴斿叾灝辮繘鍏ュ彂閫佸拰鎺ユ敹鏁版嵁鐘舵併傝緗畠鑷繁鐨凪SS涓烘彙鎵嬪搷搴斿寘涓殑鍊煎茍鍒濆鍖栫浉搴旂殑鍙傛暟涓哄寘涓殑鍊鹼紙搴忓垪鍙楓佹渶澶ф祦閲忕獥鍙o級銆傚鏋滄敹鍒頒換浣曞叾浠栫殑鎻℃墜淇℃伅錛屼涪鎺夊畠銆?/p>
濡傛灉鍏朵腑鐨刄DT瀹炰綋瑕佸叧闂紝瀹冨皢鍙戦佷竴涓叧闂俊鎭埌瀵圭錛涘鏂規敹鍒拌繖涓俊鎭互鍚庡皢鑷繁鍏抽棴銆傝繖涓叧闂俊鎭氳繃UDP浼犺緭錛屼粎浠呭彂閫佷竴嬈★紝騫朵笉淇濊瘉涓瀹氭敹鍒般傚鏋滄秷鎭病鏈夋敹鍒幫紝瀵規柟灝嗘牴鎹椂闂存孩鍑烘満鍒舵潵鍏抽棴榪炴帴銆?/p>
3.9. 涓㈠け淇℃伅鐨勫帇緙╂柟妗?br>NAK鍖呬腑鎼哄甫鐨勪涪澶變俊鎭槸涓涓?2-bit鏁存暟鐨勬暟緇勩傚鏋滄暟緇勭殑涓暟瀛楁槸涓涓甯哥殑搴忓彿錛堢1浣嶆槸0錛夛紝榪欐剰鍛崇潃榪欎釜搴忓彿鐨勫寘涓㈠け浜嗭紝濡傛灉絎?浣嶆槸1錛屾剰鍛崇潃浠庤繖涓彿鐮佸紑濮嬶紙鍖呮嫭璇ュ彿鐮侊級鍒頒笅涓涓暟緇勪腑鐨勫厓绱狅紙鍖呮嫭榪欎釜鍏冪礌鍊鹼級涔嬮棿鐨勫寘錛堝畠鐨勭1浣嶅繀欏繪槸0錛夐兘涓㈠け銆?/p>
渚嬪錛屼笅闈㈢殑NAK涓惡甯︾殑淇℃伅錛?/p>
0x00000002, 0x80000006, 0x0000000B, 0x0000000E 涓婇潰鐨勪俊鎭〃鏄庡簭鍙蜂負錛?錛?錛?錛?錛?錛?0錛?1錛?4鐨勫寘閮戒涪浜嗐?/p>
4. 鏁堢巼鍜屽叕騫蟲?br>UDT鑳藉鍏呭垎鍒╃敤褰撳墠鏈夌嚎緗戠粶鐨勭嫭绔嬩簬榪炴帴瀹歸噺鐨勫彲鐢ㄥ甫瀹?銆丷TT銆佸悗鍙板叡瀛樻祦銆佺粰瀹氱殑榪炴帴姣旂壒閿欒鐜囥俇DT鍦ㄦ病鏈夋暟鎹寘涓㈠け鐨勬儏鍐典笅浠?bits/s鍒?0%甯﹀闇瑕佷竴涓父閲忔椂闂達紝榪欎釜鏃墮棿鏄?.5縐掋俇DT騫朵笉閫傚悎鏃犵嚎緗戠粶銆?/p>
UDT鐨勭‘婊¤凍鍗曠摱鍔茬綉緇滄嫇鎵戠殑鏈澶?鏈灝忓叕騫蟲с傚湪澶氫釜鐡跺姴鎯呭喌涓嬶紝鏍規嵁鏈澶ф渶灝忓師鍒欏畠鑳戒繚璇佽緝灝忕摱鍔茶繛鎺ユ垨鑰呰嚦灝戜竴鍗婄殑騫崇瓑鍏變韓(it guarantees that flows over smaller bottleneck links obtain at least half of their fair share according to max-min rule)銆俁TT瀵瑰叕騫蟲ч兘涓鐐瑰獎鍝嶃?/p>
褰撳拰澶у潡鐨凾CP嫻佸叡瀛樼殑鏃跺欙紝TCP鑳藉崰鐢ㄦ瘮UDT鏇村鐨勫甫瀹斤紝闄や簡涓夌鎯呭喌錛?/p>
1錛?nbsp; 緗戠粶BDP闈炲父澶э紝TCP涓嶈兘鍒╃敤浠栦滑鐨勫叕騫沖叡浜甫瀹姐傝繖縐嶆儏鍐典笅錛孶DT灝嗗崰鐢═CP涓嶈兘鍒╃敤鐨勫甫瀹姐?/p>
2錛?nbsp; 榪炴帴瀹歸噺鏄姝ょ殑灝忥紝浠庤屽鑷碪DT鐨勫甫瀹戒及璁℃妧鏈笉鑳芥渶鏈夌殑宸ヤ綔錛涙ā鎷熸樉紺鴻繖涓瀬闄愯繛鎺ュ閲忓ぇ綰︽槸100kb/s銆?/p>
3錛?nbsp; 鍦ㄤ嬌鐢‵IFO闃熷垪浣滀負緗戠粶璺緞鐨勭綉緇滀腑錛屽鏋滈槦鍒楀ぇ灝忓ぇ浜嶣DP錛孴CP鐨勫叡浜甫瀹介殢鐫闃熷垪澶у皬鐨勫鍔犺岄檷浣庛傜劧鑰岋紝鎶佃揪UDT鐨勫叡浜甫瀹芥槸錛岄槦鍒楀ぇ灝忛氬父瓚呰繃瀹為檯璺敱鍣?浜ゆ崲鏈烘彁渚涚殑鏁伴噺銆?/p>
褰撶煭錛坱imewise錛夌被浼紈eb鐨凾CP嫻佸拰灝忕殑騫跺彂UDT嫻佸叡瀛樼殑鏃跺欙紝UDT鍦═CP嫻佷笂鐨勬晥鏋滈潪甯稿皬銆?/p>
鏇村鐨勫垎鏋愬湪[GHG03]銆?/p>
5. 瀹夊叏鑰冭檻 鐒惰岋紝鐢變簬UDP鏄棤榪炴帴鐨勶紝UDT瀹炵幇搴旇媯鏌ユ墍鏈夎揪鍒扮殑鍖呮槸鍚︽槸棰勬湡鐨勬潵婧愩傝繖鏄粠socket鐨凙PI榪炴帴姒傚康涓戶鎵胯屾潵錛屽叾榪炴帴鍙槸鎺ユ敹鎸囧畾鏉ユ簮鐨勬暟鎹?/p>
2.1.3 鏈澶т紶杈撴姤鏂囧ぇ灝忥紙MSS錛?br> TCP鎶ユ枃孌靛湪榪炴帴寤虹珛鏃墮渶瑕侀氭姤MSS錛屽湪TDP鐨勫疄鐜頒腑涔熻繘琛岄氭姤錛岄粯璁ら氭姤涓?460瀛楄妭錛堢鍚堜互澶綉鏍囧噯錛岃繖涓粯璁ゅ煎厑璁?0瀛楄妭鐨処P棣栭儴銆?瀛楄妭鐨刄DP棣栭儴鍜?2瀛楄妭鐨凾DP棣栭儴錛屼互閫傚悎 1500瀛楄妭鐨処P鏁版嵁鎶ワ級榛樿鍊煎彲浠ョ敱鐢ㄦ埛紼嬪簭璁劇疆銆?br> TCP鍦ㄥ绔湴鍧涓洪潪鏈湴IP鏃訛紝榛樿閫氭姤涓?36瀛楄妭銆俆DP涔嬫墍浠ラ粯璁ら氭姤涓?460錛屾槸鍥犱負TDP鍦ㄦ暟鎹紶杈撹繃紼嬩腑錛屽疄鐜頒簡璺緞MTU鍙戠幇鎶鏈紝閫氳繃瀹為檯鍙戠幇鐨凪TU錛岃繘琛孧SS鐨勫姩鎬佽皟鏁達紝浠ュ敖閲忛伩鍏嶆姤鏂囨鍦ㄧ綉緇滀腑鐨勪紶杈撲駭鐢熷垎鐗囩殑鎯呭喌銆傝礬寰凪TU鍙戠幇鎶鏈湪浼犺緭鏁版嵁嫻佷竴鑺備腑榪涜鎻忚堪銆?br>
std::placeholders::_1
鏀圭敤
std::error_code
O浜?img src ="http://www.shnenglu.com/jack-wang/aggbug/229784.html" width = "1" height = "1" />
]]>
]]>
1. 浠嬬粛
闅忕潃緗戠粶甯﹀鏃跺歡浜у搧(BDP)鐨勫鍔狅紝閫氬父鐨凾CP鍗忚寮濮嬪彉鐨勪綆鏁堛傝繖鏄洜涓哄畠鐨凙IMD錛坅dditive increase multiplicative decrease錛夌畻娉曞交搴曞噺灝戜簡TCP鎷ュ紿楀彛錛屼絾涓嶈兘蹇熺殑鎭㈠鍙敤甯﹀銆傜悊璁轟笂鐨勬祦閲忓垎鏋愯〃鏄嶵CP鍦˙DP澧炲姞鍒板緢楂樼殑鏃跺欐瘮杈冨鏄撳彈鍖呮崯澶辨敾鍑匯?/p>
UDT涓昏鐢ㄥ湪灝忔暟閲忕殑bulk婧愬叡浜瘜瑁曞甫瀹界殑鎯呭喌涓嬶紝鏈鍏稿瀷鐨勪緥瀛愬氨鏄緩绔嬪湪鍏夌氦騫垮煙緗戜笂鐨勭綉鏍艱綆楋紝涓浜涚爺絀舵墍鍦ㄨ繖鏍風殑緗戠粶涓婅繍琛屼粬浠殑鍒嗗竷寮忕殑鏁版嵁瀵嗛泦紼嬪簭錛屼緥濡傦紝榪滅▼璁塊棶浠櫒銆佸垎甯冨紡鏁版嵁鎸栨帢鍜岄珮鍒嗚鯨鐜囩殑澶氬獟浣撴祦銆?/p>
3.1. 姒傝堪
UDT鏄弻宸ョ殑錛屾瘡涓猆DT瀹炰綋鏈変袱涓儴鍒嗭細鍙戦佸拰鎺ユ敹銆傚彂閫佽呮牴鎹祦閲忔帶鍒跺拰閫熺巼鎺у埗鏉ュ彂閫侊紙鍜岄噸浼狅級搴旂敤紼嬪簭鏁版嵁銆傛帴鏀惰呮帴鏀舵暟鎹寘鍜屾帶鍒跺寘錛屽茍鏍規嵁鎺ユ敹鍒扮殑鍖呭彂閫佹帶鍒跺寘銆傚彂閫佸拰鎺ユ敹紼嬪簭鍏變韓鍚屼竴涓猆DP绔彛鏉ュ彂閫佸拰鎺ユ敹銆?/p>
3.2. 鍖呯粨鏋?br>UDT鏈変袱縐嶅寘錛氭暟鎹寘鍜屾帶鍒跺寘銆備粬浠氳繃鍖呭ご鐨勭涓浣嶆潵鍖哄垎錛堟爣蹇椾綅錛夈傚鏋滄槸0錛岃〃紺烘槸鏁版嵁鍖咃紝1琛ㄧず鏄帶鍒跺寘銆?/p>
鏁版嵁鍖呯粨鏋勫涓嬫樉紺猴細
鍖呭簭鍙?br>
搴旂敤鏁版嵁
綾誨瀷
淇濈暀
ACK搴忓彿
鎺у埗淇℃伅瀛楁
璇存槑
鎺у埗淇℃伅
000
鍗忚榪炴帴鎻℃墜
1錛?2浣?UDT鐗堟湰
001
淇濇椿
娌℃湁
010
搴旂瓟錛屼綅16-31鏄簲絳斿簭鍙?br> 1錛?2浣嶅寘搴忓彿錛屽厛鍓嶆帴鏀跺埌鐨勫寘搴忓彿
011
Negative搴旂瓟錛圢AK錛?br> 涓㈠け淇℃伅鐨?2浣嶆暣鏁版暟緇勶紝瑙?.9鑺?br>
100
淇濈暀
榪欑綾誨瀷鐨勬帶鍒朵俊鎭繚鐣欎綔涓烘嫢濉炶鍛婁嬌鐢紝浠庢帴鏀跺埌鍙戦佺銆備竴涓嫢濉炶鍛婅兘琚獷CN鎴栧寘寤惰繜澧炲姞瓚嬪娍鐨勫害閲忔柟娉曡Е鍙戙?br>
101
鍏抽棴
110
搴旂瓟涓涓簲絳旓紙ACK2錛?br> 16-31浣嶏紝搴旂瓟搴忓彿銆?br>
111
4-15鐨勮В閲?br> 淇濈暀灝嗘潵浣跨敤
3.4.1. 鏁版嵁緇撴瀯鍜屽彉閲?br>A錛?SND PKT鍘嗗彶紿楀彛錛氫竴涓驚鐜暟緇勮褰曟瘡涓暟鎹寘鐨勫紑濮嬫椂闂?/p>
A錛?鏌ヨ緋葷粺鏃墮棿鏉ユ鏌C銆丄CK銆丯AK銆佹垨EXP瀹氭椂鍣ㄦ槸鍚﹁繃鏈熴傚鏋滀換涓瀹氭椂鍣ㄨ繃鏈燂紝澶勭悊浜嬩歡錛堟湰鑺備笅闈粙緇嶏級騫跺浣嶈繃鏈熺殑瀹氭椂鍣ㄣ?/p>
閫氳繃閫熺巼鎺у埗綆楁硶鏉ユ洿鏂癝TP錛堣3.6鑺傦級銆?/p>
3.6.1. 閫熺巼鎺у埗蹇惎鍔?br>STP琚垵濮嬩負鏈灝忕殑鏃墮棿綺懼害錛?涓狢PU鍛ㄦ湡鎴?姣錛夈傝繖鏄湪蹇惎鍔ㄩ樁孌碉紝涓鑸敹鍒頒竴涓狝CK鍖呭叾鎼哄甫鐨勪及璁″甫瀹藉ぇ浜?榪欎釜闃舵灝卞仠姝簡銆傚寘鐨勫彂閫佸懆鏈熻璁劇疆涓?/W錛學鏄疉CK鎼哄甫鐨勬祦閲忕獥鍙g殑澶у皬銆?/p>
1錛?nbsp; 濡傛灉鍦ㄤ笂涓涓猂CTP鏃墮棿鍐咃紝娌℃湁鏀跺埌涓涓狝CK錛屽仠姝?/p>
3.6.3.1. 鏁版嵁緇撴瀯鍜屽彉閲?br>1錛?nbsp; LSD錛氳嚜涓婃閫熺巼闄嶄綆鍚庡彂閫佺殑鏈澶у簭鍙?/p>
1錛?nbsp; 濡傛灉NAK涓渶澶х殑涓㈠け搴忓垪鍙峰ぇ浜嶭SD錛?/p>
嫻侀噺鎺у埗紿楀彛澶у皬錛圵錛夊垵濮嬪兼槸16銆?/p>
UDT騫舵病鏈変嬌鐢ㄧ壒瀹氱殑瀹夊叏鏈哄埗錛岀浉鍙嶏紝瀹冧緷璧栦簬搴旂敤紼嬪簭鎻愪緵鐨勬巿鏉冨拰搴曞眰鎻愪緵鐨勫畨鍏ㄦ満鍒躲?/p>
6.UDT SOURCE CODE LINK
http://sourceforge.net/projects/dataspace
鏈枃鏉ヨ嚜CSDN鍗氬錛岃漿杞借鏍囨槑鍑哄錛?a >http://blog.csdn.net/windcsn/archive/2006/01/04/570242.aspx
]]>
闅忕潃浜掕仈緗戝簲鐢ㄥ箍娉涙帹騫匡紝鍑虹幇浜嗚秺鏉ヨ秺澶氱殑緗戠粶搴旂敤錛屽叾涓熀浜巔2p鎬濇兂鐨勫悇縐嶇綉緇滄妧鏈殑浜у搧涔熻秺鏉ヨ秺澶氱殑鍑虹幇鍦ㄦ垜浠殑瑙嗛噹褰撲腑銆備粠鏈鏃╅椈鍚嶇殑Napster鍒扮幇鍦ㄧ殑Bittorrent銆乪Mule銆乻kype絳変駭鍝侊紝P2P榪欑緗戠粶搴旂敤妯″紡宸茬粡浠庡悇涓柟闈㈡繁鍏ヤ漢蹇冦傝繖浜涗駭鍝佸湪鍚勮嚜鐨勭綉緇滃疄鐜版妧鏈笂錛岄兘浠ュ悇鑷殑鏂規硶瑙e喅鐫鍚屾牱闈復鐨勪竴涓棶棰橈紝濡備綍璁╀粬浠殑杞歡浜у搧鍦ㄥ悇寮傜殑緗戠粶鎷撴墤緇撴瀯涓『鍒╃殑榪涜P2P閫氫俊銆?br> 浼楁墍鍛ㄧ煡錛屽湪褰撲粖鐨勭綉緇滄嫇鎵戠粨鏋勪腑錛屾櫘閬嶅瓨鍦ㄤ嬌鐢∟AT璁懼鏉ヨ繘琛岀綉緇滃湴鍧杞崲錛岃岃搴旂敤紼嬪簭鑳借法瓚婅繖浜汵AT璁懼榪涜鍏ㄥ弻宸ョ殑閫氫俊錛屽氨鎴愪負闈炲父閲嶈鐨勪竴涓棶棰樸傚浜庡疄鐜拌法瓚奛AT閫氫俊鍙互閲囧彇寰堝縐嶅姙娉曪紙瀵逛簬鑳藉鐩存帴榪炴帴銆佸弽鍚戣繛鎺ョ殑鎯呭喌涓嶅湪姝ゅ垪錛夛細棣栧厛鏄氳繃鏈嶅姟鍣ㄨ繘琛岃漿鍙戯紝榪欐槸姣旇緝綺楁毚鐨勬柟娉曪紝鑰屼笖鍦ㄧ敤鎴烽噺澶х殑鏃跺欙紝杞彂鏈嶅姟鍣ㄩ渶瑕佷粯鍑虹浉褰撳ぇ鐨勪唬浠鳳紱絎簩錛屽彲浠ヤ嬌鐢∟AT絀塊忔妧鏈傝屽ぇ瀹剁煡閬撳叧浜嶯AT絀塊忎腑錛孶DP絀塊忕殑鎴愬姛鐜囨瘮璧稵CP絀塊忚楂樺嚭璁稿錛岃繖涓鐐硅繖閲屽皢涓嶅仛澶氳堪錛屽彲浠ュ弬鑰傿ryan Ford鐨勬枃绔犮奝eer-to-Peer Communication Across Network Address Translators銆嬶紙http://www.brynosaurus.com/pub/net/p2pnat/錛夈傚洜姝ゅ湪UDP鍗忚涓婃瀯寤轟竴浜涘ぇ鍨嬬殑緗戠粶搴旂敤紼嬪簭鍙兘浼氭垚涓哄緢澶氫漢鐨勯渶姹傘?br> 褰撶劧涔熷彲鑳藉熀浜庢洿澶氱殑鍘熷洜錛屼細鏈夊緢澶氫漢甯屾湜鑳藉湪UDP鍗忚涓婅繘琛屽ぇ鍨嬪簲鐢ㄧ▼搴忕殑鏋勫緩銆傜劧鑰孶DP鍗忚鏈韓瀛樺湪鐫涓嶉氫俊涓嶅彲闈犵殑緙虹偣錛屼簬鏄浜庡熀浜嶶DP榪涜鍙潬閫氫俊鐨勯渶姹傚氨嫻幇鍑烘潵浜嗐傜洰鍓嶅湪緗戠粶涓婃湁璁稿浜烘鍋氱潃榪欎竴宸ヤ綔錛孶DT銆丷akNet銆乪Net絳夐兘鏄瀯寤哄湪UDP涔嬪悗緗戠粶鍙潬閫氫俊寮鍙戝簱銆傜劧鍚庤繖浜涘簱寮鍙戞椂閮介拡瀵逛簡涓浜涚壒孌婂簲鐢ㄦ潵榪涜璁捐鐨勶紝涓嶅叿澶囬氱敤鎬с傛瘮濡俁akNet鏄負娓告垙搴旂敤鑰岃璁★紝瀵逛簬瀹炴椂鎬х瓑娓告垙鐩稿叧鐨勭綉緇滈渶姹傛湁寰堝ソ鐨勬敮鎸侊紝瀵逛簬澶ф壒閲忔暟鎹紶杈撳嵈鏈夌偣鍔涙墍涓嶅強銆傝孶DT鍩轟簬涓縐嶅熀浜庡甫瀹介熺巼鎺у埗鐨勬嫢濉炴帶鍒剁畻娉曡繘琛岃璁★紙http://udt.sourceforge.net/doc/draft-gg-udt-01.txt錛夛紝涓昏鐢ㄥ湪灝忔暟閲忕殑bulk婧愬叡浜瘜瑁曞甫瀹界殑鎯呭喌涓嬶紝鏈鍏稿瀷鐨勪緥瀛愬氨鏄緩绔嬪湪鍏夌氦騫垮煙緗戜笂鐨勭綉鏍艱綆楋紝鑰屽湪ISP鎻愪緵甯﹀鏈夐檺鐨勬儏鍐典笅榪愯鍗存樉寰楁秷鑰楄祫婧愬茍鎬ц兘涓嶈凍銆傜敋鑷沖彲鑳借闃茬伀澧欙紝鎴朓SP鏈嶅姟鍟嗗垽鏂負鎭舵剰甯﹀浣跨敤鏀誨嚮銆傝繖浜涢兘浣跨敤寰椾粬浠笉鑳借騫挎硾鍦扮敤浜庡悇縐嶇綉緇滃簲鐢ㄧ▼搴忋傚彟澶栧ぇ瀹朵篃闄嗙畫鍙戠幇鐩墠鐨刄DT瀹炵幇鐗堟湰瀛樺湪鐨勪竴浜涢棶棰樸傛瘮濡俇DT鍋氭湇鍔$鎺ユ敹榪炴帴鏃訛紝鎬繪槸鏂板紑涓涓鍙d笌瀹㈡埛绔繘琛岃繛鎺ワ紝榪欐牱浼氬甫鏉ュ嚑涓棶棰橈細1錛夎緝澶氬鎴風榪炴帴涓婃潵鏃訛紝鏈嶅姟绔柊鎵撳紑鐨勪紬澶氱鍙d腑鍙兘鏈夌殑绔彛浼氳闃茬伀澧欐嫤鎴屽鑷撮氫俊澶辮觸錛?錛夊鏋滃鎴風澶勪簬Symmetric NAT鍜孭ort-Restricted Cone NAT鍚庨潰鏃訛紝灝嗗鑷存湇鍔″櫒绔笌瀹㈡埛绔繛鎺ユ棤娉曟垚鍔熷緩绔嬶紝3錛夌敱浜巙dp绔彛鏁版渶澶у兼湁闄愶紝鎵浠DT鏈嶅姟鍣ㄧ鍙帴鏀剁殑榪炴帴鏁頒篃鍥犱簺鍙楅檺銆傚啀鏈夊氨鏄笉浠呬粎鏄疷DT搴擄紝鍩烘湰涓婃墍鏈夌殑UDP-based鍙潬閫氫俊搴擄紝閮芥湭鎻愪緵絀胯秺proxy浠g悊鐨勫姛鑳斤紙socks5錛夛紱鍐嶆湁灝辨槸瀵筓DP鎵撴礊鎶鏈湁鐨勬敮鎸佸緱涓嶅畬鍠勬垨騫朵笉鏀寔銆?br> 鍩轟簬榪欎簺鍘熷洜錛屼嬌寰楁垜闇瑕佸紑鍙戜竴涓熀浜嶶DP鍗忚涔嬩笂瀹炵幇涓涓彲闈犮侀珮鏁堛侀氱敤鐨勯氫俊搴擄紝鏉ユ弧瓚蟲垜鐩墠鎵寮鍙戠殑欏圭洰鐨勯渶瑕併俆CP鍗忚綆楁硶宸茬粡鏄粡榪囧鏂歸潰鍙婂騫寸殑楠岃瘉錛屾槸鏈鍏烽氱敤鎬э紝涓斿彲闈犻珮鏁堢殑銆傝櫧鐒禪DT絳夊悇縐嶅簱鎸囧嚭TCP鍦ㄨ繖鏍鋒垨閭f牱鐨勭綉緇滅幆澧冧笅瀛樺湪涓嶈凍錛屼絾浼楀瀹炵幇褰撲腑浠栦粛鐒舵槸鏈閫氱敤銆佸彲闈犮侀珮鏁堢殑銆傜浉淇℃湁璁稿浜鴻窡鎴戜竴鏍鳳紝闇瑕佽繖涔堜竴涓紑鍙戝簱錛屾墍浠ユ垜鎵撶畻鍦ㄥ紑鍙戣繃紼嬩腑錛岄檰緇叕寮鐩稿叧鐨勬枃妗e強榪欎釜寮鍙戝簱銆?br>
浜屻佽璁$洰鏍?br>
TDP涓昏鐨勭洰鏍囧氨鏄湪UDP灞備箣涓婂疄鐜癟CP鐨勫崗璁畻娉曪紝浣垮緱搴旂敤紼嬪簭鑳藉鍦║DP灞備箣涓婅幏寰楅氱敤銆佸彲闈犮侀珮鏁堢殑閫氫俊鑳藉姏銆?br> TDP緗戠粶寮鍙戝簱鎵瀹炵幇鐨勭畻娉曪紝閮芥潵鑷箙緇忚冮獙鐨凾CP鍗忚綆楁硶錛岀綉涓婃湁鐫闈炲父澶氱殑鍙傝冭祫鏂欍傚湪瀹炵幇褰撲腑錛屽弬鑰冩渶澶氱殑鏄疪ichard Stevens鐨勩奣CP/IP璇﹁В銆嬨?br> TDP鎻愪緵鐨勭敤浜庡紑鍙戠殑搴旂敤紼嬪簭鎺ュ彛涓嶴ocket API闈炲父鐩稿儚錛屽涓旂О涔嬩負TDP Socket API錛屽熀鏈笂鐨勫嚱鏁板悕涓庡弬鏁扮瓑閮戒笌Socket API鐩鎬竴鑷達紝浣嗘槸TDP Socket API鐨凙PI鎺ュ彛閮戒綅浜庡懡鍚嶇┖闂碩DP褰撲腑銆傚彧瑕佷嬌鐢ㄨ繃Socket API榪涜寮鍙戣繃鐨勬湅鍙嬶紝灝嗛兘浼氫嬌鐢═DP搴撹繘琛屽紑鍙戙備笅鍥句負TDP鍙奣DP Socket API鎵澶勫湪鐨勫崗璁爤搴旂敤涓殑浣嶇疆錛屼互鍙婁笌TCP鍗忚鏍堝簲鐢ㄧ殑瀵規瘮銆?br>
涓夈佸崗璁鏄?br>
1錛庡崗璁牸寮?br>
TDP鐨勫疄鐜扮殑綆楁硶铏界劧涓嶵CP瀹炵幇鐨勭畻娉曟槸澶ц嚧鐩稿悓鐨?浣員DP鐨勫崗璁牸寮忓彧鏄粠TCP鍗忚鏍煎紡鑾峰緱鍙傝冿紝浣嗗茍涓嶅畬鍏ㄤ笌浠栫浉鍚屻俆DP鐨勫崗璁牸寮忓涓嬶細
鎺ヤ笅鏉ヤ粙緇嶄竴涓嬪崗璁牸寮忕殑鍚勪釜瀛楁鍚箟銆?br> 4浣嶉閮ㄩ暱搴︼細琛ㄧず鐢ㄦ埛鏁版嵁鍦ㄦ暟鎹寘涓殑璧峰浣嶇疆銆?br> LIV錛氳繛鎺ヤ繚媧繪爣蹇楋紝鐢ㄤ簬琛ㄧずTDP榪炴帴閫氳礬瀛樻椿鐘舵併?br> ACK錛氱‘璁ゅ簭鍙鋒湁鏁堛?br> PSH錛氭帴鏀舵柟搴旇灝藉揩灝嗚繖涓姤鏂囨浜ょ粰搴旂敤灞傘?br> RST錛氶噸寤鴻繛鎺ャ?br> SYN錛氬悓姝ュ簭鍙風敤鏉ュ彂璧蜂竴涓繛鎺ャ?br> FIN錛氬彂绔畬鎴愬彂閫佷換鍔°?br> 16浣嶇獥鍙eぇ灝忥細鎺ユ敹绔彲鎺ユ敹鏁版嵁鐨勭獥鍙eぇ灝忋?br> 閫夐」錛氬彧鏈変竴涓夐」瀛楁錛屼負鏈闀挎姤鏂囧ぇ灝忥紝鍗矼SS銆俆DP閫夐」鏍煎紡涓嶵CP閫夐」鏍煎紡涓鑷達紝kind=0鏃惰〃紺洪夐」緇撴潫錛宬ind=1鏃惰〃紺烘棤鎿嶄綔錛宬ind=2鏃惰〃紺烘渶澶ф姤鏂囨闀垮害銆傚涓嬪浘錛?br>
鏁版嵁錛氱敤鎴烽氳繃TDP浼犺緭鐨勬暟鎹?br>
2錛嶵DP榪炴帴寤虹珛涓庣粓姝?br>
TDP鐨勮繛鎺ュ緩绔嬩笌緇堟鍙互鍙傝僒CP鐨勭姸鎬佸彉榪佸浘(姝ゅ浘鐨勮緇嗚В閲婅鍙傝冦奣CP/IP璇﹁В 鍗蜂竴銆嬬18绔?錛屽涓嬶細
2.1榪炴帴寤虹珛
2.1.1涓夋鎻℃墜
榪炴帴寤虹珛鍒嗚緇忚繃涓夋鎻℃墜榪囩▼錛?)瀹㈡埛绔彂閫佷竴涓猄YN孌靛埌鎸囨槑瀹㈡埛鎵撶畻榪炴帴鐨勬湇鍔″櫒鐨勭鍙o紝鎶ユ枃孌典腑瑕佽緗鎴風鍒濆搴忓彿銆?錛夋湇鍔″櫒鍙戝洖鍖呭惈鏈嶅姟鍣ㄧ殑鍒濆搴忓彿鐨凷YN鎶ユ枃孌典綔涓哄簲絳斻傚悓鏃訛紝灝嗙‘璁ゅ簭鍙瘋緗負瀹㈡埛鐨勫垵濮嬪簭鍙峰姞1,騫惰緗瓵CK浣嶆爣蹇楁姤鏂囨涓虹‘璁ゆ姤鏂囨銆?錛夊鎴風蹇呴』灝嗙‘璁ゅ簭鍙瘋緗負鏈嶅姟鍣ㄥ垵濮嬪簭鍙峰姞1,瀵規湇鍔″櫒鐨凷YN鎶ユ枃孌佃繘琛岀‘璁ゃ?br> TDP鍦ㄥ叏灞緇存姢涓涓垵濮嬪簭鍙風瀛愶紝榪欎釜鍒濆搴忓彿涓洪殢鏃朵駭鐢熺殑32浣嶆暣鏁般?br> 榪炴帴寤虹珛鐨勮秴鏃跺拰閲嶄紶鍒濆鍊間負3縐掞紝瓚呮椂閲囩敤鎸囨暟閫閬跨畻娉曪紝3縐掕秴鏃跺悗瓚呮椂鍊間負6縐掞紝鐒跺悗鏄?2縐掞紝24縐?#8230;…銆傝繛鎺ュ緩绔嬫渶闀挎椂闂撮檺鍒朵負75縐掋?br>
2.1.2 NAT UDP PUNCH妯″紡
褰揟DP宸ヤ綔妯″紡鏄疦AT UDP PUNCH鏃訛紝鍦ㄤ笁嬈℃彙鎵嬩箣鍓嶏紝鍚戝绔疦AT绔彛鍙婇嫻嬬鍙i棿闅旈粯璁?ms鍙戦侀粯璁や負10涓狶IV鎶ユ枃孌碉紝涓鏉ョ敤浜庢墦寮鑷凡鐨凬AT绔彛錛屼簩鏉ユ槸鐢ㄤ簬榪涘叆瀵圭NAT绔彛銆傞粯璁ゅ煎彲浠ョ敱鐢ㄦ埛紼嬪簭璁劇疆銆傝繖鏃剁殑LIV鎶ユ枃孌典腑鍒濆搴忓彿鍙婄‘璁ゅ簭鍙烽兘涓?銆?br> 褰撴帴鏀跺埌瀵圭LIV鎶ユ枃孌靛悗錛岀珛鍗沖仠姝IV鎶ユ枃孌靛彂閫侊紝鍙戝嚭SYN鎶ユ枃孌佃繘琛岃繛鎺ュ緩绔嬨傝繖鏃舵湁涓ょ鍙兘錛氬叾涓鏄彟涓绔洿鍒版帴鏀跺埌璇YN鎶ユ枃孌典箣鍓嶏紝閮芥病鏈夋帴鏀跺埌LIV鎶ユ枃孌碉紝鎴栨槸鍒氭帴鏀跺埌浣嗘病鏈夋潵寰楀強鍙戦丼YN鎶ユ枃孌碉紝姝ゆ椂灝嗕細濡備笂鏂囨弿榪扮殑姝e父妯″紡涓嬭繛鎺ュ緩绔嬬殑榪囩▼涓鑷達紝灝嗙粡鍘嗕笁嬈℃彙鎵嬨傚熀浜屾槸鍙︿竴绔湪鎺ユ敹鍒拌SYN鎶ユ枃孌典箣鍓嶏紝涔熷凡緇忓彂閫佸嚭SYN鎶ユ枃孌碉紝姝ゆ椂鍙屾柟閮介渶瑕佸SYN鎶ユ枃孌佃繘琛岀‘璁わ紝鍙互縐頒箣涓哄洓嬈℃彙鎵嬨?
2.1.4 鍗婃墦寮榪炴帴鍙婅繛鎺ヤ繚媧?br> 鍗婃墦寮榪炴帴鏄寚瀵圭寮傚父鍏抽棴錛屽緗戠嚎鎷旀帀銆佺獊鐒舵柇鐢電瓑鎯呭喌灝嗗紩鍙戜竴绔婕斿叧闂紝鑰屽彟涓绔殑榪炴帴鍗翠粛鐒惰涓鴻繛鎺ュ浜庢墦寮褰撲腑錛岃繖縐嶆儏鍐電О涔嬩負鍗婃墦寮榪炴帴銆俆DP涓殑涓涓猅DP SOCKET鎻忚堪絎︾敱鏈湴IP銆佹湰鍦扮鍙c佽繙绔疘P銆佽繙绔鍙e敮涓紜畾銆傚綋榪滅瀹㈡埛绔繛鎺ヨ姹傚埌鏉ユ椂錛屾湇鍔$灝嗘帴鏀跺埌涓涓柊鐨凾DP SOCKET鎻忚堪絎︼紝褰撹繖涓涓弿榪扮鍞竴紜畾淇℃伅宸茬粡瀛樺湪鏃訛紝瀵規柊鐨勮繛鎺ヨ姹傚彂閫丷ST鎶ユ枃孌碉紝閫氱煡鍏墮噸緗繛鎺ヨ姹傘傚浜庢棫鐨勮繛鎺ワ紝鐢變繚媧繪満鍒惰嚜鍔ㄥ彂鐜版槸鍚︿負鍗婃墦寮榪炴帴錛屽鏋滄槸鍗婃墦寮榪炴帴錛屽垯鑷姩鍏抽棴璇ヨ繛鎺ャ傝繖閲孯ST鎶ユ枃孌典笌TCP涓殑RST鎶ユ枃孌墊湁浜涗笉涓鏍鳳紝TCP鐨凴ST鎶ユ枃孌靛伐浣滄弿榪拌鍙傝冦奣CP/IP璇﹁В 鍗蜂竴銆嬨?br> 榪炴帴寤虹珛涔嬪悗錛孴DP榪炴帴闇瑕佸惎鍔ㄤ繚媧繪満鍒躲俆CP榪炴帴鍦ㄦ病鏈夋暟鎹氫俊鐨勬儏鍐典笅涔熻兘淇濇寔榪炴帴錛屼絾TDP榪炴帴涓嶈銆俆DP榪炴帴鍦ㄤ竴瀹氭椂闂存鍐呭鏋滄病鏈夋暟鎹氦浜掔殑璇濓紝灝嗕富鍔ㄥ彂閫佷繚媧籐IV鎶ユ枃孌點傝繖涓椂闂存鏍規嵁TDP榪炴帴宸ヤ綔妯″潡涓嶅悓鏈夋墍宸紓錛屽湪NAT UDP PUNCH妯″紡涓嬶紝榪欎釜鏃墮棿孌甸粯璁ゅ間負1鍒嗛挓錛堝ぇ澶氭暟鐨凬AT涓紝UDP浼氳瘽瓚呮椂鏃墮棿涓?錛?鍒嗛挓宸﹀彸錛夛紱鑰屽湪甯歌妯″潡涓嬭繖涓椂闂存榛樿鍊間負5鍒嗛挓銆傞粯璁ゅ煎彲浠ョ敱鐢ㄦ埛紼嬪簭璁劇疆錛岀敤鎴風▼搴忛渶瑕佹寚鏄庝袱縐嶆ā鍧椾笅鐨勪繚媧繪椂闂村懆鏈熴傝繖閲孴DP鐨勪繚媧繪満鍒朵笌TCP涓殑淇濇椿鏈哄埗瀹屽叏涓嶄竴鏍鳳紝TCP鐨勪繚媧繪満鍒舵弿榪拌鍙傝冦奣CP/IP璇﹁В 鍗蜂竴銆嬨?br>
2.2榪炴帴鍏抽棴
TDP榪炴帴涓嶵CP榪炴帴涓鏍鋒槸鍏ㄥ弻宸ョ殑錛屽洜姝ゆ瘡涓柟鍚戝繀欏誨崟鐙湴榪涜鍏抽棴銆傚鎴鋒満緇欐湇鍔″櫒涓涓狥IN鎶ユ枃孌碉紝鐒跺悗鏈嶅姟鍣ㄨ繑鍥炵粰瀹㈡埛绔竴涓‘璁CK鎶ユ枃錛屽茍涓斿彂閫佷竴涓狥IN鎶ユ枃孌碉紝褰撳鎴鋒満鍥炲ACK鎶ユ枃鍚庯紙鍥涙鎻℃墜錛夛紝榪炴帴灝辯粨鏉熶簡銆?br> TDP榪炴帴鐨勪竴绔帴鏀跺埌FIN鎶ユ枃孌墊椂錛屽鏋滆繕鏈夋暟鎹鍙戦侊紝闇瑕佺戶緇皢鏁版嵁榪涜鍙戦佸畬鎴愶紝鐒跺悗鎵嶅彂鍑篎IN鎶ユ枃孌碉紱濡傛灉榪樻湁鏁版嵁鏈粠緙撳瓨涓彇鍑猴紝灝嗗彇鍑烘暟鎹紝騫惰繘琛岀‘璁わ紝鐩村埌鎵鏈夌‘璁ゅ畬鎴愪箣鍚庯紝鐒跺悗鎵嶅彂鍑篎IN鎶ユ枃孌碉紙姝ゆ椂濡傛灉鏈変貢搴忕殑鎶ユ枃孌墊儏鍐典笉榪涜澶勭悊錛夈備笂闈㈢殑鎻忚堪涔熻〃鐜板嚭錛孴DP鏄敮鎸佸崐鍏抽棴鐨勶紝褰撲竴绔彂鍑篎IN鎶ユ枃孌墊椂錛屼粛鐒跺厑璁告帴鏀跺彟涓绔暟鎹備絾鏄崐鍏抽棴鍙兘瀵艱嚧榪炴帴姘歌繙鍋滅暀鍦ㄧ姸鎬佸浘涓璅IN_WAIT_2鐘舵佷腑錛屾鏃朵繚媧繪満鍒朵粛鐒跺湪宸ヤ綔褰撲腑錛屽鏋滃绔凡緇忓叧闂紝閭d箞淇濇椿鏈哄埗灝嗗湪媯嫻嬪埌鏃剁珛鍗沖叧闂繖涓榪炴帴銆?br>
涓嬪浘鏄竴涓吀鍨嬬殑榪炴帴寤虹珛涓庤繛鎺ュ叧闂殑紺烘剰鍥撅紝姝ゅ浘鎽樿嚜銆奣CP/IP璇﹁В 鍗蜂竴銆嬨?br>
鍥涖乀DP浼犺緭鏁版嵁嫻?br>
1錛庝紶杈撶殑鎶ユ枃孌?br>
鍦═DP宸ヤ綔榪囩▼涓紶杈撶殑鎵鏈夋姤鏂囨錛屽彧鏈塖YN鎶ユ枃孌點丗IN鎶ユ枃孌點佹暟鎹姤鏂囨鏄彲闈犵殑涔嬪錛屽叾瀹冩姤鏂囨濡侫CK鎶ユ枃孌點丩IV鎶ユ枃孌點丷ST鎶ユ枃孌電瓑閮戒笉鏄彲闈犵殑銆係YN鎶ユ枃孌典笌FIN鎶ユ枃孌典紶杈撲腑閮藉崰鐢ㄤ竴涓簭鍙鳳紝鏁版嵁鎶ユ枃孌靛湪浼犺緭涓牴鎹紶杈撶殑鏁版嵁瀛楄妭鏁板崰鐢ㄧ浉搴旂殑搴忓彿錛屽叾瀹冩姤鏂囨涓嶅崰鐢ㄤ紶杈撳簭鍙楓?br> 鎴愬姛鎺ユ敹鏁版嵁鎶ユ枃孌碉紝搴斿綋灝嗘寜搴忓涓嬩竴涓湡鏈涚殑鏁版嵁鎶ユ枃孌電殑搴忓彿浣滀負紜搴忓彿鍙戦丄CK鎶ユ枃孌佃繘琛岀‘璁ゃ傚綋鍑虹幇鎺ユ敹鍒頒貢搴忕殑鏁版嵁鎶ユ枃孌墊椂錛屽皢涔卞簭鏁版嵁鎶ユ枃孌墊寜搴忕紦瀛橈紝騫跺彂閫佹湡鏈涙姤鏂囨鐨凙CK鎶ユ枃孌佃繘琛岀‘璁ゃ侫CK鎶ユ枃孌電殑鍙戦佸茍闈炲嵆鏃剁殑錛屼篃騫墮潪鏄搴旀帴鏀舵暟鎹姤榪涜涓瀵逛竴紜鍙戦併侫CK鎶ユ枃孌電敱200ms瀹氭椂瑙﹀彂鍙戦侊紝涔熷氨鏄ACK鎶ユ枃孌佃緇忓彈鏈澶?00ms鐨勬椂寤惰繘琛屽彂閫併侫CK鎶ユ枃孌靛姝ゆ椂鏈熸湜鐨勬暟鎹簭鍙瘋繘琛岀‘璁わ紝鍥犳騫朵笉鏄笌鎺ユ敹鏁版嵁鎶ョ浉瀵瑰簲銆侫CK鎶ユ枃孌墊槸涓嶅彲闈犵殑錛屽綋涓㈠け鏃跺绔皢鏃犳硶浜嗚В鎺ユ敹鎯呭喌錛屽洜姝ゅ彂閫佹柟灝嗕細鏈変竴涓秴鏃舵満鍒訛紝濡傛灉鍙戠幇紜鐨凙CK鎶ユ枃孌佃秴鏃訛紝鍙戦佹柟灝嗛噸鍙戣鏁版嵁鎶ワ紝榪欎竴鐐瑰湪絎簲鑺傝繘琛岃緇嗘弿榪般?br>
2錛庤礬寰凪TU鍙戠幇鍙奙SS閫氬憡
鍓嶉潰宸茬粡鎻愬埌瑕佸湪榪炴帴寤虹珛榪囩▼涓細閫氬憡鍒濆MSS錛岃繖涓煎彲浠ョ敱鐢ㄦ埛紼嬪簭榪涜璁劇疆銆備絾榪欎釜鍒濆鍊兼槸涓涓潤鎬佺殑銆傚綋閫氫俊鐨勪袱涓鐐逛箣闂磋法瓚婂涓綉緇滄椂錛屼嬌鐢ㄨ緗殑MSS榪涜鎶ユ枃孌靛彂閫佹椂錛屽彲鑳藉鑷翠紶杈撶殑IP鎶ユ枃鍒嗙墖鎯呭喌鐨勪駭鐢熴備負浜嗛伩鍏嶅垎鐗囨儏鍐電殑浜х敓錛孴DP鍦ㄦ暟鎹紶杈撹繃紼嬩腑榪涜鍔ㄦ佺殑璺緞MTU鍙戠幇錛屽茍榪涜MSS鐨勬洿鏂板強閫氬憡銆?br> TDP鍒涘緩UDP SOCKET鏃訛紝鍗沖皢鎻忚堪絎﹁緗甀P閫夐」涓轟笉鍏佽榪涜鍒嗙墖錛坰etsockopt (clientSock, IPPROTO_IP, IP_DONTFRAGMENT,(char*)&dwFlags, sizeof(dwFlags))錛夈傚湪鍙戦佹暟鎹椂浠ュ綋鍓峂SS澶у皬鍊艱繘琛屾暟鎹彂閫侊紝濡傛灉榪斿洖鍊間負閿欒鐮乄SAEMSGSIZE錛?0040錛夎〃紺轟負鎶ユ枃孌靛敖瀵稿ぇ浜嶮TU錛岄渶瑕佽繘琛孖P鍒嗙墖浼犺緭銆傛鏃訛紝緙╁噺MSS澶у皬鍐嶆榪涜鎶ユ枃孌靛彂閫侊紝鐩磋嚦涓嶅啀榪斿洖閿欒鐮乄SAEMSGSIZE錛?0040錛夈傚綋MSS鍙樻洿騫惰兘鎴愬姛鍙戦佹姤鏂囨鍚庯紝闇瑕佸悜瀵圭閫氭姤鏂扮殑MSS鍊箋傛瘡嬈SS緙╁皬鍚庯紝榛樿闅?0縐掞紝TDP灝嗛粯璁ゆ墿澶SS澶у皬錛屼互媯鏌ユ槸鍚﹁礬寰凪TU澧炲ぇ浜嗭紙榛樿鍊煎彲浠ョ敱鐢ㄦ埛紼嬪簭璁劇疆錛夛紝涔嬪悗闅?0*2縐掋?0*2*2縐掕繘琛屾嫻嬶紝濡傛灉涓夋閮芥湭鍙戠幇MTU澧炲ぇ鍒欏仠姝㈣繘琛屾嫻嬨傝RFC1191鎻忚堪錛岀綉緇滀腑MTU鍊肩殑涓暟鏄湁闄愮殑錛屽涓嬪浘鎻忚堪錛堟憳鑷猂FC1191錛夈傚洜姝SS鐨勬墿澶у強緙╁噺錛屽彲渚濇嵁涓浜涚敱榪戜技鍊兼寜搴忔瀯鎴愮殑琛紝渚濈収姝よ〃绱㈠紩榪涜MSS鍊肩殑鎵╁ぇ涓庣緝鍑忚綆椼?br>
TDP涓璏SS涓嶮TU涔嬮棿鍏崇郴鐨勮綆楀叕寮忓涓嬶細
MSS = MTU – 20(IP棣栭儴) – 8(UDP棣栭儴) – 12(TDP棣栭儴)銆?br>
3錛嶯agle綆楁硶
鏈変簺浜鴻璁や負緇忓彈鏃跺歡鐨勬崕甯CK鍙戦佹槸Nagle綆楁硶錛屽叾瀹炰笉鏄傜粡鍙楁椂寤剁殑鎹庡甫ACK鍙戦佹槸TCP鐨勯氬父瀹炵幇錛屽湪TDP涓篃鏄姝ゃ傝孨agle綆楁硶鏄姹備竴涓猅CP錛圱DP涔熸槸濡傛錛夎繛鎺ヤ笂鏈澶氬彧鑳芥湁涓涓湭琚‘璁ょ殑鏈畬鎴愮殑鎶ユ枃孌碉紝鍦ㄨ鎶ユ枃孌電殑紜鍒拌揪涔嬪墠涓嶈兘鍙戦佸叾浠栫殑鎶ユ枃孌點傜浉鍙嶏紝TCP錛圱DP涔熸槸濡傛錛夊湪榪欎釜鏃跺欐敹闆嗚繖浜涙姤鏂囨錛屽叧鍦ㄧ‘璁ゅ埌鏉ユ椂鍚堝茍浣滀負涓涓姤鏂囨鍙戦佸嚭鍘匯侼agle綆楁硶瀵逛簬澶勭悊搴旂敤紼嬪簭浜х敓澶ч噺灝忔姤鏂囨鐨勬儏鍐碉紝鏈夊埄浜庨伩鍏嶇綉緇滀腑鐢變簬鍙戦佸お澶氱殑鍖呰岃繃杞斤紙榪欎究鏄彂閫佺鐨勭硦娑傜獥鍙g患鍚堢棁錛屽叧浜庣硦娑傜獥鍙g患鍚堢棁鍦ㄤ笅鏂囧皢鍋氭洿璇︾粏鎻忚堪錛夈?br> Nagle綆楁硶閫傜敤浜庝駭鐢熷ぇ閲忓皬鎶ユ枃孌電殑鎯呭喌錛屼絾鏈夋椂鎴戜滑闇瑕佸叧闂璑agle綆楁硶銆備竴涓吀鍨嬬殑渚嬪瓙鏄疿紿楀彛緋葷粺鏈嶅姟鍣細灝忔秷鎭紙榧犳爣縐誨姩錛夊繀欏繪棤鏃跺歡鍦板彂閫侊紝浠ヤ究涓鴻繘琛屾煇縐嶆搷浣滅殑浜や簰鐢ㄦ埛鎻愪緵瀹炴椂鐨勫弽棣堛?br> 榛樿鐨凾DP瀹炵幇涓璑agle綆楁硶鏄叧闂殑錛岀敤鎴風▼搴忓彲浠ヨ緗墦寮瀹冦?br>
4錛庣獥鍙eぇ灝忛氬憡涓庢粦鍔ㄧ獥鍙?br>
鍙屾柟鎺ユ敹妯″潡闇瑕佷緷鎹悇鑷殑緙撳啿鍖哄ぇ灝忥紝鐩鎬簰閫氬憡榪樿兘鎺ュ彈瀵規柟鏁版嵁鐨勫昂瀵搞傚弻鏂瑰彂閫佹ā鍧楀垯蹇呴』鏍規嵁瀵規柟閫氬憡鐨勬帴鏀剁獥鍙eぇ灝忥紝榪涜鏁版嵁鍙戦併傝繖縐嶆満鍒剁О涔嬭皳婊戝姩紿楀彛錛屽畠鏄疶DP鎺ユ敹鏂圭殑嫻侀噺鎺у埗鏂規硶銆傚畠鍏佽鍙戦佹柟鍦ㄥ仠姝㈠茍絳夊緟紜鍓嶅彲浠ヨ繛緇彂閫佸涓垎緇勶紙渚濇嵁婊戝姩紿楀彛鐨勫ぇ灝忥級錛岀敱浜庡彂閫佹柟涓嶅繀姣忓彂涓涓垎緇勫氨鍋滀笅鏉ョ瓑寰呯‘璁わ紝鍥犳鍙互鍔犻熸暟鎹殑浼犺緭銆?br> 鍙傜収銆奣CP/IP璇﹁В 鍗蜂竴 20.3婊戝姩紿楀彛銆嬩竴鑺傦紝婊戝姩紿楀彛鍦ㄦ帓搴忔暟鎹祦涓婁笉鏃剁殑鍚戝彸縐誨姩錛岀獥鍙d袱涓竟娌跨殑鐩稿榪愬姩澧炲姞鎴栧噺灝戜簡紿楀彛鐨勫ぇ灝忥紝鍏充簬紿楀彛杈規部鐨勮繍鍔ㄦ湁涓変釜鏈錛氱獥鍙e悎鎷紙褰撳乏杈規部鍚戝彸杈規部闈犺繎錛夈佺獥鍙e紶寮錛堝綋鍙寵竟娌垮悜鍙崇Щ鍔級銆佺獥鍙f敹緙╋紙褰撳彸杈規部鍚戝乏縐誨姩錛夈俁FC鏂囨。寮虹儓寤鴻涓嶈鍦ㄥ疄鐜板綋涓嚭鐜扮獥鍙f敹緙╃殑鎯呭喌鍑虹幇錛屽湪鎴戜滑鐨勫疄鐜頒腑涔熷皢涓嶄細鍑虹幇銆?br> 褰撻亣鍒板揩鐨勫彂閫佹柟涓庢參鐨勬帴鏀舵柟鐨勬儏鍐墊椂錛屾帴鏀舵柟鐨勭獥鍙d細寰堝揩琚彂閫佹柟鐨勬暟鎹~婊★紝姝ゆ椂鎺ユ敹鏂瑰皢閫氬憡紿楀彛澶у皬涓?,鍙戦佹柟鍒欏仠姝㈠彂閫佹暟鎹傜洿鍒版帴鏀舵柟鐢ㄦ埛紼嬪簭鍙栬蛋鏁版嵁鍚庢洿鏂扮獥鍙eぇ灝忥紝鍙戦佹柟鍙互緇х畫鍙戦佹暟鎹紱鍙﹀錛屽洜涓篈CK鎶ユ枃孌墊湁鍙兘涓㈠け錛屽彂閫佹柟鍙兘娌℃湁鎴愬姛鎺ユ敹鍒版洿鏂扮殑紿楀彛澶у皬錛屽洜姝ゅ彂閫佹柟灝嗗惎鍔ㄤ竴涓潥鎸佸畾鏃跺櫒錛屽綋鍧氭寔瀹氭椂鍣ㄨ秴鏃訛紝鍙戦佹柟灝嗗彂閫佷竴涓瓧鑺傜殑鏁版嵁鍒版帴鏀舵柟錛屽皾璇曟鏌ョ獥鍙eぇ灝忕殑鏇存柊銆?br> 鍦∟agle綆楁硶涓帴鍒拌繃緋婃秱紿楀彛緇煎悎鐥囷紝鍦ㄨ繖閲岃榪涗竴姝ヨ繘琛屾弿榪般傜硦娑傜獥鍙g患鍚堢棁鏄寚浼楀灝戦噺鏁版嵁鐨勬姤鏂囨灝嗛氳繃榪炴帴榪涜浜ゆ崲錛岃屼笉鏄弧闀垮害鐨勬姤鏂囨錛岃繖灝嗗鑷磋繛鎺ュ崰鐢ㄨ繃澶氬甫瀹斤紝闄嶄綆浼犺緭閫熺巼銆傜硦娑傜獥鍙g患鍚堢棁浜х敓鏄垎涓ょ鐨勶紝鎺ユ敹鏂瑰彲浠ラ氬憡涓涓皬鐨勭獥鍙o紙鑰屼笉鏄竴鐩寸瓑鍒版湁澶х殑紿楀彛鏃舵墠閫氬憡錛夛紝鍙戦佹柟涔熷彲浠ュ彂閫佸皯閲忕殑鏁版嵁錛堣屼笉鏄瓑寰呭叾浠栫殑鏁版嵁浠ヤ究鍙戦佷竴涓ぇ鐨勬姤鏂囨錛夈傝浠ラ噰鐢ㄥ涓嬫柟娉曢伩鍏嶈繖涓鐜拌薄錛?br> 1錛夋帴鏀舵柟涓嶉氬憡灝忕獥鍙c傞氬父鐨勭畻娉曟槸鎺ユ敹鏂逛笉閫氬憡涓涓瘮褰撳墠紿楀彛澶х殑紿楀彛錛堝彲浠ヤ負0錛夛紝闄ら潪紿楀彛鍙互澧炲姞涓涓姤鏂囨澶у皬(涔熷氨鏄皢瑕佹帴鏀剁殑MSS)鎴栬呭彲浠ュ鍔犵紦瀛樼┖闂寸殑涓鍗婏紝涓嶈瀹為檯鏈夊灝戙?br> 2錛夊彂閫佹柟閬垮厤鍑虹幇緋婃秱紿楀彛緇煎悎鐥囩殑鎺柦鏄彧鏈変互涓嬫潯浠朵箣涓婊¤凍鏃舵墠鍙戦佹暟鎹細(a)鍙互鍙戦佷竴涓弧闀垮害鐨勬姤鏂囨錛?b)鍙互鍙戦佽嚦灝戞槸鎺ユ敹鏂歸氬憡紿楀彛澶у皬涓鍗婄殑鎶ユ枃孌碉紱(c)鍙互鍙戦佷換浣曟暟鎹茍涓斾笉甯屾湜鎺ユ敹ACK錛堜篃灝辨槸璇達紝鎴戜滑娌℃湁榪樻湭琚‘璁ょ殑鏁版嵁錛夋垨鑰呰榪炴帴涓婁笉鑳戒嬌鐢∟agle綆楁硶銆?br>
5錛嶱USH鏍囧織
PSUH鏍囧織鐨勪綔鐢ㄦ槸鍙戦佹柟浣跨敤PUSH鏍囧織閫氱煡鎺ユ敹鏂瑰皢鎵鏀跺埌鐨勬暟鎹叏閮ㄦ彁浜ょ粰鎺ユ敹榪涚▼銆傚湪TDP瀹炵幇涓紝鐢ㄦ埛紼嬪簭騫朵笉闇瑕佸叧蹇働USH鏍囧織銆傚洜涓篢DP瀹炵幇浠庝笉灝嗘帴鏀跺埌鐨勬暟鎹帹榪熶氦浠樼粰鐢ㄦ埛紼嬪簭錛屽洜姝よ繖涓爣蹇楀湪TDP鐨勫疄鐜頒腑鏄蹇界暐鐨勩?br>
浜斻乀DP瓚呮椂涓庨噸浼?br>
1錛庡甫瀹芥椂寤朵箻縐笌鎷ュ
姣忎釜緗戠粶閫氶亾閮芥湁涓瀹氱殑瀹歸噺錛屽彲浠ヨ綆楅氶亾鐨勫閲忓ぇ灝忥細
Capacity(bit) = bandwidth(b/s) * round-trip time(s)
榪欎釜鍊間竴鑸О涔嬩負甯﹀鏃跺歡涔樼Н銆傝繖涓間緷璧栦簬緗戠粶閫熷害鍜屼袱绔殑RTT錛屽彲浠ユ湁寰堝ぇ鐨勫彉鍔ㄣ備笉璁烘槸甯﹀榪樻槸鏃跺歡鍧囦細褰卞搷鍙戦佹柟涓庢帴鏀舵柟涔嬮棿閫氳礬鐨勫閲忋?br> 褰撴暟鎹埌杈句竴涓ぇ鐨勭綉緇滈氶亾騫跺悜涓涓皬鐨勭綉緇滈氶亾鍙戦侊紝灝嗗彂鐢熸嫢濉炵幇璞°傚彟澶栧綋澶氫釜杈撳叆嫻佸埌杈句竴涓礬鐢卞櫒錛岃岃礬鐢卞櫒鐨勮緭鍑烘祦灝忎簬榪欎簺杈撳叆嫻佺殑鎬誨拰鏃朵篃浼氬彂鐢熸嫢濉炪俆DP瓚呮椂涓庨噸浼犳満鍒跺垰閲囩敤TCP鐨勬嫢濉炴帶鍒剁畻娉曟潵榪涜鍙戦佺鐨勬祦閲忔帶鍒躲?br>
2錛庡線榪旀椂闂翠笌閲嶄紶瓚呮椂鏃墮棿嫻嬮噺
瓚呮椂涓庨噸浼犱腑鏈閲嶈鐨勯儴鍒嗗氨鏄涓涓粰瀹氳繛鎺ョ殑寰榪旀椂闂達紙RTT錛夌殑嫻嬮噺銆傜敱浜庤礬鐢卞櫒鍜岀綉緇滄祦閲忓潎浼氬彂鐢熷彉鍖栵紝鍥犳涓鑸涓篟TT鍙兘緇忓父浼氬彂鐢熷彉鍖栵紝TDP搴旇璺熻釜榪欎簺鍙樺寲騫剁浉搴斿湴鏀瑰彉鐩稿簲鐨勮秴鏃舵椂闂淬?br> 棣栧厛鏄繀欏繪祴閲忓湪鍙戦佷竴涓甫鏈夌壒鍒簭鍙風殑瀛楄妭鍜屾帴鏀跺埌鍖呭惈瀛楄妭鐨勭‘璁や箣闂寸殑RTT銆傜敱浜庢暟鎹姤鏂囨涓嶢CK涔嬮棿閫氬父娌℃湁涓涓瀵瑰簲鐨勫叧緋伙紝濡備笅鍥撅紙鎽樿嚜銆奣CP/IP璇﹁В 鍗蜂竴銆嬪浘20.1錛変腑錛岃繖鎰忓懗鐫鍙戦佹柟鍙互嫻嬮噺鍒扮殑涓涓猂TT錛屾槸鍦ㄥ彂閫佹姤鏂囨4鍜屾帴鏀舵姤鏂囨7涔嬮棿鐨勬椂闂達紝鐢∕琛ㄧず鎵嫻嬮噺鍒扮殑RTT銆?br> 鏍規嵁[Jacobson 1988]鎻忚堪錛堣銆奣CP/IP璇﹁В 鍗蜂竴銆嬪弬鑰冩枃鐚級錛岀敤A琛ㄧず琚鉤婊戠殑RTT錛堝潎鍊間及璁″櫒錛夛紝鐢―琛ㄧず琚鉤婊戠殑鍧囧煎亸宸紝鐢‥rr琛ㄧず鍒氬緱鍒扮殑嫻嬮噺緇撴灉M涓庡綋鍓峈TT浼拌鍣ㄤ箣宸紝鍒欏彲浠ヨ綆椾笅涓涓秴鏃墮噸浼犳椂闂達紙鐢≧TO琛ㄧず涓嬩竴涓秴鏃墮噸浼犳椂闂達級銆?br> A = 0 錛堟湭榪涜嫻嬮噺寰榪旀椂闂翠箣鍓嶏紝A鐨勫垵濮嬪鹼級
D = 3 錛堟湭榪涜嫻嬮噺寰榪旀椂闂翠箣鍓嶏紝D鐨勫垵濮嬪鹼級
RTO = A + 2D = 6 錛堟湭榪涜嫻嬮噺寰榪旀椂闂翠箣鍓嶏紝RTO鐨勫垵濮嬪鹼級
A = M + 0.5 (絎竴嬈℃祴閲忓埌寰榪旀椂闂寸粨鏋滐紝瀵筊TT浼拌鍣ㄨ綆楀垵濮嬪?
D = A / 2 錛堢涓嬈℃祴閲忓埌寰榪旀椂闂寸粨鏋滐紝瀵瑰潎鍊煎亸宸瓺璁$畻鍒濆鍊鹼級
RTO = A + 4D 錛堢涓嬈℃祴閲忓埌寰榪旀椂闂寸粨鏋滐紝瀵瑰潎鍊煎亸宸甊TO璁$畻鍒濆鍊鹼級
涔嬪悗鐨勮綆楁柟娉曞涓嬶細
Err = M – A
A <- A + gErr
D <- D + h(|Err| - D)
RTO = A + 4D
鍏朵腑g鏄父閲忓閲忥紝鍙栧間負1/8(0.125)錛沨涔熸槸甯擱噺澧為噺錛屽彇鍊間負1/4(0.25)銆?br>
Karn綆楁硶錛欿arn綆楁硶鏄В鍐蟲墍璋撶殑閲嶄紶澶氫箟鎬ч棶棰樼殑銆俒Karn and Partridge 1987]瑙勫畾錛堣銆奣CP/IP璇﹁В 鍗蜂竴銆嬪弬鑰冩枃鐚級錛屽綋涓涓秴鏃跺拰閲嶄紶鍙戠敓鏃訛紝鍦ㄩ噸浼犳暟鎹殑紜鏈鍚庡埌杈句箣鍓嶏紝涓嶈兘鏇存柊RTT浼拌鍣紝鍥犱負鎴戜滑騫朵笉鐭ラ亾ACK瀵瑰簲鍝浼犺緭錛堜篃璁哥涓嬈′紶杈撹寤惰繜鑰屽茍娌℃湁琚涪寮冿紝涔熸湁鍙兘鏄涓嬈′紶杈撶殑ACK琚歡榪熶涪寮冿級銆傚茍涓旓紝鐢變簬鏁版嵁琚噸浼狅紝RTO宸茬粡寰楀埌浜嗕竴涓寚鏁伴閬匡紝鎴戜滑鍦ㄤ笅涓嬈′紶杈撴椂浣跨敤榪欎釜閫閬垮悗鐨凴TO銆傚涓涓病鏈夎閲嶄紶鐨勬姤鏂囨鑰岃█錛岄櫎闈炴敹鍒頒簡涓涓‘璁わ紝鍚﹀垯涓嶈璁$畻鏂扮殑RTO銆?br> 鍦ㄤ換浣曟椂鍊欏姣忎釜榪炴帴騫惰浠呮祴閲忎竴嬈TT鍊鹼紝鍦ㄥ彂閫佷竴涓姤鏂囨鏃訛紝濡傛灉緇欏畾榪炴帴鐨勫畾鏃跺櫒宸茬粡琚嬌鐢紝鍒欒鎶ユ枃孌典笉琚鏃訛紝鍙嶄箣濡傛灉緇欏畾榪炴帴鐨勫畾鏃跺櫒鏈浣跨敤錛屽垯寮濮嬭鏃朵互嫻嬮噺RTT鍊箋傚嵆騫墮潪姣忎釜鍙戝嚭鎶ユ枃孌甸兘榪涜嫻嬮噺RTT鍊鹼紝鍚屼竴鏃墮棿孌甸噷鍙兘鏈変竴涓猂TT鍊兼祴閲忚涓鴻繘琛岋紝涓嶄細騫惰榪涜澶氫釜RTT鍊兼祴閲忋?br>
3錛庢參鍚姩
濡傛灉鍙戦佹柟涓寮濮嬩究鍚戠綉緇滃彂閫佸涓姤鏂囨錛岀洿鑷寵揪鍒版帴鏀舵柟閫氬憡紿楀彛澶у皬涓烘銆傚綋鍙戦佹柟涓庢帴鏀舵柟鍦ㄥ悓涓灞鍩熺綉鏃訛紝榪欑鏂瑰紡鏄彲浠ョ殑銆備絾濡傛灉鍦ㄥ彂閫佹柟涓庢帴鏀舵柟涔嬮棿瀛樺湪澶氫釜璺敱鍣ㄥ拰閫熺巼杈冩參鐨勯摼璺椂錛屽氨鍙兘鍑虹幇闂銆備竴浜涗腑闂磋礬鐢卞櫒蹇呴』緙撳瓨鍒嗙粍錛屽茍鏈夊彲鑳借楀敖瀛樺偍鍣ㄧ殑絀洪棿錛屽皢鏉ュ緱闄嶄綆TCP榪炴帴鐨勫悶鍚愰噺銆備簬鏄渶瑕佷竴縐嶅彨“鎱㈠惎鍔?#8221;鐨勬嫢濉炴帶鍒剁畻娉曘?br> 鎱㈠惎鍔ㄤ負鍙戦佹柟澧炲姞涓涓嫢濉炵獥鍙o紝璁頒負cwnd錛屽綋涓庡彟涓涓綉緇滅殑涓繪満寤虹珛榪炴帴鏃訛紝鎷ュ紿楀彛琚垵濮嬪寲涓?涓姤鏂囨銆傛瘡鏀跺埌涓涓狝CK錛屾嫢濉炵獥鍙e氨澧炲姞涓涓姤鏂囨錛坈wnd浠ュ瓧鑺備負鍗曚綅錛屼絾鎱㈠惎鍔ㄤ互鎶ユ枃孌靛ぇ灝忎負鍗曚綅榪涜澧炲姞錛夈傚彂閫佹柟鍙栨嫢濉炵獥鍙d笌閫氬憡紿楀彛涓殑鏈灝忓間綔涓哄彂閫佷笂闄愩傛嫢濉炵獥鍙f槸鍙戦佹柟浣跨敤鐨勬祦閲忔帶鍒訛紝鑰岄氬憡紿楀彛鏄帴鏀舵柟浣跨敤鐨勬祦閲忔帶鍒躲?br> 鍙戦佹柟寮濮嬫椂鍙戦佷竴涓姤鏂囨錛岀劧鍚庣瓑寰匒CK銆傚綋鏀跺埌璇CK鏃訛紝鎷ュ紿楀彛浠?澧炲姞鍒?,鍗沖彲浠ュ彂閫佷袱涓姤鏂囨銆傚綋鏀跺埌榪欎袱涓姤鏂囨鐨凙CK鏃訛紝鎷ュ紿楀彛灝卞鍔犱負4銆傝繖鏄竴縐嶆寚鏁板鍔犵殑鍏崇郴銆?br>
4錛庢嫢濉為伩鍏?br>
鎱㈠惎鍔ㄧ畻娉曞鍔犳嫢濉炵獥鍙eぇ灝忓埌鏌愪簺鐐逛笂鍙兘杈懼埌浜嗕簰鑱旂綉鐨勫閲忥紝浜庢槸涓棿璺敱鍣ㄥ紑濮嬩涪寮冨垎緇勩傝繖灝遍氱煡鍙戦佹柟瀹冪殑鎷ュ紿楀彛寮寰楀お澶с傛嫢濉為伩鍏嶇畻娉曟槸涓縐嶅鐞嗕涪澶卞垎緇勭殑鏂規硶銆傝綆楁硶鍋囧畾鐢變簬鍒嗙粍鍙楀埌鎹熷潖寮曡搗鐨勪涪澶辨槸闈炲父灝戠殑錛堣繙灝忎簬1錛咃級錛屽洜姝ゅ垎緇勪涪澶卞氨鎰忓懗鐫鍦ㄦ簮涓繪満鍜岀洰鏍囦富鏈轟箣闂寸殑鏌愬緗戠粶涓婂彂鐢熶簡鎷ュ銆傛湁涓ょ鍒嗙粍涓㈠け鐨勬寚紺猴細鍙戠敓瓚呮椂鍜屾帴鏀跺埌閲嶅鐨勭‘璁ゃ傛嫢濉為伩鍏嶇畻娉曚笌鎱㈠惎鍔ㄧ畻娉曟槸涓や釜鐙珛鐨勭畻娉曪紝浣嗗疄闄呬腑榪欎袱涓畻娉曢氬父鍦ㄤ竴璧峰疄鐜般?br> 鎷ュ閬垮厤綆楁硶鍜屾參鍚姩綆楁硶闇瑕佸姣忎釜榪炴帴緇存寔涓や釜鍙橀噺錛氫竴涓嫢濉炵獥鍙wnd鍜屼竴涓參鍚姩闂ㄩ檺ssthresh銆傜畻娉曠殑宸ヤ綔榪囩▼濡備笅錛?br> 1) 瀵逛竴涓粰瀹氱殑榪炴帴錛屽垵濮嬪寲cwnd涓?涓姤鏂囨錛宻sthresh涓?5535涓瓧鑺傘?br> 2) TCP杈撳嚭渚嬬▼鐨勮緭鍑轟笉鑳借秴榪嘽wnd鍜屾帴鏀舵柟閫氬憡紿楀彛鐨勫ぇ灝忋傛嫢濉為伩鍏嶆槸鍙戦佹柟浣跨敤鐨勬祦閲忔帶鍒訛紝鑰岄氬憡紿楀彛鍒欐槸鎺ユ敹鏂硅繘琛岀殑嫻侀噺鎺у埗銆傚墠鑰呮槸鍙戦佹柟鎰熷彈鍒扮殑緗戠粶鎷ュ鐨勪及璁★紝鑰屽悗鑰呭垯涓庢帴鏀舵柟鍦ㄨ榪炴帴涓婄殑鍙敤緙撳瓨澶у皬鏈夊叧銆?br> 3) 褰撴嫢濉炲彂鐢熸椂錛堣秴鏃舵垨鏀跺埌閲嶅紜錛夛紝ssthresh琚緗負褰撳墠紿楀彛澶у皬鐨勪竴鍗婏紙cwnd鍜屾帴鏀舵柟閫氬憡紿楀彛澶у皬鐨勬渶灝忓鹼紝浣嗘渶灝戜負2涓姤鏂囨錛夈傛澶栵紝濡傛灉鏄秴鏃跺紩璧蜂簡鎷ュ錛屽垯cwnd琚緗負1涓姤鏂囨錛堣繖灝辨槸鎱㈠惎鍔級銆?br> 4) 褰撴柊鐨勬暟鎹瀵規柟紜鏃訛紝灝卞鍔燾wnd錛屼絾澧炲姞鐨勬柟娉曚緷璧栦簬鎴戜滑鏄惁姝e湪榪涜鎱㈠惎鍔ㄦ垨鎷ュ閬垮厤銆傚鏋渃wnd灝忎簬鎴栫瓑浜巗sthresh錛屽垯姝e湪榪涜鎱㈠惎鍔紝鍚﹀垯姝e湪榪涜鎷ュ閬垮厤銆傛參鍚姩涓鐩存寔緇埌鎴戜滑鍥炲埌褰撴嫢濉炲彂鐢熸椂鎵澶勪綅緗殑鍗婃椂鍊欐墠鍋滄錛堝洜涓烘垜浠褰曚簡鍦ㄦ楠?涓粰鎴戜滑鍒墮犻夯鐑︾殑紿楀彛澶у皬鐨勪竴鍗婏級錛岀劧鍚庤漿涓烘墽琛屾嫢濉為伩鍏嶃?br> 鎱㈠惎鍔ㄧ畻娉曞垵濮嬭緗甤wnd涓?涓姤鏂囨錛屾鍚庢瘡鏀跺埌涓涓‘璁ゅ氨鍔?銆傝繖浼氫嬌紿楀彛鎸夋寚鏁版柟寮忓闀匡細鍙戦?涓姤鏂囨錛岀劧鍚庢槸2涓紝鎺ョ潃鏄?涓?#8230;…銆傛嫢濉為伩鍏嶇畻娉曡姹傛瘡嬈℃敹鍒頒竴涓‘璁ゆ椂灝哻wnd澧炲姞1/cwnd銆備笌鎱㈠惎鍔ㄧ殑鎸囨暟澧炲姞姣旇搗鏉ワ紝榪欐槸涓縐嶅姞鎬у闀褲傛垜浠笇鏈涘湪涓涓線榪旀椂闂村唴鏈澶氫負cwnd澧炲姞1涓姤鏂囨錛堜笉綆″湪榪欎釜RT T涓敹鍒頒簡澶氬皯涓狝CK錛夛紝鐒惰屾參鍚姩灝嗘牴鎹繖涓線榪旀椂闂翠腑鎵鏀跺埌鐨勭‘璁ょ殑涓暟澧炲姞cwnd銆?br> 澶勪簬鎷ュ閬垮厤鐘舵佹椂錛屾嫢濉炵獥鍙g殑璁$畻鍏紡濡備笅錛堝紩鍏紡鍙傜収BSD鐨勫疄鐜幫紝segsize/8鐨勫兼槸涓涓尮閰嶈ˉ鍏呴噺錛屼笉鍦ㄧ畻娉曟弿榪板綋涓級錛?br> cwnd <- cwnd + segsize * segsize / cwnd + segsize / 8
5錛庡揩閫熼噸浼犱笌蹇熸仮澶?br>
鐢變簬鎴戜滑涓嶇煡閬撲竴涓噸澶嶇殑ACK鏄敱涓涓涪澶辯殑鎶ユ枃孌靛紩璧風殑錛岃繕鏄敱浜庝粎浠呭嚭鐜頒簡鍑犱釜鎶ユ枃孌電殑閲嶆柊鎺掑簭錛屽洜姝ゆ垜浠瓑寰呭皯閲忛噸澶嶇殑ACK鍒版潵銆傚亣濡傝繖鍙槸涓浜涙姤鏂囨鐨勯噸鏂版帓搴忥紝鍒欏湪閲嶆柊鎺掑簭鐨勬姤鏂囨琚鐞嗗茍浜х敓涓涓柊鐨凙CK涔嬪墠錛屽彧鍙兘浜х敓1 ~ 2涓噸澶嶇殑ACK銆傚鏋滀竴榪炰覆鏀跺埌3涓垨3涓互涓婄殑閲嶅ACK錛屽氨闈炲父鍙兘鏄竴涓姤鏂囨涓㈠け浜嗐備簬鏄垜浠氨閲嶄紶涓㈠け鐨勬暟鎹姤鏂囨錛岃屾棤闇絳夊緟瓚呮椂瀹氭椂鍣ㄦ孩鍑恒傝繖灝辨槸蹇熼噸浼犵畻娉曘傛帴涓嬫潵鎵ц鐨勪笉鏄參鍚姩綆楁硶鑰屾槸鎷ュ閬垮厤綆楁硶銆傝繖灝辨槸蹇熸仮澶嶇畻娉曘?br> 榪欎釜綆楁硶閫氬父鎸夊涓嬭繃紼嬭繘琛屽疄鐜幫細
1) 褰撴敹鍒扮3涓噸澶嶇殑ACK鏃訛紝灝唖sthresh璁劇疆涓哄綋鍓嶆嫢濉炵獥鍙wnd鐨勪竴鍗娿傞噸浼犱涪澶辯殑鎶ユ枃孌點傝緗甤wnd涓簊sthresh鍔犱笂3鍊嶇殑鎶ユ枃孌靛ぇ灝忋?br> 2) 姣忔鏀跺埌鍙︿竴涓噸澶嶇殑ACK鏃訛紝cwnd澧炲姞1涓姤鏂囨澶у皬騫跺彂閫?涓垎緇勶紙濡傛灉鏂扮殑cwnd鍏佽鍙戦侊級銆?br> 3) 褰撲笅涓涓‘璁ゆ柊鏁版嵁鐨凙CK鍒拌揪鏃訛紝璁劇疆cwnd涓簊sthresh錛堝湪絎?姝ヤ腑璁劇疆鐨勫鹼級銆傝繖涓狝CK搴旇鏄湪榪涜閲嶄紶鍚庣殑涓涓線榪旀椂闂村唴瀵規楠?涓噸浼犵殑紜銆傚彟澶栵紝榪欎釜ACK涔熷簲璇ユ槸瀵逛涪澶辯殑鍒嗙粍鍜屾敹鍒扮殑絎?涓噸澶嶇殑A C K涔嬮棿鐨勬墍鏈変腑闂存姤鏂囨鐨勭‘璁ゃ傝繖涓姝ラ噰鐢ㄧ殑鏄嫢濉為伩鍏嶏紝鍥犱負褰撳垎緇勪涪澶辨椂鎴戜滑灝嗗綋鍓嶇殑閫熺巼鍑忓崐銆?br>
鍏佷唬鐞唖ocks5鏀寔
鍙傜収RFC1928銆丷FC1929錛屽湪TDP瀹炵幇涓紝鏀寔鍖垮悕閫氳繃socks5浠g悊浠ュ強鐢ㄦ埛鍚?瀵嗙爜楠岃瘉鏂瑰紡閫氳繃socks5浠g悊銆?br> 鐢變簬socks5浠g悊鏄伐浣滀簬榪愯緭灞備笂錛屽洜姝よ繛鎺ュ綋涓IP灞傞夐」鐨勮緗兘灝嗘病鏈夋晥鏋溿俿ocks5浠g悊璧峰埌鐨勪綔鐢ㄥ彧鏄簲鐢ㄦ暟鎹殑杞彂錛屼絾榪欏凡緇忓熀鏈笂鑳芥敮鎸佸ぇ閮ㄥ垎鐢ㄦ埛紼嬪簭鐨勫簲鐢ㄩ渶姹傘傚湪浣跨敤socks5浠g悊榪涜宸ヤ綔涓紝璺緞MTU鐨勫彂鐜版満鍒訛紝灝嗘棤娉曟湁鏁堝伐浣滐紝姝ゆ椂MSS榛樿涓?36錛圡TU榛樿涓?76錛?鐢ㄦ埛紼嬪簭鍙互淇敼浣跨敤鐨凪SS鍊箋?br>
涓冦佸畨鍏ㄨ冭檻
TDP鍗忚鍙婄畻娉曟柟闈㈠茍涓嶅鏁版嵁鐨勫畨鍏ㄦу仛浠諱綍鑰冭檻錛岀敤鎴風▼搴忓湪浼犺緭鏁版嵁鏃跺鏋滃瀹夊叏鎬ф湁瑕佹眰錛屽彲浠ヨ嚜琛屽湪搴旂敤鏁版嵁灞傚仛鐩稿簲鐨勫伐浣溿備絾TDP瀹炵幇涓紝浼氭彁渚涗竴涓畝鍗曠殑AES256浣嶅姞瑙e瘑鏂規硶錛屾彁渚涚粰鐢ㄦ埛紼嬪簭浣跨敤銆傜敤鎴風▼搴忓彲浠ヨ皟鐢ㄨ鍔犺В瀵嗘柟娉曪紝瀵規暟鎹繘琛屽姞瀵嗙劧鍚庡啀閫氳繃緗戠粶榪涜鍙戦侊紝鎺ユ敹鏃跺皢鍔犲瘑鏁版嵁嫻佽繘琛岃В瀵嗗啀灝嗕細鐢ㄦ埛紼嬪簭鏁版嵁閫昏緫澶勭悊妯″潡榪涜澶勭悊銆?br>
鍏佸畾鏃跺櫒
濡侭SD鐨凾CP瀹炵幇綾諱技錛孴DP涔熶負姣忔潯榪炴帴寤虹珛浜嗗叚涓畾鏃跺櫒錛岀畝瑕佷粙緇嶅涓嬶細
1錛?#8220;榪炴帴寤虹珛”瀹氭椂鍣紝鍦ㄥ彂閫丼YN鎶ユ枃孌靛緩绔嬩竴鏉℃柊鐨勮繛鎺ユ椂鍚姩銆傚鏋滄病鏈夊湪75縐掑唴鏀跺埌鍝嶅簲錛岃繛鎺ュ緩绔嬪皢涓銆?br> 2錛?#8220;閲嶄紶”瀹氭椂鍣紝鍦ㄥ彂閫佹暟鎹椂璁懼畾銆傚鏋滃畾鏃跺櫒宸茶秴鏃惰屽绔殑紜榪樻湭鍒拌揪錛屽皢閲嶄紶鏁版嵁銆傞噸浼犲畾鏃跺櫒鐨勫兼槸鍔ㄦ佽綆楃殑錛屽彇鍐蟲潵RTT涓庤鎶ユ枃孌佃閲嶄紶鐨勬鏁般?br> 3錛?#8220;寤惰繜ACK”瀹氭椂鍣紝鏀跺埌蹇呴』紜浣嗘棤闇椹笂鍙戝嚭紜鐨勬暟鎹椂璁懼畾銆傜瓑寰?00ms鍚庡彂閫佺‘璁ゅ搷搴斻傚鏋滐紝鍦ㄨ繖200ms鍐咃紝鏈夋暟鎹鍦ㄨ榪炴帴涓婂彂閫侊紝寤惰繜鐨凙CK鍝嶅簲灝卞彲闅忔暟鎹竴璧峰彂閫佸洖瀵圭錛岀О涓烘崕甯︾‘璁ゃ?br> 4錛?#8220;鍧氭寔”瀹氭椂鍣紝鍦ㄨ繛鎺ュ绔氬憡鎺ユ敹紿楀彛涓?,闃繪緇х畫鍙戦佹暟鎹椂璁懼畾銆傚潥鎸佸畾鏃跺櫒鍦ㄨ秴鏃跺悗鍚戝绔彂閫?瀛楄妭鐨勬暟鎹紝鍒ゅ畾瀵圭鎺ユ敹紿楀彛鏄惁宸茬粡鎵撳紑銆傚潥鎸佸畾鏃跺櫒鐨勫兼槸鍔ㄦ佺殑璁$畻鐨勶紝鍙栧喅浜嶳TT鍊鹼紝鍦?縐掍笌60縐掍箣闂村彇鍊箋?br> 5錛?#8220;淇濇椿”瀹氭椂鍣ㄣ俆DP榪炴帴鍦ㄤ竴瀹氭椂闂存鍐呭鏋滄病鏈夋暟鎹氦浜掔殑璇濓紝灝嗕富鍔ㄥ彂閫佷繚媧籐IV鎶ユ枃孌點傚嵆褰?#8220;淇濇椿”瀹氭椂鍣ㄨ秴鏃訛紝璇存槑娌℃湁鏁版嵁浜や簰錛屽垯鍙戦佷繚媧繪暟鎹寘銆備繚媧誨畾鏃跺櫒榛樿鏃墮棿涓?鍒嗛挓錛岀敤鎴風▼搴忓彲浠ヨ繘琛岃緗?br> 6錛塗IME_WAIT瀹氭椂鍣?涔熷彲縐頒負2MSL瀹氭椂鍣紙瀹炵幇涓紝涓涓狹SL涓?鍒嗛挓錛夈傚綋榪炴帴鐘舵佽漿縐誨埌TIME_WAIT鏃訛紝鍗寵繛鎺ヤ富鍔ㄥ叧闂椂錛屽畾鏃跺櫒鍚姩銆?br>
涔濄佸紑鍙戞帴鍙?br>
浣跨敤TDP榪涜緗戠粶紼嬪簭寮鍙戞槸闈炲父瀹規槗鐨勶紝瀹冪殑寮鍙戞帴鍙o紙API錛変笌socket API鏄潪甯哥浉浼肩殑錛屽挨鍏舵槸瀵瑰簲鍔熻兘鐨勫嚱鏁板悕縐伴兘鏄竴鑷寸殑錛岄渶瑕佹敞鎰忕殑鏄疶DP鐨勬墍鏈堿PI閮藉浜庡悕縐扮┖闂碩DP涔嬩笅銆傚紑鍙戞帴鍙h涓嬭〃錛?br>
鍑芥暟 鎻忚堪
TDP::accept 鎺ュ彈涓涓摼鎺?nbsp;
TDP::bind 緇戝畾鏈湴鍦板潃鍒頒竴涓猅DP::SOCKET鍙ユ焺
TDP::cleanup 娓呴櫎TDP鍏ㄥ眬璧勬簮錛屼竴涓繘紼嬩腑鍙渶瑕佽皟鐢ㄤ竴嬈?nbsp;
TDP::close 鍏抽棴宸叉墦寮鐨凾DP::SOCKET鍙ユ焺錛屽茍鍏抽棴榪炴帴
TDP::connect 榪炴帴鍒版湇鍔″櫒绔?nbsp;
TDP::getlasterror 鑾峰緱TDP鏈鍚庣殑涓涓敊璇?nbsp;
TDP::getpeername 璇誨彇榪炴帴鐨勫绔殑鍦板潃淇℃伅
TDP::getsockname 璇誨彇榪炴帴鐨勬湰鍦扮殑鍦板潃淇℃伅
TDP::getsockopt 璇誨彇TDP鐨勯夐」淇℃伅
TDP::listen 絳夊緟瀹㈡埛绔潵榪炴帴
TDP::recv 鎺ユ敹鏁版嵁
TDP::select 絳夊緟闆嗗悎涓殑TDP SOCKET鏀瑰彉鐘舵?nbsp;
TDP::send 鍙戦佹暟鎹?nbsp;
TDP::setsockopt 淇敼TDP鐨勯夐」淇℃伅
TDP::shutdown 鎸囧畾鍏抽棴榪炴帴涓婂弻宸ラ氫俊鐨勯儴鍒嗘垨鍏ㄩ儴
TDP::socket 鍒涘緩涓涓猅DP SOCKET
TDP::startup 鍒濆鍖朤DP鍏ㄥ眬淇℃伅錛屼竴涓繘紼嬩腑鍙渶瑕佽皟鐢ㄤ竴嬈?nbsp;
]]>
鍒氭帴瑙CP/IP閫氫俊璁捐鐨勪漢鏍規嵁鑼冧緥鍙互寰堝揩緙栧嚭涓涓氫俊紼?
搴忥紝鎹涓浜涗漢鍙兘浼氳涓篢CP/IP緙栫▼寰堢畝鍗曘傚叾瀹炰笉鐒訛紝
TCP/IP緙栫▼鍏鋒湁杈冧負涓板瘜鐨勫唴瀹廣傚叾緙栫▼鐨勪赴瀵屾т富瑕佷綋鐜板湪
閫氫俊鏂瑰紡鍜屾姤鏂囨牸寮忕殑澶氭牱鎬т笂銆?
涓銆傞氫俊鏂瑰紡
涓昏鏈変互涓嬩笁澶х被:
(涓)SERVER/CLIENT鏂瑰紡
1.涓涓狢lient鏂硅繛鎺ヤ竴涓猄erver鏂癸紝鎴栫О鐐瑰鐐?peer to peer)錛?
2.澶氫釜Client鏂硅繛鎺ヤ竴涓猄erver鏂癸紝榪欎篃鏄氬父鐨勫茍鍙戞湇鍔″櫒鏂瑰紡銆?
3.涓涓狢lient鏂硅繛鎺ュ涓猄erver鏂癸紝榪欑鏂瑰紡寰堝皯瑙侊紝涓昏
鐢ㄤ簬涓涓鎴峰悜澶氫釜鏈嶅姟鍣ㄥ彂閫佽姹傛儏鍐點?
(浜?榪炴帴鏂瑰紡
1.闀胯繛鎺?
Client鏂逛笌Server鏂瑰厛寤虹珛閫氳榪炴帴錛岃繛鎺ュ緩绔嬪悗涓嶆柇寮錛?
鐒跺悗鍐嶈繘琛屾姤鏂囧彂閫佸拰鎺ユ敹銆傝繖縐嶆柟寮忎笅鐢變簬閫氳榪炴帴涓鐩?
瀛樺湪錛屽彲浠ョ敤涓嬮潰鍛戒護鏌ョ湅榪炴帴鏄惁寤虹珛錛?
netstat –f inet|grep 绔彛鍙?濡?678)銆?
姝ょ鏂瑰紡甯哥敤浜庣偣瀵圭偣閫氳銆?
2.鐭繛鎺?
Client鏂逛笌Server姣忚繘琛屼竴嬈℃姤鏂囨敹鍙戜氦鏄撴椂鎵嶈繘琛岄氳榪?
鎺ワ紝浜ゆ槗瀹屾瘯鍚庣珛鍗蟲柇寮榪炴帴銆傛縐嶆柟寮忓父鐢ㄤ簬涓鐐瑰澶氱偣
閫氳錛屾瘮濡傚涓狢lient榪炴帴涓涓猄erver.
(涓?鍙戦佹帴鏀舵柟寮?
1.寮傛
鎶ユ枃鍙戦佸拰鎺ユ敹鏄垎寮鐨勶紝鐩鎬簰鐙珛鐨勶紝浜掍笉褰卞搷銆傝繖縐嶆柟
寮忓張鍒嗕袱縐嶆儏鍐碉細
(1)寮傛鍙屽伐錛氭帴鏀跺拰鍙戦佸湪鍚屼竴涓▼搴忎腑錛屾湁涓や釜涓嶅悓鐨?
瀛愯繘紼嬪垎鍒礋璐e彂閫佸拰鎺ユ敹
(2)寮傛鍗曞伐錛氭帴鏀跺拰鍙戦佹槸鐢ㄤ袱涓笉鍚岀殑紼嬪簭鏉ュ畬鎴愩?
2.鍚屾
鎶ユ枃鍙戦佸拰鎺ユ敹鏄悓姝ヨ繘琛岋紝鏃㈡姤鏂囧彂閫佸悗絳夊緟鎺ユ敹榪斿洖鎶ユ枃銆?
鍚屾鏂瑰紡涓鑸渶瑕佽冭檻瓚呮椂闂錛屽嵆鎶ユ枃鍙戜笂鍘誨悗涓嶈兘鏃犻檺絳?
寰咃紝闇瑕佽瀹氳秴鏃舵椂闂達紝瓚呰繃璇ユ椂闂村彂閫佹柟涓嶅啀絳夊緟璇昏繑鍥炴姤
鏂囷紝鐩存帴閫氱煡瓚呮椂榪斿洖銆?nbsp;
瀹為檯閫氫俊鏂瑰紡鏄繖涓夌被閫氫俊鏂瑰紡鐨勭粍鍚堛傛瘮濡備竴鑸功涓婃彁渚涚殑
TCP/IP鑼冧緥紼嬪簭澶ч兘鏄悓姝ョ煭榪炴帴鐨凷ERVER/CLIENT紼嬪簭銆傛湁鐨?
緇勫悎鏄熀鏈笉鐢ㄧ殑錛屾瘮杈冨父鐢ㄧ殑鏈変環鍊肩殑緇勫悎鏄互涓嬪嚑縐嶏細
鍚屾鐭繛鎺erver/Client
鍚屾闀胯繛鎺erver/Client
寮傛鐭繛鎺erver/Client
寮傛闀胯繛鎺ュ弻宸erver/Client
寮傛闀胯繛鎺ュ崟宸erver/Client
鍏朵腑寮傛闀胯繛鎺ュ弻宸ユ槸鏈涓哄鏉傜殑涓縐嶉氫俊鏂瑰紡錛屾湁鏃跺欑粡
甯鎬細鍑虹幇鍦ㄤ笉鍚岄摱琛屾垨涓嶅悓鍩庡競涔嬮棿鐨勪袱濂楃郴緇熶箣闂寸殑閫氫俊銆?
姣斿閲戝崱宸ョ▼銆傜敱浜庤繖鍑犵閫氫俊鏂瑰紡姣旇緝鍥哄畾錛屾墍浠ュ彲浠ラ
鍏堢紪鍒惰繖鍑犵閫氫俊鏂瑰紡鐨勬ā鏉跨▼搴忋?
浜?鎶ユ枃鏍煎紡
閫氫俊鎶ユ枃鏍煎紡澶氭牱鎬ф洿澶氾紝鐩稿簲鍦板氨蹇呴』璁捐瀵瑰簲鐨勮鍐欐姤鏂囩殑鎺?
鏀跺拰鍙戦佹姤鏂囧嚱鏁般?
(涓)闃誨涓庨潪闃誨鏂瑰紡銆
1.闈為樆濉炴柟寮?
璇誨嚱鏁頒笉鍋滃湴榪涜璇誨姩浣滐紝濡傛灉娌℃湁鎶ユ枃鎺ユ敹鍒幫紝絳夊緟涓孌墊椂闂村悗
瓚呮椂榪斿洖錛岃繖縐嶆儏鍐典竴鑸渶瑕佹寚瀹氳秴鏃舵椂闂淬?
2.闃誨鏂瑰紡
濡傛灉娌℃湁鎶ユ枃鎺ユ敹鍒幫紝鍒欒鍑芥暟涓鐩村浜庣瓑寰呯姸鎬侊紝鐩村埌鏈夋姤鏂囧埌杈俱?
(浜?寰幆璇誨啓鏂瑰紡
1.涓嬈$洿鎺ヨ鍐欐姤鏂?
鍦ㄤ竴嬈℃帴鏀舵垨鍙戦佹姤鏂囧姩浣滀腑涓嬈℃т笉鍔犲垎鍒湴鍏ㄩ儴璇誨彇鎴栧叏閮?
鍙戦佹姤鏂囧瓧鑺傘?
2.涓嶆寚瀹氶暱搴﹀驚鐜鍐?
榪欎竴鑸彂鐢熷湪鐭繛鎺ヨ繘紼嬩腑錛屽彈緗戠粶璺敱絳夐檺鍒訛紝涓嬈¤緝闀跨殑鎶?
鏂囧彲鑳藉湪緗戠粶浼犺緭榪囩▼涓鍒嗚В鎴愪簡濂藉嚑涓寘銆備竴嬈¤鍙栧彲鑳戒笉
鑳藉叏閮ㄨ瀹屼竴嬈℃姤鏂囷紝榪欏氨闇瑕佸驚鐜鎶ユ枃錛岀洿鍒拌瀹屼負姝€?
3.甯﹂暱搴︽姤鏂囧ご寰幆璇誨啓
榪欑鎯呭喌涓鑸槸鍦ㄩ暱榪炴帴榪涚▼涓紝鐢變簬鍦ㄩ暱榪炴帴涓病鏈夋潯浠惰兘澶?
鍒ゆ柇寰幆璇誨啓浠涔堟椂鍊欑粨鏉燂紝鎵浠ュ繀欏昏鍔犻暱搴︽姤鏂囧ご銆傝鍑芥暟
鍏堟槸璇誨彇鎶ユ枃澶寸殑闀垮害錛屽啀鏍規嵁榪欎釜闀垮害鍘昏鎶ユ枃.瀹為檯鎯呭喌涓紝
鎶ュご鐨勭爜鍒舵牸寮忚繕緇忓父涓嶄竴鏍鳳紝濡傛灉鏄潪ASCII鐮佺殑鎶ユ枃澶達紝榪樺繀欏?
杞崲鎴怉SCII,甯歌鐨勬姤鏂囧ご鐮佸埗鏈夛細
(1)n涓瓧鑺傜殑ASCII鐮?
(2)n涓瓧鑺傜殑BCD鐮?
(3)n涓瓧鑺傜殑緗戠粶鏁村瀷鐮?
浠ヤ笂鏄嚑縐嶆瘮杈冨吀鍨嬬殑璇誨啓鎶ユ枃鏂瑰紡錛屽彲浠ヤ笌閫氫俊鏂瑰紡妯℃澘涓璧?
棰勫厛鎻愪緵涓浜涘吀鍨嬬殑API璇誨啓鍑芥暟銆傚綋鐒跺湪瀹為檯闂涓紝鍙兘榪?
蹇呴』緙栧啓涓庡鏂規姤鏂囨牸寮忛厤濂楃殑璇誨啓API.
鍦ㄥ疄闄呮儏鍐典腑錛屽線寰闇瑕佹妸鎴戜滑鑷繁鐨勭郴緇熶笌鍒漢鐨勭郴緇熻繘琛岃繛鎺ワ紝
鏈変簡浠ヤ笂妯℃澘涓嶢PI,鍙互璇磋繛鎺ヤ換浣曟柟寮忕殑閫氫俊紼嬪簭閮戒笉瀛樺湪闂銆?
鏈枃鏉ヨ嚜CSDN鍗氬錛岃漿杞借鏍囨槑鍑哄錛?a >http://blog.csdn.net/wgl_suc102/archive/2008/01/23/2060828.aspx
銆銆甯歌鐨勭綉緇滄湇鍔″櫒錛屽熀鏈笂鏄?*24灝忔椂榪愯漿鐨勶紝瀵逛簬緗戞父鏉ヨ錛岃嚦灝戣姹傛湇鍔″櫒瑕佽兘榪炵畫宸ヤ綔涓鍛ㄤ互涓婄殑鏃墮棿騫朵繚璇佷笉鍑虹幇鏈嶅姟鍣ㄥ穿婧冭繖鏍風殑鐏鵑毦鎬т簨浠躲備簨瀹炰笂錛岃姹備竴涓湇鍔″櫒鍦ㄨ繛緇殑婊¤礋鑽瘋繍杞笅涓嶅嚭浠諱綍寮傚父錛岃姹傚畠璁捐鐨勮繎涔庡畬緹庯紝榪欏嚑涔庢槸涓嶅お鐜板疄鐨勩傛湇鍔″櫒鏈韓鍙互鍑哄紓甯革紙浣嗚灝藉彲鑳藉皯寰楀嚭錛夛紝浣嗘槸錛屾湇鍔″櫒鏈韓搴旇琚璁″緱瓚充互鍋ュ.錛?#8220;灝忕梾灝忕伨”鎵撲笉鍨畠錛岃繖灝辮姹傛湇鍔″櫒鍦ㄥ紓甯稿鐞嗘柟闈㈣涓嬪緢澶氬姛澶?/p>
銆銆鏈嶅姟鍣ㄧ殑寮傚父澶勭悊鍖呮嫭鐨勫唴瀹歸潪甯稿箍娉涳紝鏈枃浠呭氨鍦ㄧ綉緇滃皝鍖呮柟闈㈠嚭鐜扮殑寮傚父浣滀竴璁ㄨ錛屽笇鏈涜兘瀵規浠庝簨鐩稿叧宸ヤ綔鐨勬湅鍙嬫湁鎵甯姪銆?/p>
銆銆鍏充簬緗戠粶灝佸寘鏂歸潰鐨勫紓甯革紝鎬諱綋鏉ヨ錛屽彲浠ュ垎涓轟袱澶х被錛氫竴鏄皝鍖呮牸寮忓嚭鐜板紓甯革紱浜屾槸灝佸寘鍐呭錛堝嵆灝佸寘鏁版嵁錛夊嚭鐜板紓甯搞傚湪灝佸寘鏍煎紡鐨勫紓甯稿鐞嗘柟闈紝鎴戜滑鍦ㄦ渶搴曠鐨勭綉緇滄暟鎹寘鎺ユ敹妯″潡渚垮彲浠ュ姞浠ュ鐞嗐傝屽浜庡皝鍖呮暟鎹唴瀹瑰嚭鐜扮殑寮傚父錛屽彧鏈変緷闈犳父鎴忔湰韜殑閫昏緫鍘誨姞浠ュ垽瀹氬拰媯楠屻傛父鎴忛昏緫鏂歸潰鐨勫紓甯稿鐞嗭紝鏄殢姣忎釜娓告垙鐨勪笉鍚岃屼笉鍚岀殑錛屾墍浠ワ紝鏈枃闅忓悗鐨勫唴瀹瑰皢閲嶇偣闃愯堪鍦ㄧ綉緇滄暟鎹寘鎺ユ敹妯″潡涓殑寮傚父澶勭悊銆?/p>
銆銆涓烘柟渚夸互涓嬬殑璁ㄨ錛屽厛鏄庣‘涓や釜姒傚康錛堣繖涓や釜姒傚康鏄負浜嗗彊榪版柟闈紝絎旇呰嚜琛屽彇鐨勶紝騫舵棤鏍囧噯鍙█錛夛細
銆銆1銆侀昏緫鍖咃細鎸囩殑鏄湪搴旂敤灞傛彁浜ょ殑鏁版嵁鍖咃紝涓涓畬鏁寸殑閫昏緫鍖呭彲浠ヨ〃紺轟竴涓‘鍒囩殑閫昏緫鎰忎箟銆傛瘮濡傜櫥褰曞寘錛屽畠閲岄潰灝卞彲浠ュ惈鏈夌敤鎴峰悕瀛楁鍜屽瘑鐮佸瓧孌點傚敖綆″畠鐪嬩笂鍘諱篃鏄竴孌電紦鍐插尯鏁版嵁錛屼絾榪欎釜緙撳啿鍖洪噷鐨勫悇涓尯闂存槸浠h〃涓瀹氱殑閫昏緫鎰忎箟鐨勩?br>銆銆2銆佺墿鐞嗗寘錛氭寚鐨勬槸浣跨敤recv(recvfrom)鎴杦sarecv(wsarecvfrom)浠庣綉緇滃簳灞傛帴鏀跺埌鐨勬暟鎹寘錛岃繖鏍鋒敹鍒扮殑涓涓暟鎹寘錛岃兘涓嶈兘琛ㄧず涓涓畬鏁寸殑閫昏緫鎰忎箟錛岃鍙栧喅浜庡畠鏄氳繃UDP綾葷殑“鏁版嵁鎶ュ崗璁?#8221;鍙戠殑鍖呰繕鏄氳繃TCP綾葷殑“嫻佸崗璁?#8221;鍙戠殑鍖呫?/p>
銆銆鎴戜滑鐭ラ亾錛孴CP鏄祦鍗忚錛?#8220;嫻佸崗璁?#8221;涓?#8220;鏁版嵁鎶ュ崗璁?#8221;鐨勪笉鍚岀偣鍦ㄤ簬錛?#8220;鏁版嵁鎶ュ崗璁?#8221;涓殑涓涓綉緇滃寘鏈韓灝辨槸涓涓畬鏁寸殑閫昏緫鍖咃紝涔熷氨鏄錛屽湪搴旂敤灞備嬌鐢╯endto鍙戦佷簡涓涓昏緫鍖呬箣鍚庯紝鍦ㄦ帴鏀剁閫氳繃recvfrom鎺ユ敹鍒扮殑灝辨槸鍒氭墠浣跨敤sendto鍙戦佺殑閭d釜閫昏緫鍖咃紝榪欎釜鍖呬笉浼氳鍒嗗紑鍙戦侊紝涔熶笉浼氫笌鍏跺畠鐨勫寘鏀懼湪涓璧峰彂閫併備絾瀵逛簬TCP鑰岃█錛孴CP浼氭牴鎹綉緇滅姸鍐靛拰neagle綆楁硶錛屾垨鑰呭皢涓涓昏緫鍖呭崟鐙彂閫侊紝鎴栬呭皢涓涓昏緫鍖呭垎鎴愯嫢騫叉鍙戦侊紝鎴栬呬細灝嗚嫢騫蹭釜閫昏緫鍖呭悎鍦ㄤ竴璧峰彂閫佸嚭鍘匯傛鍥犱負TCP鍦ㄩ昏緫鍖呭鐞嗘柟闈㈢殑榪欑綺樺悎鎬э紝瑕佹眰鎴戜滑鍦ㄤ綔鍩轟簬TCP鐨勫簲鐢ㄦ椂錛屼竴鑸兘瑕佺紪鍐欑浉搴旂殑鎷煎寘銆佽В鍖呬唬鐮併?/p>
銆銆鍥犳錛屽熀浜嶵CP鐨勪笂灞傚簲鐢紝涓鑸兘瑕佸畾涔夎嚜宸辯殑鍖呮牸寮忋俆CP鐨勫皝鍖呭畾涔変腑錛岄櫎浜嗗叿浣撶殑鏁版嵁鍐呭鎵浠h〃鐨勯昏緫鎰忎箟涔嬪錛岀涓姝ュ氨鏄紜畾浠ヤ綍縐嶆柟寮忚〃紺哄綋鍓嶅寘鐨勫紑濮嬪拰緇撴潫銆傞氬父鎯呭喌涓嬶紝琛ㄧず涓涓猅CP閫昏緫鍖呯殑寮濮嬪拰緇撴潫鏈変袱縐嶆柟寮忥細
銆銆1銆佷互鐗規畩鐨勫紑濮嬪拰緇撴潫鏍囧織琛ㄧず錛屾瘮濡侳F00琛ㄧず寮濮嬶紝00FF琛ㄧず緇撴潫銆?br>銆銆2銆佺洿鎺ヤ互鍖呴暱搴︽潵琛ㄧず銆傛瘮濡傚彲浠ョ敤絎竴涓瓧鑺傝〃紺哄寘鎬婚暱搴︼紝濡傛灉瑙夊緱榪欐牱鐨勮瘽鍖呮瘮杈冨皬錛屼篃鍙互鐢ㄤ袱涓瓧鑺傝〃紺哄寘闀垮害銆?/p>
銆銆涓嬮潰灝嗚緇欏嚭鐨勪唬鐮佹槸浠ョ2縐嶆柟寮忓畾涔夌殑鏁版嵁鍖咃紝鍖呴暱搴︿互姣忎釜灝佸寘鐨勫墠涓や釜瀛楄妭琛ㄧず銆傛垜灝嗙粨鍚堢潃浠g爜緇欏嚭鐩稿叧鐨勮В閲婂拰璇存槑銆?/p>
銆銆鍑芥暟涓敤鍒扮殑鍙橀噺璇存槑錛?/p>
銆銆CLIENT_BUFFER_SIZE錛氱紦鍐插尯鐨勯暱搴︼紝瀹氫箟涓猴細Const int CLIENT_BUFFER_SIZE=4096銆?br>銆銆m_ClientDataBuf錛氭暟鎹暣鐞嗙紦鍐插尯錛屾瘡嬈℃敹鍒扮殑鏁版嵁錛岄兘浼氬厛琚鍒跺埌榪欎釜緙撳啿鍖虹殑鏈熬錛岀劧鍚庣敱涓嬮潰鐨勬暣鐞嗗嚱鏁板榪欎釜緙撳啿鍖鴻繘琛屾暣鐞嗐傚畠鐨勫畾涔夋槸錛歝har m_ClientDataBuf[2* CLIENT_BUFFER_SIZE]銆?br>銆銆m_DataBufByteCount錛氭暟鎹暣鐞嗙紦鍐插尯涓綋鍓嶅墿浣欑殑鏈暣鐞嗗瓧鑺傛暟銆?br>銆銆GetPacketLen(const char*)錛氬嚱鏁幫紝鍙互鏍規嵁浼犲叆鐨勭紦鍐插尯棣栧潃鎸夌収搴旂敤灞傚崗璁彇鍑哄綋鍓嶉昏緫鍖呯殑闀垮害銆?br>銆銆GetGamePacket(const char*, int)錛氬嚱鏁幫紝鍙互鏍規嵁浼犲叆鐨勭紦鍐插尯鐢熸垚鐩稿簲鐨勬父鎴忛昏緫鏁版嵁鍖呫?br>銆銆AddToExeList(PBaseGamePacket)錛氬嚱鏁幫紝灝嗘寚瀹氱殑娓告垙閫昏緫鏁版嵁鍖呭姞鍏ュ緟澶勭悊鐨勬父鎴忛昏緫鏁版嵁鍖呴槦鍒椾腑錛岀瓑寰呴昏緫澶勭悊綰跨▼瀵瑰叾榪涜澶勭悊銆?br>銆銆DATA_POS錛氭寚鐨勬槸闄や簡鍖呴暱搴︺佸寘綾誨瀷絳夎繖浜涙爣蹇楀瀷瀛楁涔嬪錛岀湡姝g殑鏁版嵁鍖呭唴瀹圭殑璧峰浣嶇疆銆?/p>
Bool SplitFun(const char* pData,const int &len)
{
PBaseGamePacket pGamePacket=NULL;
__int64 startPos=0, prePos=0, i=0;
int packetLen=0;
銆//鍏堝皢鏈鏀跺埌鐨勬暟鎹鍒跺埌鏁寸悊緙撳啿鍖哄熬閮?br> startPos = m_DataBufByteCount;
memcpy( m_ClientDataBuf+startPos, pData, len );
m_DataBufByteCount += len;
//褰撴暣鐞嗙紦鍐插尯鍐呯殑瀛楄妭鏁板皯浜嶥ATA_POS瀛楄妭鏃訛紝鍙栦笉鍒伴暱搴︿俊鎭垯閫鍑?br>銆//娉ㄦ剰錛氶鍑烘椂騫朵笉緗甿_DataBufByteCount涓?
if (m_DataBufByteCount < DATA_POS+1)
return false;
//鏍規嵁姝e父閫昏緫錛屼笅闈㈢殑鎯呭喌涓嶅彲鑳藉嚭鐜幫紝涓虹ǔ濡ヨ搗瑙侊紝榪樻槸鍔犱笂
if (m_DataBufByteCount > 2*CLIENT_BUFFER_SIZE)
{
//璁劇疆m_DataBufByteCount涓?錛屾剰鍛崇潃涓㈠純緙撳啿鍖轟腑鐨勭幇鏈夋暟鎹?br> m_DataBufByteCount = 0;
銆銆//鍙互鑰冭檻寮鏀鵑敊璇牸寮忔暟鎹寘鐨勫鐞嗘帴鍙o紝澶勭悊閫昏緫浜ょ粰涓婂眰
銆銆//OnPacketError()
return false;
}
//榪樺師璧峰鎸囬拡
startPos = 0;
//鍙湁褰搈_ClientDataBuf涓殑瀛楄妭涓暟澶т簬鏈灝忓寘闀垮害鏃舵墠鑳芥墽琛屾璇彞
packetLen = GetPacketLen( pIOCPClient->m_ClientDataBuf );
//褰撻昏緫灞傜殑鍖呴暱搴︿笉鍚堟硶鏃訛紝鍒欑洿鎺ヤ涪寮冭鍖?br> if ((packetLen < DATA_POS+1) || (packetLen > 2*CLIENT_BUFFER_SIZE))
{
m_DataBufByteCount = 0;
銆銆//OnPacketError()
return false;
}
//淇濈暀鏁寸悊緙撳啿鍖虹殑鏈熬鎸囬拡
__int64 oldlen = m_DataBufByteCount;
while ((packetLen <= m_DataBufByteCount) && (m_DataBufByteCount>0))
{
//璋冪敤鎷煎寘閫昏緫錛岃幏鍙栬緙撳啿鍖烘暟鎹搴旂殑鏁版嵁鍖?br> pGamePacket = GetGamePacket(m_ClientDataBuf+startPos, packetLen);
if (pGamePacket!=NULL)
{
//灝嗘暟鎹寘鍔犲叆鎵ц闃熷垪
AddToExeList(pGamePacket);
}
pGamePacket = NULL;
銆銆//鏁寸悊緙撳啿鍖虹殑鍓╀綑瀛楄妭鏁板拰鏂伴昏緫鍖呯殑璧峰浣嶇疆榪涜璋冩暣
m_DataBufByteCount -= packetLen;
startPos += packetLen;
//孌嬬暀緙撳啿鍖虹殑瀛楄妭鏁板皯浜庝竴涓甯稿寘澶у皬鏃訛紝鍙悜鍓嶅鍒惰鍖呴殢鍚庨鍑?br> if (m_DataBufByteCount < DATA_POS+1)
{
for(i=startPos; i<startPos+m_DataBufByteCount; ++i)
m_ClientDataBuf[i-startPos] = m_ClientDataBuf[i];
return true;
}
packetLen = GetPacketLen(m_ClientDataBuf + startPos );
//褰撻昏緫灞傜殑鍖呴暱搴︿笉鍚堟硶鏃訛紝涓㈠純璇ュ寘鍙婄紦鍐插尯浠ュ悗鐨勫寘
if ((packetLen<DATA_POS+1) || (packetLen>2*CLIENT_BUFFER_SIZE))
{
m_DataBufByteCount = 0;
銆銆//OnPacketError()
return false;
}
if (startPos+packetLen>=oldlen)
{
for(i=startPos; i<startPos+m_DataBufByteCount; ++i)
m_ClientDataBuf[i-startPos] = m_ClientDataBuf[i];
return true;
}
}//鍙栨墍鏈夊畬鏁寸殑鍖?/p>
return true;
}
銆銆浠ヤ笂渚挎槸鏁版嵁鎺ユ敹妯″潡鐨勫鐞嗗嚱鏁幫紝涓嬮潰鏄嚑鐐圭畝瑕佽鏄庯細
銆銆1銆佺敤浜庢嫾鍖呮暣鐞嗙殑緙撳啿鍖?m_ClientDataBuf)搴旇姣攔ecv涓寚瀹氱殑鎺ユ敹緙撳啿鍖?pData)闀垮害(CLIENT_BUFFER_SIZE)瑕佸ぇ錛岄氬父鍓嶈呮槸鍚庤呯殑2鍊?2*CLIENT_BUFFER_SIZE)鎴栨洿澶с?/p>
銆銆2銆佷負閬垮厤鍥犱負鍓╀綑鏁版嵁鍓嶇Щ鑰屽鑷寸殑棰濆寮閿錛屽緩璁甿_ClientDataBuf浣跨敤鐜艦緙撳啿鍖哄疄鐜般?/p>
銆銆3銆佷負浜嗛伩鍏嶅嚭鐜版棤娉曟嫾瑁呯殑鍖咃紝鎴戜滑綰﹀畾姣忔鍙戦佺殑閫昏緫鍖咃紝鍏跺崟涓昏緫鍖呮渶澶ч暱搴︿笉鍙互瓚呰繃CLIENT_BUFFER_SIZE鐨?鍊嶃傚洜涓烘垜浠殑鏁寸悊緙撳啿鍖哄彧鏈?*CLIENT_BUFFER_SIZE榪欎箞闀匡紝鏇撮暱鐨勬暟鎹紝鎴戜滑灝嗘棤娉曟暣鐞嗐傝繖灝辮姹傚湪鍗忚鐨勮璁′笂浠ュ強鏈緇堢殑鍙戦佸嚱鏁扮殑澶勭悊涓婅鍔犱笂榪欐牱鐨勫紓甯稿鐞嗘満鍒躲?/p>
銆銆4銆佸浜庢暟鎹寘榪囩煭鎴栬繃闀跨殑鍖咃紝鎴戜滑閫氬父鐨勬儏鍐墊槸緗甿_DataBufByteCount涓?錛屽嵆鑸嶅純褰撳墠鍖呯殑澶勭悊銆傚鏋滄澶勪笉璁劇疆m_DataBufByteCount涓?涔熷彲錛屼絾璇ュ鎴風鍙鍙戜簡涓嬈℃牸寮忛敊璇殑鍖咃紝鍒欏叾鍚庣戶鍙戣繃鏉ョ殑鍖呭垯涔熷皢榪炲甫鐫浜х敓鏍煎紡閿欒錛屽鏋滆緗甿_DataBufByteCount涓?錛屽垯鍙互姣旇緝濂界殑閬垮厤鍚庣戶鐨勫寘鍙楁鍖呯殑鏍煎紡閿欒褰卞搷銆傛洿濂界殑浣滄硶鏄紝鍦ㄦ澶勫紑鏀句竴涓皝鍖呮牸寮忓紓甯哥殑澶勭悊鎺ュ彛(OnPacketError)錛岀敱涓婂眰閫昏緫鍐沖畾瀵硅繖縐嶅紓甯稿浣曞緗傛瘮濡備笂灞傞昏緫鍙互瀵瑰皝鍖呮牸寮忔柟闈㈠嚭鐜扮殑寮傚父榪涜璁℃暟錛屽鏋滈敊璇殑嬈℃暟瓚呰繃涓瀹氱殑鍊鹼紝鍒欏彲浠ユ柇寮璇ュ鎴風鐨勮繛鎺ャ?/p>
銆銆5銆佸緩璁笉瑕佸湪recv鎴杦sarecv鐨勫嚱鏁板悗錛屽氨绱ф帴鐫浣滀互涓婄殑澶勭悊銆傚綋recv鏀跺埌涓孌墊暟鎹悗錛岀敓鎴愪竴涓粨鏋勪綋鎴栧璞?瀹冧富瑕佸惈鏈塪ata鍜宭en涓や釜鍐呭錛屽墠鑰呮槸鏁版嵁緙撳啿鍖猴紝鍚庤呮槸鏁版嵁闀垮害)錛屽皢榪欐牱鐨勪竴涓粨鏋勪綋鎴栧璞℃斁鍒頒竴涓槦鍒椾腑鐢卞悗闈㈢殑綰跨▼瀵瑰叾浣跨敤SplitFun鍑芥暟榪涜鏁寸悊銆傝繖鏍鳳紝鍙互鏈澶ч檺搴﹀湴鎻愰珮緗戠粶鏁版嵁鐨勬帴鏀墮熷害錛屼笉鑷沖洜涓烘暟鎹暣鐞嗙殑鍘熷洜鑰屽湪姝ゅ嫻垂鏃墮棿銆?/p>
銆銆浠g爜涓紝鎴戝凡緇忎綔浜嗘瘮杈冭緇嗙殑娉ㄩ噴錛屽彲浠ヤ綔涓烘嫾鍖呭嚱鏁扮殑鍙傝冿紝浠g爜鏄粠鍋剁殑搴旂敤涓彁鍙栥佷慨鏀硅屾潵錛屾湰韜彧涓烘紨紺轟箣鐢紝鎵浠ユ湭浣滆皟璇曪紝搴旂敤鏃墮渶瑕佷綘鑷繁鍘誨畬鍠勩傚鏈夌枒闂紝鍙互鎴戠殑blog涓婄暀璦鎻愬嚭銆?/p>
鏈枃鏉ヨ嚜CSDN鍗氬錛岃漿杞借鏍囨槑鍑哄錛?a >http://blog.csdn.net/clever101/archive/2008/10/12/3061679.aspx
緙栧啓WinSock紼嬪簭鏃訛紝濡傛灉涓嶅寘鍚玏inSock2.h鏂囦歡寰堝緋葷粺綾誨瀷鏃犳硶璇嗗埆銆傚彲鏄鏋滃寘鍚簡WinSock2.h鏂囦歡鍒欐姤N澶氱郴緇熺被鍨嬮噸瀹氫箟鐨勯敊璇?br>渚嬪 錛?br> mswsock.h(69) : error C2065: 'SOCKET' : undeclared identifier Windows緗戠粶緙栫▼鑷沖皯闇瑕佷袱涓ご鏂囦歡錛歸insock2.h鍜寃indows.h錛岃屽湪WinSock2.0涔嬪墠榪樺瓨鍦ㄤ竴涓佺増鏈殑winsock.h銆傛鏄繖涓変釜澶存枃浠剁殑鍖呭惈欏哄簭錛屽鑷翠簡涓婅堪闂鐨勫嚭鐜般?/p> 鍏堢湅鐪媤insock2.h鐨勫唴瀹癸紝鍦ㄦ枃浠跺紑澶存湁濡備笅瀹忓畾涔夛細 #ifndef _WINSOCK2API_
#define _WINSOCK2API_ #define _WINSOCKAPI_ /* Prevent inclusion of winsock.h in windows.h */ _WINSOCK2API_寰堝鏄撶悊瑙o紝榪欐槸鏈甯歌鐨勯槻姝㈠ご鏂囦歡閲嶅鍖呭惈鐨勪繚鎶ゆ帾鏂姐俖WINSOCKAPI_鐨勫畾涔夊垯鏄負浜嗛樆姝㈠鑰佹枃浠秝insock.h鐨勫寘鍚紝鍗蟲槸璇達紝濡傛灉鐢ㄦ埛鍏堝寘鍚簡winsock2.h灝變笉鍏佽鍐嶅寘鍚玾insock.h浜嗭紝鍚﹀垯浼氬鑷寸被鍨嬮噸澶嶅畾涔夈傝繖鏄庢牱鍋氬埌鐨勫憿錛熷緢綆鍗曪紝鍥犱負winsock.h鐨勫ご閮ㄥ悓鏍峰瓨鍦ㄥ涓嬬殑淇濇姢鎺柦錛?/p> #ifndef _WINSOCKAPI_
#define _WINSOCKAPI_ 鍐嶅洖榪囧ご鏉ョ湅winsock2.h錛屽湪涓婅堪鍐呭涔嬪悗绱ц窡鐫濡備笅瀹忔寚浠わ細 /*
* Pull in WINDOWS.H if necessary */ #ifndef _INC_WINDOWS #include <windows.h> #endif /* _INC_WINDOWS */ 鍏朵綔鐢ㄦ槸濡傛灉鐢ㄦ埛娌℃湁鍖呭惈windows.h錛坃INC_WINDOWS鍦╳indows.h涓畾涔夛級灝辮嚜鍔ㄥ寘鍚畠錛屼互瀹氫箟WinSock2.0鎵闇鐨勭被鍨嬪拰甯擱噺絳夈?/p> 鐜板湪鍒囨崲鍒皐indows.h錛屾煡鎵緒insock錛屾垜浠細鎯婂鐨勫彂鐜頒互涓嬪唴瀹癸細 #ifndef WIN32_LEAN_AND_MEAN
#include <cderr.h> #include <dde.h> #include <ddeml.h> #include <dlgs.h> #ifndef _MAC #include <lzexpand.h> #include <mmsystem.h> #include <nb30.h> #include <rpc.h> #endif #include <shellapi.h> #ifndef _MAC #include <winperf.h> #if(_WIN32_WINNT >= 0x0400) #endif 鐪嬪埌娌★紵windows.h浼氬弽鍚戝寘鍚玾insock2.h鎴栬厀insock.h錛佺浉浜掗棿鐨勫寘鍚究鏄竾鎭朵箣婧愶紒 涓嬮潰鍏蜂綋鍒嗘瀽涓涓嬮棶棰樻槸鎬庝箞鍙戠敓鐨勩?/p> 閿欒鎯呭艦1錛?/strong>鎴戜滑鍦ㄨ嚜宸辯殑宸ョ▼涓厛鍖呭惈winsock2.h鍐嶅寘鍚玾indows.h錛屽鏋淲IN32_LEAN_AND_MEAN鏈畾涔変笖_WIN32_WINNT澶т簬鎴栫瓑浜?x400錛岄偅涔坵indows.h浼氬湪winsock2.h寮澶磋鑷姩寮曞叆錛岃寃indows.h鍙堜細鑷姩寮曞叆mswsock.h錛屾鏃訛紝mswsock.h閲屾墍鐢ㄧ殑socket綾誨瀷榪樺皻鏈畾涔夛紝鍥犳浼氬嚭鐜扮被鍨嬫湭瀹氫箟閿欒銆?/p>
閿欒鎯呭艦2錛?/strong>鍏堝寘鍚玾indows.h鍐嶅寘鍚玾insock2.h錛屽鏋淲IN32_LEAN_AND_MEAN鏈畾涔変笖_WIN32_WINNT鏈畾涔夋垨鑰呭叾鐗堟湰鍙峰皬浜?x400錛岄偅涔坵indows.h浼氳嚜鍔ㄥ鍏ユ棫鏈夌殑winsock.h錛岃繖鏍峰啀褰搘insock2.h琚寘鍚椂渚夸細寮曡搗閲嶅畾涔夈?/p>
榪欓噷瑕佽鏄庣殑鏄紝瀹廤IN32_LEAN_AND_MEAN鐨勪綔鐢ㄦ槸鍑忓皬win32澶存枃浠跺昂瀵鎬互鍔犲揩緙栬瘧閫熷害錛屼竴鑸敱AppWizard鍦╯tdafx.h涓嚜鍔ㄥ畾涔夈俖WIN32_WINNT鐨勪綔鐢ㄦ槸寮鍚珮鐗堟湰鎿嶄綔緋葷粺涓嬬殑鐗規畩鍑芥暟錛屾瘮濡傝浣跨敤鍙瓑寰呭畾鏃跺櫒錛圵aitableTimer錛夛紝灝卞緱瑕佹眰_WIN32_WINNT鐨勫煎ぇ浜庢垨絳変簬0x400銆傚洜姝わ紝濡傛灉浣犳病鏈夐亣鍒頒笂榪頒袱涓棶棰橈紝寰堝彲鑳芥槸浣犳病鏈夊湪榪欎簺鏉′歡涓嬭繘琛岀綉緇滅紪紼嬨?/p>
闂榪樻病鏈夌粨鏉燂紝瑕佺煡閬撻櫎浜哣C鑷甫windows搴撴枃浠跺錛孧S鐨凱latform SDK涔熷惈鏈夎繖浜涘ご鏂囦歡銆傛垜浠緢鍙兘鍙戠幇鍦ㄤ箣鍓嶈兘澶熷ソ濂界紪璇戠殑紼嬪簭鍦ㄦ敼鍙樹簡windows澶存枃浠跺寘鍚礬寰勫悗鍙堝嚭浜嗛棶棰樸傚師鍥犲緢綆鍗曪紝Platform SDK涓殑windows.h涓嶸C鑷甫鐨勬枃浠跺瓨鍦ㄥ樊寮傦紝鍏剁浉鍚屼綅緗殑浠g爜濡備笅錛?/p>
#ifndef NOGDI 鍞夛紝鎴戜滑涓嶇瑕侀棶MS涓轟粈涔堣鎼炶繖涔堝鑺辨牱錛屾洿璁╀漢姘旀劋鐨勬槸錛屾棦鐒朵唬鐮佷笉涓鏍鳳紝windows.h閲屽嵈娌℃湁浠諱綍涓涓畯瀹氫箟鑳藉甯姪紼嬪簭杈ㄥ埆褰撳墠浣跨敤鐨勬枃浠舵槸VC鑷甫鐨勮繕鏄疨SDK閲岀殑銆?/p>
鍚庢潵錛屾垜鍐欎簡涓涓ご鏂囦歡涓撻棬澶勭悊winsock2.h鐨勫寘鍚棶棰橈紝鍚嶄負winsock2i.h錛屽彧闇鍦ㄨ浣跨敤WinSock2.0鐨勬簮鏂囦歡閲岀涓涓寘鍚鏂囦歡鍗沖彲錛屼笉榪囩敱浜庡墠闈㈡彁鍒扮殑闂錛屽綋浣跨敤PSDK鏃訛紝闇瑕佹墜宸ュ畾涔変竴涓婾SING_WIN_PSDK錛屾簮鐮佸涓嬶細 #ifndef _WINSOCK2API_ // Prevent inclusion of winsock.h // NOTE: If you use Windows Platform SDK, you should enable following definition: #if !defined(WIN32_LEAN_AND_MEAN) && (_WIN32_WINNT >= 0x0400) && !defined(USING_WIN_PSDK) |
Causes:
璁劇疆浜咲F鏍囧織鐨刬p鍖呭綋閬囧埌璺敱鍣ㄧ殑MTU姣斿寘灝忕殑鏃跺欙紝涓嶄細琚礬鐢卞櫒鎷嗗寘銆傝岃礬鐢卞櫒鍙戦乮cmp娑堟伅鍒板彂閫佺錛岄氱煡瀹冨簲璇ユ媶鍖呫?/p>
浣唅cmp娑堟伅琚槻鐏鎷︽埅涓嬫潵銆?/p>
鐜鍜岀幇璞★細
榪欎釜渚嬪瓙涓紝MTU鍦╟lient鍜宻erver閮芥槸1500.
dump鍑烘潵鐨勫寘濡備笅:
瀹㈡埛绔湅鍒扮殑:
鍙戦佷簡2涓寘錛屽悗1涓寘鎴愬姛錛岀1涓繃澶ц屼笉鍋滅殑琚彂閫?
id 57558, offset 0, flags [DF], proto: TCP (6), length: 1500) 10.54.40.43.43145 > 10.29.14.74.http: ., cksum 0×5096 (incorrect (-> 0×5c4e), 0:1448(1448) ack 1 win 46
17:23:06.933580 IP (tos 0×0, ttl 64, id 57559, offset 0, flags [DF], proto: TCP (6), length: 730) 10.54.40.43.43145 > 10.29.14.74.http: P, cksum 0×4d94 (incorrect (-> 0×3933), 1448:2126(678) ack 1 win 46
17:23:07.167049 IP (tos 0×0, ttl 64, id 57560, offset 0, flags [DF], proto: TCP (6), length: 1500) 10.54.40.43.43145 > 10.29.14.74.http: ., cksum 0×5096 (incorrect (-> 0×5b5b), 0:1448(1448) ack 1 win 46
17:23:07.634922 IP (tos 0×0, ttl 64, id 57561, offset 0, flags [DF], proto: TCP (6), length: 1500) 10.54.40.43.43145 > 10.29.14.74.http: ., cksum 0×5096 (incorrect (-> 0×5987), 0:1448(1448) ack 1 win 46
鎺ュ彈绔湅鍒扮殑:
鍙湁730澶у皬鐨勫寘鎺ュ彈鎴愬姛
17:23:08.605622 IP (tos 0×0, ttl 59, id 57559, offset 0, flags [DF], proto: TCP (6), length: 730) 202.108.3.204.43145 > 10.29.14.74.http: P, cksum 0×9d5b (correct), 1448:2126(678) ack 1 win 46
瑙e喅鏂規硶:
璋冩暣鍙戦佺鏈哄櫒鐨勯厤緗?錛堜換閫?涓級
鍦ㄧ綉緇滃眰涓?
Decrease mtu on network adapter:
ifconfig eth* mtu 1400
鎿嶄綔緋葷粺閰嶇疆:
Clear the default ‘MTU discovery’ flag with sysctl:
net.ipv4.ip_no_pmtu_disc = 1
鎴栧湪搴旂敤紼嬪簭閲?
Set socket option ‘IP_MTU_DISCOVER’ with setsockopt(2) to clear ‘DF’ flag of IP package.
Reference:
Thanks錛?/strong>
esx kobe steve
鏉ヨ嚜錛?a >http://blog.developers.api.sina.com.cn/?p=672
鍘熸枃錛?a >http://drdr-xp-tech.blogspot.com/2009/04/black-hole-socket-problem.html
鐜板湪鏉ヨ璁轟笂嬈℃彁鍒扮殑騫跺彂FIFO,鍏跺疄鐜伴渶瑕佷竴浜涚壒孌婄殑鎶宸с傛垜涓婃璇磋瀹炵幇鍗曠嚎紼嬭鍗曠嚎紼嬪啓鐨凢IFO,浣嗘槸榪欓噷鎴戜滑鍏堟潵璁ㄨ涓鑸殑騫跺彂FIFO銆?br>
鎴戜滑鐭ラ亾,浼犵粺鐨勭敓浜ц呪斺旀秷璐硅呴棶棰?閫氬父鏄嬌鐢ㄤ竴涓叡浜殑緙撳啿鍖烘潵浜ゆ崲鏁版嵁鐨?鐢熶駭鑰呭拰娑堣垂鑰呭悇鑷湁瀵瑰簲鐨勬寚閽?鍦ㄧ敓浜ф垨鑰呮秷璐圭殑鏃跺欑浉搴斿湴縐誨姩銆傚鏋滆揪鍒頒簡緙撳啿鍖虹殑杈圭晫鍒欏洖緇曘傚鏋滅敓浜ц呮寚閽堣拷涓婃秷璐硅呮寚閽?鍒欒〃鏄庣紦鍐插尯婊′簡;濡傛灉娑堣垂鑰呮寚閽堣拷涓婄敓浜ц呮寚閽?鍒欒〃鏄庣紦鍐插尯絀轟簡銆傞棶棰樺湪浜?涓轟簡闃叉鍦ㄧ紦鍐插尯婊$殑鏃跺欐彃鍏ユ暟鎹?鎴栬呭湪緙撳啿鍖虹┖鐨勬椂鍊欏垹闄ゆ暟鎹?鐢熶駭鑰呮垨鑰呮秷璐硅呯殑姣忎竴嬈℃彃鍏ユ垨鑰呭垹闄ゆ暟鎹搷浣?閮藉繀欏誨悓鏃惰闂繖涓や釜鎸囬拡,榪欏氨甯︽潵浜嗕笉蹇呰鐨勫悓姝ャ?br>
鍦ㄥ崟鏍稿鐞嗗櫒涓?鍏變韓緙撳啿鍖烘柟寮忛潪甯擱珮鏁?騫朵笖鍏鋒湁鍥哄畾鐨勭┖闂村紑閿(鏈夋椂鍊欎綘闇瑕佷繚瀹堝湴浼拌涓涓瘮杈冨ぇ鐨勬暟鍊?銆備絾鏄湪澶氭牳澶勭悊鍣ㄤ笂(鎴栬匰MP緋葷粺涓?,濡傛灉瑕佸疄鐜板茍鍙戠殑FIFO,灝卞繀欏繪憭寮冭繖縐嶆柟寮忋備嬌鐢ㄥ崟閾捐〃鑰屼笉鏄叡浜紦鍐插尯灝卞彲浠ラ伩寮榪欎釜闂,榪欐槸絎竴涓妧宸с?br>
絎簩涓妧宸у叧緋誨埌閾捐〃鐨勪嬌鐢ㄦ柟鍚戙備竴鑸嬌鐢ㄩ摼琛?鍏舵彃鍏ユ垨鑰呭垹闄よ妭鐐圭殑浣嶇疆鏄換鎰忕殑銆備絾鏄妸閾捐〃浣滀負FIFO浣跨敤,鍒欏彧鑳戒篃鍙渶瑕佸湪涓ょ鎿嶄綔銆傞渶瑕佹敞鎰忕殑鏄繖鏃跺欏繀欏諱粠灝鵑儴TAIL鎻掑叆鏂扮殑鑺傜偣,鑰屼粠澶撮儴HEAD鍒犻櫎鑺傜偣銆傚惁鍒欎粠灝鵑儴鍒犻櫎鑺傜偣涔嬪悗,鏃犱粠寰楃煡鏂扮殑灝鵑儴鍦ㄥ摢閲?闄ら潪浠庡ご閮ㄩ亶鍘嗐傝繖鏍峰仛鐨勫ソ澶勬槸,鎻掑叆鎴栬呭垹闄ら兘鍙秹鍙婂埌涓涓妭鐐廣傛彃鍏ョ殑鏃跺?鍙璁╂柊鍒涘緩鐨勮妭鐐瑰寘鍚墍闇瑕佹彃鍏ョ殑鏁版嵁,騫朵笖鍏跺悗緇?涓嬩竴涓妭鐐?涓篘ULL;鍐嶈褰撳墠灝鵑儴鐨勮妭鐐圭殑鍚庣戶浠嶯ULL鍙樻垚榪欎釜鏂拌妭鐐?榪欎釜鏂拌妭鐐逛篃灝卞彉鎴愪簡鏂扮殑灝鵑儴鑺傜偣(榪欓噷鐨勬搷浣滈『搴忓緢鍏抽敭)銆傚垹闄ょ殑鏃跺?鍒欐鏌ュ綋鍓嶅ご閮ㄨ妭鐐圭殑鍚庣戶NEXT鏄惁NULL銆傝嫢鏄?琛ㄦ槑FIFO鏄┖鐨?鍚﹀垯,鍙朜EXT鎵鍖呭惈鐨勬暟鎹潵浣跨敤(鏄殑,鏄疦EXT鑰屼笉鏄綋鍓嶅ご閮ㄨ妭鐐規墍鍖呭惈鐨勬暟鎹?鍙傜湅涓嬩竴涓妧宸у拰涓嶅彉寮?,騫舵妸璇ユ暟鎹粠NEXT涓垹闄?鑰孨EXT涔熸垚涓烘柊鐨勫ご閮ㄨ妭鐐廣?娌℃湁閰嶅浘,鍚勪綅璇瘋嚜宸辨兂璞′竴涓?
鏈鍚庝竴涓妧宸?涓轟簡闅旂瀵瑰ご閮ㄥ拰灝鵑儴鐨勮闂?鎴戜滑闇瑕佷竴涓┖鑺傜偣N(涓嶅寘鍚暟鎹殑鏈夋晥鑺傜偣),鍏朵笅涓涓妭鐐逛負NULL;騫朵笖寮曞叆HEAD鍜孴AIL銆傚湪寮濮嬬殑鏃跺?HEAD鍜孴AIL閮界瓑浜嶯銆傛彃鍏ュ拰鍒犻櫎鏁版嵁鐨勮繃紼嬩笂闈㈠凡緇忚榪囦簡,榪欓噷璁蹭竴涓嬩笉鍙樺紡銆?br>
絎竴涓笉鍙樺紡:澶撮儴鑺傜偣鎬繪槸絀虹殑(涓嶅寘鍚暟鎹?銆傚湪FIFO鍒濆鍖栫殑鏃跺欒繖鏄垚绔嬬殑銆備箣鍚庣殑鎻掑叆鎿嶄綔涓嶆敼鍙樺ご閮ㄨ妭鐐?鍥犳瀵逛笉鍙樺紡娌℃湁褰卞搷銆傝屽浜庡垹闄ゆ搷浣?鍒欐瘡涓涓柊澶撮儴鑺傜偣鐨勬暟鎹兘宸茬粡鍦ㄥ畠鎴愪負鏂扮殑澶撮儴鑺傜偣鐨勬椂鍊欒鍒犻櫎(鍙栫敤)浜嗐?br>
絎簩涓笉鍙樺紡:鎻掑叆鍜屽垹闄ゆ搷浣滄病鏈夋暟鎹啿紿?涔熷氨鏄,鎻掑叆綰跨▼鍜屽垹闄ょ嚎紼嬩笉浼氬悓鏃惰鍐欏悓涓欏規暟鎹?涓嶆槸鑺傜偣)銆傛垜浠彧闇瑕佽冭檻FIFO涓虹┖,鍗崇浉褰撲簬鍒氬垰瀹屾垚鍒濆鍖栦箣鍚庣殑鎯呭喌銆傚浜庣┖鑺傜偣N,鎻掑叆鎿嶄綔鏀瑰彉鍏跺悗緇?鍒犻櫎鎿嶄綔鍒欐鏌ュ叾鍚庣戶銆傚彧瑕佹彃鍏ョ嚎紼嬩繚璇佸厛璁╂柊鑺傜偣鍖呭惈鏁版嵁鍐嶆妸鏂拌妭鐐規彃鍏ラ摼琛?涔熷氨鏄笉鑳藉厛鎻掑叆絀鴻妭鐐?鍐嶅線鑺傜偣涓~鍏ユ暟鎹?,閭d箞鍒犻櫎綰跨▼灝變笉浼氭嬁鍒扮┖鐨勮妭鐐廣傛垜浠湅鍒?鍞竴鍙兘鍙戠敓浜夌敤鐨勫湴鏂瑰氨鏄疦鐨勫悗緇ф寚閽?鎻掑叆綰跨▼鍙鍦ㄦ洿鏂癗鐨勫悗緇ф寚閽堜箣鍓嶅噯澶囧ソ鍏跺畠鐩稿叧鏁版嵁鍜岃緗嵆鍙?br>
榪欐剰鍛崇潃,濡傛灉鑳藉鍋氬埌:1)涓涓嚎紼嬪鏁版嵁鐨勬洿鏂拌兘澶熻鍙﹀涓涓嚎紼嬪嵆鍒葷湅鍒?2)瀵規暟鎹殑璇繪垨鑰呭啓(鏇存柊鍜岃鍙朜鐨勫悗緇ф寚閽?閮芥槸鍘熷瓙鐨?3)鎸囦護娌℃湁琚貢搴忔墽琛屻傞偅涔堝湪鍗曠嚎紼嬭鍗曠嚎紼嬪啓鐨勬儏鍐典笅,鐢氳嚦涓嶉渶瑕佷嬌鐢ㄩ攣灝卞彲浠ュ畨鍏ㄥ湴瀹屾垚騫跺彂FIFO;濡傛灉鏈夊涓敓浜ц呯嚎紼?鍒欏鍔犱竴涓敓浜ц呴攣;濡傛灉鏈夊涓秷璐硅呯嚎紼?鍒欏彲浠ュ鍔犱竴涓秷璐硅呴攣銆備篃灝辨槸璇?鍙互鏈夊洓縐嶇粍鍚堛?br>
浣嗘槸瀹為檯鎯呭喌榪滈潪濡傛銆傚浜?)鏄鏄撴弧瓚崇殑,鍥犱負鐜頒唬閫氱敤澶勭悊鍣ㄤ笂32浣嶆暟鎹殑璇繪垨鑰呭啓閫氬父閮芥槸鍘熷瓙鐨勩傚浜?),鍒欏彇鍐充簬緋葷粺鐨勫唴瀛樻ā鍨?鍦ㄥ己鍐呭瓨妯″瀷濡侰/C++涓槸婊¤凍鐨?鍦ㄥ急鍐呭瓨妯″瀷濡侸ava涓垯涓嶇劧銆備絾鏄富瑕佺殑闂榪樺湪浜?)銆傜敱浜庢寚浠ょ殑涔卞簭鎵ц,絎簩涓笉鍙樺紡鎵闇瑕佺殑淇濊瘉寰堝彲鑳借鐮村潖,鍗充嬌浠g爜紜疄鏄偅鏍峰啓鐨勩傚洜姝ら攣鏄繀涓嶅彲灝戠殑,鍥犱負鍔犻攣鐨勫悓鏃惰繕浼氭彃鍏ュ唴瀛樺睆闅溿?br>
榪欐牱鐪嬫潵,涓婃璇寸殑SRSW騫跺彂FIFO灝辨病鏈夌壒鍒殑鎰忎箟浜嗐傚共鑴嗗氨鐢ㄤ袱涓攣鍒嗗埆瀵瑰簲鐢熶駭鑰呭拰娑堣垂鑰?鑰屽茍涓嶉檺鍒剁敓浜ц呮垨鑰呮秷璐硅呯殑鏁伴噺:T_LOCK鍜孒_LOCK銆傚湪鎻掑叆鏂板緩鑺傜偣鍒伴摼琛ㄥ熬閮ㄧ殑鏃跺欎嬌鐢═_LOCK,鑰屽湪瀵瑰ご閮ㄦ搷浣滅殑鏃跺欎嬌鐢℉_LOCK銆?br>
鍏蜂綋鐨勪唬鐮佽繖閲屽厛涓嶇粰浜嗐傝繖閲岀殑綆楁硶涓嶆槸鎴戝彂鏄庣殑,鑰屾槸鏉ヨ嚜Maged M. Michael 鍜?nbsp;Michael L. Scott鐨凷imple, Fast, and Practical Non-Blocking and Blocking Concurrent Queue Algorithms銆傝鍙傝冨叾鍙岄攣綆楁硶鐨勪吉鐮併?br>
鐜板湪鏉ヨ璁烘父鎴忔秷鎭殑浼犻併傚湪涓涓綉娓哥殑榪愯惀鎴愭湰涓?甯﹀璐圭敤搴旇鏄緢澶х殑涓鍧椼傚洜姝ゅ浣曢珮鏁堢紪鐮佷互鍙婃敹鍙戞秷鎭氨鎴愪負鑺傜渷榪愯惀鎴愭湰鐨勫叧閿傝繖閲岄潰鑳藉仛寰堝鏂囩珷銆?br>
棣栧厛鏄竴涓熀鏈殑鍒ゆ柇:闅忕潃澶勭悊鍣ㄧ殑璁$畻鑳藉姏涓嶆柇鎻愰珮,浠ュ強澶氭牳鐨勬棩鐩婃櫘鍙?鍦ㄦ秷鎭殑緙栫爜浠ュ強鏀跺彂鐜妭,CPU璧勬簮灝嗕笉浼氭垚涓虹摱棰堛傜浉瀵圭殑,搴旇鍗冩柟鐧捐鑰冭檻濡備綍鍦ㄤ繚璇佹父鎴忔甯歌繍琛岀殑鍓嶆彁涓?闄嶄綆涓嶅繀瑕佺殑閫氫俊寮閿銆備篃灝辨槸璇?鍙互瀵規父鎴忎腑鐨勬秷鎭繘琛屼竴浜涙瘮杈冨鏉傜殑緙栫爜銆?br>
閭d箞娓告垙涓兘鏈夊摢浜涙秷鎭?鎴戜滑鐭ラ亾鑱婂ぉ鍜岃闊蟲秷鎭紭鍏堢駭姣旇緝浣?鑰屼笖鍙互閫氳繃涓撻棬鐨勬湇鍔″櫒鏉ュ鐞嗐傜湡姝f瘮杈冨叧閿佽兘澶熷獎鍝嶇帺瀹剁殑娓告垙浣撻獙鐨?鏄偅浜涚姸鎬佸彉鏇淬佸姩浣溿佺帺瀹朵箣闂存垨鑰呯帺瀹跺拰鏈嶅姟鍣?NPC涔嬮棿鐨勫疄鏃朵氦浜掔殑娑堟伅銆傚挨鍏舵槸,榪欎簺娑堟伅鐨勪紶閫佹湁涓ユ牸鐨勬椂搴忚姹傘傚鏋滀竴涓帺瀹跺厛鐪嬪埌鑷繁鐨勮鑹茶鐮嶆,鐒跺悗鎵嶇湅鍒板鏂瑰彂鍑烘潵鐨勬敾鍑誨姩浣?鐢氳嚦鏍規湰娌℃湁鐪嬪埌瀵規柟鏈変粈涔堝姩浣?浠?濂硅偗瀹氫細鎰ゆ劋涓嶅鉤銆傚洜姝?娑堟伅緋葷粺蹇呴』淇濊瘉姣忎竴鏉℃秷鎭殑鍙婃椂浼犻?騫朵笖涓嶈兘鎵撲貢瀹冧滑涔嬮棿鐨勯『搴忋?br>
榪欐剰鍛崇潃,姣忎竴鏉℃秷鎭繀欏繪湁鏄庣‘鐨勮竟鐣屻備篃灝辨槸璇?鏀跺埌涓鏉℃秷鎭箣鍚?鎺ユ敹鏂瑰繀欏昏兘澶熸槑紜繖鏉℃秷鎭湁澶氬皯涓瓧鑺傘傝繖鏄竴鏉℃樉鑰屾槗瑙佺殑瑕佹眰銆備絾鏄ぇ姒傛槸鍑轟簬鎯?鍦ㄥ疄璺典腑瀹冨父甯稿彉涓烘秷鎭紪鐮佷腑鐨勯暱搴﹀瓧孌點?br>
榪欐棤鐤戞槸涓縐嶆氮璐廣傚緢澶氭秷鎭殑闀垮害鏄浐瀹氱殑,浠呬粎闈犳鏌ュ叾娑堟伅綾誨瀷灝卞彲浠ヤ簡瑙e叾杈圭晫銆傚彉闀挎秷鎭殑澶勭悊鍚庨潰浼氳璁恒傛垜榪欓噷騫朵笉鏄瑕佹妸鍏蜂綋鐨勬父鎴忛昏緫涓庣綉緇滀唬鐮佹販鍦ㄤ竴璧楓傞氳繃浣跨敤鍏冩暟鎹氨鍙互鏈夋晥鐨勬妸緗戠粶浠g爜璺熷叿浣撶殑娓告垙閫昏緫鏈夋晥闅旂寮鏉ャ傚叧浜庡厓鏁版嵁鐨勪嬌鐢ㄥ悗闈篃浼氳鍔犳帰璁ㄣ備粖澶╂椂闂翠笉澶氫簡,涓嬮潰璁ㄨ娑堟伅綾誨瀷鐨勭紪鐮佷綔涓虹粨鏉熴?br>
閫氬父涓涓瓧鑺備細琚敤鏉ョ紪鐮佹秷鎭殑綾誨瀷,浠ユ柟渚挎帴鏀舵柟鐨勮В鐮併備絾鏄垜浠煡閬?娓告垙涓茍涓嶆槸姣忕綾誨瀷鐨勬秷鎭殑浼犻侀鐜囬兘鏄竴鏍風殑銆備簨瀹炰笂,鎴戜滑鐭ラ亾鍝簺娑堟伅浼氳澶ч噺鍙戦?鍝簺娑堟伅鐨勯鐜囦細浣庡緢澶?鑰屽彟澶栦竴浜涙秷鎭?涓澶╀篃涓嶄細鏈夊嚑鏉°傛槑涔庢,灝卞彲浠ラ噰鐢ㄩ潪瀵圭О鐨勭紪鐮佹柟寮忔潵緙栫爜娑堟伅鐨勭被鍨嬨傝繖灝辨槸Huffman緙栫爜銆傚浜庡崰鎹簡緇濆ぇ閮ㄥ垎閫氫俊閲忕殑鐘舵佸彉鏇存秷鎭岃█,鍗充嬌姣忔潯娑堟伅鑺傜渷涓嬪崐涓瓧鑺?涔熸槸闈炲父鍒掔畻鐨勩備互鎴戠殑緇忛獙,涓鍙版櫘閫歅C鍙互浣滀負鏈嶅姟鍣ㄦ敮鎸?000浜哄悓鏃跺湪綰跨殑瀹炴椂鍔ㄤ綔綾繪父鎴?娑堟伅閫氶噺鏄瘡縐?0000鏉?濡傛灉涓涓湇鍔¢泦緹ゆ湁5鍙板鐞嗗櫒,閭d箞灝辯浉褰撲簬鑺傜渷浜?00kbps鐨勫甫瀹姐傝繖榪樹粎浠呮槸浠庢秷鎭被鍨嬬紪鐮佹柟闈㈡Θ鍙栫殑銆傚綋鐒?Huffman緙栫爜鐨勮В鐮佹槸姣旇緝楹葷儲鐨?鏁堢巼涔熶細浣庝竴浜涖備絾鏄濡傚墠闈㈡墍鎸囧嚭鐨?榪欓儴鍒嗙殑榪愯寮閿騫朵笉浼氶犳垚鎬ц兘鐡墮銆?br>