涓昏閮ㄥ垎錛屽洓嬈℃彙鎵嬶細
鏂紑榪炴帴鍏跺疄浠庢垜鐨勮搴︾湅涓嶅尯鍒嗗鎴風鍜屾湇鍔″櫒绔紝浠諱綍涓鏂歸兘鍙互璋冪敤close(or closesocket)涔嬬被 褰撹鍔ㄥ叧闂殑涓鏂規敹鍒癋IN鎶ユ枃鏃訛紝瀹冧細鍙戦丄CK紜鎶ユ枃(瀵逛簬ACK榪欎釜涓滆タ浣犲簲璇ュ緢鐔熸倝浜?銆傝繖閲屾湁涓?/span> 鎴戝彲浠ュ憡璇変綘錛屼竴鏃﹀綋浣犺皟鐢╟lose(or closesocket)錛岃繖涓绔氨浼氬彂閫丗IN鎶ユ枃銆備篃灝辨槸璇達紝鐜板湪琚姩 鍦ㄥ墠闈㈢殑鏂囩珷涓紝鎴戜竴鐩存病鎻怲CP鐨勭姸鎬佽漿鎹€傚湪榪欓噷鎴戣繕鏄湪鐘硅鮑鏄笉鏄灝嗛偅寮犲洓澶勯氱敤鐨勫浘鎷垮嚭鏉ワ紝 緇欏嚭涓涓甯稿叧闂椂鐨剋indump淇℃伅錛?/span>
琛ュ厖緇嗚妭錛?/strong>
鍏充簬浠ヤ笂鐨勫洓嬈℃彙鎵嬶紝鎴戣ˉ鍏呬笅緇嗚妭錛?/span> 鐗瑰埆鐨凾IME_WAIT鐘舵侊細
浠庝互涓奣CP榪炴帴鍏抽棴鐨勭姸鎬佽漿鎹㈠浘鍙互鐪嬪嚭錛屼富鍔ㄥ叧闂殑涓鏂瑰湪鍙戦佸畬瀵瑰鏂笷IN鎶ユ枃鐨勭‘璁?ACK)鎶ユ枃鍚庯紝 浠涔堟槸2MSL錛烳SL鍗矼aximum Segment Lifetime錛屼篃灝辨槸鎶ユ枃鏈澶х敓瀛樻椂闂達紝寮曠敤<TCP/IP璇﹁В>涓殑璇濓細“ 涓轟粈涔堥渶瑕?MSL錛熸牴鎹?lt;TCP/IP璇﹁В>鍜?lt;The TCP/IP Guide>涓殑璇存硶錛屾湁涓や釜鍘熷洜錛?/span> TIME_WAIT鐘舵佹墍甯︽潵鐨勫獎鍝嶏細
褰撴煇涓繛鎺ョ殑涓绔浜嶵IME_WAIT鐘舵佹椂錛岃榪炴帴灝嗕笉鑳藉啀琚嬌鐢ㄣ備簨瀹炰笂錛屽浜庢垜浠瘮杈冩湁鐜板疄鎰忎箟鐨?/span> 瀵逛簬鏈嶅姟鍣ㄨ岃█錛屽鏋滄湇鍔″櫒紿佺劧crash鎺変簡錛岄偅涔堝畠灝嗘棤娉曞啀2MSL鍐呴噸鏂板惎鍔紝鍥犱負bind浼氬け璐ャ傝В鍐寵繖 瀵逛簬TIME_WAIT鐨勬彃鏇詫細
褰撳緩绔嬩竴涓猅CP榪炴帴鏃訛紝鏈嶅姟鍣ㄧ浼氱戶緇敤鍘熸湁绔彛鐩戝惉錛屽悓鏃剁敤榪欎釜绔彛涓庡鎴風閫氫俊銆傝屽鎴風榛樿鎯呭喌 瀵逛簬鏈嶅姟鍣ㄧ錛屽綋璁劇疆浜哠O_REUSEADDR閫夐」鏃訛紝瀹冨彲浠ュ湪2MSL鍐呭惎鍔ㄥ茍listen鎴愬姛銆備絾鏄浜庡鎴風錛屽綋浣?/span> 瑕佽В鍐硍indows騫沖彴鐨勮繖涓棶棰橈紝鍙互璁劇疆SO_LINGER閫夐」銆係O_LINGER閫夐」鍐沖畾璋冪敤close鏃訛紝TCP鐨勮涓恒?/span> 濡備綘鎵瑙侊紝榪欐牱鍋氳櫧鐒惰В鍐充簡闂錛屼絾鏄茍涓嶅畨鍏ㄣ傞氳繃浠ヤ笂鏂瑰紡璁劇疆SO_LINGER鐘舵侊紝絳夊悓浜庤緗甋O_DONTLINGER 鏂紑榪炴帴鏃剁殑鎰忓錛?/strong> 榪欎技涔庡彲浠ラ氳繃璁劇疆SO_KEEPALIVE閫夐」鏉ヨВ鍐籌紝涓嶈繃涓嶇煡閬撹繖涓夐」鏄惁瀵逛簬鎵鏈夊鉤鍙伴兘鏈夋晥銆?
鎬葷粨錛?/strong>
涓漢鎰熻錛岃秺鍐欒秺鐑傘傛帴涓嬫潵浼氳鍒癟CP鐨勬暟鎹彂閫侊紝榪欎細娑夊強鍒版粦鍔ㄧ獥鍙e悇縐嶅畾鏃跺櫒涔嬬被鐨勪笢瑗褲傛垜鐪熻瘹
鐨勫嚱鏁板紑濮嬩富鍔ㄧ粓姝竴涓繛鎺ャ傝繖閲屽厛鏆傛椂璇存甯告儏鍐點傚綋璋冪敤close鍑芥暟鏂紑涓涓繛鎺ユ椂錛屼富鍔ㄦ柇寮鐨?/span>
涓鏂瑰彂閫丗IN(finish鎶ユ枃緇欏鏂廣傛湁浜嗕箣鍓嶇殑緇忛獙錛屾垜鎯充綘搴旇鏄庣櫧鎴戣鐨凢IN鎶ユ枃鏃朵粈涔堜笢瑗褲備篃灝辨槸
涓涓緗簡FIN鏍囧織浣嶇殑鎶ユ枃孌點侳IN鎶ユ枃涔熷彲鑳介檮鍔犵敤鎴鋒暟鎹紝濡傛灉榪欎竴鏂硅繕鏈夋暟鎹鍙戦佹椂錛屽皢鏁版嵁闄?/span>
鍔犲埌榪欎釜FIN鎶ユ枃鏃跺畬鍏ㄦ甯哥殑銆備箣鍚庝綘浼氱湅鍒幫紝榪欑闄勫姞鎶ユ枃榪樹細鏈夊緢澶氾紝渚嬪ACK鎶ユ枃銆傛垜浠墍瑕佹妸鎻?/span>
鐨勫師鍒欐槸錛孴CP鑲畾浼氬姏鎵鑳藉強鍦拌揪鍒版渶澶ф晥鐜囷紝鎵浠ヤ綘鑳藉鎯沖埌鐨勪紭鍖栨柟娉曪紝鎴戞兂TCP閮戒細鎯沖埌銆?
涓滆タ瑕佹敞鎰忥紝鍥犱負TCP鏄弻宸ョ殑錛屼篃灝辨槸璇達紝浣犲彲浠ユ兂璞′竴瀵筎CP榪炴帴涓婃湁涓ゆ潯鏁版嵁閫氳礬銆傚綋鍙戦丗IN鎶ユ枃
鏃訛紝鎰忔濇槸璇達紝鍙戦丗IN鐨勪竴绔氨涓嶈兘鍙戦佹暟鎹紝涔熷氨鏄叧闂簡鍏朵腑涓鏉℃暟鎹氳礬銆傝鍔ㄥ叧闂殑涓绔彂閫?/span>
浜咥CK鍚庯紝搴旂敤灞傞氬父灝變細媯嫻嬪埌榪欎釜榪炴帴鍗沖皢鏂紑錛岀劧鍚庤鍔ㄦ柇寮鐨勫簲鐢ㄥ眰璋冪敤close鍏抽棴榪炴帴銆?
鍏抽棴鐨勪竴绔篃鍙戦丗IN緇欎富鍔ㄥ叧闂銆傛湁鏃跺欙紝琚姩鍏抽棴绔細灝咥CK鍜孎IN涓や釜鎶ユ枃鍚堝湪涓璧峰彂閫併備富鍔?/span>
鍏抽棴绔敹鍒癋IN鍚庝篃鍙戦丄CK錛岀劧鍚庢暣涓繛鎺ュ叧闂?浜嬪疄涓婅繕娌″畬鍏ㄥ叧闂紝鍙槸鍏抽棴闇瑕佷氦鎹㈢殑鎶ユ枃鍙戦?/span>
瀹屾瘯)錛屽洓嬈℃彙鎵嬪畬鎴愩傚浣犳墍瑙侊紝鍥犱負琚姩鍏抽棴绔彲鑳戒細灝咥CK鍜孎IN鍚堝埌涓璧峰彂閫侊紝鎵浠ヨ繖涔熺畻涓嶄笂
涓ユ牸鐨勫洓嬈℃彙鎵?--鍥涗釜鎶ユ枃孌點?
涓嶈繃錛岃繖閲屾垜鍙粰鍑烘柇寮榪炴帴鏃剁殑鐘舵佽漿鎹㈠浘錛屾憳鑷?lt;The TCP/IP Guide>錛?
14:00:38.819856 IP cd-zhangmin.1748 > 220.181.37.55.80: F 1:1(0) ack 1 win 65535
14:00:38.863989 IP 220.181.37.55.80 > cd-zhangmin.1748: F 1:1(0) ack 2 win 2920
14:00:38.864412 IP cd-zhangmin.1748 > 220.181.37.55.80: . ack 2 win 65535
1. 榛樿鎯呭喌涓?涓嶆敼鍙榮ocket閫夐」)錛屽綋浣犺皟鐢╟lose( or closesocket錛屼互涓嬭close涓嶅啀閲嶅)鏃訛紝濡傛灉
鍙戦佺紦鍐蹭腑榪樻湁鏁版嵁錛孴CP浼氱戶緇妸鏁版嵁鍙戦佸畬銆?/span>
2. 鍙戦佷簡FIN鍙槸琛ㄧず榪欑涓嶈兘緇х畫鍙戦佹暟鎹?搴旂敤灞備笉鑳藉啀璋冪敤send鍙戦?錛屼絾鏄繕鍙互鎺ユ敹鏁版嵁銆?/span>
3. 搴旂敤灞傚浣曠煡閬撳绔叧闂紵閫氬父錛屽湪鏈綆鍗曠殑闃誨妯″瀷涓紝褰撲綘璋冪敤recv鏃訛紝濡傛灉榪斿洖0錛屽垯琛ㄧず瀵圭
鍏抽棴銆傚湪榪欎釜鏃跺欓氬父鐨勫仛娉曞氨鏄篃璋冪敤close錛岄偅涔圱CP灞傚氨鍙戦丗IN錛岀戶緇畬鎴愬洓嬈℃彙鎵嬨傚鏋滀綘涓嶈皟鐢?/span>
close錛岄偅涔堝绔氨浼氬浜嶧IN_WAIT_2鐘舵侊紝鑰屾湰绔垯浼氬浜嶤LOSE_WAIT鐘舵併傝繖涓彲浠ュ啓浠g爜璇曡瘯銆?/span>
4. 鍦ㄥ緢澶氭椂鍊欙紝TCP榪炴帴鐨勬柇寮閮戒細鐢盩CP灞傝嚜鍔ㄨ繘琛岋紝渚嬪浣燙TRL+C緇堟浣犵殑紼嬪簭錛孴CP榪炴帴渚濈劧浼氭甯稿叧
闂紝浣犲彲浠ュ啓浠g爜璇曡瘯銆?
浼氳繘鍏IME_WAIT鐘舵併俆IME_WAIT鐘舵佷篃縐頒負2MSL鐘舵併?
瀹?MSL)鏄換浣曟姤鏂囨琚涪寮冨墠鍦ㄧ綉緇滃唴鐨勬渶闀挎椂闂淬?#8221;閭d箞錛?MSL涔熷氨鏄繖涓椂闂寸殑2鍊嶃傚叾瀹炴垜瑙夊緱娌?/span>
蹇呰鎶婅繖涓狹SL鐨勭‘鍒囧惈涔夋悶鏄庣櫧錛屼綘鎵闇瑕佹槑鐧界殑鏄紝褰揟CP榪炴帴瀹屾垚鍥涗釜鎶ユ枃孌電殑浜ゆ崲鏃訛紝涓誨姩鍏抽棴鐨?/span>
涓鏂瑰皢緇х畫絳夊緟涓瀹氭椂闂?2-4鍒嗛挓)錛屽嵆浣夸袱绔殑搴旂敤紼嬪簭緇撴潫銆備綘鍙互鍐欎唬鐮佽瘯璇曪紝鐒跺悗鐢╪etstat鏌ョ湅涓嬨?
鍏朵竴錛屼繚璇佸彂閫佺殑ACK浼氭垚鍔熷彂閫佸埌瀵規柟錛屽浣曚繚璇侊紵鎴戣寰楀彲鑳芥槸閫氳繃瓚呮椂璁℃椂鍣ㄥ彂閫併傝繖涓氨寰堥毦鐢?/span>
浠g爜婕旂ず浜嗐?/span>
鍏朵簩錛屾姤鏂囧彲鑳戒細琚販娣嗭紝鎰忔濇槸璇達紝鍏朵粬鏃跺欑殑榪炴帴鍙兘浼氳褰撲綔鏈鐨勮繛鎺ャ傜洿鎺ュ紩鐢?lt;The TCP/IP Guide>
鐨勮娉曪細The second is to provide a “buffering period” between the end of this connection
and any subsequent ones. If not for this period, it is possible that packets from different
connections could be mixed, creating confusion.
鏄紝榪欎釜绔彛灝嗕笉鑳藉啀琚嬌鐢ㄣ傛煇涓鍙e浜嶵IME_WAIT鐘舵?鍏跺疄搴旇鏄繖涓繛鎺?鏃訛紝榪欐剰鍛崇潃榪欎釜TCP
榪炴帴騫舵病鏈夋柇寮(瀹屽叏鏂紑)錛岄偅涔堬紝濡傛灉浣燽ind榪欎釜绔彛錛屽氨浼氬け璐ャ?
涓棶棰樼殑涓涓柟娉曞氨鏄緗畇ocket鐨凷O_REUSEADDR閫夐」銆傝繖涓夐」鎰忓懗鐫浣犲彲浠ラ噸鐢ㄤ竴涓湴鍧銆?
涓嬩細浣跨敤涓涓殢鏈虹鍙d笌鏈嶅姟鍣ㄧ鐨勭洃鍚鍙i氫俊銆傛湁鏃跺欙紝涓轟簡鏈嶅姟鍣ㄧ鐨勫畨鍏ㄦэ紝鎴戜滑闇瑕佸瀹㈡埛绔繘琛?/span>
楠岃瘉錛屽嵆闄愬畾鏌愪釜IP鏌愪釜鐗瑰畾绔彛鐨勫鎴風銆傚鎴風鍙互浣跨敤bind鏉ヤ嬌鐢ㄧ壒瀹氱殑绔彛銆?
鐢╞ind騫惰緗甋O_REUSEADDR鏃訛紝濡傛灉鍦?MSL鍐呭惎鍔紝铏界劧bind浼氭垚鍔燂紝浣嗘槸鍦╳indows騫沖彴涓奵onnect浼氬け璐ャ?/span>
鑰屽湪linux涓婂垯涓嶅瓨鍦ㄨ繖涓棶棰樸?鎴戠殑瀹為獙騫沖彴錛歸inxp, ubuntu7.10)
SO_LINGER娑夊強鍒發inger緇撴瀯浣擄紝濡傛灉璁劇疆緇撴瀯浣撲腑l_onoff涓洪潪0錛宭_linger涓?錛岄偅涔堣皟鐢╟lose鏃禩CP榪炴帴
浼氱珛鍒繪柇寮錛孴CP涓嶄細灝嗗彂閫佺紦鍐蹭腑鏈彂閫佺殑鏁版嵁鍙戦侊紝鑰屾槸绔嬪嵆鍙戦佷竴涓猂ST鎶ユ枃緇欏鏂癸紝榪欎釜鏃跺橳CP榪?/span>
鎺ュ氨涓嶄細榪涘叆TIME_WAIT鐘舵併?
鐘舵併?
榪欎釜綆椾笉涓婃柇寮榪炴帴鏃剁殑鎰忓錛屽綋TCP榪炴帴鍙戠敓涓浜涚墿鐞嗕笂鐨勬剰澶栨儏鍐墊椂錛屼緥濡傜綉綰挎柇寮錛宭inux涓婄殑TCP瀹炵幇
浼氫緷鐒惰涓鴻榪炴帴鏈夋晥錛岃寃indows鍒欎細鍦ㄤ竴瀹氭椂闂村悗榪斿洖閿欒淇℃伅銆?
甯屾湜鍚勪綅鑳藉澶氭彁鎰忚銆傚浜嶵CP榪炴帴鐨勬柇寮錛屾垜浠彧瑕佹竻妤氾細
1. 鍦ㄩ粯璁ゆ儏鍐典笅錛岃皟鐢╟lose鏃禩CP浼氱戶緇皢鏁版嵁鍙戦佸畬姣曪紱
2. TIME_WAIT鐘舵佷細瀵艱嚧鐨勯棶棰橈紱
3. 榪炴帴鎰忓鏂紑鏃跺彲鑳戒細鍑虹幇鐨勯棶棰樸?/span>
4. maybe more...
鏈枃杞嚜錛?a href="http://www.shnenglu.com/kevinlynx/archive/2008/05/14/49825.html">http://www.shnenglu.com/kevinlynx/archive/2008/05/14/49825.html
]]>
鍑嗗錛?/strong>
鍦ㄨ繖閲屾湰鏂囧皢閬靛驚涓婁竴綃囨枃绔犵殑椋庢牸錛屽彧鎻怲CP鍗忚涓殑瑕佺偣錛岃繖鏍鋒垜瑙夊緱鍙互鏇村鏄撳湴鎺屾彙TCP銆傛垨鑰?/span> 鍦ㄤ互鍚庡悇縐嶇粏鑺備腑錛屽洜涓烘垜浠細娑夊強鍒板垎鏋愪竴浜汿CP涓殑鏁版嵁鎶ワ紝鍥犳涓涓崗璁寘鎴幏宸ュ叿蹇呬笉鍙皯銆傚湪 鍏充簬WinDump鐨勫叿浣撶敤娉曚綘鍙互浠庣綉涓婂叾浠栧湴鏂硅幏鍙栵紝榪欓噷鎴戝彧紼嶅井鎻愪竴涓嬨傝璁¦inDump寮濮嬬洃鍚暟鎹紝 鑾峰彇褰撳墠鏈哄櫒涓婄殑緗戠粶鎺ュ彛銆傜劧鍚庝嬌鐢細 寮濮嬪緗戠粶鎺ュ彛2鐨勬暟鎹洃鍚倃indump濡傚悓tcpdump(鍏跺疄灝辨槸tcpdump)涓鏍鋒敮鎸佽繃婊よ〃杈懼紡錛寃indump 閭d箞windump鍙細鏄劇ず绔彛鍙蜂負4000鐨勭綉緇滄暟鎹?
搴忓彿鍜岀‘璁ゅ彿錛?/strong>
瑕佽瑙CP鐨勫緩绔嬭繃紼嬶紝涔熷氨鏄偅涓墍璋撶殑涓夋鎻℃墜錛屽氨浼氭秹鍙婂埌搴忓彿鍜岀‘璁ゅ彿榪欎袱涓笢瑗褲傜炕涔﹀埌TCP 閭d箞錛岃繖涓簭鍙峰拰紜鍙鋒槸浠涔堬紵TCP鎶ユ枃涓烘瘡涓涓瓧鑺傞兘璁劇疆涓涓簭鍙鳳紝瑙夊緱寰堝鎬紵榪欓噷騫朵笉鏄負姣忎竴 鎺ョ潃鐪嬶紝紜鍙鋒槸浠涔堬紵鍥犱負TCP浼氬鎺ユ敹鍒扮殑鏁版嵁鍖呰繘琛岀‘璁わ紝鍙戦佺‘璁ゆ暟鎹寘鏃訛紝灝變細璁劇疆榪欎釜紜鍙鳳紝 澶ч儴鍒嗕功涓婂湪璁茬‘璁ゅ彿鍜屽簭鍙鋒椂錛岄兘浼氳紜鍙鋒槸搴忓彿鍔犱竴銆傝繖鍏跺疄鏈夌偣璇В浜猴紝鎵浠ユ垜鎵嶅湪榪欓噷搴熻瘽浜?/span> 寮濮嬩笁嬈℃彙鎵嬶細
濡傛灉浣犺繕涓嶄細綆鍗曠殑tcp socket緙栫▼錛屾垜寤鴻浣犲厛鍘誨瀛︼紝榪欏氨濂芥瘮浣犱笉浼欳++鍩烘湰璇硶錛屽氨鍒幓鐮旂┒vtable 涓夋鎻℃墜寮濮嬩簬瀹㈡埛绔瘯鍥捐繛鎺ユ湇鍔″櫒绔傚綋浣犺皟鐢ㄨ濡俢onnect鐨勫嚱鏁版椂錛屾甯告儏鍐典笅灝變細寮濮嬩笁嬈℃彙鎵嬨?/span> 濡傚墠鏂囨墍榪幫紝涓夋鎻℃墜涔熷氨鏄駭鐢熶簡涓変釜鏁版嵁鍖呫傚鎴風涓誨姩榪炴帴錛屽彂閫丼YN琚緗簡鐨勬姤鏂?娉ㄦ剰搴忓彿鍜?/span> 鍦ㄨ繘琛屼簡閾哄ぉ鐩栧湴鐨勭綏鍒╁反绱㈢殑鍩虹姒傚康鐨勮瑙e悗錛岀湅鐪嬭繖涓繛鎺ュ緩绔嬬殑榪囩▼錛屾槸涓嶆槸綆鍗曞緱鍑犺繎鏃犺亰錛?
鎴戜滑鏉ュ疄闄呯偣錛屽啓涓渶綆鍗曠殑瀹㈡埛绔唬鐮侊細 涓昏灝辨槸connect銆傝繍琛岀▼搴忓墠鎴戜滑榪愯windump錛? 濡備綍鍒嗘瀽windump鐨勭粨鏋滐紝寤鴻鍙傜湅<tcp/ip璇﹁В>涓浜巘cpdump鐨勬弿榪般?
寤虹珛榪炴帴鐨勯檮鍔犱俊鎭細
铏界劧SYN銆丄CK涔嬬被鐨勬姤鏂囨病鏈夌敤鎴鋒暟鎹紝浣嗘槸TCP榪樻槸闄勫姞浜嗗叾浠栦俊鎭傛渶涓洪噸瑕佺殑灝辨槸闄勫姞鐨凪SS鍊箋傝繖涓?/span> 榪炴帴鐨勬剰澶栵細
榪炴帴鐨勬剰澶栨垜澶ц嚧鍒嗕負涓ょ鎯呭喌(涔熻榪樻湁鏇村鎯呭喌)錛氱洰鐨勪富鏈轟笉鍙揪銆佺洰鐨勪富鏈哄茍娌℃湁鍦ㄦ寚瀹氱鍙g洃鍚?/span> 鍙戝嚭浜嗕笁涓簭鍙蜂竴鏍風殑SYN鎶ユ枃錛屼絾鏄病鏈夊緱鍒頒竴涓洖澶嶆姤鏂?搴熻瘽)銆傛瘡涓涓猄YN鎶ユ枃涔嬮棿鐨勯棿闅旀椂闂撮兘鏄?/span> (鎴戝己鐑堝緩璁綘鑳借繍琛寃indump鍘昏瘯楠岃繖閲屾彁鍒扮殑姣忎竴涓幇璞★紝濡傛灉浣犲湪ubuntu涓嬩嬌鐢╰cpdump錛岃浣弒udo :D)
鍑虹幇鎰忓鐨勭浜岀鎯呭喌鏄鏋滀富鏈烘暟鎹寘鍙揪錛屼絾鏄瘯鍥捐繛鎺ョ殑绔彛鏍規湰娌℃湁鐩戝惉錛岄偅涔堝彂閫丼YN鎶ユ枃鐨勮繖 鍙互鐪嬪嚭錛?AURORA-CCTEST.7100榪斿洖浜哛ST鎶ユ枃緇欐垜錛屼絾鏄垜榪欒竟鏍規湰涓嶅湪涔庤繖涓姤鏂囷紝緇х畫鍙戦丼YN鎶ユ枃銆?/span> 鍏充簬listen:
TCP鏈嶅姟鍣ㄧ浼氱淮鎶や竴涓柊榪炴帴鐨勯槦鍒椼傚綋鏂拌繛鎺ヤ笂鐨勫鎴風涓夋鎻℃墜瀹屾垚鏃訛紝灝變細灝嗗叾鏀懼叆榪欎釜闃熷垪銆傝繖涓槦
鍒楃殑澶у皬鏄氳繃listen璁劇疆鐨勩傚綋榪欎釜闃熷垪婊℃椂錛屽鏋滄湁鏂扮殑瀹㈡埛绔瘯鍥捐繛鎺ワ紙鍙戦丼YN錛夛紝鏈嶅姟鍣ㄧ涓㈠純鎶ユ枃錛?
鍚屾椂涓嶅仛浠諱綍鍥炲銆?
鎬葷粨錛?/strong>
鏍規湰璋堜笉涓婃帉鎻★紝瀵逛簬榪欑綰悊璁虹殑涓滆タ錛屽嵆浣夸綘鐜板湪鎺屾彙浜嗗啀澶氱殑緇嗚妭錛屼竴孌墊椂闂村悗涔熶細娣″繕銆?
<TCP/IP璇﹁В>涓竴鐩翠嬌鐢╰cpdump銆傝繖閲屽洜涓烘垜鐨勭郴緇熸槸windows錛屾墍浠ュ彧濂戒嬌鐢╳indows騫沖彴鐨則cpdump錛?/span>
涔熷氨鏄?/span>WinDump銆傚湪浣跨敤WinDump涔嬪墠錛屼綘闇瑕佸畨瑁呰紼嬪簭浣跨敤鐨勫簱WinpCap銆?
棣栧厛闇瑕佺‘瀹氳鍏剁洃鍚摢涓涓綉緇滆澶?鎴栬呰鏄綉緇滄帴鍙?銆備綘鍙互: windump -D
windump -i 2
灝嗕細鏍規嵁浣犳彁渚涚殑榪囨護琛ㄨ揪寮忚繃婊や笉闇瑕佺殑緗戠粶鏁版嵁鍖咃紝渚嬪錛?windump -i 2 port 4000
鐨勬姤鏂囧ご錛屾湁涓や釜寰堥噸瑕佺殑鍩?閮芥槸32浣?灝辨槸搴忓彿鍩熷拰紜鍙峰煙銆傚彲鑳芥湁浜涘悓瀛︿細瀵筎CP閭d釜鎶ユ枃澶存湁鎵
鐤戞儜(鑳界湅鎳傛垜鍦ㄨ浠涔堢殑浼氫駭鐢熻繖鏍風殑鐤戞儜涔堬紵)錛岃繖閲屾垜鍙互鍛婅瘔浣狅紝浣犲彲浠ュ亣鎯砊CP鐨勬姤鏂囧ご灝辨槸涓?/span>
C璇█緇撴瀯浣?鍋囨兂鑰屽凡錛屽幓緲葷炕bsd瀵筎CP鐨勫疄鐜幫紝鑲畾娌¤繖涔堢畝鍗?錛岄偅涔堝ぇ鑷翠笂錛屾墍璋撶殑TCP鎶ユ枃澶村氨鏄細typedef struct _tcp_header
{
/// 16浣嶆簮绔彛鍙?/span>
unsigned short src_port;
/// 16浣嶇洰鐨勭鍙e彿
unsigned short dst_port;
/// 32浣嶅簭鍙?/span>
unsigned long seq_num;
/// 32浣嶇‘璁ゅ彿
unsigned long ack_num;
/// 16浣嶆爣蹇椾綅[4浣嶉閮ㄩ暱搴︼紝淇濈暀6浣嶏紝ACK銆丼YN涔嬬被鐨勬爣蹇椾綅]
unsigned short flag;
/// 16浣嶇獥鍙eぇ灝?/span>
unsigned short win_size;
/// 16浣嶆牎楠屽拰
short crc_sum;
/// 16浣嶇揣鎬ユ寚閽?/span>
short ptr;
/// 鍙夐夐」
/// how to implement this ?
} tcp_header;
瀛楄妭闄勫姞涓涓簭鍙?閭d細鏄涔堝彲絎戠殑緙栫▼鎵嬫硶?)錛岃屾槸涓轟竴涓猅CP鎶ユ枃闄勫姞涓涓簭鍙鳳紝榪欎釜搴忓彿琛ㄧず鎶ユ枃
涓暟鎹殑絎竴涓瓧鑺傜殑搴忓彿錛岃屽叾浠栨暟鎹垯鏄牴鎹絎竴涓暟鎹殑鍋忕Щ鏉ュ喅瀹氬簭鍙風殑錛屼緥濡傦紝鐜板湪鏈夋暟鎹細
abcd銆傚鏋滆繖孌墊暟鎹殑搴忓彿涓?200錛岄偅涔坅鐨勫簭鍙峰氨鏄?200錛宐鐨勫簭鍙峰氨鏄?201銆傝孴CP鍙戦佺殑涓嬩竴涓暟鎹寘
鐨勫簭鍙峰氨浼氭槸涓婁竴涓暟鎹寘鏈鍚庝竴涓瓧鑺傜殑搴忓彿鍔犱竴銆備緥濡俥fghi鏄痑bcd鐨勪笅涓涓暟鎹寘錛岄偅涔堝畠鐨勫簭鍙峰氨
鏄?204銆傞氳繃榪欑鐪嬩技綆鍗曠殑鏂規硶錛孴CP灝卞疄鐜頒簡涓烘瘡涓涓瓧鑺傝緗簭鍙風殑鍔熻兘(緇堜簬鏄庣櫧涓轟粈涔堜功涓婅鍛婅瘔
鎴戜滑‘涓烘瘡涓涓瓧鑺傝緗竴涓簭鍙?#8217;浜嗗惂?)銆傛敞鎰忥紝璁劇疆搴忓彿鏄竴縐嶅彲浠ヨTCP鎴愪負’鍙潬鍗忚‘鐨勬墜孌點?/span>
TCP涓悇縐嶄貢涓冨叓緋熺殑涓滆タ閮芥槸鏈夌洰鐨勭殑錛屽ぇ閮ㄥ垎鐩殑榪樻槸涓轟簡’鍙潬‘涓や釜瀛椼傚埆鎶奣CP鐪嬮珮娣變簡錛屽鏋?/span>
璁╀綘鏉ヨ璁′竴涓綉緇滃崗璁紝鐩殑闇瑕佸憡璇変綘鏄?#8217;鍙潬鐨?#8216;錛屼綘灝變細鏄庣櫧涓轟粈涔堜細浜х敓閭d簺涔變竷鍏碂鐨勪笢瑗夸簡銆?
紜鍙烽氬父琛ㄧず鎺ユ敹鏂瑰笇鏈涙帴鏀跺埌鐨勪笅涓孌墊姤鏂囩殑搴忓彿銆備緥濡傛煇涓嬈℃帴鏀舵柟鏀跺埌搴忓彿涓?200鐨?瀛楄妭鏁頒婦鎶ワ紝
閭d箞瀹冨彂閫佺‘璁ゆ姤鏂囩粰鍙戦佹柟鏃訛紝灝變細璁劇疆紜鍙蜂負1204銆?
鍗婂ぉ(楂樻墜瀹藉涓?D)銆?
涔嬬被銆?
闅忎究鍦ㄧ綉涓婃壘寮犱笁嬈℃彙鎵嬬殑鍥撅細
紜鍙鳳紝鍥犱負榪?/span>閲屼笉鍖呭惈鐢ㄦ埛鏁版嵁錛屾墍浠ュ簭鍙峰拰紜鍙峰氨鏄姞涓鍑忎竴鐨勫叧緋?銆傛湇鍔″櫒绔敹鍒拌鎶ユ枃鏃訛紝姝?/span>
甯告儏鍐典笅灝卞彂閫丼YN鍜孉CK琚緗簡鐨勬姤鏂囦綔涓虹‘璁わ紝浠ュ強鍛婅瘔瀹㈡埛绔細鎴戞兂鎵撳紑鎴戣繖杈圭殑榪炴帴(鍙屽伐)銆傚鎴?/span>
绔簬鏄啀瀵規湇鍔″櫒绔殑SYN榪涜紜錛屼簬鏄啀鍙戦丄CK鎶ユ枃銆傜劧鍚庤繛鎺ュ緩绔嬪畬姣曘傚浜庨樆濉炲紡socket鑰岃█錛屼綘
鐨刢onnect鍙兘灝辮繑鍥炴垚鍔熺粰浣犮?
sockaddr_in addr;
memset( &addr, 0, sizeof( addr ) );
addr.sin_family = AF_INET;
addr.sin_port = htons( 80 );
/// 220.181.37.55
addr.sin_addr.s_addr = inet_addr( "220.181.37.55" );
printf( "%s : connecting to server.\n", _str_time() );
int err = connect( s, (sockaddr*) &addr, sizeof( addr ) );
windump -i 2 host 220.181.37.55
00:38:22.979229 IP noname.domain.4397 > 220.181.37.55.80: S 2523219966:2523219966(0) win 65535 <mss 1460,nop,nop,sackOK>
00:38:23.024254 IP 220.181.37.55.80 > noname.domain.4397: S 1277008647:1277008647(0) ack 2523219967 win 2920 <mss 1440,nop,nop,sackOK>
00:38:23.024338 IP noname.domain.4397 > 220.181.37.55.80: . ack 1 win 65535
鍙互琚崗鍟嗙殑MSS鍊煎熀鏈笂灝卞彧鍦ㄥ緩绔嬭繛鎺ユ椂鍗忓晢銆傚浠ヤ笂鏁版嵁琛ㄧず錛孧SS涓?460瀛楄妭銆?
褰撶洰鐨勪富鏈轟笉鍙揪鏃訛紝涔熷氨鏄錛孲YN鎶ユ枃孌墊牴鏈棤娉曞埌杈懼鏂?濡傛灉浣犵殑鏈哄櫒鏍規湰娌℃彃緗戠嚎錛屼綘灝變笉鍙揪)錛?/span>
閭d箞TCP鏀朵笉鍒頒換浣曞洖澶嶆姤鏂囥傝繖涓椂鍊欙紝浣犱細鐪嬪埌TCP涓殑瀹氭椂鍣ㄦ満鍒跺嚭鐜頒簡銆俆CP瀵瑰彂鍑虹殑SYN鎶ユ枃榪涜
璁℃椂錛屽綋鍦ㄦ寚瀹氭椂闂村唴娌℃湁寰楀埌鍥炲鎶ユ枃鏃訛紝TCP灝變細閲嶄紶鍒氭墠鐨凷YN鎶ユ枃銆傞氬父錛屽悇縐嶄笉鍚岀殑TCP瀹炵幇瀵逛簬
榪欎釜瓚呮椂鍊奸兘涓嶅悓錛屼絾鏄嵁鎴戣瀵燂紝閲嶄紶嬈℃暟鍩烘湰涓婇兘鏄?嬈°備緥濡傦紝鎴戣繛鎺ヤ竴涓笉鍙揪鐨勪富鏈猴細 12:39:50.560690 IP cd-zhangmin.1573 > 220.181.37.55.1024: S 3117975575:3117975575(0) win 65535 <mss 1460,nop,nop,sackOK>
12:39:53.538734 IP cd-zhangmin.1573 > 220.181.37.55.1024: S 3117975575:3117975575(0) win 65535 <mss 1460,nop,nop,sackOK>
12:39:59.663726 IP cd-zhangmin.1573 > 220.181.37.55.1024: S 3117975575:3117975575(0) win 65535 <mss 1460,nop,nop,sackOK>
鏈夎寰嬬殑錛屽湪windows涓婃槸3縐?縐?縐?2縐掋備笂闈㈢殑鏁版嵁浣犵湅涓嶅埌12縐掕繖涓暟鎹紝鍥犱負榪欐槸絎笁涓姤鏂囧彂鍑虹殑
鏃墮棿鍜宑onnect榪斿洖閿欒淇℃伅鏃剁殑鏃墮棿涔嬪樊銆傚彟涓鏂歸潰錛屽鏋滆繛鎺ュ悓涓涓綉緇滐紝榪欎釜闂撮殧鏃墮棿鍙堜笉鍚屻備緥濡?/span>
鐩存帴榪炲眬鍩熺綉錛岄棿闅旀椂闂村氨宸笉澶氫負500ms銆?
鏂逛細鏀跺埌RST琚緗殑鎶ユ枃(connect涔熶細榪斿洖鐩稿簲鐨勪俊鎭粰浣?錛屼緥濡傦細 13:37:22.202532 IP cd-zhangmin.1658 > 7AURORA-CCTEST.7100: S 2417354281:2417354281(0) win 65535 <mss 1460,nop,nop,sackOK>
13:37:22.202627 IP 7AURORA-CCTEST.7100 > cd-zhangmin.1658: R 0:0(0) ack 2417354282 win 0
13:37:22.711415 IP cd-zhangmin.1658 > 7AURORA-CCTEST.7100: S 2417354281:2417354281(0) win 65535 <mss 1460,nop,nop,sackOK>
13:37:22.711498 IP 7AURORA-CCTEST.7100 > cd-zhangmin.1658: R 0:0(0) ack 1 win 0
13:37:23.367733 IP cd-zhangmin.1658 > 7AURORA-CCTEST.7100: S 2417354281:2417354281(0) win 65535 <mss 1460,nop,nop,sackOK>
13:37:23.367826 IP 7AURORA-CCTEST.7100 > cd-zhangmin.1658: R 0:0(0) ack 1 win 0
涓夋榪囧悗connect灝辮繑鍥炰簡銆?鏁版嵁鍙嶆槧鐨勪簨瀹炴槸榪欐牱)
TCP榪炴帴鐨勫緩绔嬬殑鐩稿叧瑕佺偣灝辨槸榪欎簺(or more?)銆傛甯告儏鍐典笅灝辨槸涓夋鎻℃墜錛岄潪姝e父鎯呭喌涓嬪氨鏄疭YN涓夋瓚呮椂錛?/span>
浠ュ強鏀跺埌RST鎶ユ枃鍗磋蹇界暐銆?
鏈枃杞嚜錛?a href="http://www.shnenglu.com/kevinlynx/archive/2008/05/11/49482.html">http://www.shnenglu.com/kevinlynx/archive/2008/05/11/49482.html
]]>