锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
]]>
1 嫻佹帶鍒朵紶杈撳崗璁紙SCTP錛夊彂灞曠畝浠?/p>
銆銆闅忕潃IP緗戝悜澶氫笟鍔$綉鍙戝睍錛屽挨鍏舵槸鐩墠IP鐢佃瘽銆両P瑙嗛浼氳絳変笟鍔$殑鍙戝睍錛屽湪IP緗戜腑浼犻佷俊浠や俊鎭垚涓哄繀鐒躲傜洰鍓岻P緗戜腑淇′護娑堟伅鐨勪氦鎹㈤氬父鏄嬌鐢═CP鎴朥DP瀹屾垚錛屼絾鏄繖涓や釜鍗忚閮戒笉鑳芥弧瓚崇數淇¤繍钀ョ綉涓俊浠ゆ壙杞界殑瑕佹眰銆?/p>
銆銆涓洪傚簲IP緗戞垚涓虹數淇¤繍钀ユ牳蹇冪綉鐨勫彂灞曡秼鍔匡紝IETF 鐨勪俊浠や紶杈撳伐浣滅粍錛圫IGTRAN錛変竴鐩村湪鐮旂┒鍜屽埗瀹欼P緗戞柊涓浠g殑浼犺緭鍗忚錛屽茍鍦↖ETF RFC 2960涓畾涔変簡嫻佹帶鍒朵紶杈撳崗璁紙SCTP錛孲tream Control Transmission Protocol錛夈係CTP鏄潰鍚戣繛鎺ョ殑鍙潬浼犻佸崗璁紝瀹冨悜涓婂眰搴旂敤鎻愪緵浜嗕笅鍒楁湇鍔★細
銆銆· 搴旂敤鏁版嵁鐨勬棤閿欒鏃犻噸澶嶇殑鍙潬浼犺緭錛?/p>
銆銆· 鏍規嵁媯嫻嬪埌鐨凪TU闀垮害榪涜鏁版嵁鍖呭垎孌靛鐞嗭紝閬垮厤IP灞傜殑鍒嗘錛?/p>
銆銆· 鍦ㄥ涓祦闂寸殑鐢ㄦ埛娑堟伅鏈夊簭閫掍氦錛屽強鍗曠敤鎴鋒秷鎭寜鍒拌揪欏哄簭閫掍氦鐨勯夐」錛?/p>
銆銆· 閫氳繃鏀寔鍏寵仈鐨勫瀹夸富鏈虹壒鎬э紝瀹炵幇緗戠粶綰у閿欍?/p>
銆銆SCTP鏄負浼犺緭淇′護涓氬姟嫻佽屽埗瀹氱殑錛屽畠鏈韓鎵鍏鋒湁鐨勩佷紭浜嶵CP鐨勪竴浜涘厛榪涘崗璁満鍒訛紝濡傞夋嫨鎬ч噸浼犮佹棤搴忛掍氦鍜屾敮鎸佸縐嶇綉緇滅壒鎬х瓑錛屼嬌寰桽CTP鑳藉鍦ㄤ竴瀹氱▼搴︿笂婊¤凍楂樻ц兘浼犺緭鐨勯渶姹傘傝屼笖錛孲CTP閲囩敤浜嗙被鍚孴CP鐨勬祦閲忔帶鍒舵満鍒訛紝涓嶅瓨鍦ㄧ被浼煎熀浜嶶DP鐨勫疄鏃跺獟浣撴祦瀵筎CP鎬ц兘閫犳垚鐨勫姡鍖栧共鎵伴棶棰樺拰鍏鉤鎬ч棶棰樸傚洜姝わ紝SCTP灝嗘湁鍙兘鍙栦唬TCP錛屾垚涓轟笅涓浠P緗戜笂闈㈠悜榪炴帴鐨勫彲闈犱紶閫佸眰鍗忚銆?/p>
2 TCP鐨勪笉瓚?/p>
銆銆TCP鏄洰鍓岻nternet涓婂簲鐢ㄦ渶騫挎硾鐨勯潰鍚戣繛鎺ョ殑浼犻佸眰鍗忚錛屽畠涓洪氫俊鐨勪袱绔彁渚涗簡鍙潬鐨勬暟鎹紶杈擄紝鑰屼笖鎻愪緵浜嗘祦閲忔帶鍒跺拰鎷ュ鎺у埗鍔熻兘銆傜敱浜庡師鏉P緗戞彁渚涚殑鏄?#8220;灝藉姏鑰屼負錛坆est-effort錛?#8221;鐨勬湇鍔★紝鍥犳TCP瀛樺湪璁稿涓嶈凍涔嬪錛?/p>
銆銆· TCP鏄潰鍚戝瓧鑺傛祦鐨勩傝繖鎰忓懗鐫娑堟伅鐨勬弿榪板繀欏葷敱搴旂敤鏉ュ畬鎴愶紝鑰屼笖瑕佸湪娑堟伅緇撴潫鏃舵樉紺洪氱煡TCP浠ヨ揩浣垮叾绔嬪嵆鍙戦佺浉搴旂殑鏁版嵁銆?/p>
銆銆· 璁稿搴旂敤鍙渶瑕佷俊浠や俊鎭殑閮ㄥ垎鏈夊簭錛屼緥濡傚睘浜庡悓涓鍛煎彨鎴栧悓涓浼氳瘽鐨勬秷鎭氨鏄繖鏍楓傝孴CP鍙彁渚涗弗鏍肩殑鏁版嵁鎸夊簭浼犺緭錛岃繖浼氬鑷翠笉蹇呰鐨勯槦澶存嫢濉炲茍浣挎秷鎭殑浼犺緭鏃跺歡澧炲ぇ銆?/p>
銆銆· TCP榪炴帴鐩存帴鐢變竴瀵逛紶閫佸眰鍦板潃錛圛P鍦板潃鍜岀鍙e彿錛夎瘑鍒紝鏃犳硶鎻愪緵瀵瑰瀹夸富鏈虹殑閫忔槑鏀寔銆?/p>
銆銆· 鍏稿瀷鐨凾CP瀹炵幇涓嶅厑璁擱珮灞傚簲鐢ㄨ瀹氬崗璁帶鍒跺弬鏁般備絾鏄竴浜涘簲鐢ㄥ彲鑳戒細闇瑕佽皟鑺備紶閫佸眰鍗忚鐨勫睘鎬т互婊¤凍鍏惰姹傦紝渚嬪鏌愪簺搴旂敤鏈夎緝楂樼殑鏃跺歡瑕佹眰錛岃屽彟涓浜涘垯鍙姹傝緝楂樼殑鍙潬鎬с?/p>
3 榪炴帴涓庡叧鑱?/p>
銆銆TCP涓殑榪炴帴鏄寚涓や釜TCP绔偣閫氳繃“涓夋鎻℃墜”榪囩▼寤虹珛鐨勭敱涓瀵逛紶閫佸眰鍦板潃錛圛P鍦板潃鍜岀鍙e彿錛夎瘑鍒殑浼犻侀氶亾銆?/p>
銆銆鍦⊿CTP涓? TCP涓殑榪炴帴琚紩鐢充負鍏寵仈(associ-
ation錛夈備竴涓叧鑱旂殑涓や釜SCTP绔偣閮藉悜瀵規柟鎻愪緵涓涓猄CTP绔彛鍙峰拰涓涓狪P鍦板潃鍒楄〃錛岃繖鏍鋒瘡涓叧鑱旈兘鐢變袱涓猄CTP绔彛鍙峰拰涓や釜IP鍦板潃鍒楄〃鏉ヨ瘑鍒傚湪涓涓叧鑱斿唴鐨勬嫢濉炴帶鍒舵満鍒朵笌TCP榪炴帴鐨勬嫢濉炴帶鍒舵満鍒剁被浼箋?/p>
銆銆涓涓叧鑱旀槸鐢卞涓崟鍚戠殑嫻佺粍鎴愮殑銆傚悇涓祦涔嬮棿鐩稿鐙珛錛屽彲浠ュ崟鐙彂閫佹暟鎹屼笉鍙楀叾浠栨祦鐨勫獎鍝嶏紝涔熷彲浠ュ叡鍚屽疄鐜扮敤鎴鋒暟鎹殑鏈夊簭閫掍氦銆傛祦鐨勫緩绔嬪拰鎷嗛櫎榪囩▼鐩稿鐙珛銆佺畝鍗曘傝屽叧鑱旂殑寤虹珛榪囩▼鐩稿鑰岃█灝辨瘮杈冨鏉傦紝鏄釜“鍥涙鎻℃墜”榪囩▼錛岃屼笖鍏朵腑瑕佺敤鍒?#8220;cookie”鐨勬蹇點傛墍璋?#8220;cookie”瀹為檯灝辨槸涓涓惈鏈夌鐐瑰垵濮嬩俊鎭拰鍔犲瘑淇℃伅鐨勬暟鎹潡錛屽畠鍦ㄥ叧鑱斿緩绔嬫椂琚氫俊鐨勪袱绔鐞嗗茍浜ゆ崲銆?/p>
4 SCTP鐨勫瀹夸富鏈虹壒鎬у強搴旂敤
銆銆SCTP鏀寔浼犻佸眰鐨勫瀹夸富鏈烘湇鍔°傚綋緗戠粶鍙戠敓鏁呴殰鏃訛紝澶氬涓繪満鏈嶅姟鍙互澧炲己緗戠粶鐨勫仴澹э紙robustness錛夈傚湪鏌愪簺搴旂敤鍦哄悎錛岃繖涓壒鎬ч潪甯擱噸瑕併係CTP瀵瑰瀹夸富鏈烘湇鍔$殑鏀寔瑕佹眰鍏寵仈鐨勪竴绔垨涓ょ鍦ㄤ笉鍚岀殑緗戠粶鎺ュ彛涓婂垎閰嶆湁澶氫釜IP鍦板潃銆?/p>
銆銆涓鑸潵璇達紝瑕佸湪閫氫俊鐨勪袱绔疄鐜扮湡姝g殑鏁呴殰寮規ф仮澶嶏紝姣忎釜绔偣閮介渶瑕佹湁涓涓互涓婄殑IP緗戠粶鎺ュ彛錛屼互鏀寔澶氬涓繪満鏈嶅姟銆傚湪榪欑鎯呭喌涓嬶紝璺緞浣跨敤鐨勬暟閲忓氨鏄墍鏈夌鐐圭殑緗戠粶鎺ュ彛鐨勬渶灝忔暟錛屾鏃剁鐐硅姝g‘閫夋嫨鑷繁鐨勬簮鍦板潃鎵嶈兘鑾峰緱鏈浣寵礬寰勩備絾鏄紝濡傛灉绔偣鎬繪槸浣跨敤鍚屼竴涓簮鍦板潃錛岄偅涔堢鐐瑰氨鍚屾牱浼氬嚭鐜板崟鐐規晠闅溿傚洜涓哄綋绔偣閫夋嫨涓涓簮鍦板潃鏃訛紝瀹冩繪槸閫夋嫨鏁版嵁鍖呯殑婧愬湴鍧鏉ュ搴旂綉緇滄帴鍙g殑IP鍦板潃錛岃屽湪緗戠粶鎺ュ彛涓婃暟鎹寘灝嗗彈鍒扮粦瀹氬湴鍧鐨勯檺鍒躲傛崲鍙ヨ瘽璇達紝鐢變簬緇戝畾鍦板潃鐨勯檺鍒訛紝绔偣姘歌繙閮戒笉鑳介夋嫨涓嶅睘浜庤SCTP鍏寵仈鐨勬簮鍦板潃錛屽悓鏃跺绔鐐逛篃蹇呴』璁ゅ彲璇CTP鍏寵仈浣跨敤鐨勪換浣曚竴涓簮鍦板潃銆?/p>
銆銆褰撶鐐瑰湪涓涓瀹夸富鏈轟笂鏃訛紝濡傛灉鍏寵仈鐨勪袱绔粦瀹氭湁澶氫釜鍦板潃錛孲CTP鍏寵仈鐨勫彲鐢ㄦу皢澶уぇ澧炲己銆傚埄鐢ㄥ瀹夸富鏈鴻繖涓壒鎬у彲浠ュ湪涓や釜SCTP绔偣闂村緩绔嬪啑浣欑殑璺緞錛岃繖瀵歸偅浜涗竴鐩村姹傚湪緗戠粶鐨勪紶閫佸眰嬈″氨鑳芥彁渚涘閿欐満鍒剁殑搴旂敤鐗瑰埆鏈夌敤銆傝鍦⊿CTP鐨勪袱涓鐐歸棿寤虹珛鍐椾綑璺緞錛岃姹備袱涓鐐圭殑璁懼閮藉繀欏繪湁澶氫釜鎺ュ彛錛屽茍鍒嗛厤澶氫釜鍦板潃錛岃屼笖蹇呴』閰嶇疆濂借礬鐢便?/p>
銆銆鍥犳錛岄氳繃“澶氬涓繪満”鐗規э紝SCTP鎻愪緵浜嗚緝TCP寮哄ぇ寰楀鐨勮礬寰勭姸鎬佺洃鎺у姛鑳姐係CTP鍙互鐩戞祴榪滅鍦板潃鐨勫彲杈炬э紝褰撹繙绔湴鍧涓嶅彲杈炬椂錛屽畠鑳介氳繃浣跨敤澶囩敤鍦板潃鏇挎崲涓葷敤鍦板潃瀹炵幇鏁呴殰鐨勮嚜鍔ㄦ仮澶嶏紝鑰屼笖榪欎竴榪囩▼涓嶉渶瑕佷笂灞傚崗璁殑騫查銆備篃灝辨槸璇達紝“澶氬涓繪満”鐗規у彲浠ヤ嬌涓涓叧鑱斿彲浠ュ湪澶氫釜浼犺緭璺緞闂撮夋嫨鍜屽垏鎹紝浠庤屾彁楂樹簡緗戠粶綰у閿欑殑鑳藉姏銆?/p>
5 TCP涓嶴CTP鐨勫畨鍏ㄦ瘮杈?/p>
銆銆1. TCP鐨勫畨鍏ㄩ棶棰?/p>
銆銆涓浜汿CP搴旂敤琚叕璁や細鍙楀埌DoS鏀誨嚮銆備緥濡傦紝鏀誨嚮鑰呭彲浠ラ氳繃鍙戦佸ぇ閲忕殑榪炴帴寤虹珛璇鋒眰錛圱CP-SYN鏁版嵁鍖咃級鏉ユ敾鍑葷洰鐨勫湴錛屾湁鍙兘鏉ヨ嚜浼鐨処P鍦板潃銆傝鏀誨嚮涓繪満灝嗕笉鍋滃湴鍙戦丼YN-ACK鏁版嵁鍖呮潵鍥炲錛屽茍榪涘叆SYN-received鐘舵侊紝鐢氳嚦SYN闃熷垪灝嗚鎸ゆ弧錛堜緥濡傦紝絳夊緟寤虹珛鐨勮繛鎺ユ暟浼氳揪鍒頒竴涓瀬闄愶級錛岃屼笖瀹冨皢鎷掔粷鏂扮殑榪炴帴寤虹珛璇鋒眰銆?/p>
銆銆鍙﹀錛屼吉瑁呰繛鎺ユ槸瀵筎CP鐨勫彟涓涓綔鍦ㄥ▉鑳併傞氳繃鐚滄祴鏈夋晥鐨勫簭鍒楀彿錛屾敾鍑昏呭皢鍙兘浼鎴愪竴涓悎娉曡繛鎺ャ備絾鏄紝閫氳繃浣跨敤涓涓畨鍏ㄧ殑Hashsum綆楁硶錛屽鐩墠SYN-cookie榪涜浼鐨勬敾鍑葷殑鍙兘鎬у彧鏈?/224銆備緥濡傚綋浣跨敤SYS-cookie鏃訛紝瑕佹垚鍔熶綔涓轟竴涓吉瑁呯殑榪炴帴鏃訛紝鏀誨嚮鑰呭皢涓嶅緱涓嶅彂閫?24涓暟鎹寘銆?/p>
銆銆2. SCTP鐨勫畨鍏ㄦ満鍒?/p>
銆銆SCTP鍦ㄨ璁℃椂灝卞厖鍒嗚冭檻浜員CP鐨勪笉瓚熾備負闃叉鏀誨嚮鑰呭彂閫佷吉瑁呯殑SCTP鏁版嵁鍖呭埌鐜版湁鐨勮繛鎺ヤ腑錛孲CTP鐨勪袱绔兘浣跨敤涓涓О涓?#8220;璁よ瘉鏍囪”鐨?2bit鏁版嵁鏉ョ‘淇濇暟鎹寘鐪熸灞炰簬鐜版湁鐨勮繛鎺ャ傚洜姝わ紝闄や簡鍚堝茍灞炰簬涓涓繛鎺ョ殑婧愮鍙e拰鐩殑绔彛鐨勫湴鍧澶栵紝涓涓湁鏁堢殑SCTP鏁版嵁鍖呰繕蹇呴』鏈変竴涓紜殑鏍囪銆?/p>
銆銆璺烼CP涓嶅悓鐨勬槸錛孲CTP瑕佹眰鍦ㄨ繛鎺ュ緩绔嬫椂蹇呴』浣跨敤“cookie”銆傚鏈嶅姟鍣ㄦ潵璇達紝蹇呴』浜ゆ崲3涓俊鎭寘錛圛NIT銆両NIT-ACK銆丆OOKIE-ECHO錛夛紝鎵嶈兘寤虹珛涓涓畬鏁寸殑鏂拌繛鎺ャ?#8220;cookie”鏄釜闀垮害鍙彉鐨勶紝鍖呭惈鎵鏈夊拰鍦ㄦ湇鍔″櫒绔垵濮嬪寲TCB鐨勭浉鍏蟲暟鎹紝鍔犱笂浣跨敤HMAC鏉ョ‘淇濆畠鐨勫畨鍏ㄣ侶MAC鏄湪cookie涓敤鏉ヨ綆楃殑錛屾槸涓涓繚瀵嗐佹湇鍔″櫒鎵鎷ユ湁鐨刱ey銆傚紩鍏ヨ繖縐嶆満鍒剁殑鐩殑鍦ㄤ簬澧炲己鍗忚鐨勫畨鍏ㄦэ紝闃叉DoS鏀誨嚮鍜屼吉瑁呯瓑娼滃湪鐨勬敾鍑匯?/p>
銆銆鍚屼嬌鐢⊿YN-cookie鐨凾CP鐩告瘮杈冿紝SCTP琚敾鍑昏呬吉瑁呯殑鍙兘鎬уぇ澶ч檷浣庛傚洜涓猴紝鏀誨嚮鑰呬笉寰椾笉鍘葷寽嫻嬪寘鍚湪cookie涓殑HMAC鍊箋傚彲鑳芥у皬浜?128銆?/p>
銆銆鍊煎緱娉ㄦ剰鐨勬槸錛孲CTP浠呬粎璇曞浘鏉ュ寮虹綉緇滅殑鍙敤鎬э紝瀹冩病鏈夊寘鍚換浣曠洿鎺ュ拰鐢ㄦ埛淇℃伅璁よ瘉銆佸畬鏁存у拰淇濆瘑鍔熻兘鐨勫崗璁満鍒訛紝鍥犱負榪欎簺鐗規т富瑕佸彇鍐充簬IPSec鍗忚鍜屽簲鐢ㄥ眰鍗忚鐨勫畨鍏ㄧ壒鎬с?/p>
6 SCTP涓嶵CP鐨勫姛鑳藉強搴旂敤姣旇緝
銆銆鐢變簬SCTP涔熸槸涓涓潰鍚戣繛鎺ョ殑鍗忚錛屽彲鎻愪緵鎵鏈塗CP鑳藉鎻愪緵鐨勪紶閫佸眰鏈嶅姟銆傚洜姝わ紝鐜版湁鐨勮澶欼nternet搴旂敤灝嗛潰涓撮夋嫨浣跨敤TCP鎴朣CTP錛屾潵婊¤凍浠栦滑瀵逛紶閫佸眰鏈嶅姟鐨勯渶姹傘傞渶瑕佹敞鎰忕殑鏄紝瀵瑰鐞嗘垚鏈瘮杈冩晱鎰熺殑搴旂敤錛屽湪浣跨敤SCTP鎴朤CP寰楀埌鐨勬湇鍔℃槸涓嶄竴鏍風殑錛孲CTP鍙互涓哄簲鐢ㄦ彁渚涗竴涓崟鐙畾鍒剁殑嫻佷紶杈擄紝鑰孴CP涓哄簲鐢ㄦ彁渚涚殑鏄竴瀵瑰湴鍧銆?/p>
銆銆褰撶劧錛孲CTP榪樺叿鏈変竴浜汿CP鎵涓嶅叿澶囩殑鍔熻兘錛岃繖鏍鳳紝鍦ㄦ煇浜涘簲鐢ㄥ満鍚堬紝閫夋嫨SCTP瀹炵幇浼犻佸眰鏈嶅姟灝嗘槸鏇村ソ鐨勯夋嫨銆係CTP鍦ㄤ竴涓繛鎺ヤ腑鍙互鏀寔澶氫釜鐙珛鐢ㄦ埛淇℃伅嫻佺殑鍙戦併傛紜嬌鐢ㄨ鍔熻兘錛屽彲浠ユ湁鏁堝噺灝戞墍璋撶殑“head-of-line-blocking”闂甯︽潵鐨勫獎鍝嶏紝鍦═CP涓嚭鐜拌闂錛屼富瑕佹槸鍥犱負鏁版嵁鍖呯殑鍙戦佹湁涓ユ牸鐨勯『搴忔帶鍒躲傚洜姝わ紝瀵歸偅浜涢渶瑕佸湪涓涓繛鎺ヤ腑鍚屾椂鏀寔澶氫釜閫昏緫涓婄嫭绔嬬殑淇℃伅嫻佷紶閫佺殑搴旂敤錛孲CTP灝辯壒鍒湁鐢ㄣ?br>銆銆SCTP淇濈暀鏈夊簲鐢ㄤ俊鎭殑杈圭晫銆傚綋搴旂敤鏁版嵁涓嶆槸榪炵畫鐨勫瓧鑺傛祦錛岃屾槸瑕佹帴鏀剁鍗曠嫭澶勭悊澶у潡鐨勬暟鎹寘鏃訛紝璇ュ姛鑳藉氨闈炲父鏈夌敤銆傜浉鍙嶏紝TCP鍦ㄦ彁渚涘彲闈犳暟鎹祦浼犻佺殑鍚屾椂錛屽茍涓嶈兘鎸囧嚭搴旂敤涓寘鍚殑澶у潡鏁版嵁鍖呫?/p>
銆銆SCTP鏀寔娌℃湁鎸囨槑搴旂敤綾誨埆鐨勭敤鎴蜂俊鎭殑浼犻侊紝鑰屼笖鑳藉淇濊瘉鏁版嵁鐨勫彲闈犱紶閫併傚閭d簺闇瑕佸彂閫佹病鏈夐『搴忕殑鍙潬淇℃伅嫻佺殑搴旂敤錛屾垨鑰呭枩嬈嬌鐢ㄨ嚜韜殑淇℃伅鎺掑簭鏈哄埗鐨勫簲鐢紝SCTP鐨勮繖涓姛鑳藉氨鐗瑰埆鏈夌敤銆?br>
鍦ㄤ笂闈㈠懡浠や腑錛?#8220;\033[0;32;40m”琛ㄧず瀹氫箟鍚庨潰鏂囨湰鐨勯鑹詫紝“\033”琛ㄧず鍚姩涓涓漿涔夊簭鍒楋紝“[”瀹氫箟寮濮嬮鑹插畾涔夛紝“0”瀹氫箟榛樿鐨勫瓧浣撻鑹詫紝鍏跺畠閮ㄥ垎紼嶅悗瀹氫箟銆?br> “32”瀹氫箟鏂囨湰鐨勫墠鏅壊錛岃繖閲?2琛ㄧず緇胯壊錛?#8220;40”瀹氫箟鏂囨湰鐨勮儗鏅壊錛?0琛ㄧず榛戣壊銆?br> 鍦ㄥ瓧絎︿覆鐨勬渶鍚庡畾涔変簡“ \033[0m”錛屽畠鏄敤鏉ユ仮澶嶄簡榛樿鐨勬枃鏈鑹茶緗紝榪欐牱灝卞彧浼氬緱鍒頒竴涓僵鑹叉彁紺虹錛岃屼笉浼氬獎鍝嶅懡浠ゅ拰鍏惰緭鍑虹殑棰滆壊鏄劇ず錛堝嵆榛戝簳鐧藉瓧錛夈?
鎴戜滑涓鍏辨湁8縐嶅瓧浣撻鑹插彲渚涢夋嫨錛屽畠浠垎鍒槸30 (榛戣壊)銆?1 (綰㈣壊)銆?2 (緇胯壊)銆?3 (榛勮壊)銆?4 (钃濊壊)銆?5 ( 绱孩鑹?銆?6 (闈掕壊)鍜?7 (鐧借壊)銆?br> 瀵逛簬搴曡壊涔熸湁8縐嶉鑹插彲渚涢夋嫨錛屽彧闇瑕佸皢瀛椾綋棰滆壊鐨?淇敼涓?鍗沖彲錛屼緥濡?0銆?1銆?2銆?3銆?4銆?5銆?6銆?7銆?nbsp;
鏂囨湰灞炴?
鎴戜滑鍓嶉潰鎻愬埌錛岃漿涔夊簭鍒楃鍚庨潰鐨?#8220;0”琛ㄧず瀹氫箟鏂囨湰鐨勯鑹茶緗?br> 闄や簡棰滆壊璁劇疆浠ュ錛岃繕鍙互璁劇疆鏂囨湰鐨勫叾瀹冨睘鎬с?br> 杞箟搴忓垪絎﹀悗鍙互璺熶互涓嬫暟鍊鹼細0銆?銆?2銆?銆?4銆?銆?5銆?銆?7錛屽垎鍒畾涔夐鑹層侀粦浣撱侀潪榛戜綋銆佷笅鐢葷嚎銆侀潪涓嬬敾綰褲侀棯鐑併侀潪闂儊銆佺炕杞侀潪緲昏漿銆?br>
浣跨敤寮傛 I/O 澶уぇ鎻愰珮搴旂敤紼嬪簭鐨勬ц兘瀛︿範浣曟椂浠ュ強濡備綍浣跨敤 POSIX AIO API |
綰у埆錛?涓駭 M. Tim Jones (mtj@mtjones.com), 欏鵑棶宸ョ▼甯? Emulex 2006 騫?9 鏈?28 鏃?/p> Linux® 涓渶甯哥敤鐨勮緭鍏?杈撳嚭錛圛/O錛夋ā鍨嬫槸鍚屾 I/O銆傚湪榪欎釜妯″瀷涓紝褰撹姹傚彂鍑轟箣鍚庯紝搴旂敤紼嬪簭灝變細闃誨錛岀洿鍒拌姹傛弧瓚充負姝€傝繖鏄緢濂界殑涓縐嶈В鍐蟲柟妗堬紝鍥犱負璋冪敤搴旂敤紼嬪簭鍦ㄧ瓑寰?I/O 璇鋒眰瀹屾垚鏃朵笉闇瑕佷嬌鐢ㄤ換浣曚腑澶鐞嗗崟鍏冿紙CPU錛夈備絾鏄湪鏌愪簺鎯呭喌涓紝I/O 璇鋒眰鍙兘闇瑕佷笌鍏朵粬榪涚▼浜х敓浜ゅ彔銆傚彲縐繪鎿嶄綔緋葷粺鎺ュ彛錛圥OSIX錛夊紓姝?I/O錛圓IO錛夊簲鐢ㄧ▼搴忔帴鍙o紙API錛夊氨鎻愪緵浜嗚繖縐嶅姛鑳姐傚湪鏈枃涓紝鎴戜滑灝嗗榪欎釜 API 姒傝榪涜浠嬬粛錛屽茍鏉ヤ簡瑙d竴涓嬪浣曚嬌鐢ㄥ畠銆?/blockquote> |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
#include <stdio.h>
#include <stdlib.h>
#include <aio.h>
#include <errno.h>

int main(int argc, char *argv[])

{
int fd, ret;
struct aiocb my_aiocb;
fd = open( "file.txt", O_RDONLY );
if (fd < 0) perror("open");

/**//* Zero out the aiocb structure (recommended) */
bzero( (char *)&my_aiocb, sizeof(struct aiocb) );

/**//* Allocate a data buffer for the aiocb request */
my_aiocb.aio_buf = malloc(BUFSIZE+1);
if (!my_aiocb.aio_buf) perror("malloc");

/**//* Initialize the necessary fields in the aiocb */
my_aiocb.aio_fildes = fd;
my_aiocb.aio_nbytes = BUFSIZE;
my_aiocb.aio_offset = 0;
ret = aio_read( &my_aiocb );
if (ret < 0) perror("aio_read");
while ( aio_error( &my_aiocb ) == EINPROGRESS ) ;

if ((ret = aio_return( &my_iocb )) > 0)
{
printf("%s\n", my_aiocb.aio_buf);
/**//* got ret bytes on the read */
} else
{
/**//* read failed, consult errno */
}

}
bool Open(const char *filename);
const char *GetValue(const char *key, int idx=0);
#include "../src/Common/Settings.h"
int main(int argc, char *argv[])

{
Settings s;
if( s.Open("test.conf") )
{
LOGI("load file succed!");
LOGE("%s", s.GetValue("c", 3) );
}
else
{
LOGE("load file failed!");
}
return 0;
}