锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
鍘熸枃鐗堟潈錛欳opyright (C) The Internet Society (2003).All Rights Reserved.
鍘熸枃鍦板潃錛?A target=_blank>http://midcom-p2p.sourceforge.net/draft-ford-midcom-p2p-01.txt
3.3.2. Peers behind the same NAT 瀹㈡埛绔兘澶勪簬鐩稿悓鐨凬AT涔嬪悗
Now consider the scenario in which the two clients (probably unknowingly) happen to reside behind the same NAT, and are therefore located in the same private IP address space. Client A has established a UDP session with server S, to which the common NAT has assigned public port number 62000. Client B has similarly established a session with S, to which the NAT has assigned public port number 62001.
鐜板湪璁╂垜浠潵鑰冭檻涓涓嬩袱涓鎴風(fēng)(寰堟湁鍙兘涓嶇煡涓嶈鐨勫氨浼?鍚屾椂浣嶄簬鐩稿悓鐨凬AT涔嬪悗錛岃屼笖鏄湪鍚屼竴涓瓙緗戝唴閮ㄧ殑鎯呭喌錛?Client A涓嶴涔嬮棿鐨勪細(xì)璇濅嬌鐢ㄤ簡(jiǎn)NAT鐨?2000绔彛錛孋lient B涓嶴涔嬮棿鐨勪細(xì)璇濅嬌鐢ㄤ簡(jiǎn)62001绔彛錛屽涓嬪浘鎵紺猴細(xì)
Suppose that A and B use the UDP hole punching technique as outlined above to establish a communication channel using server S as an introducer. Then A and B will learn each other's public IP addresses and port numbers as observed by server S, and start sending each other messages at those public addresses.The two clients will be able to communicate with each other this way as long as the NAT allows hosts on the internal network to open translated UDP sessions with other internal hosts and not just with external hosts. We refer to this situation as "loopback translation," because packets arriving at the NAT from the private network are translated and then "looped back" to the private network rather than being passed through to the public network. For example, when A sends a UDP packet to B's public address, the packet initially has a source IP address and port number of 10.0.0.1:124 and a destination of 155.99.25.11:62001. The NAT receives this packet, translates it to have a source of 155.99.25.11:62000 (A's public address) and a destination of 10.1.1.3:1234, and then forwards it on to B. Even if loopback translation is supported by the NAT, this translation and forwarding step is obviously unnecessary in this situation, and is likely to add latency to the dialog between A and B as well as burdening the NAT.
鎴戜滑鍋囪錛孋lient A 鍜?Client B 瑕佷嬌鐢ㄤ笂涓鑺傛垜浠墍鎻忚堪鐨?鈥淯DP鎵撴礊鎶鏈濓紝騫墮氳繃鏈嶅姟鍣⊿榪欎釜鈥滃獟浜衡濇潵璁よ瘑錛岃繖鏍稢lient A 鍜孋lient B棣栧厛浠庢湇鍔$S寰楀埌浜?jiǎn)褰兼鐨勫叕缃慖P鍦板潃鍜岀鍙o紝鐒跺悗灝卞線瀵規(guī)柟鐨勫叕緗慖P鍦板潃鍜岀鍙d笂鍙戦佹秷鎭傚湪榪欑鎯呭喌涓嬶紝濡傛灉NAT 浠呬粎鍏佽鍦?鍐呴儴緗戜富鏈轟笌鍏朵粬鍐呴儴緗戜富鏈猴紙澶勪簬鍚屼竴涓狽AT涔嬪悗鐨勭綉緇滀富鏈猴級(jí)涔嬮棿鎵撳紑UDP浼?xì)璇濋氫俊閫氶亾錛岃屽唴閮ㄧ綉涓繪満涓庡叾浠栧閮ㄧ綉涓繪満灝變笉鍏佽鐨勮瘽錛岄偅涔圕lient A 鍜孋lient B灝卞彲浠ラ氳瘽浜?jiǎn)銆傛垜浠妸榪欑鎯呭艦鍙仛鈥渓oopback translation鈥?鈥滃洖鐜漿鎹⑩?錛屽洜涓烘暟鎹寘棣栧厛浠庡眬鍩熺綉鐨勭鏈塈P鍙戦佸埌NAT杞崲錛岀劧鍚庘滅粫涓鍦堚濓紝鍐嶅洖鍒板眬鍩熺綉涓潵錛屼絾鏄繖鏍鋒繪瘮榪欎簺鏁版嵁閫氳繃鍏綉浼犻佸ソ銆備婦渚嬫潵璇達(dá)紝褰?Client A鍙戦佷簡(jiǎn)涓涓猆DP鏁版嵁鍖呭埌 Client B鐨勫叕緗慖P鍦板潃錛岃繖涓暟鎹寘鐨勬姤澶翠腑灝變細(xì)鏈変竴涓簮鍦板潃10.0.0.1:124鍜屼竴涓洰鏍囧湴鍧155.99.25.11:62001銆侼AT鎺ユ敹鍒拌繖涓寘浠ュ悗錛屽氨浼?榪涜鍦板潃杞崲)瑙f瀽鍑?guó)櫩欎釜鍖呬腑鏈変竴涓叕緗戝湴鍧婧愬湴鍧155.99.25.11:62000鍜屼竴涓洰鏍囧湴鍧10.1.1.3:1234錛岀劧鍚庡啀鍙戦佺粰B錛岃櫧璇碞AT鏀寔鈥渓oopback translation鈥濓紝鎴戜滑涔熷彂鐜幫紝鍦ㄨ繖縐嶆儏褰笅,榪欎釜瑙f瀽鍜屽彂閫佺殑榪囩▼鏈変簺澶氫綑錛屽茍涓旇繖涓狢lient A 鍜孋lient B 涔嬮棿鐨勫璇濆彲鑳芥綔鍦ㄦу湴緇橬AT澧炲姞浜?jiǎn)璐熸媴銆?BR>
The solution to this problem is straightforward, however. When A and B initially exchange address information through server S, they should include their own IP addresses and port numbers as "observed" by themselves, as well as their addresses as observed by S.The clients then simultaneously start sending packets to each other at each of the alternative addresses they know about, and use the first address that leads to successful communication. If the two clients are behind the same NAT, then the packets directed to their private addresses are likely to arrive first, resulting in a direct communication channel not involving the NAT. If the two clients are behind different NATs, then the packets directed to their private addresses will fail to reach each other at all, but the clients will hopefully establish connectivity using their respective public addresses. It is important that these packets be authenticated in some way, however, since in the case of different NATs it is entirely possible for A's messages directed at B's private address to reach some other, unrelated node on A's private network, or vice versa.
鍏跺疄錛岃В鍐寵繖涓棶棰樼殑鏂規(guī)鏄樉鑰屾槗瑙佺殑銆傚綋 Client A鍜孋lientB 鏈鍒濋氳繃鏈嶅姟鍣⊿浜ゆ崲褰兼鐨勫湴鍧淇℃伅鏃訛紝浠栦滑涔熷氨搴旇鈥滃彂鐜扳濅簡(jiǎn)鑷繁鐨処P鍦板潃鍜岀鍙b斺斾篃灝辨槸鏈嶅姟鍣⊿鎵鍙戠幇鐨勩備袱涓鎴風(fēng)鍚屾椂鐨勫彂閫?鏁版嵁鍖?鍒板鏂圭殑鍏綉鍦板潃鍜岀鏈夊湴鍧涓婏紝鐒跺悗閫夋嫨棣栧厛浣垮緱閫氫俊鎴愬姛鐨勯偅涓湴鍧灝卞彲浠ヤ簡(jiǎn)銆傚鏋滀袱涓鎴風(fēng)閮戒綅浜庡悓涓涓狽AT涔嬪悗錛岄偅涔堝彂寰縐佹湁鍦板潃鐨勬暟鎹寘搴旇鍏堜簬鍙戝線鍏綉鍦板潃鐨勬暟鎹寘鍒拌揪錛岃繖鏍峰氨寤虹珛浜?jiǎn)涓涓笉鍖呮嫭NAT鐨勭洿榪為氫俊閫氶亾銆傚鏋滀袱涓鎴風(fēng)浣嶄簬涓嶅悓NAT涔嬪悗錛岃櫧鐒跺彂閫佸埌瀵規(guī)柟縐佹湁鍦板潃鐨勬暟鎹寘浼?xì)姣棤鐤戦棶鐨勫彂閫佸け璐ワ紝浣嗚繕鏄緢鏈夊彲鑳戒嬌鐢ㄤ粬浠悇鑷殑鍏綉IP鍦板潃鏉ュ緩绔嬩竴鏉¢氫俊閫氶亾鐨勩傛墍浠ユ嫻嬭繖浜涙暟鎹寘鐨勬柟娉曞拰宸ヤ綔灝卞彉寰楅潪甯擱噸瑕侊紝涓嶈濡備綍錛屽彧瑕佸弻鏂歸兘澶勪簬涓嶅悓NAT涔嬪悗錛屽氨瀹屽叏鏈夊彲鑳?Client A 鎯沖彂閫佸埌 Client B 鐨勪俊鎭細(xì)琚彂鍒板埆鐨勬棤鍏崇殑鍦版柟鍘伙紝鍙嶄箣浜︾劧錛圕lient B 鎯沖彂閫佸埌 Client A鐨勬秷鎭篃浼?xì)琚彂鍒板埆鐨勬棤鍏崇殑鍦版柟鍘诲Q夈?BR>
(鏈鍚庝竴鍙モ渦nrelated node on A's private network鈥濇病鏈夊畬鍏ㄧ悊瑙f槸浠涔堟剰鎬濓紝鎬諱箣錛屾斁鍒版暣涓澧冧腑錛屽簲璇ュ氨鏄錛孋lient A 鐬勫噯 Client B鐨勭鏈夊湴鍧绔彛鐨勪俊鎭細(xì)琚玁AT杞彂鍒板埆鐨勫湴鏂瑰幓錛屽洜涓轟袱鑰呭浜庝笉鍚岀殑NAT涔嬪悗錛孨AT A 濡傛灉鍦?鍐呴儴緗戠粶 鎵懼埌浜?jiǎn)涓涓嫢鏈変笌Client B鐩稿悓鐨勭鏈夊湴鍧鐨勭數(shù)鑴戯紝灝變細(xì)鎶婁俊鎭彂閫佽繃鍘伙紝榪欐牱錛屽氨鏍規(guī)湰涓嶄細(xì)鍙戦佸埌 Client B 涓婂幓)
]]>
鍘熸枃鐗堟潈錛欳opyright (C) The Internet Society (2003).? All Rights Reserved.
鍘熸枃鍦板潃錛?A target=_blank>http://midcom-p2p.sourceforge.net/draft-ford-midcom-p2p-01.txt
3.3. UDP hole punching UDP鎵撴礊鎶鏈?BR>
The third technique, and the one of primary interest in this document, is widely known as "UDP Hole Punching." UDP hole punching relies on the properties of common firewalls and cone NATs to allow appropriately designed peer-to-peer applications to "punch holes" through the middlebox and establish direct connectivity with each other, even when both communicating hosts may lie behind middleboxes. This technique was mentioned briefly in section 5.1 of RFC 3027 [NAT-PROT], and has been informally described elsewhere on the Internet [KEGEL] and used in some recent protocols [TEREDO, ICE]. As the name implies, unfortunately, this technique works reliably only with UDP.
絎笁縐嶆妧鏈紝涔熸槸榪欑瘒鏂囩珷涓昏瑕佺爺絀剁殑錛屽氨鏄潪甯告湁鍚嶇殑鈥淯DP鎵撴礊鎶鏈濓紝UDP鎵撴礊鎶鏈緷璧栦簬鐢卞叕鍏遍槻鐏鍜宑one NAT錛屽厑璁?dāng)R傚綋鐨勬湁璁″垝鐨勭瀵圭搴旂敤紼嬪簭閫氳繃NAT鈥滄墦媧炩濓紝鍗充嬌褰撳弻鏂圭殑涓繪満閮藉浜嶯AT涔嬪悗銆傝繖縐嶆妧鏈湪 RFC3027鐨?.1鑺俒NAT PROT] 涓繘琛屼簡(jiǎn)閲嶇偣浠嬬粛錛屽茍涓斿湪Internet[KEGEL]涓繘琛屼簡(jiǎn)闈炴寮忕殑鎻忓彊錛岃繕搴旂敤鍒頒簡(jiǎn)鏈鏂扮殑涓浜涘崗璁紝渚嬪[TEREDO,ICE]鍗忚涓備笉榪囷紝鎴戜滑瑕佹敞鎰忕殑鏄紝鈥滄湳鈥濆鍏跺悕錛孶DP鎵撴礊鎶鏈殑鍙潬鎬у叏閮借渚濊禆浜嶶DP銆?BR>
We will consider two specific scenarios, and how applications can be designed to handle both of them gracefully. In the first situation, representing the common case, two clients desiring direct peer-to- peer communication reside behind two different NATs. In the second, the two clients actually reside behind the same NAT, but do not necessarily know that they do.
榪欓噷灝嗚冭檻涓ょ鍏稿瀷鍦烘櫙錛屾潵浠嬬粛榪炴帴鐨勫弻鏂瑰簲鐢ㄧ▼搴忓浣曟寜鐓ц鍒掔殑榪涜閫氫俊鐨勶紝絎竴縐嶅満鏅紝鎴戜滑鍋囪涓や釜瀹㈡埛绔兘澶勪簬涓嶅悓鐨凬AT涔嬪悗錛涚浜岀鍦烘櫙錛屾垜浠亣璁句袱涓鎴風(fēng)閮藉浜庡悓涓涓狽AT涔嬪悗錛屼絾鏄畠浠郊姝ら兘涓嶇煡閬?浠栦滑鍦ㄥ悓涓涓狽AT涓?銆?BR>
3.3.1. Peers behind different NATs 澶勪簬涓嶅悓NAT涔嬪悗鐨勫鎴風(fēng)閫氫俊
Suppose clients A and B both have private IP addresses and lie behind different network address translators. The peer-to-peer application running on clients A and B and on server S each use UDP port 1234.? A and B have each initiated UDP communication sessions with server S, causing NAT A to assign its own public UDP port 62000 for A's session with S, and causing NAT B to assign its port 31000 to B's session with S, respectively.
鎴戜滑鍋囪 Client A 鍜?Client B 閮芥嫢鏈夎嚜宸辯殑縐佹湁IP鍦板潃錛屽茍涓旈兘澶勫湪涓嶅悓鐨凬AT涔嬪悗錛岀瀵圭鐨勭▼搴忚繍琛屼簬 CLIENT A,CLIENT B,S涔嬮棿錛屽茍涓斿畠浠兘寮鏀句簡(jiǎn)UDP绔彛1234銆?CLIENT A鍜孋LIENT B棣栧厛鍒嗗埆涓嶴寤虹珛閫氫俊浼?xì)璇濆Q岃繖鏃禢AT A鎶婂畠鑷繁鐨刄DP绔彛62000鍒嗛厤緇機(jī)LIENT A涓嶴鐨勪細(xì)璇濓紝NAT B涔熸妸鑷繁鐨刄DP绔彛31000鍒嗛厤緇機(jī)LIENT B涓嶴鐨勪細(xì)璇濄傚涓嬪浘鎵紺猴細(xì)
鍋囧榪欎釜鏃跺?CLIENT A 鎯充笌 CLIENT B寤虹珛涓鏉DP閫氫俊鐩磋繛錛屽鏋?CLIENT A鍙槸綆鍗曠殑鍙戦佷竴涓猆DP淇℃伅鍒癈LIENT B鐨勫叕緗戝湴鍧138.76.29.7:31000鐨勮瘽錛孨AT B浼?xì)涓嶅姞鑰冭檻鐨勫皢榪欎釜淇℃伅涓㈠純錛堥櫎闈濶AT B鏄竴涓?full cone NAT錛夛紝鍥犱負(fù) 榪欎釜UDP淇℃伅涓墍鍖呭惈鐨勫湴鍧淇℃伅錛屼笌CLIENT B鍜屾湇鍔″櫒S寤虹珛榪炴帴鏃跺瓨鍌ㄥ湪NAT B涓殑鏈嶅姟鍣⊿鐨勫湴鍧淇℃伅涓嶇銆傚悓鏍風(fēng)殑錛孋LIENT B濡傛灉鍋氬悓鏍風(fēng)殑浜嬫儏錛屽彂閫佺殑UDP淇℃伅涔熶細(xì)琚?NAT A 涓㈠純銆?BR>
Suppose A starts sending UDP messages to B's public address, however, and simultaneously relays a request through server S to B, asking B to start sending UDP messages to A's public address.? A's outgoing messages directed to B's public address (138.76.29.7:31000) cause NAT A to open up a new communication session between A's private address and B's public address. At the same time, B's messages to A's public address (155.99.25.11:62000) cause NAT B to open up a new communication session between B's private address and A's public address. Once the new UDP sessions have been opened up in each direction, client A and B can communicate with each other directly without further burden on the "introduction" server S.
鍋囧 CLIENT A 寮濮嬪彂閫佷竴涓?UDP 淇℃伅鍒?CLIENT B 鐨勫叕緗戝湴鍧涓婏紝涓庢鍚屾椂錛屼粬鍙堥氳繃S涓漿鍙戦佷簡(jiǎn)涓涓個(gè)璇蜂俊鎭粰C(jī)LIENT B錛岃姹侰LIENT B涔熺粰C(jī)LIENT A鍙戦佷竴涓猆DP淇℃伅鍒?CLIENT A鐨勫叕緗戝湴鍧涓娿傝繖鏃禖LIENT A鍚慍LIENT B鐨勫叕緗慖P(138.76.29.7:31000)鍙戦佺殑淇℃伅瀵艱嚧 NAT A 鎵撳紑涓涓浜?CLIENT A鐨勭鏈夊湴鍧鍜孋LIENT B鐨勫叕緗戝湴鍧涔嬮棿鐨勬柊鐨勯氫俊浼?xì)璇濆Q屼笌姝ゅ悓鏃訛紝NAT B 涔熸墦寮浜?jiǎn)涓涓浜嶤LIENT B鐨勭鏈夊湴鍧鍜孋LIENT A鐨勫叕緗戝湴鍧(155.99.25.11:62000)涔嬮棿鐨勬柊鐨勯氫俊浼?xì)璇濄備竴鏃﹁繖涓柊鐨刄DP浼?xì)璇濆悇鑷悜瀵规栆?guī)墦寮浜?jiǎn)锛孋LIENT A鍜孋LIENT B涔嬮棿灝卞彲浠ョ洿鎺ラ氫俊錛岃屾棤闇S鏉ョ壍綰挎惌妗ヤ簡(jiǎn)銆?榪欏氨鏄墍璋撶殑鎵撴礊鎶鏈?錛?BR>
The UDP hole punching technique has several useful properties. Once a direct peer-to-peer UDP connection has been established between two clients behind middleboxes, either party on that connection can in turn take over the role of "introducer" and help the other party establish peer-to-peer connections with additional peers, minimizing the load on the initial introduction server S. The application does not need to attempt to detect explicitly what kind of middlebox it is behind, if any [STUN], since the procedure above will establish peer- to-peer communication channels equally well if either or both clients do not happen to be behind a middlebox.? The hole punching technique even works automatically with multiple NATs, where one or both clients are removed from the public Internet via two or more levels of address translation.
UDP鎵撴礊鎶鏈湁寰堝瀹炵敤鐨勫湴鏂癸細(xì)絎竴錛屼竴鏃﹁繖縐嶅浜嶯AT涔嬪悗鐨勭瀵圭鐨勭洿榪炲緩绔嬩箣鍚庯紝榪炴帴鐨勫弻鏂瑰彲浠ヨ疆嫻佹媴浠?瀵規(guī)柟鐨勨滃獟浜衡濓紝鎶婂鏂逛粙緇嶇粰鍏朵粬鐨勫鎴風(fēng)錛岃繖鏍峰氨鏋佸ぇ鐨勯檷浣庝簡(jiǎn)鏈嶅姟鍣⊿鐨勫伐浣滈噺錛涚浜岋紝搴旂敤紼嬪簭涓嶇敤鍏沖績(jī)榪欎釜NAT鏄睘浜巆one榪樻槸symmetric錛屽嵆渚胯錛屽鏋滆繛鎺ョ殑鍙屾柟鏈変竴鏂規(guī)垨鑰呭弻鏂歸兘鎭板ソ涓嶅浜嶯AT涔嬪悗錛屽熀浜庝笂鍙欑殑姝ラ錛屼粬浠箣闂磋繕鏄彲浠ュ緩绔嬪緢濂界殑閫氫俊閫氶亾錛涚涓夛紝鎵撴礊鎶鏈兘澶熻嚜鍔ㄨ繍浣滃湪澶氶噸NAT涔嬪悗錛屼笉璁鴻繛鎺ョ殑鍙屾柟緇忚繃澶氬皯灞侼AT鎵嶅埌杈綢nternet錛岄兘鍙互榪涜閫氫俊銆?BR>
璇戝悗灝忚錛氭湰鏉ュ凡緇忕炕璇戝ソ浜?jiǎn)锛屾槸鍦ň|戞枃蹇崟涓炕璇戠殑錛岀粨鏋滐紝涓涓叏閫夋妸鎵鏈夌炕璇戠殑鍐呭鍏ㄩ儴鍒犻櫎浜?緗戞枃蹇崟鐨凚ug?錛?錛屼笉寰椾笉鐥涜嫤鐨勫啀緲諱竴閬嶃備笉榪囷紝鏈夊け蹇呮湁寰楋紝絎簩嬈$炕璇戞祦鐣呭浜?jiǎn)锛屽笇鏈涘ぇ瀹惰L潵榪橀『鍙c?BR>
]]>
浠庝粖澶╁紑濮嬪皢闄嗙畫緲昏瘧Peer-to-Peer (P2P) communication across middleboxes榪欑瘒鏂囩珷,騫舵病鏈夋寜鐓х珷鑺傛搴忔潵錛岃璇昏呰璋呫?BR>
鍘熸枃鐗堟潈錛欳opyright (C) The Internet Society (2003). All Rights Reserved.
鍘熸枃鍦板潃錛?A target=_blank>http://midcom-p2p.sourceforge.net/draft-ford-midcom-p2p-01.txt
3.4. UDP port number prediction UPD绔彛鍙烽璦
A variant of the UDP hole punching technique discussed above exists that allows P2P UDP sessions to be created in the presence of some symmetric NATs. This method is sometimes called the "N+1" technique [BIDIR] and is explored in detail by Takeda [SYM-STUN]. The method works by analyzing the behavior of the NAT and attempting to predict the public port numbers it will assign to future sessions.
Consider again the situation in which two clients, A and B, each behind a separate NAT, have each established UDP connections with a permanently addressable server S:
璁╂垜浠潵鑰冭檻榪欐牱涓縐嶆儏鍐碉紝鏈変袱涓鎴風(fēng) A 鍜?B錛屼粬浠兘钘忓湪涓嶅悓鐨凬AT鍚庨潰錛屼粬浠兘寮鏀句簡(jiǎn)涓涓猆DP榪炴帴緇欏叿鏈夊浐瀹欼P鐨凷erver S錛氬涓嬪浘
NAT A has assigned its own UDP port 62000 to the communication session between A and S, and NAT B has assigned its port 31000 to the session between B and S. By communicating through server S, A and B learn each other's public IP addresses and port numbers as observed by S. Client A now starts sending UDP messages to port 31001 at address 138.76.29.7 (note the port number increment), and client B simultaneously starts sending messages to port 62001 at address 155.99.25.11. If NATs A and B assign port numbers to new sessions sequentially, and if not much time has passed since the A-S and B-S sessions were initiated, then a working bi-directional communication channel between A and B should result.
A's messages to B cause NAT A to open up a new session, to which NAT A will (hopefully) assign public port number 62001, because 62001 is next in sequence after the port number 62000 it previously assigned to the session between A and S. Similarly, B's messages to A will cause NAT B to open a new session, to which it will (hopefully) assign port number 31001. If
both clients have correctly guessed the port numbers each NAT assigns to the new sessions, then a bi-directional UDP communication channel will have been established as shown below.
NAT A 鍒嗛厤浜?jiǎn)瀹冭嚜宸辩殑UDP绔彛62000錛岀敤鏉ヤ繚鎸?瀹㈡埛绔疉 涓?鏈嶅姟鍣⊿ 鐨勯氫俊浼?xì)璇濆Q?NAT B 涔熷垎閰嶄簡(jiǎn)31000绔彛錛岀敤鏉ヤ繚鎸?瀹㈡埛绔疊 涓?鏈嶅姟鍣⊿ 鐨勯氫俊浼?xì)璇濄傞氳繃涓?鏈嶅姟鍣⊿鐨勫璇濓紝瀹㈡埛绔疉 鍜?瀹㈡埛绔疊 閮界浉浜掔煡閬撲簡(jiǎn)瀵規(guī)柟鎵鏄犲皠鐨勭湡瀹濱P鍜岀鍙c?BR>
瀹㈡埛绔疉鍙戦佷竴鏉DP娑堟伅鍒?138.76.29.7:31001(璇鋒敞鎰忓埌绔彛鍙風(fēng)殑澧炲姞)錛屽悓鏃?瀹㈡埛绔疊鍙戦佷竴鏉DP娑堟伅鍒?155.99.25.11:62001銆傚鏋淣AT A 鍜孨AT B緇х畫鍒嗛厤绔彛緇欐柊鐨勪細(xì)璇濓紝騫朵笖浠嶢-S鍜孊-S鐨勪細(xì)璇濇椂闂存秷鑰楀緱騫朵笉澶氱殑璇濓紝閭d箞涓鏉″浜庡鎴風(fēng)A鍜屽鎴風(fēng)B涔嬮棿鐨勫弻鍚戜細(xì)璇濋氶亾灝卞緩绔嬩簡(jiǎn)銆?BR>
瀹㈡埛绔疉鍙戝嚭鐨勬秷鎭佽揪B瀵艱嚧浜?jiǎn)NAT A鎵撳紑浜?jiǎn)涓涓柊鐨勪細(xì)璇濓紝騫朵笖鎴戜滑甯屾湜 NAT A灝嗕細(xì)鎸囨淳62001绔彛緇欒繖涓柊鐨勪細(xì)璇濓紝鍥犱負(fù)62001鏄戶62000鍚庯紝NAT浼?xì)鑷姩鎸噵z劇粰 浠庢湇鍔″櫒S鍒板鎴風(fēng)A涔嬮棿鐨勬柊浼?xì)璇濈殑绔彛鍙峰Q涚被浼肩殑錛屽鎴風(fēng)B鍙戝嚭鐨勬秷鎭佽揪A瀵艱嚧浜?NAT B鎵撳紑浜?jiǎn)涓涓柊鐨勪細(xì)璇濓紝騫朵笖鎴戜滑甯屾湜 NAT B 灝嗕細(xì)鎸囨淳31001榪欎釜绔彛緇欐柊鐨勪細(xì)璇濓紱濡傛灉涓や釜瀹㈡埛绔兘姝g‘鐨勭寽嫻嬪埌浜?jiǎn)瀵规栆?guī)柊浼?xì)璇濊鎸噵z劇殑绔彛鍙鳳紝閭d箞榪欎釜 瀹㈡埛绔疉錛嶅鎴風(fēng)B鐨勫弻鍚戣繛鎺ュ氨琚墦閫氫簡(jiǎn)銆傚叾緇撴灉濡備笅鍥炬墍紺猴細(xì)
Obviously there are many things that can cause this trick to fail. If the predicted port number at either NAT already happens to be in use by an unrelated session, then the NAT will skip over that port number and the connection attempt will fail. If either NAT sometimes or always chooses port numbers non-sequentially, then the trick will fail.
If a different client behind NAT A (or B respectively) opens up a new outgoing UDP connection to any external destination after A (B) establishes its connection with S but before sending its first message to B (A), then the unrelated client will inadvertently "steal" the desired port number. This trick is therefore much less likely to work when either NAT involved is under load.
鏄庢樉鐨勶紝鏈夎澶氬洜绱犱細(xì)瀵艱嚧榪欎釜鏂規(guī)硶澶辮觸錛氬鏋滆繖涓璦鐨勬柊绔彛錛?2001鍜?1001錛?鎭板ソ宸茬粡琚竴涓笉鐩稿叧鐨勪細(xì)璇濇墍浣跨敤錛岄偅涔圢AT灝變細(xì)璺寵繃榪欎釜绔彛鍙鳳紝榪欎釜榪炴帴灝變細(xì)瀹e憡澶辮觸錛涘鏋滀袱涓狽AT鏈夋椂鎴栬呮繪槸涓嶆寜鐓ч『搴忔潵鐢熸垚鏂扮殑绔彛鍙鳳紝閭d箞榪欎釜鏂規(guī)硶涔熸槸琛屼笉閫氱殑銆?BR>
濡傛灉闅愯棌鍦∟AT A鍚庣殑涓涓笉鍚岀殑瀹㈡埛绔疿錛堟垨鑰呭湪NAT B鍚庯級(jí)鎵撳紑浜?jiǎn)涓涓柊鐨勨滃鍑衡漊DP 榪炴帴錛屽茍涓旀棤璁鴻繖涓繛鎺ョ殑鐩殑濡備綍錛涘彧瑕佽繖涓姩浣滃彂鐢熷湪 瀹㈡埛绔疉 寤虹珛浜?jiǎn)涓庢湇鍔″櫒S 鐨勮繛鎺ヤ箣鍚庯紝瀹㈡埛绔疉 涓?瀹㈡埛绔疊 寤虹珛榪炴帴涔嬪墠錛涢偅涔堣繖涓棤鍏崇殑瀹㈡埛绔疿 灝變細(xì)瓚佷漢涓嶅鍦扳滃伔鈥?鍒拌繖涓垜浠復(fù)鏈涘垎閰嶇殑绔彛銆傛墍浠ワ紝榪欎釜鏂規(guī)硶鍙樺緱濡傛鑴嗗急鑰屼笖涓嶅牚涓鍑伙紝鍙浠諱綍涓涓狽AT鏂瑰寘鍚互涓婄鍒扮殑闂錛岃繖涓柟娉曢兘涓嶄細(xì)濂忔晥銆?BR>
Since in practice a P2P application implementing this trick would still need to work if the NATs are cone NATs, or if one is a cone NAT and the other is a symmetric NAT, the application would need to detect beforehand what kind of NAT is involved on either end [STUN] and modify its behavior accordingly, increasing the complexity of the algorithm and the general brittleness of the network.
Finally, port number prediction has no chance of working if either client is behind two or more levels of NAT and the NAT(s) closest to the client are symmetric. For all of these reasons, it is NOT recommended that new applications implement this trick; it is mentioned here for historical and informational purposes.
鑷粠浣跨敤榪欑鏂規(guī)硶鏉ュ疄璺礟2P鐨勫簲鐢ㄧ▼搴忎互鏉?鍦ㄥ浜?cone NAT 緋誨垪鐨勭綉緇滅幆澧冧腑榪欎釜鏂規(guī)硶榪樻槸瀹炵敤鐨勶紱濡傛灉鏈変竴鏂逛負(fù) cone NAT 鑰屽彟澶栦竴鏂逛負(fù) symmetric NAT錛岄偅涔堝簲鐢ㄧ▼搴忓氨搴旇棰勫厛鍙戠幇鍙﹀涓鏂圭殑 NAT 鏄粈涔堢被鍨嬶紝鍐嶅仛鍑烘紜殑琛屼負(fù)鏉ュ鐞嗛氫俊錛岃繖鏍峰氨澧炲ぇ浜?jiǎn)绠楁硶鐨勫鏉傚害锛岒q朵笖闄嶄綆浜?jiǎn)鍦ㄧ湡瀹灳|戠粶鐜涓殑鏅傛с?BR>
鏈鍚庯紝濡傛灉P2P鐨勪竴鏂瑰鍦ㄤ袱綰ф垨鑰呬袱綰т互涓婄殑NAT涓嬮潰錛屽茍涓旇繖浜汵ATs 鎺ヨ繎榪欎釜瀹㈡埛绔槸 symmetric鐨勮瘽錛岀鍙e彿棰勮█ 鏄棤鏁堢殑錛?BR>
鍥犳錛屽茍涓嶆帹鑽愪嬌鐢ㄨ繖涓柟娉曟潵鍐欐柊鐨凱2P搴旂敤紼嬪簭錛岃繖涔熸槸鍘嗗彶鐨勭粡楠屽拰鏁欒錛?BR>
]]>
2. Terminology
2. 鏈
In this section we first summarize some middlebox terms. We focus hereon the two kinds of middleboxes that commonly cause problems for P2P applications.
鍦ㄨ繖涓绔犺妭涓紝棣栧厛姒傝鐨勪粙緇嶄竴涓嬧滀唬鐞嗏濇妧鏈殑涓浜涙湳璇傜劧鍚庨泦涓璁轟袱縐嶉犳垚P2P搴旂敤闂鐨勪唬鐞嗘満鍒躲?BR>
Firewall
A firewall restricts communication between a private internal network and the public Internet, typically by dropping packets that are deemed unauthorized. A firewall examines but does not modify the IP address and TCP/UDP port information in packets crossing the boundary.
闃茬伀澧?BR>
闃茬伀澧欓檺鍒朵簡(jiǎn)縐佺綉涓庡叕緗戠殑閫氫俊錛屽畠涓昏鏄皢錛堥槻鐏錛夎涓烘湭緇忔巿鏉冪殑鐨勫寘涓㈠純錛岄槻鐏鍙槸媯(gè)楠屽寘鐨勬暟鎹紝騫朵笉淇敼鏁版嵁鍖呬腑鐨処P鍦板潃鍜孴CP/UDP绔彛淇℃伅銆?BR>
Network Address Translator (NAT)
A network address translator not only examines but also modifies the header information in packets flowing across the boundary, allowing many hosts behind the NAT to share the use of a smaller number of public IP addresses (often one). Network address translators in turn have two main varieties:
緗戠粶鍦板潃杞崲錛圢AT錛?BR>
褰撴湁鏁版嵁鍖呴氳繃鏃訛紝緗戠粶鍦板潃杞崲鍣ㄤ笉浠呮鏌ュ寘鐨勪俊鎭紝榪樿灝嗗寘澶翠腑鐨処P鍦板潃鍜岀鍙d俊鎭繘琛屼慨鏀廣備互浣垮緱澶勪簬NAT涔嬪悗鐨勬満鍣ㄥ叡浜嚑涓粎鏈夌殑鍏綉IP鍦板潃錛堥氬父鏄竴涓級(jí)銆傜綉緇滃湴鍧杞崲鍣ㄤ富瑕佹湁涓ょ綾誨瀷錛?BR>
Basic NAT
A Basic NAT maps an internal host's private IP address to a public IP address without changing the TCP/UDP port numbers in packets crossing the boundary. Basic NAT is generally only useful when the NAT has a pool of public IP addresses from which to make address bindings on behalf of internal hosts.
鍩虹NAT
鍩虹NAT 灝嗙緗戜富鏈虹殑縐佹湁IP鍦板潃杞崲鎴愬叕緗慖P鍦板潃錛屼絾騫朵笉灝員CP/UDP绔彛淇℃伅榪涜杞崲銆傚熀紜NAT涓鑸敤鍦ㄥ綋NAT鎷ユ湁寰堝鍏綉IP鍦板潃鐨勬椂鍊欙紝瀹冨皢鍏綉IP鍦板潃涓庡唴閮ㄤ富鏈鴻繘琛岀粦瀹氾紝浣垮緱澶栭儴鍙互鐢ㄥ叕緗慖P鍦板潃璁塊棶鍐呴儴涓繪満銆傦紙璇戣呮敞錛氬疄闄呬笂鏄彧灝咺P杞崲錛?92.168.0.23 <-> 210.42.106.35,榪欎笌鐩存帴璁劇疆IP鍦板潃涓哄叕緗慖P榪樻槸鏈変竴瀹氬尯鍒殑錛岀壒鍒槸瀵逛簬浼佷笟鏉ヨ錛屽閮ㄧ殑淇℃伅閮借緇忚繃緇熶竴闃茬伀澧欐墠鑳藉埌杈懼唴閮紝浣嗘槸鍐呴儴涓繪満鍙堝彲浠ヤ嬌鐢ㄥ叕緗慖P錛?BR>
Network Address/Port Translator (NAPT)
By far the most common, a Network Address/Port Translator examines and modifies both the IP address and the TCP/UDP port number fields of packets crossing the boundary, allowing multiple internal hosts to share a single public IP address simultaneously.
Refer to [NAT-TRAD] and [NAT-TERM] for more general information on NAT taxonomy and terminology. Additional terms that further classify NAPT are defined in more recent work [STUN]. When an internal host opens an outgoing TCP or UDP session through a network address/port translator, the NAPT assigns the session a public IP address and port number so that subsequent response packets from the external endpoint can be received by the NAPT, translated, and forwarded to the internal host. The effect is that the NAPT establishes a port binding between (private IP address, private port number) and (public IP address, public port number).
The port binding defines the address translation the NAPT will perform for the duration of the session. An issue of relevance to P2P applications is how the NAT behaves when an internal host initiates multiple simultaneous sessions from a single (private IP, private port) pair to multiple distinct endpoints on the external network.
緗戠粶鍦板潃鍜岀鍙h漿鎹?錛圢APT錛?BR>
榪欐槸鏈鏅亶鐨勬儏鍐碉紝緗戠粶鍦板潃/绔彛杞崲鍣ㄦ鏌ャ佷慨鏀瑰寘鐨処P鍦板潃鍜孴CP/UDP绔彛淇℃伅錛岃繖鏍鳳紝鏇村鐨勫唴閮ㄤ富鏈哄氨鍙互鍚屾椂浣跨敤涓涓叕緗慖P鍦板潃銆?BR>
璇峰弬鑰僛NAT-TRAD]鍜孾NAT-TERM]涓や釜鏂囨。浜?jiǎn)瑙f洿澶氱殑NAT鍒嗙被鍜屾湳璇俊鎭傚彟澶栵紝鍏充簬NAPT鐨勫垎綾誨拰鏈錛孾STUN]鍦ㄦ渶榪戝仛浜?jiǎn)鏇村鐨勫畾涔夈傚綋涓涓唴閮ㄧ綉涓繪満閫氳繃NAT鎵撳紑涓涓滃鍑衡濈殑TCP鎴朥DP浼?xì)璇濇椨灱孨APT鍒嗛厤緇欒繖涓細(xì)璇濅竴涓叕緗慖P鍜岀鍙o紝鐢ㄦ潵鎺ユ敹澶栫綉鐨勫搷搴旂殑鏁版嵁鍖咃紝騫剁粡榪囪漿鎹㈤氱煡鍐呴儴緗戠殑涓繪満銆傝繖鏍峰仛鐨勬晥鏋滄槸錛孨APT鍦?[縐佹湁IP:縐佹湁绔彛] 鍜孾鍏綉IP:鍏綉绔彛]涔嬮棿寤虹珛浜?jiǎn)涓涓鍙g粦瀹氥?BR>
绔彛緇戝畾鎸囧畾浜?jiǎn)NAPT灝嗗湪榪欎釜浼?xì)璇濈殑鐢熷瓨鏈熷唴杩涜鍦板潃杞崲浠誨姟銆傝繖涓棿瀛樺湪涓涓繖鏍風(fēng)殑闂錛屽鏋淧2P搴旂敤紼嬪簭浠庡唴閮ㄧ綉緇滅殑涓涓猍縐佹湁IP鍦板潃:绔彛]瀵瑰悓鏃跺彂鍑哄鏉′細(xì)璇濈粰涓嶅悓鐨勫緗戜富鏈猴紝閭d箞NAT浼?xì)鎬庢牱澶勭悊鍛紵璇風(fēng)湅浠ヤ笅鍑犵鏂規(guī)銆?BR>
Cone NAT
After establishing a port binding between a (private IP, private port) tuple and a (public IP, public port) tuple, a cone NAT will re-use this port binding for subsequent sessions the application may initiate from the same private IP address and port number, for as long as at least one session using the port binding remains active.
閿ュ艦NAT
錛堣瘧鑰呮敞錛氫負(fù)浠涔堝彨鍋氶敟褰㈠憿錛熻鐪嬩互涓嬪浘褰?緇堢鍜屽閮ㄦ湇鍔″櫒錛岄兘閫氳繃NAT鍒嗘淳鐨勮繖涓粦瀹氬湴鍧瀵規(guī)潵浼犻佷俊鎭紝灝辮薄涓涓紡鏂椾竴鏍鳳紝絳涢夊茍浼犻掍俊鎭級(jí)
褰撳緩绔嬩簡(jiǎn)涓涓?[縐佹湁IP:绔彛]-[鍏綉IP:绔彛] 绔彛緇戝畾涔嬪悗錛屽浜庢潵鑷悓涓涓猍縐佹湁IP:绔彛]浼?xì)璇濆Q岄敟褰AT鏈嶅姟鍣ㄥ厑璁稿彂璧蜂細(xì)璇濈殑搴旂敤紼嬪簭 閲嶅浣跨敤榪欎釜绔彛緇戝畾錛屼竴鐩村埌榪欎釜浼?xì)璇澗l撴潫鎵嶈В闄わ紙绔彛緇戝畾錛夈?BR>
For example, suppose Client A in the diagram below initiates two simultaneous outgoing sessions through a cone NAT, from the same internal endpoint (10.0.0.1:1234) to two different external servers, S1 and S2. The cone NAT assigns just one public endpoint tuple錛堝厓緇勶級(jí), 155.99.25.11:62000, to both of these sessions, ensuring that the "identity" of the client's port is maintained across address translation. Since Basic NATs and firewalls do not modify port numbers as packets flow across the middlebox, these types of middleboxes can be viewed as a degenerate form of Cone NAT.
渚嬪錛屽亣璁?Client A錛圛P鍦板潃淇℃伅濡備笂鍥炬墍紺猴級(jí)閫氳繃涓涓?閿ュ艦NAT 鍚屾椂鍙戣搗涓や釜澶栧嚭鐨勮繛鎺ワ紝瀹冧嬌鐢ㄥ悓涓涓唴閮ㄧ鍙o紙10.0.0.1:1234錛夌粰鍏綉鐨勪袱鍙頒笉鍚岀殑鏈嶅姟鍣紝S1鍜孲2銆傞敟褰AT 鍙垎閰嶄竴涓叕緗慖P鍜岀鍙o紙155.99.25.11:62000錛夌粰榪欎釜涓や釜浼?xì)璇濆Q岄氳繃鍦板潃杞崲鍙互 紜繚 Client浣跨敤绔彛鐨勨滃悓涓鎬р濓紙璇戣呮敞錛氬嵆榪欎釜Client鍙嬌鐢ㄨ繖涓鍙o級(jí)銆傝屽熀紜NATs鍜岄槻鐏鍗翠笉鑳戒慨鏀圭粡榪囩殑鏁版嵁鍖呯鍙e彿錛屽畠浠彲浠ョ湅浣滄槸閿ュ艦NAT鐨勭簿綆鐗堟湰銆?BR>
Symmetric NAT
A symmetric NAT, in contrast, does not maintain a consistent port binding between (private IP, private port) and (public IP, public port) across all sessions.
Instead, it assigns a new public port to each new session. For example, suppose Client A initiates two outgoing sessions from the same port as above, one with S1 and one with S2. A symmetric NAT might allocate the public endpoint 155.99.25.11:62000 to session 1, and then allocate a different public endpoint 155.99.25.11:62001, when the application initiates session 2. The NAT is able to differentiate between the two sessions for translation purposes because the external endpoints involved in the sessions (those of S1 and S2) differ, even as the endpoint identity of the client application is lost across the address translation boundary.
瀵圭ОNAT
瀵圭ОNAT錛屼笌Cone NAT鏄ぇ涓嶇浉鍚岀殑錛屽茍涓嶅浼?xì)璇潣q涜绔彛緇戝畾錛岃屾槸鍒嗛厤涓涓叏鏂扮殑 鍏綉绔彛 緇欐瘡涓涓柊鐨勪細(xì)璇濄?BR>
榪樻槸涓婇潰閭d釜渚嬪瓙錛氬鏋?Client A (10.0.0.1:1234)鍚屾椂鍙戣搗涓や釜 "澶栧嚭" 浼?xì)璇?鍒嗗埆鍙戝線S1鍜孲2銆傚縐癗at浼?xì)鍒嗛厤鍏叡鍦板潃155.99.25.11:62000緇橲ession1錛岀劧鍚庡垎閰嶅彟涓涓笉鍚岀殑鍏叡鍦板潃155.99.25.11:62001緇橲ession2銆傚縐癗at鑳藉鍖哄埆涓や釜涓嶅悓鐨勪細(xì)璇濆茍榪涜鍦板潃杞崲錛屽洜涓哄湪 Session1 鍜?Session2涓殑澶栭儴鍦板潃鏄笉鍚岀殑錛屾鏄洜涓鴻繖鏍鳳紝Client绔殑搴旂敤紼嬪簭灝辮糠澶卞湪榪欎釜鍦板潃杞崲杈圭晫綰夸簡(jiǎn)錛屽洜涓鴻繖涓簲鐢ㄧ▼搴忔瘡鍙戝嚭涓涓細(xì)璇濋兘浼?xì)鋴社敤涓涓柊鐨勭鍙o紝鏃犳硶淇濋殰鍙嬌鐢ㄥ悓涓涓鍙d簡(jiǎn)銆?BR>
'
The issue of cone versus symmetric NAT behavior applies equally to TCP and UDP traffic. Cone NAT is further classified according to how liberally the NAT accepts incoming traffic directed to an already-established (publicIP, public port) pair. This classification generally applies only to UDP traffic, since NATs and firewalls reject incoming TCP connection attempts unconditionally unless specifically configured to do otherwise.
鍦═CP鍜孶DP閫氫俊涓紝 錛堝埌搴曟槸浣跨敤鍚屼竴涓鍙o紝榪樻槸鍒嗛厤涓嶅悓鐨勭鍙g粰鍚屼竴涓簲鐢ㄧ▼搴忥級(jí)錛岄敟褰AT鍜屽縐癗AT鍚勬湁鍚勭殑鐞嗙敱銆傚綋鐒墮敟褰AT鍦ㄦ牴鎹浣曞叕騫沖湴灝哊AT鎺ュ彈鐨勮繛鎺ョ洿杈句竴涓凡鍒涘緩鐨勫湴鍧瀵逛笂鏈夋洿澶氱殑鍒嗙被銆傝繖涓垎綾諱竴鑸簲鐢ㄥ湪Udp閫氫俊錛堣屼笉鏄疶cp閫氫俊涓婏級(jí)錛屽洜涓篘ATs鍜岄槻鐏闃繪浜?jiǎn)璇曞浘鏃犳潯錃g浼犲叆鐨凾CP榪炴帴錛岄櫎闈炴槑紜緗甆AT涓嶈繖鏍峰仛銆傝繖浜涘垎綾誨涓嬶細(xì)
Full Cone NAT
After establishing a public/private port binding for a new outgoing session, a full cone NAT will subsequently accept incoming traffic to the corresponding public port from ANY external endpoint on the public network. Full cone NAT is also sometimes called "promiscuous" NAT.
鍏ㄥ弻宸ラ敟褰AT
褰撳唴閮ㄤ富鏈哄彂鍑轟竴涓滃鍑衡濈殑榪炴帴浼?xì)璇濆Q屽氨浼?xì)鍒涘晦Z簡(jiǎn)涓涓?鍏綉/縐佺綉 鍦板潃錛屼竴鏃﹁繖涓湴鍧瀵硅鍒涘緩錛屽叏鍙屽伐閿ュ艦NAT浼?xì)鎺ユ攭櫄忓悗鋼Q浣曞閮ㄧ鍙d紶鍏ヨ繖涓叕鍏辯鍙e湴鍧鐨勯氫俊銆傚洜姝わ紝鍏ㄥ弻宸ラ敟褰AT鏈夋椂鍊欏張琚О涓?娣鋒潅"NAT銆?BR>
Restricted Cone NAT
A restricted cone NAT only forwards an incoming packet directed to a public port if its external (source) IP address matches the address of a node to which the internal host has previously sent one or more outgoing packets. A restricted cone NAT effectively refines the firewall principle of rejecting unsolicited incoming traffic, by restricting incoming traffic to a set of "known" external IP addresses.
鍙楅檺鍒剁殑閿ュ艦NAT
鍙楅檺鍒剁殑閿ュ艦NAT浼?xì)瀵逛紶鍏ョ殑鏁版嵁鍖厴q涜絳涢夛紝褰撳唴閮ㄤ富鏈哄彂鍑衡滃鍑衡濈殑浼?xì)璇濇椨灱孨AT浼?xì)璁板綍杩欎釜澶栭儴涓绘満鐨処P鍦板潃淇℃伅錛屾墍浠ワ紝涔熷彧鏈夎繖浜涙湁璁板綍鐨勫閮↖P鍦板潃錛岃兘澶熷皢淇℃伅浼犲叆鍒癗AT鍐呴儴錛屽彈闄愬埗鐨勯敟褰AT 鏈夋晥鐨勭粰闃茬伀澧欐彁鐐間簡(jiǎn)絳涢夊寘鐨勫師鍒欌斺斿嵆闄愬畾鍙粰閭d簺宸茬煡鐨勫閮ㄥ湴鍧鈥滀紶鍏モ濅俊鎭埌NAT鍐呴儴銆?BR>
Port-Restricted Cone NAT
A port-restricted cone NAT, in turn, only forwards an incoming packet if its external IP address AND port number match those of an external endpoint to which the internal host has previously sent outgoing packets. A port-restricted cone NAT provides internal nodes the same level of protection against unsolicited incoming traffic that a symmetric NAT does, while maintaining a private port's identity across translation.
绔彛鍙楅檺鍒剁殑Cone NAT
绔彛鍙楅檺鍒剁殑閿ュ艦NAT錛屼笌鍙楅檺鍒剁殑閿ュ艦NAT涓嶅悓鐨勬槸錛氬畠鍚屾椂璁板綍浜?jiǎn)澶栭儴涓绘満鐨処P鍦板潃鍜岀鍙d俊鎭紝绔彛鍙楅檺鍒剁殑閿ュ艦NAT緇欏唴閮ㄨ妭鐐規(guī)彁渚涗簡(jiǎn)鍚屼竴綰у埆鐨勪繚鎶わ紝鍦ㄧ淮鎸佺鍙b滃悓涓鎬р濊繃紼嬩腑錛屽皢浼?xì)涓㈠純瀵箍U癗AT浼犲洖鐨勪俊鎭?BR>
Finally, in this document we define new terms for classifying the P2P-relevant behavior of middleboxes:
鏈鍚庯紝鍦ㄨ繖綃囨枃妗i噷鎴戜滑灝嗗畾涔変竴緇勬柊鐨勬湳璇?錛屼互渚挎洿濂界殑瀵筆2P浠g悊鐩稿叧鐨勮涓鴻繘琛屽垎綾匯?BR>
P2P搴旂敤紼嬪簭
P2P搴旂敤紼嬪簭鏄寚錛屽湪宸叉湁鐨勪竴涓叕鍏辨湇鍔″櫒鐨勫熀紜涓婏紝騫跺垎鍒埄鐢ㄨ嚜宸辯殑縐佹湁鍦板潃鎴栬呭叕鏈夊湴鍧錛堟垨鑰呬袱鑰呭吋澶囷級(jí)鏉ュ緩绔嬩竴涓鍒扮鐨勪細(xì)璇濋氫俊銆?BR>
P2P-Application
P2P-application as used in this document is an application in which each P2P participant registers with a public registration server, and subsequently uses either its private endpoint, or public endpoint, or both, to establish peering sessions.
P2P-Middlebox
A P2P-Middlebox is middlebox that permits the traversal of P2P applications.
P2P浠g悊
P2P浠g悊鏄竴涓厑璁?P2P搴旂敤紼嬪簭榪涜閫氫俊鐨勪唬鐞嗘満鍒?BR>
P2P-firewall
A P2P-firewall is a P2P-Middlebox that provides firewall functionality but performs no address translation.
P2P闃茬伀澧?BR>
P2P闃茬伀澧欐槸涓涓彁渚涗簡(jiǎn)闃茬伀澧欑殑鍔熻兘鐨凱2P浠g悊錛屼絾鏄笉榪涜鍦板潃杞崲.
P2P-NAT
A P2P-NAT is a P2P-Middlebox that provides NAT functionality, and may also provide firewall functionality. At minimum, a P2P-Middlebox must implement Cone NAT behavior for UDP traffic, allowing applications to establish robust P2P connectivity using the UDP hole punching technique.
P2P-NAT
P2P-NAT 鏄竴涓?P2P浠g悊,鎻愪緵浜?jiǎn)NAT鐨勫姛鑳?涔熸彁渚涗簡(jiǎn)闃茬伀澧欑殑鍔熻兘,涓涓渶綆鐨凱2P浠g悊蹇呴』鍏鋒湁 閿ュ艦NAT瀵筓dp閫氫俊鏀寔鐨勫姛鑳?騫跺厑璁稿簲鐢ㄧ▼搴忓埄鐢║dp鎵撴礊鎶鏈緩绔嬪己鍋ョ殑P2P榪炴帴銆?BR>
Loopback translation
When a host in the private domain of a NAT device attempts to connect with another host behind the same NAT device using the public address of the host, the NAT device performs the equivalent of a "Twice-nat" translation on the packet as follows. The originating host's private endpoint is translated into its assigned public endpoint, and the target host's public endpoint is translated into its private endpoint, before the packet is forwarded to the target host. We refer the above translation performed by a NAT device as "Loopback translation".
鍥炵幆杞崲
褰揘AT鐨勭緗戝唴閮ㄦ満鍣ㄦ兂閫氳繃鍏叡鍦板潃鏉ヨ闂悓涓鍙板眬鍩熺綉鍐呯殑鏈哄櫒鐨勬椂錛孨AT璁懼絳変環(huán)浜庡仛浜?jiǎn)涓啤NAT鐨勪簨鎯咃紝鍦ㄥ寘鍒拌揪鐩爣鏈哄櫒涔嬪墠錛屽厛灝嗙鏈夊湴鍧杞崲涓哄叕緗戝湴鍧錛岀劧鍚庡啀灝嗗叕緗戝湴鍧杞崲鍥炵鏈夊湴鍧銆傛垜浠妸鍏鋒湁涓婂彊杞崲鍔熻兘鐨凬AT璁懼鍙仛鈥滃洖鐜漿鎹⑩濊澶囥?BR>
]]>
鍘熸枃鍦板潃錛?A target=_blank>http://midcom-p2p.sourceforge.net/draft-ford-midcom-p2p-01.txt
璇戞枃鐗堟潈鐢蟲槑錛氳寮曠敤姝ゆ枃鐨勪綔鑰呮垨緗戠珯娉ㄦ槑鍑哄錛?BR>
http://blog.csdn.net/hxhbluestar錛屼互灝婇噸璇戣呯殑鍔沖姩鎴愭灉錛?BR>
闅忕潃IPv6鏃朵唬鐨勫埌鏉ワ紝鎴戜篃涓鐩存鐤戯紝鏄笉鏄繕鏈夊繀瑕佸啀鍘誨涔?fàn)NAT鎶鏈斺斿洜涓虹綉緇滅殑璧勬簮涓嶅啀濡侷Pv4鏃朵唬鍖箯錛岃孨AT鎶鏈鏄負(fù)瑙e喅IP鍦板潃鐨勭揣緙鴻屽瓨鍦ㄧ殑錛屽姝わ紝NAT渚挎病鏈夊瓨鍦ㄧ殑蹇呰浜?jiǎn)銆?BR>
浣嗘槸錛岄殢鐫榪欑瘒鏂囩珷鐨勭炕璇戯紝鎴戠殑鎬鐤戞參鎱㈠彉鎴愬簡(jiǎn)騫革紝娓愯屽張鍙樹負(fù)鑲畾錛岄氳繃緲昏瘧鎵瀛﹀埌鐨勪笢瑗匡紝涓嶅啀浠呬粎鏄炕璇戠涓鎵嬭祫鏂欏甫鏉ョ殑鎴愬氨鎰燂紝鏇村鐨勬槸閫氳繃緲昏瘧錛屽幓棰嗘?zhèn)熸妧鏈墠杈堜滑鐨勬櫤鎱т笌緇忛獙錛屼篃閫氳繃緲昏瘧錛屽吇鎴愯嚜宸變粠絎竴鎵嬭祫鏂欒幏寰椾俊鎭殑涔?fàn)鎯Q屼粠鑰屽皢瑙嗛噹鏀懼緱鏇村錛岃鐞嗚В鏇翠負(fù)閫忓交鈥斺旇嚦灝戯紝寰堝涓滆タ閮芥槸瑕佺粡榪囦粩緇嗘枱閰屾墠鐪熸杞寲涓鴻嚜宸辨濇兂鐨勪竴閮ㄥ垎鐨勩傛鏄姝わ紝鎴戞墠鍧氬畾鐨勮鎶婅繖綃囨枃绔犵炕璇戝畬錛屼篃濡備箣鍓嶆墍鎻愬埌鐨勶紝濡傛灉鏃墮棿鍏佽鐨勮瘽錛屾垜浼?xì)鐢–#鏉ュ啓涓浜涗緥瀛愶紝璁╁ぇ瀹舵洿濂界殑鐞嗚ВNAT鎶鏈紝鎺屾彙NAT鎶鏈紙涓昏娑夊強(qiáng)鍒板嵆鏃墮氳銆佹枃浠跺絳変紶杈撳拰璇煶搴旂敤涓変釜鏂歸潰錛夈?BR>
榪欑瘒鏂囩珷涓昏鏄粙緇嶄竴涓嬧滀唬鐞嗏濇満鍒剁殑璧峰洜浠ュ強(qiáng)緇橮2P搴旂敤甯︽潵鐨勪笉渚匡紝涓嶉渶瑕佷換浣曞熀紜鐭ヨ瘑錛氾級(jí)
1. Introduction
1銆佺畝浠?BR>
鍏抽敭璇嶏細(xì)
middleboxe(s) 鈥斺?鎴戠炕璇戞垚鈥滀唬鐞嗏濓紝涔熻鏈夋洿濂界殑緲昏瘧
host 鈥斺?鎴戠炕璇戞垚鈥滀富鏈衡濓紝甯屾湜澶у涓嶈鐞嗚В鎴愭湇鍔″櫒浜?jiǎn)锛屼咐L満灝辨槸涓鍙版櫘閫氱殑緇堢鏈?BR>
Present-day Internet has seen ubiquitous deployment of "middleboxes" such as network address translators(NAT), driven primarily by the ongoing depletion of the IPv4 address space. The asymmetric addressing and connectivity regimes established by these middleboxes, however, have created unique problems for peer-to-peer (P2P) applications and protocols, such as teleconferencing and multiplayer on-line gaming. These issues are likely to persist even into the IPv6 world, where NAT is often used as an IPv4 compatibility mechanism [NAT-PT], and firewalls will still be commonplace even after NAT is no longer required.
鍦ㄥ綋浠婄殑Internet涓紝鏅亶瀛樺湪浣跨敤鈥滀唬鐞嗏濊澶囨潵榪涜緗戠粶鍦板潃杞崲錛圢AT錛夛紝瀵艱嚧榪欑鐜拌薄鐨勫師鍥犳槸 IPV4 鍦板潃絀洪棿鐨勮祫婧愯楀敖鍗辨満銆傝櫧鐒朵笉瀵圭О asymmetric 鐨勫湴鍧鍒嗛厤鍜岃繛閫氭у埗搴﹀凡緇忓湪浠g悊涓瀹氫箟錛屼絾鏄嵈緇欑瀵圭搴旂敤紼嬪簭鍜屽崗璁埗瀹氶犳垚浜?jiǎn)涓浜涚壒孌婄殑闂銆傚儚鐢?shù)璇濅細(xì)璁拰澶氬獟浣摼|戠粶娓告垙銆傝繖浜涢棶棰樺嵆浣垮湪IPV6涓栫晫涓繕鏄細(xì)瀛樺湪錛屽洜涓篘AT浣滀負(fù)IPV4鐨勪竴縐嶅吋瀹規(guī)ф満鍒剁粡甯歌浣跨敤[NAT-PT]錛屽茍涓旈槻鐏灝嗕粛鐒跺皢鏅亶瀛樺湪錛屽嵆浣夸笉鍐嶉渶瑕丯AT鎶鏈?BR>
Currently deployed middleboxes are designed primarily around the client/server paradigm, in which relatively anonymous client machines actively initiate connections to well-connected servers having stable IP addresses and DNS names.
Most middleboxes implement an asymmetric communication model in which hosts on the private internal network can initiate outgoing connections to hosts on the public network, but external hosts cannot initiate connections to internal hosts except as specifically configured by the middlebox's ****istrator. In the common case of NAPT, a client on the internal network does not have a unique IP address on the public Internet, but instead must share a single public IP address, managed by the NAPT, with other hosts on the same private network.The anonymity and inaccessibility of the internal hosts behind a middlebox is not a problem for client software such as web browsers, which only need to initiate outgoing connections. This inaccessibility is sometimes seen as a privacy benefit.
褰撳墠浣跨敤鐨勨滀唬鐞嗏濇妧鏈富瑕佹槸涓?瀹㈡埛绔?鏈嶅姟绔?C/S 緇撴瀯璁捐鐨勶紝涓轟簡(jiǎn)瀹炵幇閭d簺闇瑕佽繛鎺ヤ絾鏄張娌℃湁鍥哄畾IP鍦板潃鐨勫鎴風(fēng)鑳藉榪炴帴鍒頒竴鍙伴厤緗ソ鐨勬嫢鏈夊浐瀹欼P鍜孌NS鍩熷悕鐨勬湇鍔″櫒銆?BR> 澶у鏁扮殑鈥滀唬鐞嗏濅嬌鐢ㄤ竴縐?asymmetric 閫氫俊妯″瀷錛屽嵆 縐佺綉錛堝眬鍩熺綉錛?鐨勪富鏈鴻兘鍙戣搗涓涓滃鍑衡濊繛鎺ュ幓榪炴帴鍏綉涓婄殑涓繪満銆?浣嗘槸鍏綉涓婄殑涓繪満鍗存棤娉曞彂閫佷俊鎭粰縐佺綉涓婄殑涓繪満錛堥櫎闈炲鈥滀唬鐞嗏濊繘琛岀壒孌婄殑閰嶇疆錛夛紝NAPT錛堢綉緇滃湴鍧绔彛杞崲錛夌殑鏅氭儏鍐墊槸錛屼竴涓緗戝鎴風(fēng)涓嶉渶瑕佷竴涓叕緗戠殑鍥哄畾鐨処P鍦板潃錛屼絾鏄繀欏昏鍏變韓涓涓敱NAPT鎺у埗鐨勫叕緗戠殑鍥哄畾IP鍦板潃錛堝綋鐒惰繖涓狽APT鏄浜庡悓涓涓緗戝唴閮ㄧ殑錛夈傝繖鏍風(fēng)殑璇濓紝榪欎簺鍖垮悕鐨勫茍涓旂湅璧鋒潵闅句互瑙﹀強(qiáng)鐨勮棌鍦∟AT涔嬪悗鐨勫唴緗戜富鏈哄浜庡儚 Web嫻忚鍣?榪欑杞歡鏉ヨ灝變笉鏄竴涓棶棰?鍥犱負(fù)鍐呯綉鐨勪富鏈哄彧闇瑕佸彂璧峰悜澶栭儴鐨勮繛鎺ュ氨鍙互浜?jiǎn)銆傝繖鏍蜂竴鏉ワ紝鏃犳硶瑙﹀強(qiáng)涔熻繕鏄湁浠栫殑浼樼偣鐨勨斺旈偅灝辨槸鍏鋒湁淇濆瘑鎬с?BR>
In the peer-to-peer paradigm, however, Internet hosts that would normally be considered "clients" need to establish communication sessions directly with each other. The initiator and the responder might lie behind different middleboxes with neither endpoint having any permanent IP address or other form of public network presence. A common on-line gaming architecture, for example, is for the participating application hosts to contact a well-known server for initialization and ****istration purposes. Subsequent to this, the hosts establish direct connections with each other for fast and efficient propagation of updates during game play.
Similarly, a file sharing application might contact a well-known server for resource discovery or searching, but establish direct connections with peer hosts for data transfer. Middleboxes create problems for peer-to-peer connections because hosts behind a middlebox normally have no permanently usable public ports on the Internet to which incoming TCP or UDP connections from other peers can be directed.
RFC 3235 [NAT-APPL] briefly addresses this issue, but does not offer any general solutions.
鐒惰岋紝鍦≒2P鐨勫簲鐢ㄤ腑錛孖nternet涓婄殑鈥滃鎴鋒満鈥濅箣闂存槸闇瑕佸緩绔嬩竴涓氫俊浼?xì)璇濈洿杩炵殑銆傞個(gè)璇瘋(gè)呭拰鍝嶅簲鑰呬篃璁鎬細(xì)澶勪簬涓嶅悓鐨凬AT涔嬪悗錛屼篃璁鎬粬浠兘娌℃湁鍥哄畾IP鎴栬呭嵆浣挎湁涔熶笉鏄叕緗戠殑IP鍦板潃銆備婦渚嬫潵璇達(dá)紝鍦ㄤ竴涓櫘閫氱殑緗戠粶娓告垙浣撶郴緇撴瀯涓紝閮芥槸閫氳繃瀹㈡埛绔悜涓涓叿鏈夊叕緗戝浐瀹欼P鐨勬湇鍔″櫒鍙戣搗鐢寵榪涜鍒濆鍖栧茍閫氳繃楠岃瘉鐨勩傚悓鏃訛紝瀹㈡埛绔箣闂翠篃瑕佸緩绔嬬洿榪烇紝鎵嶄嬌緗戠粶闂翠紶杈撶殑閫熷害鍔犲揩錛屼繚璇佹暟鎹嵆鏃舵洿鏂幫紙涓嶇劧鎶笉鍒拌澶囧晩錛屽懙鍛碉級(jí)銆?BR>
鍚屾牱鐨勶紝涓涓枃浠跺叡浜簲鐢ㄧ▼搴忎篃蹇呴』閫氳繃鍒頒竴涓湇鍔″櫒涓婂幓鏌ユ壘瀹冩兂瑕佺殑璧勬簮錛岀劧鍚庡啀鍒版嫢鏈夎繖涓暟鎹殑涓繪満涓婂幓涓嬭澆錛圔T緗戠珯錛岃蛋浜?jiǎn)涓涓腑浠嬶級(jí)錛屸滀唬鐞嗏濋犳垚浜?jiǎn)寰堝P2P鐩磋繛鐨勯棶棰橈紝鍥犱負(fù)钘忓湪鈥滀唬鐞嗏濅箣鍚庣殑鐨勪富鏈洪氬父娌℃湁鍥哄畾鐨勭鍙f潵浣垮叾浠栫殑瀹㈡埛绔彂璧風(fēng)殑TCP鎴朥DP榪炴帴鑳藉鏈緇堝埌杈俱?BR>
RFC 3235[NAT-APPL] 綆瑕佺殑鎻愬埌浜?jiǎn)杩欎釜闂锛屼絾鏄病鏈壘l欏嚭浠諱綍鐨勮В鍐蟲柟妗堛?BR>
In this document we address the P2P/middlebox problem in two ways. First, we summarize known methods by which P2P applications can work around the presence of middleboxes. Second, we provide a set of application design guidelines based on these practices to make P2P applications operate more robustly over currently-deployed middleboxes. Further, we provide design guidelines for future middleboxes to allow them to support P2P applications more effectively. Our focus is to enable immediate and wide deployment of P2P applications requiring to traverse middleboxes.
鍦ㄨ繖綃囨枃绔犱腑錛屾垜浠敤涓ょ鏂瑰紡璁ㄨ P2P/浠g悊 鐨勯棶棰樸傞鍏堬紝姒傝鐨勮鍙欏凡鏈夌殑P2P搴旂敤紼嬪簭鑳藉鍦ㄧ幇鏈夌殑浠g悊鏈哄埗涓殑宸ヤ綔鍘熺悊銆傜劧鍚庯紝鎴戜滑鎻愪緵涓緇勫簲鐢ㄧ▼搴忚璁℃寚鍗楋紝鍩轟簬宸叉湁鐨勫疄璺碉紝鍦ㄧ幇鏈夌殑閰嶇疆濂界殑浠g悊涓婏紝鏉ヤ嬌寰桺2P搴旂敤紼嬪簭鎿嶄綔鏇村姞鏈夋潯鐞嗐傛渶鍚庯紝鎴戜滑鎻愪緵浜?jiǎn)璁捐鎸囧崡锛屼皋Z互鍚庣殑浠g悊鏈哄埗鑳藉鏇存柟渚挎敮鎸丳2P搴旂敤紼嬪簭銆傝璁虹殑鐒︾偣鏄浣?鐩存帴鐨勩佸箍娉涚殑 閰嶇疆閭d簺闇瑕佺粡榪団滀唬鐞嗏濈殑P2P搴旂敤紼嬪簭銆?BR>
]]>
婧愮爜涓嬭澆: http://bbs.hwysoft.com/download/UDP-NAT-LEO.rar
鍙傝冿細(xì)http://midcom-p2p.sourceforge.net/draft-ford-midcom-p2p-01.txt
P2P涔婾DP絀塊廚AT鐨勫師鐞嗕笌瀹炵幇(shootingstars)
鏂囩珷璇存槑:
鍏充簬UDP絀塊廚AT鐨勪腑鏂囪祫鏂欏湪緗戠粶涓婃槸寰堝皯鐨勶紝浠呮湁<<P2P涔婾DP絀塊廚AT鐨勫師鐞嗕笌瀹炵幇(shootingstars)>>榪欑瘒鏂囩珷鏈夊疄闄呯殑鍙傝冧環(huán)鍊箋傛湰浜鴻繎涓ゅ勾鏉ヤ篃涓鐩翠粠浜婸2P鏂歸潰鐨勫紑鍙戝伐浣滐紝姣旇緝鏈変唬琛ㄦх殑鏄釜浜哄紑鍙戠殑BitTorrent涓嬭澆杞歡 - FlashBT(鍙樻佸揩杞?. 瀵筆2P涓嬭澆鎴栬匬2P鐨勫紑鍙戞劅鍏磋叮鐨勬湅鍙嬪彲浠ヨ闂蔣浠剁殑瀹樻柟涓婚〉: http://www.hwysoft.com/chs/ 涓嬭澆鐪嬬湅錛岃涓嶅畾鏈夋敹鑾楓傚啓榪欑瘒鏂囩珷鐨勪富瑕佺洰鐨勬槸鎳掔殑鍐嶆瘡嬈″崟鐙洖絳斾竴浜涚綉鍙嬬殑鎻愰棶, 涓嬈℃у啓涓嬫潵, 鍗寵妭鐪佷簡(jiǎn)鑷繁鐨勬椂闂達(dá)紝涔熸柟渚夸簡(jiǎn)瀵逛簬P2P鐨刄DP絀塊忔劅鍏磋叮鐨勭綉鍙嬮槄璇誨拰鐞嗚В銆傚姝ゆ湁鍏磋叮鍜岀粡楠岀殑鏈嬪弸鍙互緇欐垜鍙戦偖浠舵垨鑰呰闂垜鐨勪釜浜築log鐣欒█: http://hwycheng.blogchina.com.
鎮(zhèn)ㄥ彲浠ヨ嚜鐢辮漿杞芥綃囨枃绔狅紝浣嗘槸璇蜂繚鐣欐璇存槑銆?BR>
鍐嶆鎰熻阿shootingstars緗戝弸鐨勬棭鏈熻礎(chǔ)鐚? 琛ㄧず璋㈡剰銆?BR>
------------------------------------------------------------------------------------------------------------
NAT(The IP Network Address Translator) 鐨勬蹇靛拰鎰忎箟鏄粈涔?
NAT, 涓枃緲昏瘧涓虹綉緇滃湴鍧杞崲銆傚叿浣撶殑璇︾粏淇℃伅鍙互璁塊棶RFC 1631 - http://www.faqs.org/rfcs/rfc1631.html, 榪欐槸瀵逛簬NAT鐨勫畾涔夊拰瑙i噴鐨勬渶鏉冨▉鐨勬弿榪般傜綉緇滄湳璇兘鏄緢鎶借薄鍜岃壈娑╃殑錛岄櫎闈炴槸涓撲笟浜哄+錛屽惁鍒欏緢闅句粠瀛楅潰涓潵鍑嗙‘鐞嗚ВNAT鐨勫惈涔夈?BR>
瑕佹兂瀹屽叏鏄庣櫧NAT 鐨勪綔鐢紝鎴戜滑蹇呴』鐞嗚ВIP鍦板潃鐨勪袱澶у垎綾伙紝涓綾繪槸縐佹湁IP鍦板潃錛屽湪榪欓噷鎴戜滑縐頒綔鍐呯綉IP鍦板潃銆備竴綾繪槸闈炵鏈夌殑IP鍦板潃錛屽湪榪欓噷鎴戜滑縐頒綔鍏綉IP鍦板潃銆傚叧浜嶪P鍦板潃鐨勬蹇靛拰浣滅敤鐨勪粙緇嶅弬瑙佹垜鐨勫彟涓綃囨枃绔? http://hwycheng.blogchina.com/2402121.html
鍐呯綉IP鍦板潃: 鏄寚浣跨敤A/B/C綾諱腑鐨勭鏈夊湴鍧, 鍒嗛厤鐨処P鍦板潃鍦ㄥ叏鐞冧笉鎯ф湁鍞竴鎬э紝涔熷洜姝ゆ棤娉曡鍏跺畠澶栫綉涓繪満鐩存帴璁塊棶銆?BR>鍏綉IP鍦板潃: 鏄寚鍏鋒湁鍏ㄧ悆鍞竴鐨処P鍦板潃錛岃兘澶熺洿鎺ヨ鍏跺畠涓繪満璁塊棶鐨勩?BR>
NAT 鏈鍒濈殑鐩殑鏄負(fù)浣跨敤鍐呯綉IP鍦板潃鐨勮綆楁満鎻愪緵閫氳繃灝戞暟鍑犲彴鍏鋒湁鍏綉鐨処P鍦板潃鐨勮綆楁満璁塊棶澶栭儴緗戠粶鐨勫姛鑳姐侼AT 璐熻矗灝嗘煇浜涘唴緗慖P鍦板潃鐨勮綆楁満鍚戝閮ㄧ綉緇滃彂鍑虹殑IP鏁版嵁鍖呯殑婧怚P鍦板潃杞崲涓篘AT鑷繁鐨勫叕緗戠殑IP鍦板潃錛岀洰鐨処P鍦板潃涓嶅彉, 騫跺皢IP鏁版嵁鍖呰漿鍙戠粰璺敱鍣紝鏈緇堝埌杈懼閮ㄧ殑璁$畻鏈恒傚悓鏃惰礋璐e皢澶栭儴鐨勮綆楁満榪斿洖鐨処P鏁版嵁鍖呯殑鐩殑IP鍦板潃杞崲涓哄唴緗戠殑IP鍦板潃錛屾簮IP鍦板潃涓嶅彉錛屽茍鏈緇堥佽揪鍒板唴緗戜腑鐨勮綆楁満銆?BR>
---------------------- ----------------------
| 192.168.0.5 | Internat host | 192.168.0.6 | Internat host
---------------------- ----------------------
^ port:2809 ^port: 1827
| |
V V
---------------------- ----------------------
| 192.168.0.1 | NAT device | 192.168.0.2 | NAT device
| 61.51.99.86 | | 61.51.77.66 |
---------------------- ----------------------
^ ^
| |
V port:80 V port: 80
---------------------- ----------------------
| 61.51.202.88 | Internet host | 61.51.76.102 | Internet host
---------------------- ----------------------
鍥句竴: NAT 瀹炵幇浜?jiǎn)绉佹湁IP鐨勮綆楁満鍒嗕韓鍑犱釜鍏綉IP鍦板潃璁塊棶Internet鐨勫姛鑳姐?BR>
闅忕潃緗戠粶鐨勬櫘鍙?qiáng)锛孖Pv4鐨勫眬闄愭ф毚闇插嚭鏉ャ傚叕緗慖P鍦板潃鎴愪負(fù)涓縐嶇█緙虹殑璧勬簮錛屾鏃禢AT 鐨勫姛鑳藉眬闄愪篃鏆撮湶鍑烘潵錛屽悓涓涓叕緗戠殑IP鍦板潃錛屾煇涓椂闂村彧鑳界敱涓鍙扮鏈塈P鍦板潃鐨勮綆楁満浣跨敤銆備簬鏄疦APT(The IP Network Address/Port Translator)搴旇繍鑰岀敓錛孨APT瀹炵幇浜?jiǎn)澶氬彴绉佹湁IP鍦板潃鐨勮綆楁満鍙互鍚屾椂閫氳繃涓涓叕緗慖P鍦板潃鏉ヨ闂甀nternet鐨勫姛鑳姐傝繖鍦ㄥ緢澶х▼搴︿笂鏆傛椂緙撹В浜?jiǎn)IPv4鍦板潃璧勬簮鐨勭揣寮犮?BR>
NAPT 璐熻矗灝嗘煇浜涘唴緗慖P鍦板潃鐨勮綆楁満鍚戝閮ㄧ綉緇滃彂鍑虹殑TCP/UDP鏁版嵁鍖呯殑婧怚P鍦板潃杞崲涓篘APT鑷繁鐨勫叕緗戠殑IP鍦板潃錛屾簮绔彛杞負(fù)NAPT鑷繁鐨勪竴涓鍙c傜洰鐨処P鍦板潃鍜岀鍙d笉鍙? 騫跺皢IP鏁版嵁鍖呭彂緇欒礬鐢卞櫒錛屾渶緇堝埌杈懼閮ㄧ殑璁$畻鏈恒傚悓鏃惰礋璐e皢澶栭儴鐨勮綆楁満榪斿洖鐨処P鏁版嵁鍖呯殑鐩殑IP鍦板潃杞崲鍐呯綉鐨処P鍦板潃錛岀洰鐨勭鍙h漿涓哄唴緗戣綆楁満鐨勭鍙o紝婧怚P鍦板潃鍜屾簮绔彛涓嶅彉錛屽茍鏈緇堥佽揪鍒板唴緗戜腑鐨勮綆楁満銆?BR>
---------------------- ----------------------
| 192.168.0.5 | Internat host | 192.168.0.6 | Internat host
---------------------- ----------------------
port: 2809 ^ ^ port: 1827
\ /
v v
----------------------
| 192.168.0.1 | NAT device
| 61.51.99.86 |
----------------------
map port:9882 to 192.168.0.5:2809 ^ ^ map port: 9881 to 192.168.0.6:1827
/ \
port:80 v v port:80
---------------------- ----------------------
| 61.51.202.88 | Internet host | 61.51.76.102 | Internet host
---------------------- ----------------------
鍥句簩: NAPT 瀹炵幇浜?jiǎn)绉佹湁IP鐨勮綆楁満鍒嗕韓涓涓叕緗慖P鍦板潃璁塊棶Internet鐨勫姛鑳姐?nbsp;
鍦ㄦ垜浠殑宸ヤ綔鍜岀敓媧諱腑, NAPT鐨勪綔鐢ㄩ殢澶勫彲瑙侊紝緇濆ぇ閮ㄥ垎鍏徃鐨勭綉緇滄灦鏋勶紝閮芥槸閫氳繃1鑷砃鍙版敮鎸丯APT鐨勮礬鐢卞櫒鏉ュ疄鐜板叕鍙哥殑鎵鏈夎綆楁満榪炴帴澶栭儴鐨処nternet緗戠粶鐨勩傚寘鎷湰浜哄湪鍐欒繖綃囨枃绔犵殑鏃跺欙紝涔熸槸鍦ㄥ涓嬌鐢ㄤ竴鍙癐BM絎旇鏈氳繃涓鍙板甯﹁繛鎺ョ殑鍙板紡鏈烘潵璁塊棶Internet鐨勩傛垜浠湰綃囨枃绔犱富瑕佽璁虹殑NAPT鐨勯棶棰樸?BR>
NAPT(The IP Network Address/Port Translator) 涓轟綍闃葷浜?jiǎn)P2P杞歡鐨勫簲鐢?
閫氳繃NAPT 涓婄綉鐨勭壒鐐瑰喅瀹氫簡(jiǎn)鍙兘鐢盢APT鍐呯殑璁$畻鏈轟富鍔ㄥ悜NAPT澶栭儴鐨勪富鏈哄彂璧瘋繛鎺ワ紝澶栭儴鐨勪富鏈烘兂鐩存帴鍜孨APT鍐呯殑璁$畻鏈虹洿鎺ュ緩绔嬭繛鎺ユ槸涓嶈鍏佽鐨勩侷M(鍗蟲椂閫氳)鑰岃█錛岃繖鎰忓懗鐫鐢變簬NAPT鍐呯殑璁$畻鏈哄拰NAPT澶栫殑璁$畻鏈哄彧鑳介氳繃鏈嶅姟鍣ㄤ腑杞暟鎹潵榪涜閫氳銆傚浜嶱2P鏂瑰紡鐨勪笅杞界▼搴忚岃█錛屾剰鍛崇潃NAPT鍐呯殑璁$畻鏈轟笉鑳芥帴鏀跺埌NAPT澶栭儴鐨勮繛鎺ワ紝瀵艱嚧榪炴帴鏁扮敤榪囧皯錛屼笅杞介熷害寰堥毦涓婂幓銆傚洜姝2P杞歡蹇呴』瑕佽В鍐崇殑涓涓棶棰樺氨鏄鑳藉鍦ㄤ竴瀹氱殑紼嬪害涓婅В鍐砃APT鍐呯殑璁$畻鏈轟笉鑳借澶栭儴榪炴帴鐨勯棶棰樸?BR>
NAT(The IP Network Address Translator) 榪涜UDP絀塊忕殑鍘熺悊鏄粈涔?
TCP/IP浼犺緭鏃朵富瑕佺敤鍒癟CP鍜孶DP鍗忚銆俆CP鍗忚鏄彲闈犵殑錛岄潰鍚戣繛鎺ョ殑浼犺緭鍗忚銆俇DP鏄笉鍙潬鐨勶紝鏃犺繛鎺ョ殑鍗忚銆傛牴鎹甌CP鍜孶DP鍗忚鐨勫疄鐜板師鐞嗭紝瀵逛簬NAPT鏉ヨ繘琛岀┛閫忥紝涓昏鏄寚鐨刄DP鍗忚銆俆CP鍗忚涔熸湁鍙兘錛屼絾鏄彲琛屾ч潪甯稿皬錛岃姹傛洿楂橈紝鎴戜滑姝ゅ涓嶄綔璁ㄨ錛屽鏋滄劅鍏磋叮鍙互鍒癎oogle涓婃悳绱紝鏈変簺鏂囩珷瀵硅繖涓棶棰樺仛浜?jiǎn)鎺㈣鎬х殑鎻忚堪銆備笅闈㈡垜浠潵鐪嬬湅鍒╃敤UDP鍗忚鏉ョ┛閫廚APT鐨勫師鐞嗘槸浠涔?
---------------------- ----------------------
| 192.168.0.5 | Internat host | 192.168.0.6 | Internat host
---------------------- ----------------------
UDP port: 2809 ^ ^ UDP port: 1827
\ /
v v
----------------------
| 192.168.0.1 | NAT device
| 61.51.99.86 |
----------------------
Session(192.168.0.6:1827 <-> 61.51.76.102:8098) ^ ^ Session(192.168.0.6:1827 <-> 61.51.76.102:8098)
map port:9882 to 192.168.0.5:2809 / \map port: 9881 to 192.168.0.6:1827
UDP port:8098 v v UDP port:8098
---------------------- ----------------------
| 61.51.202.88 | Internet host | 61.51.76.102 | Internet host
---------------------- ----------------------
鍥句笁: NAPT 鏄浣曞皢縐佹湁IP鍦板潃鐨刄DP鏁版嵁鍖呬笌鍏綉涓繪満榪涜閫忔槑浼犺緭鐨勩?BR>
UDP鍗忚鍖呯粡NAPT閫忔槑浼犺緭鐨勮鏄?
NAPT涓烘瘡涓涓猄ession鍒嗛厤涓涓狽APT鑷繁鐨勭鍙e彿錛屼緷鎹绔彛鍙鋒潵鍒ゆ柇灝嗘敹鍒扮殑鍏綉IP涓繪満榪斿洖鐨凾CP/IP鏁版嵁鍖呰漿鍙戠粰閭e彴鍐呯綉IP鍦板潃鐨勮綆楁満銆傚湪榪欓噷Session鏄櫄鎷熺殑錛孶DP閫氳騫朵笉闇瑕佸緩绔嬭繛鎺ワ紝浣嗘槸瀵逛簬NAPT鑰岃█錛岀殑紜鏈変竴涓猄ession鐨勬蹇靛瓨鍦ㄣ侼APT瀵逛簬UDP鍗忚鍖呯殑閫忔槑浼犺緭闈復(fù)鐨勪竴涓噸瑕佺殑闂灝辨槸濡備綍澶勭悊榪欎釜铏氭嫙鐨凷ession銆傛垜浠兘鐭ラ亾TCP榪炴帴鐨凷ession浠YN鍖呭紑濮嬶紝浠IN鍖呯粨鏉燂紝NAPT鍙互寰堝鏄撶殑鑾峰彇鍒癟CP Session鐨勭敓鍛藉懆鏈燂紝騫惰繘琛屽鐞嗐備絾鏄浜嶶DP鑰岃█錛屽氨楹葷儲(chǔ)浜?jiǎn)锛孨APT騫朵笉鐭ラ亾杞彂鍑哄幓鐨刄DP鍗忚鍖呮槸鍚﹀埌杈句簡(jiǎn)鐩殑涓繪満錛屼篃娌℃湁鍔炴硶鐭ラ亾銆傝屼笖閴翠簬UDP鍗忚鐨勭壒鐐癸紝鍙潬寰堝樊錛屽洜姝APT蹇呴』寮哄埗緇存寔Session鐨勫瓨鍦紝浠ヤ究絳夊緟灝嗗閮ㄩ佸洖鏉ョ殑鏁版嵁騫惰漿鍙戠粰鏇劇粡鍙戣搗璇鋒眰鐨勫唴緗慖P鍦板潃鐨勮綆楁満銆侼APT鍏蜂綋濡備綍澶勭悊UDP Session鐨勮秴鏃跺憿錛熶笉鍚岀殑鍘傚晢鎻愪緵鐨勮澶囧浜嶯APT鐨勫疄鐜頒笉榪戠浉鍚岋紝涔熻鍑犲垎閽燂紝涔熻鍑犱釜灝忔椂錛屼簺NAPT鐨勫疄鐜拌繕浼?xì)鏍规嵁璁惧鐨勫繖纰岀姸鎬佽繘琛屾櫤鑳借綆楄秴鏃舵椂闂寸殑闀跨煭銆?BR>
[192.168.0.6:1827]
| UDP Packet[src ip:192.168.0.6 src port:1827 dst ip:61.51.76.102 dst port 8098]
v
[pub ip: 61.51.99.86]NAT[priv ip: 192.168.0.1]
| UDP Packet[src ip:61.51.99.86 src port:9881 dst ip:61.51.76.102 dst port 8098]
v
[61.51.76.102:8098]
鍥懼洓: NAPT 灝嗗唴閮ㄥ彂鍑虹殑UDP鍗忚鍖呯殑婧愬湴鍧鍜屾簮绔彛鏀瑰彉浼犺緭緇欏叕緗慖P涓繪満銆?BR>
[192.168.0.6:1827]
^
| UDP Packet[src ip:61.51.76.102 src port:8098 dst ip:192.168.0.6 dst port 1827]
[pub ip: 61.51.99.86]NAT[priv ip: 192.168.0.1]
^
| UDP Packet[src ip:61.51.76.102 src port:8098 dst ip:61.51.99.86 dst port 9881]
[61.51.76.102:8098]
鍥句簲: NAPT 灝嗘敹鍒扮殑鍏綉IP涓繪満榪斿洖鐨刄DP鍗忚鍖呯殑鐩殑鍦板潃鍜岀洰鐨勭鍙f敼鍙樹紶杈撶粰鍐呯綉IP璁$畻鏈恒?nbsp;
鐜板湪鎴戜滑澶ф鏄庣櫧浜?jiǎn)NAPT濡備綍瀹炵幇鍐呯綉璁$畻鏈哄拰澶栫綉涓繪満闂寸殑閫忔槑閫氳銆傜幇鍦ㄦ潵鐪嬩竴涓嬫垜浠渶鍏沖績(jī)鐨勯棶棰橈紝灝辨槸NAPT鏄緷鎹粈涔堢瓥鐣ユ潵鍒ゆ柇鏄惁瑕佷負(fù)涓涓姹傚彂鍑虹殑UDP鏁版嵁鍖呭緩绔婼ession鐨勫憿錛熶富瑕佹湁涓涓嬪嚑涓瓥鐣?
A. 婧愬湴鍧(鍐呯綉IP鍦板潃)涓嶅悓錛屽拷鐣ュ叾瀹冨洜绱? 鍦∟APT涓婅偗瀹氬搴斾笉鍚岀殑Session
B. 婧愬湴鍧(鍐呯綉IP鍦板潃)鐩稿悓錛屾簮绔彛涓嶅悓錛屽拷鐣ュ叾瀹冪殑鍥犵礌錛屽垯鍦∟APT涓婁篃鑲畾瀵瑰簲涓嶅悓鐨凷ession
C. 婧愬湴鍧(鍐呯綉IP鍦板潃)鐩稿悓錛屾簮绔彛鐩稿悓錛岀洰鐨勫湴鍧(鍏綉IP鍦板潃)鐩稿悓錛岀洰鐨勭鍙d笉鍚岋紝鍒欏湪NAPT涓婅偗瀹氬搴斿悓涓涓猄ession
D. 婧愬湴鍧(鍐呯綉IP鍦板潃)鐩稿悓錛屾簮绔彛鐩稿悓錛岀洰鐨勫湴鍧(鍏綉IP鍦板潃)涓嶅悓錛屽拷鐣ョ洰鐨勭鍙o紝鍒欏湪NAPT涓婃槸濡備綍澶勭悊Session鐨勫憿錛?BR>
D鐨勬儏鍐墊寮忔垜浠叧蹇?jī)鍜岃璁ㄨ鐨勯棶棰樸備緷鎹洰鐨勫湴鍧(鍏綉IP鍦板潃)瀵逛簬Session鐨勫緩绔嬬殑鍐沖畾鏂瑰紡鎴戜滑灝哊APT璁懼鍒掑垎涓轟袱澶х被:
Symmetric NAPT:
瀵逛簬鍒板悓涓涓狪P鍦板潃錛屼換鎰忕鍙g殑榪炴帴鍒嗛厤浣跨敤鍚屼竴涓猄ession; 瀵逛簬鍒頒笉鍚岀殑IP鍦板潃, 浠繪剰绔彛鐨勮繛鎺ヤ嬌鐢ㄤ笉鍚岀殑Session.
鎴戜滑縐版縐峃APT涓?Symmetric NAPT. 涔熷氨鏄彧瑕佹湰鍦扮粦瀹氱殑UDP绔彛鐩稿悓錛?鍙戝嚭鐨勭洰鐨処P鍦板潃涓嶅悓錛屽垯浼?xì)寰忕珛涓嶅悓鐨凷ession.
[202.223.98.78:9696] [202.223.98.78:9696] [202.223.98.78:9696]
^ ^ ^
| | |
v v v
9883 9882 9881
|
\ [NAT] /
^
|
v
[192.168.0.6:1827]
鍥懼叚: Symmetric 鐨勮嫳鏂囨剰鎬濇槸瀵圭О銆傚涓鍙e搴斿涓富鏈猴紝騫寵鐨勶紝瀵圭О鐨?
Cone NAPT:
瀵逛簬鍒板悓涓涓狪P鍦板潃錛屼換鎰忕鍙g殑榪炴帴鍒嗛厤浣跨敤鍚屼竴涓猄ession; 瀵逛簬鍒頒笉鍚岀殑IP鍦板潃錛屼換鎰忕鍙g殑榪炴帴涔熶嬌鐢ㄥ悓涓涓猄ession.
鎴戜滑縐版縐峃APT涓?Cone NAPT. 涔熷氨鏄彧瑕佹湰鍦扮粦瀹氱殑UDP绔彛鐩稿悓錛?鍙戝嚭鐨勭洰鐨勫湴鍧涓嶇鏄惁鐩稿悓錛?閮戒嬌鐢ㄥ悓涓涓猄ession.
[202.223.98.78:9696] [202.223.98.78:9696] [202.223.98.78:9696]
^ ^ ^
\ | /
v v v
9881
[NAT]
^
|
v
[192.168.0.6:1827]
鍥句竷: Cone 鐨勮嫳鏂囨剰鎬濇槸閿ャ備竴涓鍙e搴斿涓富鏈猴紝鏄笉鏄儚涓敟瀛?
鐜板湪緇濆ぇ澶氭暟鐨凬APT灞炰簬鍚庤咃紝鍗矯one NAT銆傛湰浜哄湪嫻嬭瘯鐨勮繃紼嬩腑錛屽彧濂戒嬌鐢ㄤ簡(jiǎn)涓鍙版棩鏈殑Symmetric NAT銆傝繕濂戒笉鏄嚜宸辯殑涔扮殑錛屾垜浠庝笉涔版棩璐? 甯屾湜鐪嬭繖綃囨枃绔犵殑鏈嬪弸涔熻嚜瑙夌殑涓嶈璐拱鏃ユ湰鐨勪笢瑗褲俉in9x/2K/XP/2003緋葷粺鑷甫鐨凬APT涔熸槸灞炰簬 Cone NAT鐨勩傝繖鏄肩殑搴?jiǎn)骞哥殑锛屽洜湄?fù)鎴戜滑瑕佸仛鐨刄DP絀塊忓彧鑳藉湪Cone NAT闂磋繘琛岋紝鍙鏈変竴鍙頒笉鏄疌one NAT錛屽涓嶈搗錛孶DP絀塊忔病鏈夊笇鏈涗簡(jiǎn)錛屾湇鍔″櫒杞彂鍚с傚悗闈細(xì)鍋氳緇嗗垎鏋?
涓嬮潰鎴戜滑鍐嶆潵鍒嗘瀽涓涓婲APT 宸ヤ綔鏃剁殑涓浜涙暟鎹粨鏋勶紝鍦ㄨ繖閲屾垜浠皢鐪熸璇存槑UDP鍙互絀塊廋one NAT鐨勪緷鎹傝繖閲屾弿榪扮殑鏁版嵁緇撴瀯鍙槸涓轟簡(jiǎn)璇存槑鍘熺悊錛屼笉鍏鋒湁瀹為檯鍙傝冧環(huán)鍊鹼紝鐪熸鎰熷叴瓚e彲浠ラ槄璇籐inux鐨勪腑鍏充簬NAT瀹炵幇閮ㄥ垎鐨勬簮鐮併傜湡姝g殑NAT瀹炵幇涔熸病鏈夊埄鐢ㄦ暟鎹簱鐨勶紝鍛靛懙錛屼負(fù)浜?jiǎn)閫熷害錛?BR>
Symmetric NAPT 宸ヤ綔鏃剁殑绔彛鏄犲皠鏁版嵁緇撴瀯濡備笅:
鍐呯綉淇℃伅琛?
[NAPT 鍒嗛厤绔彛] [ 鍐呯綉IP鍦板潃 ] [ 鍐呯綉绔彛 ] [ 澶栫綉IP鍦板潃 ] [ SessionTime 寮濮嬫椂闂?]
PRIMARY KEY( [NAPT 鍒嗛厤绔彛] ) -> 琛ㄧず渚濇嵁[NAPT 鍒嗛厤绔彛]寤虹珛涓婚敭錛屽繀欏誨敮涓涓斿緩绔嬬儲(chǔ)寮曪紝鍔犲揩鏌ユ壘.
UNIQUE( [ 鍐呯綉IP鍦板潃 ], [ 鍐呯綉绔彛 ] ) -> 琛ㄧず榪欎袱涓瓧孌佃仈鍚堣搗鏉ヤ笉鑳介噸澶?
UNIQUE( [ 鍐呯綉IP鍦板潃 ], [ 鍐呯綉绔彛 ], [ 澶栫綉IP鍦板潃 ] ) -> 琛ㄧず榪欎笁涓瓧孌佃仈鍚堣搗鏉ヤ笉鑳介噸澶?
鏄犲皠琛?
[NAPT 鍒嗛厤绔彛] [ 澶栫綉绔彛 ]
UNIQUE( [NAPT 鍒嗛厤绔彛], [ 澶栫綉绔彛 ] ) -> 琛ㄧず榪欎袱涓瓧孌佃仈鍚堣搗鏉ヤ笉鑳介噸澶?
Cone NAPT 宸ヤ綔鏃剁殑绔彛鏄犲皠鏁版嵁緇撴瀯濡備笅:
鍐呯綉淇℃伅琛?
[NAPT 鍒嗛厤绔彛] [ 鍐呯綉IP鍦板潃 ] [ 鍐呯綉绔彛 ] [ SessionTime 寮濮嬫椂闂?]
PRIMARY KEY( [NAPT 鍒嗛厤绔彛] ) -> 琛ㄧず渚濇嵁[NAPT 鍒嗛厤绔彛]寤虹珛涓婚敭錛屽繀欏誨敮涓涓斿緩绔嬬儲(chǔ)寮曪紝鍔犲揩鏌ユ壘.
UNIQUE( [ 鍐呯綉IP鍦板潃 ], [ 鍐呯綉绔彛 ] ) -> 琛ㄧず榪欎袱涓瓧孌佃仈鍚堣搗鏉ヤ笉鑳介噸澶?
澶栫綉淇℃伅琛?
[ wid 涓婚敭鏍囪瘑 ] [ 澶栫綉IP鍦板潃 ] [ 澶栫綉绔彛 ]
PRIMARY KEY( [ wid 涓婚敭鏍囪瘑 ] ) -> 琛ㄧず渚濇嵁[ wid 涓婚敭鏍囪瘑 ]寤虹珛涓婚敭錛屽繀欏誨敮涓涓斿緩绔嬬儲(chǔ)寮曪紝鍔犲揩鏌ユ壘.
UNIQUE( [ 澶栫綉IP鍦板潃 ], [ 澶栫綉绔彛 ] ) -> 琛ㄧず榪欎袱涓瓧孌佃仈鍚堣搗鏉ヤ笉鑳介噸澶?
鏄犲皠琛? 瀹炵幇涓瀵瑰錛岀殑
[NAPT 鍒嗛厤绔彛] [ wid 涓婚敭鏍囪瘑 ]
UNIQUE( [NAPT 鍒嗛厤绔彛], [ wid 涓婚敭鏍囪瘑 ] ) -> 琛ㄧず榪欎袱涓瓧孌佃仈鍚堣搗鏉ヤ笉鑳介噸澶?
UNIQUE( [ wid 涓婚敭鏍囪瘑 ] ) -> 鏍囪瘑姝ゅ瓧孌典笉鑳介噸澶?
鐪嬪畬浜?jiǎn)涓婇潰鐨勬暟鎹l撴瀯鏄洿鏄庣櫧浜?jiǎn)杩樻槸鏇存檿浜?jiǎn)錛?鍛靛懙! 澶氭兂涓浼?xì)鍎繛兗?xì)鏄庣櫧浜?jiǎn)銆傞氳繃NAT,鍐呯綉璁$畻鏈鴻綆楁満鍚戝榪炵粨鏄緢瀹規(guī)槗鐨勶紝NAPT浼?xì)鑷姩澶勭悊锛屾垜浠殑搴旂敤绋嬪簭鏍规湰涓嶅繀鍏冲績(jī)瀹冩槸濡備綍澶勭悊鐨勩傞偅涔堝閮ㄧ殑璁$畻鏈烘兂璁塊棶鍐呯綉涓殑璁$畻鏈哄浣曞疄鐜板憿錛熸垜浠潵鐪嬩竴涓嬩笅闈㈢殑嫻佺▼錛?BR>
c 鏄竴鍙板湪NAPT鍚庨潰鐨勫唴緗戣綆楁満錛宻鏄竴鍙版湁澶栫綉IP鍦板潃鐨勮綆楁満銆俢 涓誨姩鍚?s 鍙戣搗榪炴帴璇鋒眰錛孨APT渚濇嵁涓婇潰鎻忚堪鐨勮鍒欏湪鑷繁鐨勬暟鎹粨鏋勪腑璁板綍涓嬫潵錛屽緩绔嬩竴涓猄ession. 鐒跺悗 c 鍜?s 涔嬮棿灝卞彲浠ュ疄鐜板弻鍚戠殑閫忔槑鐨勬暟鎹紶杈撲簡(jiǎn)銆傚涓嬮潰鎵紺?
c[192.168.0.6:1827] <-> [priv ip: 192.168.0.1]NAPT[pub ip: 61.51.99.86:9881] <-> s[61.51.76.102:8098]
鐢辨鍙錛屼竴鍙板緗慖P鍦板潃鐨勮綆楁満鎯沖拰NAPT鍚庨潰鐨勫唴緗戣綆楁満閫氳鐨勬潯浠跺氨鏄姹侼APT鍚庨潰鐨勫唴緗戣綆楁満涓誨姩鍚戝緗慖P鍦板潃鐨勮綆楁満鍙戣搗涓涓猆DP鏁版嵁鍖呫傚緗慖P鍦板潃鐨勮綆楁満鍒╃敤鏀跺埌鐨刄DP鏁版嵁鍖呰幏鍙栧埌NAPT鐨勫緗慖P鍦板潃鍜屾槧灝勭殑绔彛錛屼互鍚庡氨鍙互鍜屽唴緗慖P鐨勮綆楁満閫忔槑鐨勮繘琛岄氳浜?jiǎn)銆?BR>
鐜板湪鎴戜滑鍐嶆潵鍒嗘瀽涓涓嬫垜浠渶鍏沖績(jī)鐨勪袱涓狽APT鍚庨潰鐨勫唴緗戣綆楁満濡備綍瀹炵幇鐩存帴閫氳鍛? 涓よ呴兘鏃犳硶涓誨姩鍙戝嚭榪炴帴璇鋒眰錛岃皝涔熶笉鐭ラ亾瀵規(guī)柟鐨凬APT鐨勫叕緗慖P鍦板潃鍜孨APT涓婇潰鏄犲皠鐨勭鍙e彿銆傛墍浠ユ垜浠闈犱竴涓叕緗慖P鍦板潃鐨勬湇鍔″櫒甯姪涓よ呮潵寤虹珛榪炴帴銆傚綋涓や釜NAPT鍚庨潰鐨勫唴緗戣綆楁満鍒嗗埆榪炴帴浜?jiǎn)鍏|慖P鍦板潃鐨勬湇鍔″櫒鍚庯紝鏈嶅姟鍣ㄥ彲浠ヤ粠鏀跺埌鐨刄DP鏁版嵁鍖呬腑鑾峰彇鍒拌繖涓や釜NAPT璁懼鐨勫叕緗慖P鍦板潃鍜岃繖涓や釜榪炴帴寤虹珛鐨凷ession鐨勬槧灝勭鍙c備袱涓唴緗戣綆楁満鍙互浠庢湇鍔″櫒涓婅幏鍙栧埌瀵規(guī)柟鐨凬APT璁懼鍏綉IP鍦板潃鍜屾槧灝勭殑绔彛浜?jiǎn)銆?BR>
鎴戜滑鍋囪涓や釜鍐呯綉璁$畻鏈哄垎鍒負(fù)A鍜孊錛屽搴旂殑NAPT鍒嗗埆涓篈N鍜孊N錛?濡傛灉A鍦ㄨ幏鍙栧埌B瀵瑰簲鐨凚N鐨処P鍦板潃鍜屾槧灝勭殑绔彛鍚庯紝榪笉鎬ュ緟鐨勫悜榪欎釜IP
鍦板潃鍜屾槧灝勭殑绔彛鍙戦佷簡(jiǎn)涓猆DP鏁版嵁鍖咃紝浼?xì)鏈変粈涔堟儏鍐靛彂鐢熷憿錛熶緷鎹笂闈㈢殑鍘熺悊鍜屾暟鎹粨鏋勬垜浠細(xì)鐭ラ亾錛孉N浼?xì)鍦ㄨ嚜宸辩殑鏁版嵁缁撴瀯涓敓鎴愪竴鏉¤褰曪紝鏍囪瘑涓涓柊Session鐨勫瓨鍦ㄣ侭N鍦ㄦ敹鍒版暟鎹寘鍚庯紝浠庤嚜宸辯殑鏁版嵁緇撴瀯涓煡璇紝娌℃湁鎵懼埌鐩稿叧璁板綍錛屽洜姝ゅ皢鍖呬涪寮冦侭鏄釜鎱㈡у瓙錛屾鏃舵墠鎱㈠悶鍚炵殑鍚戠潃AN鐨処P鍦板潃鍜屾槧灝勭殑绔彛鍙戦佷簡(jiǎn)涓涓猆DP鏁版嵁鍖咃紝緇撴灉濡備綍鍛紵褰撶劧鏄垜浠湡鏈涚殑緇撴瀯浜?jiǎn)锛孉N鍦ㄦ敹鍒版暟鎹寘鍚庯紝浠庤嚜宸辯殑鏁版嵁緇撴瀯涓煡鎵懼埌浜?jiǎn)璁板綍锛屾墍浠ュ皢鏁版嵁鍖呰繘琛屽鐞嗗彂閫佺粰浜?jiǎn)A銆侫 鍐嶆鍚態(tài)鍙戦佹暟鎹寘鏃訛紝涓鍒囬兘鏃剁晠閫氭棤闃諱簡(jiǎn)銆侽K, 澶у伐鍛婃垚錛佷笖鎱紝榪欐椂瀵逛簬Cone NAPT鑰岃█錛屽浜嶴ymmetric NAPT鍛紵鍛靛懙錛岃嚜宸卞垎鏋愪竴涓嬪惂...
NAPT(The IP Network Address/Port Translator) 榪涜UDP絀塊忕殑鍏蜂綋鎯呭喌鍒嗘瀽!
棣栧厛鏄庣‘鐨勫皢NAPT璁懼鎸夌収涓婇潰鐨勮鏄庡垎涓? Symmetric NAPT 鍜?Cone NAPT, Cone NAPT 鏄垜浠渶瑕佺殑銆俉in9x/2K/XP/2003 鑷甫鐨凬APT涔熶負(fù)Cone NAPT銆?BR>
絎竴縐嶆儏鍐? 鍙屾柟閮芥槸Symmetric NAPT:
姝ゆ儏鍐靛簲緇欎笉瀛樺湪浠涔堥棶棰橈紝鑲畾鏄笉鏀寔UDP絀塊忋?BR>
絎簩縐嶆儏鍐? 鍙屾柟閮芥槸Cone NAPT:
姝ゆ儏鍐墊槸鎴戜滑闇瑕佺殑錛屽彲浠ヨ繘琛孶DP絀塊忋?BR>
絎笁縐嶆儏鍐? 涓涓槸Symmetric NAPT, 涓涓槸Cone NAPT:
姝ゆ儏鍐墊瘮杈冨鏉傦紝浣嗘垜浠寜鐓т笂闈㈢殑鎻忚堪鍜屾暟鎹満鏋勮繘琛屼竴涓嬪垎鏋愪篃寰堝鏄撳氨浼?xì)鏄庣櫧浜?jiǎn), 鍒嗘瀽濡備笅,
鍋囪: A -> Symmetric NAT, B -> Cone NAT
1. A 鎯寵繛鎺?B, A 浠庢湇鍔″櫒閭e効鑾峰彇鍒?B 鐨凬AT鍦板潃鍜屾槧灝勭鍙? A 閫氱煡鏈嶅姟鍣紝鏈嶅姟鍣ㄥ憡鐭?B A鐨凬AT鍦板潃鍜屾槧灝勭鍙? B 鍚?A 鍙戣搗榪炴帴錛孉 鑲畾鏃犳硶鎺ユ敹鍒般傛鏃?A 鍚?B 鍙戣搗榪炴帴錛?A 瀵瑰簲鐨凬AT寤虹珛浜?jiǎn)涓涓柊鐨凷ession錛屽垎閰嶄簡(jiǎn)涓涓柊鐨勬槧灝勭鍙o紝 B 鐨?NAT 鎺ユ敹鍒癠DP鍖呭悗錛屽湪鑷繁鐨勬槧灝勮〃涓煡璇紝鏃犳硶鎵懼埌鏄犲皠欏癸紝鍥犳灝嗗寘涓㈠純浜?jiǎn)銆?BR>
2. B 鎯寵繛鎺?A, B 浠庢湇鍔″櫒閭e効鑾峰彇鍒?A 鐨凬AT鍦板潃鍜屾槧灝勭鍙? B 閫氱煡鏈嶅姟鍣? 鏈嶅姟鍣ㄥ憡鐭?A B鐨凬AT鍦板潃鍜屾槧灝勭鍙?A 鍚?B 鍙戣搗榪炴帴, A 瀵瑰簲鐨凬AT寤虹珛浜?jiǎn)涓涓柊鐨凷ession錛屽垎閰嶄簡(jiǎn)涓涓柊鐨勬槧灝勭鍙鑲畾鏃犳硶鎺ユ敹鍒般傛鏃?B 鍚?A 鍙戣搗榪炴帴, 鐢變簬 B 鏃犳硶鑾峰彇 A 寤虹珛鐨勬柊鐨凷ession鐨勬槧灝勭鍙o紝浠嶆槸浣跨敤鏈嶅姟鍣ㄤ笂鑾峰彇鐨勬槧灝勭鍙h繘琛岃繛鎺ワ紝 鍥犳 A 鐨凬AT鍦ㄦ帴鏀跺埌UDP鍖呭悗錛屽湪鑷繁鐨勬槧灝勮〃涓煡璇紝鏃犳硶鎵懼埌鏄犲皠欏? 鍥犳灝嗗寘涓㈠純浜?jiǎn)銆?BR>
鏍規(guī)嵁浠ヤ笂鍒嗘瀽錛屽彧鏈夊綋榪炴帴鐨勪袱绔殑NAT閮戒負(fù)Cone NAT鐨勬儏鍐典笅錛屾墠鑳借繘琛孶DP鐨勫唴緗戠┛閫忎簰鑱斻?BR>
NAPT(The IP Network Address/Port Translator) 榪涜UDP絀塊忓浣曡繘琛岀幇瀹炵殑楠岃瘉鍜屽垎鏋?
闇瑕佺殑緗戠粶緇撴瀯濡備笅:
涓変釜NAT鍚庨潰鐨勫唴緗戞満鍣紝涓や釜澶栫綉鏈嶅姟鍣ㄣ傚叾涓袱鍙癈one NAPT錛屼竴鍙?Symmetric NAPT銆?BR>
楠岃瘉鏂規(guī)硶:
鍙互浣跨敤鏈▼搴忔彁渚涚殑婧愮爜錛岀紪璇戯紝鐒跺悗鍒嗗埆榪愯鏈嶅姟鍣ㄧ▼搴忓拰瀹㈡埛绔備慨鏀硅繃鍚庣殑婧愮爜澧炲姞浜?jiǎn)瀹㈡堬L(fēng)涔嬮棿鐩存帴閫氳繃IP鍦板潃鍜岀鍙e彂閫佹秷鎭殑鍛戒護(hù)錛屽埄鐢ㄦ鍛戒護(hù)錛屼綘鍙互鎵嬪姩鐨勯獙璇丯APT鐨勭┛閫忔儏鍐點(diǎn)備負(fù)浜?jiǎn)鏂逛究鎿嶄綔锛屾帹鑽愪綘鋴社敤涓涓繙紼嬬櫥闄嗚蔣浠訛紝鍙互鐩存帴鍦ㄤ竴鍙版満鍣ㄤ笂鎿嶄綔鎵鏈夌殑鐩稿叧鐨勮綆楁満錛岃繖鏍峰緢鏂逛究錛屼竴涓漢灝卞彲浠ュ畬鎴愭墍鏈夌殑宸ヤ綔浜?jiǎn)銆傚懙鍛碉紝鏈漢灝辨槸榪欎箞瀹屾垚鐨勩傛榪庢湁鍏磋叮鍜岀粡楠岀殑鏈嬪弸鏉ヤ俊鎵硅瘎鎸囨錛屽叡鍚岃繘姝ャ?BR>
]]>
鏈枃涓昏璁ㄨP2P騫沖彴鐨勫叧閿妧鏈紝鍏ㄦ枃鎸夊涓嬫柟寮忕粍緇囷細(xì)絎?鑺傛弿榪頒簡(jiǎn)P2P緋葷粺鐨勭壒鐐癸紝絎?鑺傛鎷簡(jiǎn)Peer閫氫俊鐨勫悇縐嶆妧鏈紝絎?鑺傚彊榪頒簡(jiǎn)P2P騫沖彴鐨勫畨鍏ㄦ帾鏂斤紝絎?鑺傝璁轟簡(jiǎn)P2P騫沖彴鐨勬ц兘闂錛屾渶鍚庢槸鍏ㄦ枃灝忕粨銆?BR>1錛嶱2P緋葷粺鐗圭偣
鍦≒2P緋葷粺涓紝姣忎竴涓狿eer閮芥槸騫崇瓑鐨勫弬涓庤咃紝鎵挎媴鏈嶅姟浣跨敤鑰?/FONT>鍜?FONT color=#ff0000>鏈嶅姟鎻愪緵鑰?/FONT>涓や釜瑙掕壊銆傝祫婧愮殑鎵鏈夋潈鍜屾帶鍒舵潈琚垎鏁e埌緗戠粶鐨勬瘡涓涓妭鐐逛腑銆傛湇鍔′嬌鐢ㄨ呭拰鏈嶅姟鎻愪緵鑰呬箣闂磋繘琛岀洿鎺ラ氫俊錛屽彲鍏呭垎鍒╃敤緗戠粶甯﹀錛屽噺灝戠綉緇滅殑鎷ュ鐘跺喌錛屼嬌寰楄祫婧愮殑鏈夋晥鍒╃敤鐜囧ぇ澶ф彁楂橈紙鍖呮嫭鍚勭璁$畻璧勬簮鍜屽瓨鍌ㄨ祫婧愶級(jí)銆傚悓鏃剁敱浜庢病鏈変腑澶妭鐐圭殑闆嗕腑鎺у埗錛岀郴緇熺殑浼哥緝鎬ц緝寮猴紝涔熻兘閬垮厤鍗曠偣鏁呴殰錛屾彁楂樼郴緇熺殑瀹歸敊鎬ц兘銆?BR>浣嗙敱浜嶱2P緗戠粶鐨勫垎鏁fс佽嚜娌繪с佸姩鎬佹х瓑鐗圭偣錛岄犳垚浜?jiǎn)鏌愪簺鎯呭喌涓婸eer鐨勮闂粨鏋滄槸涓嶅彲棰勮鐨勩備緥濡傦紝涓涓姹傚彲鑳藉緱涓嶅埌浠諱綍搴旂瓟娑堟伅鐨勫弽棣堛侾2P緋葷粺鐨勫尶鍚嶆х瓑鐗圭偣鍙兘浼?xì)甯︽潵绯痪l熺殑瀹夊叏婕忔礊銆?BR>P2P緋葷粺鐨勮繖浜涚壒鐐逛篃鍐沖畾浜?jiǎn)P2P 搴旂敤涓昏鍖呮嫭璧勬簮鍏變韓鍜屽崗浣溿傝祫婧愬叡浜富瑕佹槸鏂囦歡鍏變韓緋葷粺銆佹枃浠跺垎鍙戠郴緇燂紙F(tuán)ile Distribution System錛夈傞氳繃P2P緗戠粶瀹炵幇鏂囦歡鍏變韓鍜屾枃浠跺垎鍙戯紝鑳藉搴斾粯鐖嗗彂寮忚闂紝緋葷粺鐨勫彲浼哥緝鎬уソ錛屽彲闈犳уソ銆?BR>姝ょ被鍏稿瀷緋葷粺鏈?/STRONG>Napster[1]錛孏nutella[2]錛孎reeNet[3]錛孋hord-based System錛孊itTorrent[4]銆?BR>P2P鍗忎綔搴旂敤鐨勭綾誨緢澶氾紝鍖呮嫭鍗蟲椂娑堟伅緋葷粺銆佸湪綰挎父鎴忋佸叡浜紒涓氬簲鐢紙鍦ㄦ彁渚涘嵆鏃舵秷鎭箣澶栵紝榪樺彲鍏變韓鍐呭鍜岃繘琛屽叡鍚岀殑媧誨姩濡傜粍鍐呭叡鍚屽紑鍙戝拰緙栬緫錛夈佹枃浠舵悳绱€乸ub/sub緋葷粺絳夈?BR>鍏朵腑錛?STRONG>鍗蟲椂娑堟伅緋葷粺[5]鏈堿OL AIM銆乊ahoo Messenger銆丮SN Messenger銆丣abber[6,7]絳夛紱
鍦ㄧ嚎娓告垙鏈夋槦闄呬簤闇搞丯et-Z鍜孌OOM錛?BR>鍏變韓浼佷笟搴旂敤鏈塆roove[8]銆丮agi[9]錛?BR>鏂囦歡鎼滅儲(chǔ)鏈?/STRONG>YouSearch[10], OpenCola絳夛紱
pub/sub緋葷粺鏈塖cribe銆丠erms絳夛紱
榪樻湁鍩轟簬P2P緗戠粶鏋勯犵殑email緋葷粺銆?BR>鑰屼粠P2P緋葷粺鐨勫吀鍨嬬壒鐐規(guī)潵鍒嗘瀽錛屽父甯歌寮曡瘉涓篜2P搴旂敤鐨勭瀛﹁綆楃郴緇?A href="mailto:Seti@Home[11">Seti@Home[11]搴旇灞炰簬P2P鐨勯潪鍏稿瀷搴旂敤銆傚悇縐峆2P緋葷粺鐢變簬搴旂敤鑳屾櫙鐨勫樊寮傦紝褰兼浜掍笉鍏煎錛屽鑷翠笉鍚岀殑P2P緗戠粶鏃犳硶閫氫俊錛岄毦浠ユ湁鏁堝湴鍒╃敤緗戠粶璧勬簮鎻愪緵鏈嶅姟銆係un鍏徃緇勭粐寮鍙戠殑JXTA[12]欏圭洰錛屽笇鏈涢氳繃鎻愪緵涓涓畝鍗曢氱敤鐨凱2P騫沖彴鏉ヨВ鍐寵繖涓棶棰樸備粠涓婅堪搴旂敤鍙互鐪嬪嚭錛孭2P緋葷粺騫朵笉鑳芥浛浠e鎴?鏈嶅姟鍣ㄧ郴緇燂紝瀹冧滑涓よ呮槸鐩歌緟鐩告垚鐨勫叧緋匯?BR>浠嶱2P緋葷粺鐨勫熀鏈壒鐐瑰拰搴旂敤鎯呭喌鍒嗘瀽錛屾垜浠涓篜2P騫沖彴涓殑Peer鐨勯氫俊銆佸鉤鍙扮殑瀹夊叏鍜屽鉤鍙扮殑鎬ц兘浼樺寲榪欎笁欏規(guī)妧鏈槸P2P緋葷粺鐨勬垚鍔熶笌鍚︾殑鍏抽敭鎵鍦ㄣ?BR>
2 P2P閫氫俊
P2P閫氫俊鏃墮渶瑕佽В鍐崇殑鏈鍩烘湰鐨勯棶棰樺嵆鏄?STRONG>濡備綍榪炴帴鍏跺畠鐨勭粓绔幏寰椾俊鎭佽祫婧愬拰鏈嶅姟銆傝闂鍙粏鍒嗕負(fù)浠ヤ笅涓浜涢棶棰橈細(xì)
1銆丳2P緗戠粶鐨勬嫇鎵戠粨鏋勫拰Peer鑺傜偣鐨勫姛鑳借鑹插垝鍒嗭紱
魛伜 2銆佽祫婧愬拰鏈嶅姟濡備綍鏍囪瘑錛?BR>魛伜 3銆佽繘琛岃祫婧愭煡鎵炬椂濡備綍榪涜Peer瀹氫綅錛?BR>魛伜 4銆丳2P緗戠粶涓璓eer鑺傜偣鐨勫姩鎬佸彉鍖栫殑澶勭悊錛?BR>魛伜 5銆佸浣曠┛瓚奛AT錛圢etwork Address Translation錛夊拰闃茬伀澧欒繘琛孭eer鑺傜偣涔嬮棿鐨勭洿鎺ラ氫俊銆?BR>P2P緗戠粶鐨勬嫇鎵戠粨鏋勫拰Peer鑺傜偣鐨勮鑹插垝鍒?BR>鍦≒2P緗戠粶涓紝鏈変袱縐嶅吀鍨嬬殑鎷撴墤緇撴瀯錛屽嵆綰疨2P緗戠粶鍜屾販鏉傜殑P2P緗戠粶[13]銆?BR>鍦ㄧ函P2P緗戠粶涓紝姣忎釜Peer閮藉叿鏈夊悓絳夌殑璐d換鍜屽湴浣嶏紝涓嶅瓨鍦ㄤ腑闂磋妭鐐圭殑鍗忚皟銆侳reeNet銆丟nutella閮藉睘浜庣函P2P緗戠粶銆傝屽湪娣鋒潅鐨凱2P緗戠粶涓紝瀛樺湪鐫鍏呭綋鏈嶅姟鍣ㄨ鑹茬殑Peer鑺傜偣鎴栨彁渚涚壒孌婂姛鑳界殑Super-Peer鑺傜偣錛岃繖浜涜妭鐐逛繚瀛樺叾瀹働eer鑺傜偣鐨勫熀鏈姸鎬佸拰瀛樺偍鍐呭婧愪俊鎭紝鍗忓姪瀹屾垚瀵瑰叾瀹冭妭鐐圭殑璁板綍銆佹煡璇㈢瓑宸ヤ綔銆侼apster, Groove, Magi絳夌郴緇熷潎鏄吀鍨嬬殑娣鋒潅鍨婸2P緋葷粺銆?BR>姣忎竴涓狿eer鏍規(guī)嵁鍏舵彁渚涚殑瑙掕壊鍔熻兘鍙互鍒掑垎涓轟笁縐嶇被鍨嬶紝鍗崇畝鍗曠被鍨婸eer鑺傜偣錛宻uper-peer鑺傜偣鍜屾湇鍔″櫒鍨嬬殑peer鑺傜偣銆傜畝鍗曠被鍨婸eer鑺傜偣浠呬粎鏄竴涓畝鍗曠殑緇堢鐢ㄦ埛錛屽畠鍙互璇鋒眰鑾峰緱鏈嶅姟騫朵負(fù)緗戠粶涓殑鍏跺畠Peer鎻愪緵鏈嶅姟銆係uper-peer鑺傜偣闄や簡(jiǎn)鍏鋒湁鍜岀畝鍗昉eer鑺傜偣綾諱技鐨勫姛鑳藉錛岃繕鎻愪緵鏌愪簺鐗規(guī)畩鍔熻兘銆傚JXTA緋葷粺涓氨瀛樺湪璺敱鍣≒eer鑺傜偣鍜屼細(xì)鑱氱偣Peer鑺傜偣[12]錛屽墠鑰呬綔涓轟竴涓ˉ姊侊紝浣垮緱琚槻鐏鎴朜AT闅旂鐨凱eer鍙互鐩鎬簰閫氫俊錛涘悗鑰呬負(fù)綆鍗曡妭鐐規(guī)彁渚涙煡璇㈠畾浣嶄俊鎭殑鍔熻兘銆傛湇鍔″櫒鍨嬬殑Peer鑺傜偣涓昏鎻愪緵綾諱技涓庡鎴?鏈嶅姟鍣ㄦā鍨嬩笅鐨勬湇鍔″櫒鍔熻兘錛屽鎻愪緵涓涓叏灞緇熶竴鐨勭洰褰曟煡璇€傚湪Napster榪欑娣鋒潅鍨嬬殑P2P緋葷粺涓紝鏈夎嫢騫蹭釜綆鍗昉eer鑺傜偣鐩鎬簰鎻愪緵鏂囦歡涓嬭澆鍔熻兘鐨勬湇鍔★紝榪樻湁涓涓洰褰曟湇鍔″櫒鑺傜偣鎻愪緵鏂囦歡鏉$洰鐨勬敞鍐岀鐞嗐侴roove鍜孧agi緋葷粺涓篃鍧囧瓨鍦ㄨ繖鏍風(fēng)殑鏈嶅姟鍣ㄥ瀷鑺傜偣銆傝屽湪綰疨2P緗戠粶涓紝姣忎竴涓狿eer鑺傜偣鍧囧厖褰撲簡(jiǎn)涓婅堪鐨勪笁縐嶈鑹層?BR>璧勬簮鐨勬爣璇?BR>涓轟簡(jiǎn)鍦≒2P緗戠粶涓噯紜湴鏌ユ壘璧勬簮榪涜Peer瀹氫綅錛岃繕闇瑕佺‘瀹歅eer涓瓨璐祫婧愮殑鏍囪瘑錛堣繖閲屾垜浠皢鍦≒2P緗戠粶涓渶瑕佽繘琛屾煡鎵劇殑瀵硅薄緇熺О涓鴻祫婧愶級(jí)銆備笉鍚岀殑搴旂敤鍦烘櫙鍧囨湁閫傚悎鑷韓鐗圭偣鐨勮祫婧愭爣璇嗘柟寮忋?BR>鍦ㄤ互鏂囦歡鍏變韓涓轟富鐨勫簲鐢ㄤ腑錛岃祫婧愪富瑕佷互鏂囦歡鐨勫悕縐般佸叧閿瓧銆佹簮鏁版嵁絳夎繘琛屾爣璇嗐傝屽嵆鏃舵秷鎭氳緋葷粺寰寰閲囩敤綾諱技浜庣數(shù)瀛愰偖浠剁殑鍛藉悕鏂瑰紡錛屽鍦↗abber緋葷粺涓紝Jabber鐨勭敤鎴稩D浠node@]domain/[resource]鐨勫艦寮忚繘琛屽湴鍧鏍囪瘑[7]錛屾彁渚涗竴涓叏灞緇熶竴鐨勫湴鍧絀洪棿銆傚叾涓紝Domain鏄富瑕佺殑ID鏍囪瘑錛屾槸涓庡涓敤鎴瘋繛鎺ヨ繘琛屾秷鎭漿鍙戠殑Jabber Server錛汵ode涓虹敤鎴峰鍚嶆垨鏄電О錛孯esource灞炰簬涓涓狽ode錛屾爣璇嗗睘浜庝竴涓敤鎴風(fēng)殑澶氫釜璧勬簮銆備竴涓敤鎴峰彲浠ュ悓鏃朵笌鍚屼竴鏈嶅姟鍣ㄥ緩绔嬪嬈¤繛鎺ャ?BR>浠ョ敤鎴蜂箣闂村崗浣滀負(fù)涓葷殑P2P搴旂敤濡侴roove緋葷粺鍜孧agi緋葷粺錛岀敱浜庡湪鍗忎綔涓鍗蟲椂娑堟伅閫氳鍜屾枃浠跺叡浜殑瑕佹眰鍏艱屾湁涔嬶紝鐢ㄦ埛涓鑸互鐢ㄦ埛鍚嶈繘琛屾爣璇嗭紝鑰屾枃浠跺垯浠ユ簮鏁版嵁鏍囪瘑[14]銆?BR>JXTA浣滀負(fù)涓涓В鍐充笉鍚孭2P搴旂敤褰兼涓嶅吋瀹圭殑搴曞眰騫沖彴錛屾彁鍑轟簡(jiǎn)涓涓粺涓鐨勮祫婧愭爣璇嗗畾涔夛紝鍗沖箍鍛奫12]
錛坅dvertisement錛夈傚箍鍛婃槸涓涓猉ML緇撴瀯鐨勬枃妗o紝鐢盤eer鎴栫浉浜掑崗浣滃叡鍚屽畬鎴愪竴縐嶅簲鐢≒eer 緇勮繘琛屽彂甯冿紝鐢ㄦ潵鎻忚堪鐜版湁鐨勮祫婧愩佹湇鍔℃垨瀹炰綋P(yáng)eer銆侾eer鑺傜偣閫氳繃鏌ヨ騫垮憡浠ヨ幏寰楀悇縐嶈祫婧愮殑娑堟伅錛岃繘琛孭eer瀹氫綅銆?BR>
Peer鐨勫畾浣嶆柟寮?/STRONG>
鍦ㄦ煡鎵捐祫婧愮殑榪囩▼涓紝鍙噰鐢ㄧ洿鎺ユ垨闂存帴鏂瑰紡瀹氫綅Peer銆傜洿鎺ュ畾浣峆eer鐨勬柟寮忔瘮杈冪畝鍗曪紝鍗沖埄鐢ㄥ箍鎾垨澶氭挱鐨勫艦寮忓彂鍑烘煡璇㈣姹傦紝絎﹀悎鏌ヨ瑕佹眰鐨凱eer鑺傜偣榪涜搴旂瓟錛岀劧鍚庡緩绔嬬洿鎺ョ殑閫氫俊榪炴帴銆傜敱浜庤繖縐嶆柟寮忓彧鑳藉湪灞鍩熺綉涓嬌鐢紝鎵浠ュ簲鐢ㄨ寖鍥存湁闄愩傚綋鐒惰繖縐嶆柟寮忓彲浠ュ拰鍏跺畠鐨勫畾浣嶆柟寮忕粨鍚堜嬌鐢ㄤ互鑾峰緱鑹ソ鐨勬煡璇㈡晥鐜囥?BR>闂存帴鏂瑰紡鍖呮嫭涓夌妯″瀷錛氭湇鍔″櫒妯″瀷銆佹椽嫻佹ā鍨嬨佸拰璺敱妯″瀷銆?BR>鏈嶅姟鍣ㄦā鍨嬶細(xì)璇ユā鍨嬫槸鍩轟簬娣鋒潅鍨嬬殑P2P鎷撴墤緇撴瀯銆傚厖褰撴湇鍔″櫒鐨刾eer鑺傜偣鎻愪緵璧勬簮鏌ヨ銆俻eer灝嗚姹傚彂閫佽嚦鏈嶅姟鍣ㄨ幏寰楁煡璇㈢粨鏋滐紝闅忓悗錛岀洿鎺ヤ笌鐩爣鑺傜偣閫氫俊鑾峰彇鎵闇鏈嶅姟銆備絾榪欑鏂瑰紡瀛樺湪鍗曠偣澶辮觸闂錛屽悓鏃訛紝涔熷瓨鍦ㄤ幾緙╂ч棶棰樸備絾鍥犱負(fù)peer鑺傜偣浠呭湪鍚姩銆佸仠姝㈠強(qiáng)鏌ヨ鐨勬椂鍊欐墠涓庢湇鍔″櫒浜や簰錛屾墍浠ユ鏃剁殑浼哥緝鎬ц繕鏄己浜庡鎴?鏈嶅姟鍣ㄦā寮忋傚吀鍨嬬郴緇熸湁Napster錛孧agi錛孏roove鍜孞abber銆侼apster緋葷粺閲囩敤涓涓洰褰曟湇鍔″櫒璁板綍璧勬簮绱㈠紩錛孏roove緋葷粺鍜孧agi緋葷粺鍧囨槸閲囩敤鍔ㄦ丏NS鏌ユ壘鐢ㄦ埛鐨処P鍦板潃[14]銆侸abber緋葷粺鐢變簬鍏惰祫婧愭爣璇嗙被浼間簬Email鍦板潃錛屾墍浠ワ紝鍒╃敤DNS鐨凪X璁板綍榪涜IP鍦板潃鐨勬煡璇7]銆?BR>媧祦妯″瀷錛氳妯″瀷鍩轟簬綰疨2P鎷撴墤緇撴瀯銆侾eer鑺傜偣閲囩敤媧祦娉曞皢鏌ヨ璇鋒眰涓嶆柇鍦拌漿鍙戣嚦閭誨眳鑺傜偣錛岀洿鍒板埌杈劇洰鏍囪妭鐐癸紝鑾峰緱鏌ヨ緇撴灉銆傚悓鏃朵負(fù)浜?jiǎn)閬垮厤娑堟伅鏃犻檺鍒剁殑铦{鍙戯紝鏌ヨ璇鋒眰涓瀹氭湁TTL錛圱ime to Live錛夋垨HTL(Hops to Live)榪涜杞彂鎺у埗銆侴nutella鏄噰鐢ㄦ綾繪ā鍨嬬殑鍏稿瀷緋葷粺銆?BR>璺敱妯″瀷錛氳妯″瀷涔熸槸鍩轟簬綰疨2P緗戠粶緇撴瀯銆傞鍏堜負(fù)緗戠粶涓殑姣忎竴涓猵eer璧嬩簣涓涓狪D錛屽悓鏃訛紝姣忎釜Peer瀛樺偍鐨勮祫婧愬拰鏈嶅姟涔熸湁綾諱技鐨処D銆侾eer鑺傜偣鐨勮礬鐢辮〃涓櫥璁頒竴瀹氭暟閲忕殑閭誨眳鑺傜偣銆侾eer鐨勮姹傝杞彂鑷充笌鎵璇鋒眰鐨勮祫婧愭垨鏈嶅姟鐨処D 鏈鎺ヨ繎鐨凱eer錛岀洿鍒板彂鐜拌繖涓祫婧愭垨鏈嶅姟[15]銆傛彃鍏ヤ竴涓柊璧勬簮/鏈嶅姟鐨勮繃紼嬩笌鏌ヨ榪囩▼綾諱技錛屼篃鏄氳繃鏌ユ壘璇ヨ祫婧?鏈嶅姟ID鏉ョ‘瀹氬瓨鍌ㄧ殑姝g‘浣嶇疆銆傛綾繪ā鍨嬩富瑕佺敤鍦ㄦ枃浠跺叡浜郴緇熶腑錛屽FreeNet,Chord[16],CAN[17],Tapestry,Pastry絳夈?BR>璺敱妯″瀷鍙堝彲緇嗗垎涓洪潪緇撴瀯鍖栬礬鐢辨ā鍨嬪拰緇撴瀯鍖栬礬鐢辨ā鍨嬨侳reeNet緋葷粺灞炰簬鍏稿瀷鐨勯潪緇撴瀯鍖栬礬鐢辨ā鍨嬨傚湪鏌ユ壘鍒版墍闇璧勬簮鍚庯紝涓轟簡(jiǎn)鎻愰珮鎼滅儲(chǔ)鎬ц兘錛岀郴緇熸部鎼滅儲(chǔ)璺緞澶嶅埗璧勬簮銆傝繖鏍鳳紝鐢變簬璧勬簮鐨勫瓨鍌ㄤ綅緗笉鍥哄畾錛屽叾琛屼負(fù)涓嶆槗瑙傚療錛屼笉紜畾鍥犵礌杈冨ぇ銆傛墍浠ョ浉瀵逛簬緇撴瀯鍖栬礬鐢辨ā鍨嬫潵璇達(dá)紝鍏惰祫婧愬垎甯冪殑瑙勫緥鎬т笉寮猴紝闅句互浠庡叏灞涓婃妸鎻℃暣涓郴緇熺殑璧勬簮鍒嗗竷鐘跺喌銆傝岀粨鏋勫寲璺敱妯″瀷濡侰hord, CAN, Tapestry, Pastry鍧囬噰鐢ㄤ簡(jiǎn)DHT(Distributed Hash Table)浣滀負(fù)涓昏鐨勫瓨鍌ㄧ畻娉曘侱HT鐨勪富瑕佹濇兂鏄皢璧勬簮瀹氫綅鐢ㄧ殑绱㈠紩錛堢儲(chǔ)寮曠粨鏋勯氬父鏄袱鍏冪粍錛堟枃浠跺悕錛屽疄闄呯殑瀛樺偍浣嶇疆錛夛級(jí)鍒嗘暎瀛樺偍鍒版暣涓狿2P緗戠粶涓婏紝榪欐牱錛屽搱甯岃〃鐨勫瓨鍌ㄥ拰鏌ヨ鎿嶄綔灝變細(xì)娑夊強(qiáng)鍒癙2P緗戠粶涓殑澶氫釜鑺傜偣銆?BR>浠HT鎬濇兂榪涜璺敱妯″瀷鐨勮璁℃椂錛岄鍏堥渶瑕佺‘瀹氶氳繃Hash鍑芥暟榪涜铏氭嫙鍦板潃絀洪棿鏄犲皠鐨勮鍒欍傝櫄鎷熷湴鍧絀洪棿鐨勮璁℃湁澶氱鏂瑰紡錛?Chord閲囩敤鐨勮櫄鎷熷湴鍧絀洪棿涓簃-浣嶇殑寰幆鍦板潃絀洪棿[16]錛孋AN緋葷粺閲囩敤鐨勬槸澶氱淮鐨勫湴鍧絀洪棿[17]銆侾eer鑺傜偣鐨処P鍦板潃鍜岀鍙e彿緇忚繃鍝堝笇鍑芥暟鏄犲皠鍒板湴鍧絀洪棿錛屽啀灝嗘槧灝勭┖闂磋繘琛屽垝鍒嗭紝姣忎釜鑺傜偣璐熻矗瀛樺偍灞炰簬鑷繁絀洪棿鐨勫煎(key,value)銆傚叾嬈¢渶瑕佺‘瀹氳礬鐢辮〃欏圭殑瀛樺偍鍐呭錛屽嵆閭誨眳鑺傜偣鐨勮妯★紝浠ラ傚簲浜庝笉鍚岀殑緗戠粶闇姹傘傝繖閲岄渶瑕佸璺敱琛ㄩ」鐨勮妯′笌緗戠粶鎼滅儲(chǔ)璺寵漿鏁拌繘琛岀患鍚堣冭檻銆傚湪鍔ㄦ佹ц緝寮虹殑緗戠粶涓紝鑺傜偣棰戠箒鍔犲叆鍜岄鍑虹綉緇滀細(xì)浣垮緱瑙勬ā杈冨ぇ鐨勮礬鐢辮〃鏇存柊棰戠巼榪囬珮錛屾搷浣滆垂鏃躲備絾瑙勬ā杈冨皬鐨勮礬鐢辮〃鍦ㄨ繘琛岃祫婧愬畾浣嶆椂錛屽張浣垮緱鏌ユ壘鏃墮棿榪囬暱銆傚啀嬈℃槸紜畾鍦ㄦ帴鏀跺埌涓涓祫婧愮殑鏌ヨ璇鋒眰鏃訛紝浠庤礬鐢辮〃涓夋嫨杞彂鐨勯偦灞呰妭鐐圭殑瑙勫垯銆傛渶鍚庤紜畾鏂拌妭鐐圭殑鎻掑叆鍜屽垹闄ゆ搷浣滃悗錛岃櫄鎷熺殑鍦板潃絀洪棿濡備綍榪涜鍒嗚鍜屽悎騫躲?BR>
P2P緗戠粶涓妭鐐圭殑鐧誨綍鍜岄鍑?/STRONG>
鍦ㄦ湇鍔″櫒妯″瀷鐨凱2P緗戠粶涓紝鐢變簬Peer鑺傜偣鐨勭姸鎬佷俊鎭拰綆$悊鐨勮祫婧愪俊鎭洿鎺ヨ褰曞湪鏈嶅姟鍣ㄤ腑錛孭eer鑺傜偣鐨勭櫥褰曞拰閫鍑轟粎闇鍜屾湇鍔″櫒榪涜浜や簰錛岀敱鏈嶅姟鍣ㄨ繘琛屽崗璋冨鐞嗐傚鍦∟apster緋葷粺涓紝Peer鑺傜偣鐧誨綍緋葷粺鍚庯紝鍚戞湇鍔″櫒鍙戦佸綋鍓嶇殑緗戠粶鐘舵佸拰鎵鏈夌殑鏂囦歡鍒楄〃淇℃伅錛岀敱鏈嶅姟鍣ㄦ洿鏂扮洰褰曠儲(chǔ)寮曘傚湪Jabber絳夊嵆鏃舵秷鎭氳緋葷粺涓紝Peer鑺傜偣寰寰鏄笌鐢ㄦ埛緇戝畾鐨勩傛湇鍔″櫒鎺ユ敹鍒扮敤鎴風(fēng)殑鐧誨綍娑堟伅鎴栭鍑烘秷鎭悗錛岄氱煡璁㈤槄
璇ョ敤鎴峰湪綰跨姸鎬佺殑鎵鏈夊湪綰跨敤鎴楓?BR>闈炵粨鏋勫寲璺敱妯″瀷FreeNet涓紝鏂拌妭鐐歸鍏堥渶瑕佽幏鐭ョ綉緇滀腑鐨勮嫢騫插彲榪炴帴鑺傜偣鐨勪俊鎭紝閫氳繃鎵ц鎼滅儲(chǔ)鎿嶄綔鍚戞暣涓綉緇滃甯冭嚜宸辯殑瀛樺湪銆傚湪緇撴瀯鍖栬礬鐢辨ā鍨嬬殑P2P緗戠粶涓紝鑺傜偣鐨勭櫥褰曞拰閫鍑猴紝灝嗗鑷磋櫄鎷熷湴鍧絀洪棿鐨勫垎瑁傚拰鍚堝茍銆侾eer鑺傜偣鐧誨綍緗戠粶鐨勬搷浣滐紝綾諱技浜庝竴涓祫婧愮殑鏌ユ壘榪囩▼銆侾eer鑺傜偣瀹氫綅鍒版墍灞炵殑鍦板潃絀洪棿鍚庯紝灝嗗湴鍧絀洪棿浠ヤ竴瀹氳鍒欒繘琛屽垎瑁傘傝礋璐g鐞嗚鍦板潃絀洪棿璧勬簮鐨勫師鑺傜偣灝嗘墍灞炶祫婧愭寜鍒嗚鐨勮鍒欙紝閮ㄥ垎杞Щ鍒版柊鑺傜偣銆傚悓鏃朵袱涓妭鐐圭殑璺敱琛ㄩ」鍜屽叾瀹冪浉鍏寵妭鐐圭殑璺敱琛ㄩ」鍧囪榪涜淇敼銆傝孭eer鑺傜偣閫鍑虹綉緇滅殑榪囩▼錛屽垯鏄櫥褰曠綉緇滅殑閫嗚繃紼嬶紝璧勬簮闇瑕佽漿縐誨悎騫訛紝鐩稿叧鑺傜偣鐨勮礬鐢辮〃欏瑰悓鏍烽渶瑕佹洿鏂般?BR>
闃茬伀澧欏拰NAT鐨勭┛瓚?/STRONG>
鍦ㄥ疄闄呯殑緗戠粶閫氫俊涓紝Peer鑺傜偣寰寰鏄竴涓鏈夌綉緇滀腑鐨勮妭鐐癸紝浣嶄簬闃茬伀澧欎箣鍚庛傝繖鏍鳳紝Peer涓嶱eer涔嬮棿鐩存帴閫氫俊闇瑕佽В鍐崇殑涓涓叧閿棶棰樻槸絀胯秺闃茬伀澧欏拰NAT銆傜敱浜庨槻鐏浼?xì)瀵笽P榪涜榪囨護(hù)錛岄檺鍒朵簡(jiǎn)澧欏唴澶栫殑榪炴帴錛岃孨AT鎶鏈櫧鐒跺彲浠ヤ嬌寰楀唴閮ㄧ綉緇滃湴鍧鏄犲皠鍒板閮ㄧ綉緇滃湴鍧錛屼絾瑕佹眰鍐呴儴緗戠粶棣栧厛鍙戣搗瀵瑰榪炴帴錛屽惁鍒欏閮ㄧ綉緇滄満鍣ㄦ棤娉曡揪鍒板唴閮ㄧ綉緇淸12]銆傜┛瓚婇槻鐏鍜孨AT鐨勭瓥鐣ユ湁涓や釜鍩烘湰鐐癸細(xì)
錛?錛?闇瑕佷嬌鐢ㄥ湪涓鑸儏鍐典笅鍙互閫氳繃闃茬伀澧欑殑鍗忚錛屽鍩轟簬璇鋒眰/搴旂瓟鏂瑰紡鐨凥TTP鍗忚銆?BR>錛?錛?Peer涔嬮棿榪涜閫氫俊鏃訛紝蹇呴』鐢卞唴閮ㄧ綉緇滅殑鏈哄櫒棣栧厛鍙戣搗榪炴帴璇鋒眰錛屽鏋滈氫俊鍙屾柟鍧囧浜庨槻鐏涔嬪悗錛屽垯闇瑕佹湁闃茬伀澧欏鐨勮漿鍙戣妭鐐硅繘琛屾秷鎭漿鍙戙?BR>鍦∟apster緋葷粺涓綋P(yáng)eer鑺傜偣璇鋒眰涓嬭澆鐨勮祫婧愪綅浜庝竴涓槻鐏涔嬪悗鐨勮妭鐐逛笂錛岃姹傝妭鐐瑰悜鏈嶅姟鍣ㄧ鍙戦侀渶瑕佽繘琛岃漿鎹笅杞界殑璇鋒眰 (Alternate download request)錛岀敱鏈嶅姟鍣ㄩ氱煡琚姹傝妭鐐歸鍏堝彂璧鋒枃浠朵笅杞界殑榪炴帴璇鋒眰銆傝孏nutella鏄湪灝嗘煡璇㈢殑璇︾粏淇℃伅榪斿洖緇欒姹傝呯殑鍚屾椂鍙戦佽祫婧愭枃浠訛紝浠ユ鏂瑰紡瑙e喅鏂囦歡鎻愪緵鑰呬綅浜庨槻鐏涔嬪悗鐨勬儏鍐點(diǎn)?BR>JXTA騫沖彴涓紝鍏秙uper-peer鑺傜偣涓殑璺敱鑺傜偣鏄彁渚涢槻鐏鍜孨AT絀胯秺鍔熻兘鐨勭壒孌婅妭鐐廣傝嫢閫氫俊涓鏂瑰湪闃茬伀澧欎箣鍚庯紝閭d箞鍗曞悜絀胯秺鐨勮繃紼嬬敱璇曞浘涓庨槻鐏鍚庣殑peer A榪炴帴鐨刾eer鑺傜偣B鍙戣搗錛岃妭鐐笲棣栧厛涓庤礬鐢盤eer榪炴帴錛屽悓鏃秔eer A鍛ㄦ湡鎬у湴榪炴帴璺敱 Peer錛岀敱浜庤礬鐢?Peer瀵筆eer A鏄彲瑙佺殑錛屼笖涓嶅湪闃茬伀澧欏悗錛岃繛鎺ヨ姹傛秷鎭彲浣滀負(fù)http鐨勫簲絳斿唴瀹硅繑鍥炶嚦peer A銆傝嫢閫氫俊鐨勫弻鏂歸兘鍦ㄩ槻鐏涔嬪悗錛岄偅涔堥渶瑕佷袱涓礬鐢?peer銆侾eer1 閫氳繃璺敱鑺傜偣1 杞彂娑堟伅錛岃礬鐢辮妭鐐?灝嗘秷鎭漿鍙戣嚦璺敱鑺傜偣 2錛孭eer2鍛ㄦ湡鎬у湴鍚戣礬鐢辮妭鐐?鍙戦乭ttp璇鋒眰錛岃幏寰楁秷鎭悗鏂紑榪炴帴銆侸XTA騫沖彴涓礬鐢辮妭鐐圭殑浣跨敤涓嶄粎鍙互絀胯秺闃茬伀澧欙紝榪樺彲浠ヨВ鍐崇摱棰堥棶棰橈紝瑙e喅緗戠粶浼犺緭鐨勪笉鍏煎鎬12]銆?BR>3錛嶱2P騫沖彴鐨勫畨鍏ㄦ満鍒?/STRONG>
涓庡畨鍏ㄦ湁绱у瘑鍏崇郴鐨勬槸P2P騫沖彴鎻愪緵鐨勫尶鍚嶆с?BR>涓轟簡(jiǎn)榪涜鑷敱鐨勪氦浜掞紝閬垮厤寮曡搗涓嶅繀瑕佺殑娉曞緥綰犵悍錛屾墍浠ワ紝P2P緋葷粺鍏佽鍖垮悕鏂瑰紡鐨勪俊鎭氦鎹15]銆傚尶鍚嶆у彲鍒嗕負(fù)浠ヤ笅涓夌綾誨瀷錛?BR>魛伜 鍙戝竷鑰呭尶鍚嶏細(xì)鍙戝竷鑰呭尶鍚嶅湴鍙戝竷鏈嶅姟鎴栬祫婧?BR>魛伜 璇鋒眰鑰呭尶鍚嶏細(xì)璇鋒眰鏂瑰尶鍚嶅湴璇鋒眰鏈嶅姟鎴栬祫婧?BR>魛伜 鏈嶅姟鎻愪緵鑰呭尶鍚嶏細(xì)P2P緗戠粶涓殑璧勬簮鎷ユ湁鑰呭尶鍚嶅湴鎻愪緵璧勬簮鎴栨湇鍔?BR>鎻愪緵鍖垮悕鎬х殑鍩烘湰鏂規(guī)硶鏈夊叚縐嶏細(xì)
魛伜 緇勬挱錛氶噰鐢↖P緇勬挱鏂規(guī)硶榪涜璧勬簮鍙戦佸彲浠ヨ揪鍒拌姹傝呭尶鍚嶇殑鐩殑銆備絾鏄繖縐嶆柟娉曢渶瑕佸簳灞傜綉緇滃浠ュお緗戠殑鏀寔銆?BR>魛伜 鍦板潃嬈洪獥錛氫嬌鐢ㄩ潰鍚戞棤榪炴帴鍗忚濡俇DP錛屽彲浠ユ洿鏀瑰湴鍧錛岃揪鍒板湴鍧嬈洪獥鐨勭洰鐨勩?BR>魛伜 韜喚嬈洪獥錛氱綉緇滀腑鐨勬枃浠跺彲鑳芥嫢鏈夊涓浠斤紝鎵浠ュ簲絳旇呭線寰騫朵笉鏄枃浠剁殑鎻愪緵鑰咃紝濡侳reeNet灝變嬌鐢ㄤ簡(jiǎn)榪欑鏂規(guī)硶鎻愪緵鍖垮悕鎬с?BR>魛伜 闅愯棌璺緞錛歅eer涔嬮棿騫朵笉鏄繘琛岀洿鎺ョ殑娑堟伅閫氫俊錛岃屾槸閫氳繃鑻ュ共鐨勪腑闂磋妭鐐癸紝榪欐牱鍙互杈懼埌鍙戦佽呭尶鍚嶇殑瑕佹眰銆?BR>魛伜 鍒悕錛氭瘡涓涓狿eer鍦ㄧ綉緇滀腑鍧囨湁涓涓埆鍚嶏紝Peer涔嬮棿閫氳繃鍒悕榪涜娑堟伅浼犻掞紝榪欑鏂規(guī)硶闇瑕佷竴
涓狿roxy Server淇濆瓨鎵鏈夌殑Peer瀹炰綋涓庡埆鍚嶇殑瀵瑰簲鍏崇郴銆?BR>魛伜 寮哄埗瀛樻斁錛氫竴涓枃浠跺瓨鏀劇殑浣嶇疆鏄敱鏂囦歡鏈韓紜畾鐨勶紝鍙戝竷鑰呮棤娉曢夋嫨錛屼粠鑰屽疄鐜板彂甯冭呭尶鍚嶏紝濡傚熀浜嶤hord鐨勭郴緇熴?BR>涓婅堪鏂規(guī)硶鍙互緇勫悎搴旂敤錛屼緥濡傦紝FreeNet閲囩敤綰疨2P緗戠粶涓殑闈炵粨鏋勫寲鏂囨。璺敱妯″瀷錛屽悓鏃跺湪鍙戝竷鏂囦歡鍜屾煡鎵炬枃浠剁殑榪囩▼涓紝娌挎悳绱㈣礬寰勫鍒舵枃浠躲傞氳繃闅愯棌璺緞鍜岃韓浠芥楠楃殑鏂規(guī)硶杈懼埌鏈嶅姟鎻愪緵鑰呭尶鍚嶇殑鐩殑錛岄氳繃闅愯棌璺緞鐨勬柟娉曞艦鎴愯姹傝呭尶鍚嶏紝鍚屾椂鐢變簬鏂囦歡鐨勫彂甯冩槸涓涓牴鎹枃浠跺悕寮哄埗瀛樻斁鐨勮繃紼嬶紝鎵浠ヤ篃瀹屾垚浜?jiǎn)鍙戝竷鑰呭尶鍚嶇殑鍔熻兘銆?BR>P2P騫沖彴鎵鍏鋒湁鐨勪笂榪扮壒鎬у彲鑳戒細(xì)甯︽潵涓嬪垪瀹夊叏闅愭?zhèn)eQ?/STRONG>
魛伜 鎷掔粷鏈嶅姟鏀誨嚮錛歅2P搴旂敤浼?xì)娑堣楃綉緇滃甫瀹斤紝鍗犵敤紓佺洏絀洪棿錛屼嬌寰楃郴緇熸ц兘闄嶄綆鐢氳嚦瀹屽叏鐦棯銆傚鏋滆澶ч噺鎭舵剰鍦頒嬌鐢紝灝變細(xì)鍑虹幇姝e父鏈嶅姟璇鋒眰寰椾笉鍒版湇鍔$殑鐜拌薄銆傚鐞嗚繖縐嶆敾鍑葷殑闅劇偣鍦ㄤ簬濡備綍灝嗘伓鎰忚妭鐐瑰拰鐪熸璐熻澆榪囬噸鐨勮妭鐐瑰尯鍒嗗紑銆備粠鏍規(guī)湰涓婅錛岄檺鍒剁綉緇滄湇鍔¤姹傜殑鏁伴噺鏄В鍐蟲嫆緇濇湇鍔℃敾鍑葷殑鏍規(guī)湰鏂規(guī)硶銆傚悎鐞嗛夋嫨緗戠粶搴曞眰鐨勬嫇鎵戠粨鏋勶紝鍧囪 緋葷粺涓殑璐熻澆鍜岃祫婧愶紝鍔犲叆嫻侀噺鎺у埗絳栫暐錛岃繖涓夌鎺柦緇煎悎浣跨敤鍙嬌鎭舵剰鑺傜偣鏍規(guī)湰鏃犳硶鍗犵敤榪囧鐨勮祫婧愶紝闄嶄綆鍏跺緋葷粺鐨勫獎(jiǎng)鍝嶃?BR>魛伜 鎭舵剰杞歡鍒嗗彂錛歅2P鏃犱腑澶湇鍔″櫒鎺у埗錛屽厑璁稿尶鍚嶅垎鍙戣祫婧愶紝瀵硅蔣浠剁殑鍒嗗彂緙轟箯鎺у埗錛屽鏋淧2P緋葷粺琚伓鎰忎嬌鐢紝浼?xì)缁櫨p葷粺鐢ㄦ埛甯︽潵瀹夊叏闅愭?zhèn)c傞氬父鐨勫悕瑾夎瘎浼扮郴緇熷彲浠ョ敤鏉ヨ窡韙拰澶勭悊Peer鐨勭姸鎬侊紝騫舵牴鎹緱鍒扮殑淇℃伅閫夋嫨璧勬簮鐨勬彁渚涜呫備絾鏄繖縐嶆柟娉曟瘮杈冩秷鑰楃綉緇滆祫婧愩?BR>魛伜 淇℃伅娉勯湶鍜岀鏀癸細(xì)渚嬪錛屾湁浜汸2P緋葷粺鍦ㄨ礬鐢辮〃涓繚瀛樹簡(jiǎn)涓鎵圭綉緇滃湴鍧錛岃繖浜涗俊鎭彲鑳戒細(xì)琚硠闇插拰綃℃敼錛涙湁浜汸2P緋葷粺渚嬪Napster銆丟nutella鍏佽鐩存帴璁塊棶鐢ㄦ埛紜洏錛屾伓鎰忕敤鎴峰彲鍒╃敤榪欎釜鐗規(guī)у療鐪嬪拰綃℃敼紓佺洏淇℃伅銆傝繖浜涢兘闇瑕佹湁鐩稿簲鐨勭瓥鐣ュ姞浠ヨВ鍐籌紝渚嬪錛岃璁″畨鍏ㄨ礬鐢辯瓥鐣ワ紝鍙В鍐寵礬鐢辮〃淇℃伅娉勯湶闂銆?BR>4錛嶱2P騫沖彴鐨勬ц兘鏀瑰杽鎶鏈?/STRONG>
P2P騫沖彴鐨勬ц兘鎸囨爣鍖呮嫭璇鋒眰鍝嶅簲鏃墮棿銆佸叕騫蟲х瓑銆?BR>璇鋒眰鍝嶅簲鏃墮棿涓嶱2P騫沖彴鐨勬嫇鎵戠粨鏋勬湁寰堝ぇ鍏崇郴銆傚浜庢湁涓ぎ鏈嶅姟鍣ㄧ殑P2P緋葷粺濡侼apster緋葷粺鍜?A href="mailto:Seti@Home">Seti@Home緋葷粺錛孭eer涔嬮棿鐢辨湇鍔″櫒榪涜鍗忚皟錛屾湇鍔″櫒鍙樻垚浜?jiǎn)绯痪l熺殑鐡墮錛屽獎(jiǎng)鍝嶇郴緇熸ц兘銆備負(fù)浜?jiǎn)鏀瑰杽鎬ц兘錛屽彲閲囩敤灞傛鎬х殑娣鋒潅寮忕粨鏋勶紝鐢辨瘡涓涓崗璋冭呰礋璐d竴涓狿eer緇勶紝褰㈡垚涓涓眰嬈$殑綆$悊緇撴瀯銆傚湪闈為泦涓紡鐨凱2P緗戠粶涓紝涓昏閫氳繃娑堟伅杞彂鏉ヨ幏鍙栧拰鏌ヨ鏁版嵁錛屾秷鎭漿鍙戠殑嬈℃暟褰卞搷甯﹀鐨勬秷鑰楋紝鍥犳瑕佸敖閲忓噺灝戞秷鎭殑杞彂嬈℃暟[15]銆傞噰鐢ㄥ鍒剁殑鏂規(guī)硶鍙彁渚涘涓祫婧愬浠斤紝鎻愰珮瀹歸敊鎬э紝涔熷噺灝戜簡(jiǎn)璇鋒眰鑺傜偣鍒版湇鍔¤妭鐐圭殑璺濈錛屽噺灝戜簡(jiǎn)璇鋒眰鍝嶅簲鏃墮棿銆備絾澶嶅埗浼?xì)甯︽潵鏁版嵁涓鑷存х殑闂錛涘彟涓縐嶅噺灝戞秷鎭漿鍙戞鏁扮殑鏂規(guī)硶鏄緩绔嬫櫤鑳借礬鐢卞拰緗戠粶緇勭粐錛屽鎵劇洰鏍囨枃浠跺埌璇鋒眰鑺傜偣鐨勬渶灝忚礬寰勩傝綾繪柟娉曞寘鎷細(xì)鍦ㄥ熀浜嶥HT鐨勭粨鏋勫寲璺敱妯″瀷涓璁″悎涔庡簲鐢ㄨ儗鏅姹傜殑璺敱琛ㄥ瓨鍌ㄧ粨鏋勶紝浠ュ噺灝戠綉緇滀腑鐨勬秷鎭煩杞暟錛涢噰鐢ㄤ竴浜涘弽棣堟満鍒訛紝鏅鴻兘鍦伴夋嫨鏇劇粡鍛戒腑榪囩殑Peer鑺傜偣榪涜娑堟伅杞彂錛涚洃嫻嬬綉緇滀腑鐨勮繍琛岀姸鎬侊紝緇曡繃涓浜涜礋杞借緝閲嶇殑Peer鑺傜偣銆傝繖浜涙柟娉曢兘鍙互鏍規(guī)嵁涓嶅悓鐨勪嬌鐢ㄨ儗鏅幏寰楄緝濂界殑鎬ц兘鎻愬崌銆?BR>闄や簡(jiǎn)閫氳繃澶嶅埗鏀瑰杽緋葷粺鐨勫搷搴旀椂闂翠箣澶栵紝緙撳瓨鐨勬浛鎹㈢瓥鐣ュ鍝嶅簲鏃墮棿鏀瑰杽涔熸湁寰堝ぇ褰卞搷銆係mallWorld妯″瀷鍒葷敾浜?jiǎn)缃懢l滈氫俊涓殑涓涓湁瓚g殑鐗瑰緛錛氬湪瑙勫垯緗戠粶涓殢鏈哄湴娣誨姞灝戦噺閫氳礬錛岃兘寰堝ソ鍑忕煭閫氫俊璺濈錛屽噺灝戣姹傜殑鍝嶅簲鏃墮棿錛屽畠琚敤鏉ユ敼榪汧reeNet涓殑緙撳瓨鏇挎崲絳栫暐錛屼篃鑾峰緱浜?jiǎn)杈冨ソ鐨勬ц兘鏀瑰杽[18]銆?BR>P2P浣撶郴緇撴瀯浣垮緱P2P緋葷粺涓細(xì)鍑虹幇鈥滄棤鏀垮簻涓諱箟鈥濊涓猴紝渚嬪錛岃繃閲忎笅杞芥垨鏈夋剰璁╀笅杞界殑鏂囦歡涓寘鍚箍鍛婄瓑錛岃繖浜涜涓哄鑷碢2P淇℃伅浜ゆ崲鐨勪笉鍏鉤鎬с傚湪P2P緗戠粶涓紝涓洪伩鍏嶆瘡涓涓狿eer浜彈鏈嶅姟鑰屼笉鎻愪緵鏈嶅姟鐨勭幇璞★紝闇瑕佸疄琛屼竴瀹氱殑綆$悊鏈哄埗銆傚湪P2P緗戠粶涓紩鍏ョ粡嫻庡涓拱鍗栦氦鏄撶殑鍘熺悊錛屽彲浠ヤ績(jī)榪涜祫婧愮殑鍏變韓鍜屼氦浜掋係tanford澶у鐨凱2P鐮旂┒灝忕粍鎻愬嚭浜?jiǎn)RTR(right-to-respond)鍗忚[19]錛岀敤浠ヨВ鍐沖湪媧祦妯″瀷涓紝涓棿鑺傜偣涓嶆効娑堣楄祫婧愯漿鍙戣姹傜殑闂銆俁TR鏄寚瀵規(guī)煡璇㈣姹傜殑鍝嶅簲鏉冿紝Peer鑺傜偣鍙互璐拱鍜屽嚭鍞郴緇熶腑姣忎釜鏌ヨ璇鋒眰鐨凴TR銆傚綋鏌愪竴Peer鑺傜偣杞彂璇鋒眰鏃訛紝鍏跺畠Peer鑺傜偣鍙互鍚戝叾璐拱RTR銆傝喘涔頒簡(jiǎn)RTR鐨凱eer鑺傜偣鍙互鎵ц涓や釜鎿嶄綔錛屼竴鏄搷搴旇璇鋒眰錛屽鏋滆璇鋒眰鐨勫彂鍑?guó)檧呴変腑錛屽氨鍙互涓哄叾鎻愪緵鏈嶅姟騫舵敹鍙栬垂鐢紱浜屾槸鍐嶅皢RTR鍞嚭緇欏叾瀹冭妭鐐廣傞氳繃榪欑鏂規(guī)硶錛孭eer鑺傜偣鍦ㄧ粡嫻庡埄鐩婄殑椹變嬌涓嬩細(xì)涓嶆柇杞彂璇鋒眰錛屾墿澶ф悳绱㈣寖鍥淬傚悓鏃跺彲
浠ヤ績(jī)榪涙嫢鏈夌被浼艱祫婧愭垨鏈嶅姟鐨凱eer鑺傜偣棰戠箒鑱旂郴錛屽艦鎴怭eer Group錛屾彁楂樻悳绱㈡晥鐜囥?BR>鍙︿竴涓埄鐢ㄧ粡嫻庡鍘熺悊鐨勫疄渚嬫槸鏁版嵁浜ゆ槗(data trading)鏂規(guī)硶鐨勫紩鍏20]銆侾2P緋葷粺緇忓父閲囩敤鏁版嵁澶囦喚鐨勬満鍒舵潵澧炲己璧勬簮鍙敤鎬э紝鎻愰珮緋葷粺鎬ц兘銆傝岀敤鎴峰線寰涓嶆効鏃犲伩鎻愪緵瀛樺偍璧勬簮澶囦喚鍏跺畠鏁版嵁銆傝繖鏃跺埄鐢ㄦ暟鎹氦鏄撶殑鏂規(guī)硶鎻愪緵鐩鎬簰澶囦喚錛屽嵆鑾峰緱瀵規(guī)柟瀛樺偍絀洪棿鎴栨暟鎹祫婧愭槸浠ュ悜瀵規(guī)柟鎻愪緵瀛樺偍絀洪棿涓哄墠鎻愮殑銆傜郴緇熶腑Peer鑺傜偣涔嬮棿寤虹珛浜?jiǎn)鑹ソ鐨勭涙簰澶囦喚鍏崇郴錛屽皢浼?xì)鍑彏畱鎼滅储鍜岃畨K棶鐨勫紑閿銆備互涓婅繖浜涘疄渚嬪潎琛ㄦ槑錛岄噰鐢ㄧ粡嫻庡涓互浜ゆ槗涓哄熀紜鐨勮祫婧愮鐞嗘満鍒訛紝鍙互鎻愰珮P2P緋葷粺鐨勮祫婧愪嬌鐢ㄧ巼銆?BR>5錛庡皬緇?BR>P2P璁$畻錛屼綔涓哄垎甯冨紡璁$畻鐨勪竴涓垎鏀紝鐩墠涓嶈鏄粠鎶鏈爺絀惰繕鏄駭鍝佸紑鍙戞潵鐪嬶紝閮藉凡鎴愪負(fù)浜?jiǎn)涓涓噸瑕佺殑棰嗗煙銆侾2P鐨勭畻娉曘佸鉤鍙板拰搴旂敤閮藉皢鏈夎繘涓姝ョ殑鍙戝睍絀洪棿銆侾2P鐨勬濇兂涔熻騫挎硾鍦板簲鐢ㄥ湪寰堝鍏朵粬鐨勭爺絀墮鍩熴傛湰鏂囩潃閲嶄粙緇嶄簡(jiǎn)P2P鐨勫彂灞曡儗鏅丳2P緋葷粺鐨勭壒鐐癸紝鍦≒2P騫沖彴灞傝瘑鍒嚭鑻ュ共P2P騫沖彴鐨勫叧閿妧鏈紝鍖呮嫭Peer鐨勯氫俊鎶鏈丳2P騫沖彴鐨勫畨鍏ㄦ満鍒跺拰P2P騫沖彴鐨勬ц兘鏀瑰杽鎶鏈紝榪欎簺鎶鏈殑鎬葷粨鍜屽垎鏋愯兘瀵硅璁″拰瀹炵幇P2P騫沖彴鍜屽簲鐢ㄨ搗鍒頒竴瀹氱殑鍊熼壌鍜屾寚瀵間綔鐢ㄣ?BR>鍙傝冩枃鐚細(xì)
[1] Napster Inc.http://www.naspter.com
[2] Gnutella,http://www.gnutelliums.com
[3] Freenet,http://freenetproject.org/lang/en
[4] BitTorrent, http://bitconjurer.org/BitTorrent/
[5] Sixto Ortiz Jr., "Instant Messaging: No Longer Just Chat", IEEE Computer,March 2001
[6] Jeremie Miller, "Jabber, Peer-to-Peer:Harnessing the Power Of Disruptive Technologies,鈥?O'Reilly, March 2001
[7] Peter Saint-Andre, 鈥淛abber Technology Overview鈥?BR>[8] Preeti Mehra,Groove,16th November,2001,ECE-579
[9] Gregory Alan Bolcer,Michael Gorlick,鈥漃eer-to-Peer Architectures and the Magi Open-Source Infrastructure鈥? Endeavors Technology ,2000
[10] Mayank Bawa,Roberto J.Bayardo Jr.,Sridhar Rajagopalan,Eugene J.Shekita, 鈥淢ake it Fresh,Make it Quick錛峉earching a Network of Personal Webservers鈥?BR>[11] Seti@Home, http://setiathome.ssl.berkeley.edu/
[12] Jxta Book,http://www.brendonwilson.com/projects/jxta
[13] Siu Man Lui, Sai Ho Kwok, 鈥淚nteroperablility of Peer-To-Peer File Sharing Protocols鈥?ACM SIGecom Exchanges,Vol.2,No.2,August 2002
[14] Dana Moore,John Hebeler, 鑻忓繝,鎴樻檽闆風(fēng)瓑璇? 銆婂絳夌綉銆嬶紝娓呭崕澶у鍑虹増紺?2003.2
[15] Dejan S.Milojicic,Vana Kalogeraki Rajan Lukose,Kiran Nagaraja,Jim Pruyne,Bruno Richard,Sami Rollins,Zhichen Xu,HP Laboratories Palo Alto,鈥?Peer-to-Peer Computing鈥?University of California
[16] Ion Stoica,Robert Morris,Divid Liben-Nowell,David R.Karger,M.Grans Kaashoek,Frank Dabek,Hari Balakrishnan. 鈥滳hord: A scalable Peer-to-peer Lookup Protocol for Internet Applications鈥?BR>[17] S.Ratnasamy,P,Francis, M. Handley, R.Karp,and S.Shenker,鈥滱 Scalable Content-Addressable Network鈥?ACM SIGCOMM 鈥?1,San Diego,CA,USA,2001
[18] Hui Zhang, Ashish Goel and Ramesh Govindan. Using the Small-World Model to Improve Freenet Performance. IEEE Infocom, 2002.
[19] B.Yang,S.Kamvar,and H.Garcia-Molina Addressing the non-cooperation problem in competitive P2P systems.Stanford University Database Group Technical Report,2003
[20] Mayank Bawa,Brian F.Cooper,Arturo Crespo. Peer-to-Peer Research at Stanford,Stanford
]]>