??xml version="1.0" encoding="utf-8" standalone="yes"?>中文字幕日本人妻久久久免费,久久影视综合亚洲,精品久久久久久亚洲http://www.shnenglu.com/ivenher/category/789.htmlzh-cnMon, 19 May 2008 21:50:45 GMTMon, 19 May 2008 21:50:45 GMT60P2P communication across middleboxesQ翻?Q?/title><link>http://www.shnenglu.com/ivenher/articles/2682.html</link><dc:creator>爱饭?/dc:creator><author>爱饭?/author><pubDate>Thu, 12 Jan 2006 06:22:00 GMT</pubDate><guid>http://www.shnenglu.com/ivenher/articles/2682.html</guid><wfw:comment>http://www.shnenglu.com/ivenher/comments/2682.html</wfw:comment><comments>http://www.shnenglu.com/ivenher/articles/2682.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/ivenher/comments/commentRss/2682.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/ivenher/services/trackbacks/2682.html</trackback:ping><description><![CDATA[<STRONG> P2P communication across middleboxesQ翻?Q?BR><BR></STRONG>原文版权QCopyright (C) The Internet Society (2003).All Rights Reserved.<BR><BR>原文地址Q?A target=_blank><FONT color=#003366>http://midcom-p2p.sourceforge.net/draft-ford-midcom-p2p-01.txt</FONT></A><BR><BR><BR><BR>3.3.2. Peers behind the same NAT  客户端都处于相同的NAT之后<BR><BR><BR><BR>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.<BR><BR><BR><BR>现在让我们来考虑一下两个客L(很有可能不知不觉的就?同时位于相同的NAT之后Q而且是在同一个子|内部的情况Q?Client A与S之间的会话用了NAT?2000端口QClient B与S之间的会话用了62001端口Q如下图所C:<BR><BR><IMG onmouseover="if(this.resized) this.style.cursor='hand';" onclick="if(this.resized) {window.open('http://www.ppcn.net/upload/2004_09/040917221752081.jpg');}" src="http://www.ppcn.net/upload/2004_09/040917221752081.jpg" onload="if(this.width>screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='Click here to open new window';}" border=0><BR>   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.<BR><BR>   <BR><BR>我们假设QClient A ?Client B 要用上一节我们所描述?“UDP打洞技术”,q过服务器Sq个“媒人”来认识Q这样Client A 和Client B首先从服务端S得到了彼此的公网IP地址和端口,然后往Ҏ的公|IP地址和端口上发送消息。在q种情况下,如果NAT 仅仅允许?内部|主Z其他内部|主机(处于同一个NAT之后的网l主机)之间打开UDP会话通信通道Q而内部网L与其他外部网L׃允许的话Q那么Client A 和Client B可以通话了。我们把q种情Ş叫做“loopback translation?“回环{换?Q因为数据包首先从局域网的私有IP发送到NAT转换Q然后“绕一圈”,再回到局域网中来Q但是这hLq些数据通过公网传送好。D例来_?Client A发送了一个UDP数据包到 Client B的公|IP地址Q这个数据包的报头中׃有一个源地址10.0.0.1:124和一个目标地址155.99.25.11:62001。NAT接收到这个包以后Q就?q行地址转换)解析个包中有一个公|地址源地址155.99.25.11:62000和一个目标地址10.1.1.3:1234Q然后再发送给BQ虽说NAT支持“loopback translation”,我们也发玎ͼ在这U情形下,q个解析和发送的q程有些多余Qƈ且这个Client A 和Client B 之间的对话可能潜在性地lNAT增加了负担?BR><BR><BR><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.<BR><BR><BR><BR>其实Q解册个问题的Ҏ是显而易见的。当 Client A和ClientB 最初通过服务器S交换彼此的地址信息Ӟ他们也就应该“发现”了自己的IP地址和端口——也是服务器S所发现的。两个客L同时的发?数据?到对方的公网地址和私有地址上,然后选择首先使得通信成功的那个地址可以了。如果两个客L都位于同一个NAT之后Q那么发往U有地址的数据包应该先于发往公网地址的数据包到达Q这样就建立了一个不包括NAT的直q通信通道。如果两个客L位于不同NAT之后Q虽然发送到ҎU有地址的数据包会毫无疑问的发送失败,但还是很有可能用他们各自的公网IP地址来徏立一条通信通道的。所以检这些数据包的方法和工作变得非帔R要,不论如何Q只要双斚w处于不同NAT之后Q就完全有可?Client A 惛_送到 Client B 的信息会被发到别的无关的地方去,反之亦然QClient B 惛_送到 Client A的消息也会被发到别的无关的地方去Q?BR><BR><BR><BR>(最后一句“unrelated node on A's private network”没有完全理解是什么意思,MQ放到整个语境中Q应该就是说QClient A 瞄准 Client B的私有地址端口的信息会被NAT转发到别的地方去Q因Z者处于不同的NAT之后QNAT A 如果?内部|络 扑ֈ了一个拥有与Client B相同的私有地址的电脑,׃把信息发送过去,q样Q就Ҏ不会发送到 Client B 上去)<BR><BR><img src ="http://www.shnenglu.com/ivenher/aggbug/2682.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/ivenher/" target="_blank">爱饭?/a> 2006-01-12 14:22 <a href="http://www.shnenglu.com/ivenher/articles/2682.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>P2P communication across middleboxesQ翻?Q?/title><link>http://www.shnenglu.com/ivenher/articles/2681.html</link><dc:creator>爱饭?/dc:creator><author>爱饭?/author><pubDate>Thu, 12 Jan 2006 06:21:00 GMT</pubDate><guid>http://www.shnenglu.com/ivenher/articles/2681.html</guid><wfw:comment>http://www.shnenglu.com/ivenher/comments/2681.html</wfw:comment><comments>http://www.shnenglu.com/ivenher/articles/2681.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/ivenher/comments/commentRss/2681.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/ivenher/services/trackbacks/2681.html</trackback:ping><description><![CDATA[<STRONG>P2P communication across middleboxesQ翻?Q?BR><BR></STRONG>原文版权QCopyright (C) The Internet Society (2003).? All Rights Reserved.<BR><BR>原文地址Q?A target=_blank><FONT color=#003366>http://midcom-p2p.sourceforge.net/draft-ford-midcom-p2p-01.txt</FONT></A><BR><BR><BR><BR><BR><BR>3.3. UDP hole punching  UDP打洞技?BR><BR><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.<BR><BR><BR><BR><BR>    W三U技术,也是q篇文章主要要研I的Q就是非常有名的“UDP打洞技术”,UDP打洞技术依赖于由公共防火墙和cone NATQ允讔R当的有计划的端对端应用E序通过NAT“打z”,即当双方的L都处于NAT之后。这U技术在 RFC3027?.1节[NAT PROT] 中进行了重点介绍Qƈ且在Internet[KEGEL]中进行了非正式的描叙Q还应用C最新的一些协议,例如[TEREDO,ICE]协议中。不q,我们要注意的是,“术”如其名QUDP打洞技术的可靠性全都要依赖于UDP?BR><BR><BR><BR><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.<BR><BR><BR><BR><BR>     q里考虑两种典型场景Q来介绍q接的双方应用程序如何按照计划的q行通信的,W一U场景,我们假设两个客户端都处于不同的NAT之后Q第二种场景Q我们假设两个客L都处于同一个NAT之后Q但是它们彼此都不知?他们在同一个NAT??BR><BR><BR><BR><BR>3.3.1. Peers behind different NATs  处于不同NAT之后的客L通信<BR><BR><BR><BR>     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.<BR><BR><BR><BR>    我们假设 Client A ?Client B 都拥有自qU有IP地址Qƈ且都处在不同的NAT之后Q端对端的程序运行于 CLIENT A,CLIENT B,S之间Qƈ且它们都开放了UDP端口1234?CLIENT A和CLIENT B首先分别与S建立通信会话Q这时NAT A把它自己的UDP端口62000分配lCLIENT A与S的会话,NAT B也把自己的UDP端口31000分配lCLIENT B与S的会话。如下图所C:<BR><BR><IMG onmouseover="if(this.resized) this.style.cursor='hand';" onclick="if(this.resized) {window.open('http://www.ppcn.net/upload/2004_09/040917221663161.jpg');}" src="http://www.ppcn.net/upload/2004_09/040917221663161.jpg" onload="if(this.width>screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='Click here to open new window';}" border=0><BR>假如q个时?CLIENT A 想与 CLIENT B建立一条UDP通信直连Q如?CLIENT A只是单的发送一个UDP信息到CLIENT B的公|地址138.76.29.7:31000的话QNAT B会不加考虑的将q个信息丢弃Q除非NAT B是一?full cone NATQ,因ؓ q个UDP信息中所包含的地址信息Q与CLIENT B和服务器S建立q接时存储在NAT B中的服务器S的地址信息不符。同LQCLIENT B如果做同L事情Q发送的UDP信息也会?NAT A 丢弃?BR><BR><BR><BR><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.<BR><BR><BR><BR><BR>    假如 CLIENT A 开始发送一?UDP 信息?CLIENT B 的公|地址上,与此同时Q他又通过S中{发送了一个邀请信息给CLIENT BQ请求CLIENT B也给CLIENT A发送一个UDP信息?CLIENT A的公|地址上。这时CLIENT A向CLIENT B的公|IP(138.76.29.7:31000)发送的信息D NAT A 打开一个处?CLIENT A的私有地址和CLIENT B的公|地址之间的新的通信会话Q与此同ӞNAT B 也打开了一个处于CLIENT B的私有地址和CLIENT A的公|地址(155.99.25.11:62000)之间的新的通信会话。一旦这个新的UDP会话各自向对Ҏ开了,CLIENT A和CLIENT B之间可以直接通信Q而无需S来牵U搭桥了?q就是所谓的打洞技?Q?BR><BR><BR><BR><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.<BR><BR><BR><BR><BR>     UDP打洞技术有很多实用的地方:W一Q一旦这U处于NAT之后的端对端的直q徏立之后,q接的双方可以轮担?Ҏ的“媒人”,把对方介l给其他的客LQ这样就极大的降低了服务器S的工作量Q第二,应用E序不用兛_q个NAT是属于coneq是symmetricQ即便要Q如果连接的双方有一Ҏ者双斚w恰好不处于NAT之后Q基于上叙的步骤Q他们之间还是可以徏立很好的通信通道Q第三,打洞技术能够自动运作在多重NAT之后Q不接的双方l过多少层NAT才到达InternetQ都可以q行通信?BR><BR><BR><BR><BR><BR>译后记Q本来已l翻译好了,是在|文快捕中翻译的Q结果,一个全选把所有翻译的内容全部删除?|文快捕的Bug?Q?Q不得不痛苦的再M遍。不q,有失必有得,W二ơ翻译流畅多了,希望大家Lq顺口?BR><BR><img src ="http://www.shnenglu.com/ivenher/aggbug/2681.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/ivenher/" target="_blank">爱饭?/a> 2006-01-12 14:21 <a href="http://www.shnenglu.com/ivenher/articles/2681.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>P2P communication across middleboxesQ翻?Q?/title><link>http://www.shnenglu.com/ivenher/articles/2680.html</link><dc:creator>爱饭?/dc:creator><author>爱饭?/author><pubDate>Thu, 12 Jan 2006 06:19:00 GMT</pubDate><guid>http://www.shnenglu.com/ivenher/articles/2680.html</guid><wfw:comment>http://www.shnenglu.com/ivenher/comments/2680.html</wfw:comment><comments>http://www.shnenglu.com/ivenher/articles/2680.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/ivenher/comments/commentRss/2680.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/ivenher/services/trackbacks/2680.html</trackback:ping><description><![CDATA[<STRONG>P2P communication across middleboxesQ翻?Q?BR><BR></STRONG>从今天开始将陆箋译Peer-to-Peer (P2P) communication across middleboxesq篇文章,q没有按照章节次序来Q请读者见谅?BR><BR>原文版权QCopyright (C) The Internet Society (2003).  All Rights Reserved.<BR><BR>原文地址Q?A target=_blank><FONT color=#003366>http://midcom-p2p.sourceforge.net/draft-ford-midcom-p2p-01.txt</FONT></A><BR><BR><BR><BR>3.4. UDP port number prediction UPD端口号预a<BR><BR>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.   <BR><BR>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:<BR><BR>   让我们来考虑q样一U情况,有两个客L A ?BQ他们都藏在不同的NAT后面Q他们都开放了一个UDPq接l具有固定IP的Server SQ如下图<BR><BR><IMG onmouseover="if(this.resized) this.style.cursor='hand';" onclick="if(this.resized) {window.open('http://www.ppcn.net/upload/2004_09/040917221575642.jpg');}" src="http://www.ppcn.net/upload/2004_09/040917221575642.jpg" onload="if(this.width>screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='Click here to open new window';}" border=0><BR>  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. <BR><BR><BR><BR>   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 <BR>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.<BR><BR><BR><BR><BR>   NAT A 分配了它自己的UDP端口62000Q用来保?客户端A ?服务器S 的通信会话Q?NAT B 也分配了31000端口Q用来保?客户端B ?服务器S 的通信会话。通过?服务器S的对话,客户端A ?客户端B 都相互知道了Ҏ所映射的真实IP和端口?BR><BR>   客户端A发送一条UDP消息?138.76.29.7:31001(h意到端口L增加)Q同?客户端B发送一条UDP消息?155.99.25.11:62001。如果NAT A 和NAT Bl箋分配端口l新的会话,q且从A-S和B-S的会话时间消耗得q不多的话,那么一条处于客LA和客LB之间的双向会话通道徏立了?BR><BR>   客户端A发出的消息送达BD了NAT A打开了一个新的会话,q且我们希望 NAT A会指派62001端口l这个新的会话,因ؓ62001是62000后,NAT会自动指z 从服务器S到客LA之间的新会话的端口号Q类似的Q客LB发出的消息送达AD?NAT B打开了一个新的会话,q且我们希望 NAT B 会指派31001q个端口l新的会话;如果两个客户端都正确的猜到了对Ҏ会话被指z端口P那么q个 客户端AQ客LB的双向连接就被打通了。其l果如下图所C:<BR><BR><IMG onmouseover="if(this.resized) this.style.cursor='hand';" onclick="if(this.resized) {window.open('http://www.ppcn.net/upload/2004_09/040917221575641.jpg');}" src="http://www.ppcn.net/upload/2004_09/040917221575641.jpg" onload="if(this.width>screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='Click here to open new window';}" border=0><BR>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.  <BR>   <BR>   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.<BR><BR>  <BR><BR>明显的,有许多因素会Dq个Ҏp|Q如果这个预a的新端口Q?2001?1001Q?恰好已经被一个不相关的会话所使用Q那么NAT׃跌q个端口Pq个q接׃宣告p|Q如果两个NAT有时或者L不按照顺序来生成新的端口P那么q个Ҏ也是行不通的?BR><BR>   <BR><BR>如果隐藏在NAT A后的一个不同的客户端XQ或者在NAT B后)打开了一个新的“外出”UDP q接Qƈ且无个连接的目的如何Q只要这个动作发生在 客户端A 建立了与服务器S 的连接之后,客户端A ?客户端B 建立q接之前Q那么这个无关的客户端X ׃h不备地“偷?到这个我们望分配的端口。所以,q个Ҏ变得如此脆弱而且不堪一击,只要M一个NAT方包含以上碰到的问题Q这个方法都不会奏效?BR><BR>      <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.  <BR><BR><BR><BR>   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.<BR><BR><BR><BR>   自从使用q种Ҏ来实践P2P的应用程序以?在处?cone NAT pd的网l环境中q个Ҏq是实用的;如果有一方ؓ cone NAT 而另外一方ؓ symmetric NATQ那么应用程序就应该预先发现另外一方的 NAT 是什么类型,再做出正的行ؓ来处理通信Q这样就增大了算法的复杂度,q且降低了在真实|络环境中的普适性?BR><BR>    最后,如果P2P的一方处在两U或者两U以上的NAT下面Qƈ且这些NATs 接近q个客户端是 symmetric的话Q端口号预言 是无效的Q?BR><BR>    因此Qƈ不推荐用这个方法来写新的P2P应用E序Q这也是历史的经验和教训Q?BR><img src ="http://www.shnenglu.com/ivenher/aggbug/2680.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/ivenher/" target="_blank">爱饭?/a> 2006-01-12 14:19 <a href="http://www.shnenglu.com/ivenher/articles/2680.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>P2P communication across middleboxesQ术语篇Q?/title><link>http://www.shnenglu.com/ivenher/articles/2679.html</link><dc:creator>爱饭?/dc:creator><author>爱饭?/author><pubDate>Thu, 12 Jan 2006 06:18:00 GMT</pubDate><guid>http://www.shnenglu.com/ivenher/articles/2679.html</guid><wfw:comment>http://www.shnenglu.com/ivenher/comments/2679.html</wfw:comment><comments>http://www.shnenglu.com/ivenher/articles/2679.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/ivenher/comments/commentRss/2679.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/ivenher/services/trackbacks/2679.html</trackback:ping><description><![CDATA[<STRONG>P2P communication across middleboxesQ术语篇Q?BR><BR></STRONG>2. Terminology<BR><BR>2. 术语<BR><BR>In this section we first summarize some middlebox terms. We focus hereon the two kinds of middleboxes that commonly cause problems for P2P applications.<BR><BR><BR>在这一章节中,首先概要的介l一下“代理”技术的一些术语。然后集中讨ZU造成P2P应用问题的代理机制?BR><BR><BR><BR>Firewall<BR><BR>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><BR>防火?BR><BR>防火墙限制了U网与公|的通信Q它主要是将Q防火墙Q认为未l授权的的包丢弃Q防火墙只是验包的数据,q不修改数据包中的IP地址和TCP/UDP端口信息?BR><BR><BR><BR>Network Address Translator (NAT)<BR><BR>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:<BR><BR>|络地址转换QNATQ?BR><BR>当有数据包通过Ӟ|络地址转换器不仅检查包的信息,q要包头中的IP地址和端口信息进行修攏V以使得处于NAT之后的机器共享几个仅有的公网IP地址Q通常是一个)。网l地址转换器主要有两种cdQ?BR><BR><BR><BR>Basic NAT<BR><BR>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.<BR><BR>基础NAT<BR><BR>基础NAT 私|主机的U有IP地址转换成公|IP地址Q但q不TCP/UDP端口信息q行转换。基NAT一般用在当NAT拥有很多公网IP地址的时候,它将公网IP地址与内部主行绑定,使得外部可以用公|IP地址讉K内部L。(译者注Q实际上是只IP转换Q?92.168.0.23 <-> 210.42.106.35,q与直接讄IP地址为公|IPq是有一定区别的Q特别是对于企业来说Q外部的信息都要l过l一防火墙才能到辑ֆ部,但是内部L又可以用公|IPQ?BR><BR><BR><BR>Network Address/Port Translator (NAPT)<BR><BR>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.<BR><BR>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).<BR><BR>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.<BR><BR>|络地址和端口{?QNAPTQ?BR><BR>q是最普遍的情况,|络地址/端口转换器检查、修改包的IP地址和TCP/UDP端口信息Q这P更多的内部主机就可以同时使用一个公|IP地址?BR><BR>请参考[NAT-TRAD]和[NAT-TERM]两个文档了解更多的NAT分类和术语信息。另外,关于NAPT的分cd术语Q[STUN]在最q做了更多的定义。当一个内部网L通过NAT打开一个“外出”的TCP或UDP会话ӞNAPT分配l这个会话一个公|IP和端口,用来接收外网的响应的数据包,q经q{换通知内部|的L。这样做的效果是QNAPT?[U有IP:U有端口] 和[公网IP:公网端口]之间建立了一个端口绑定?BR><BR>端口l定指定了NAPT在q个会话的生存期内进行地址转换d。这中间存在一个这L问题Q如果P2P应用E序从内部网l的一个[U有IP地址:端口]对同时发出多条会话给不同的外|主机,那么NAT会怎样处理呢?L以下几种Ҏ?BR><BR><BR><BR>Cone NAT<BR><BR>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.<BR><BR>锥ŞNAT<BR><BR>Q译者注Qؓ什么叫做锥形呢Q请看以下图?l端和外部服务器Q都通过NAT分派的这个绑定地址Ҏ传送信息,p一个漏斗一P{选ƈ传递信息)<BR><BR><IMG onmouseover="if(this.resized) this.style.cursor='hand';" onclick="if(this.resized) {window.open('http://www.ppcn.net/upload/2004_12/041216115044393.jpg');}" src="http://www.ppcn.net/upload/2004_12/041216115044393.jpg" onload="if(this.width>screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='Click here to open new window';}" border=0><BR><BR>    当徏立了一?[U有IP:端口]-[公网IP:端口] 端口l定之后Q对于来自同一个[U有IP:端口]会话Q锥形NAT服务器允许发起会话的应用E序 重复使用q个端口l定Q一直到q个会话l束才解除(端口l定Q?BR><BR><BR><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 tupleQ元l), 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.<BR><IMG onmouseover="if(this.resized) this.style.cursor='hand';" onclick="if(this.resized) {window.open('http://www.ppcn.net/upload/2004_12/041216115044391.jpg');}" src="http://www.ppcn.net/upload/2004_12/041216115044391.jpg" onload="if(this.width>screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='Click here to open new window';}" border=0><BR><BR><BR>例如Q假?Client AQIP地址信息如上图所C)通过一?锥ŞNAT 同时发v两个外出的连接,它用同一个内部端口(10.0.0.1:1234Q给公网的两C同的服务器,S1和S2。锥形NAT 只分配一个公|IP和端口(155.99.25.11:62000Q给q个两个会话Q通过地址转换可以 保 Client使用端口的“同一性”(译者注Q即q个Client只用这个端口)。而基NATs和防火墙却不能修改经q的数据包端口号Q它们可以看作是锥ŞNAT的精版本?BR><BR>          <BR><BR>Symmetric NAT<BR><BR>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.<BR><BR>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.<BR><BR>对称NAT<BR><BR>对称NATQ与Cone NAT是大不相同的Qƈ不对会话q行端口l定Q而是分配一个全新的 公网端口 l每一个新的会话?BR><BR>q是上面那个例子Q如?Client A (10.0.0.1:1234)同时发v两个 "外出" 会话,分别发往S1和S2。对UNat会分配公共地址155.99.25.11:62000lSession1Q然后分配另一个不同的公共地址155.99.25.11:62001lSession2。对UNat能够区别两个不同的会话ƈq行地址转换Q因为在 Session1 ?Session2中的外部地址是不同的Q正是因PClient端的应用E序p失在q个地址转换边界U了Q因个应用程序每发出一个会话都会用一个新的端口,无法保障只用同一个端口了?BR><BR><BR><IMG onmouseover="if(this.resized) this.style.cursor='hand';" onclick="if(this.resized) {window.open('http://www.ppcn.net/upload/2004_12/041216115044392.jpg');}" src="http://www.ppcn.net/upload/2004_12/041216115044392.jpg" onload="if(this.width>screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='Click here to open new window';}" border=0>'<BR><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.<BR><BR>在TCP和UDP通信中, Q到底是使用同一个端口,q是分配不同的端口给同一个应用程序)Q锥形NAT和对UNAT各有各的理由。当焉形NAT在根据如何公q_NAT接受的连接直达一个已创徏的地址对上有更多的分类。这个分cM般应用在Udp通信Q而不是Tcp通信上)Q因为NATs和防火墙L了试图无条g传入的TCPq接Q除非明设|NAT不这样做。这些分cd下:<BR><BR><BR><BR>Full Cone NAT<BR><BR>    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.<BR><BR>全双工锥形NAT<BR><BR>当内部主机发Z个“外出”的q接会话Q就会创Z一?公网/U网 地址Q一旦这个地址对被创徏Q全双工锥ŞNAT会接攉后Q何外部端口传入这个公q口地址的通信。因此,全双工锥形NAT有时候又被称?h"NAT?BR><BR><BR><BR>Restricted Cone NAT<BR><BR>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.<BR><BR>受限制的锥ŞNAT<BR><BR>受限制的锥ŞNAT会对传入的数据包q行{选,当内部主机发出“外出”的会话ӞNAT会记录这个外部主机的IP地址信息Q所以,也只有这些有记录的外部IP地址Q能够将信息传入到NAT内部Q受限制的锥形NAT 有效的给防火墙提g{选包的原则——即限定只给那些已知的外部地址“传入”信息到NAT内部?BR><BR><BR><BR>Port-Restricted Cone NAT<BR><BR>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.<BR><BR>端口受限制的Cone NAT<BR><BR>端口受限制的锥ŞNATQ与受限制的锥ŞNAT不同的是Q它同时记录了外部主机的IP地址和端口信息,端口受限制的锥ŞNATl内部节Ҏ供了同一U别的保护,在维持端口“同一性”过E中Q将会丢弃对UNAT传回的信息?BR><BR><BR><BR>Finally, in this document we define new terms for classifying the P2P-relevant behavior of middleboxes:<BR><BR>最后,在这文档里我们定义一l新的术?Q以便更好的对P2P代理相关的行行分cR?BR><BR><BR><BR>P2P应用E序<BR><BR>P2P应用E序是指Q在已有的一个公共服务器的基上,q分别利用自qU有地址或者公有地址Q或者两者兼备)来徏立一个端到端的会话通信?BR><BR>P2P-Application<BR><BR>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.<BR><BR><BR><BR>P2P-Middlebox<BR><BR>A P2P-Middlebox is middlebox that permits the traversal of P2P applications. <BR><BR>P2P代理<BR><BR>P2P代理是一个允?P2P应用E序q行通信的代理机?BR><BR><BR><BR>P2P-firewall<BR><BR>A P2P-firewall is a P2P-Middlebox that provides firewall functionality but performs no address translation.<BR><BR>P2P防火?BR><BR>P2P防火墙是一个提供了防火墙的功能的P2P代理Q但是不q行地址转换.<BR><BR><BR><BR>P2P-NAT<BR><BR>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.<BR><BR>P2P-NAT<BR><BR>P2P-NAT 是一?P2P代理,提供了NAT的功?也提供了防火墙的功能,一个最的P2P代理必须h 锥ŞNAT对Udp通信支持的功?q允许应用程序利用Udp打洞技术徏立强健的P2Pq接?BR><BR><BR><BR>Loopback translation<BR><BR>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".<BR><BR><BR>回环转换<BR><BR>当NAT的私|内部机器想通过公共地址来访问同一台局域网内的机器的时QNAT讑֤{h于做了两ơNAT的事情,在包到达目标机器之前Q先私有地址转换为公|地址Q然后再公|地址转换回私有地址。我们把h上叙转换功能的NAT讑֤叫做“回环{换”设备?BR><img src ="http://www.shnenglu.com/ivenher/aggbug/2679.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/ivenher/" target="_blank">爱饭?/a> 2006-01-12 14:18 <a href="http://www.shnenglu.com/ivenher/articles/2679.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>P2P communication across middleboxesQ前a)http://www.shnenglu.com/ivenher/articles/2678.html爱饭?/dc:creator>爱饭?/author>Thu, 12 Jan 2006 06:16:00 GMThttp://www.shnenglu.com/ivenher/articles/2678.htmlhttp://www.shnenglu.com/ivenher/comments/2678.htmlhttp://www.shnenglu.com/ivenher/articles/2678.html#Feedback0http://www.shnenglu.com/ivenher/comments/commentRss/2678.htmlhttp://www.shnenglu.com/ivenher/services/trackbacks/2678.html
原文地址Q?A target=_blank>http://midcom-p2p.sourceforge.net/draft-ford-midcom-p2p-01.txt


译文版权xQ请引用此文的作者或|站注明出处Q?BR>

http://blog.csdn.net/hxhbluestarQ以重译者的力_成果Q?BR>
    随着IPv6时代的到来,我也一直怀疑,是不是还有必要再d习NAT技术——因为网l的资源不再如IPv4时代匮乏Q而NAT技术正是ؓ解决IP地址的紧~存在的Q如此,NAT便没有存在的必要了?BR>
但是Q随着q篇文章的翻译,我的怀疑慢慢变成庆q,渐而又变ؓ肯定Q通过译所学到的东西,不再仅仅是翻译第一手资料带来的成就感,更多的是通过译Q去领悟技术前辈们的智慧与l验Q也通过译Q养成自׃W一手资料获得信息的习惯Q从而将视野攑־更宽Q让理解更ؓ透彻——至,很多东西都是要经q仔l斟酌才真正转化己思想的一部分的。正是如此,我才坚定的要把这文章翻译完Q也如之前所提到的,如果旉允许的话Q我会用C#来写一些例子,让大家更好的理解NAT技术,掌握NAT技术(主要涉及到即旉讯、文件对{传输和语音应用三个斚wQ?BR>
q篇文章主要是介l一下“代理”机制的起因以及lP2P应用带来的不便,不需要Q何基知识Q)

1. Introduction

1、简?BR>


关键词:

middleboxe(s) —?我翻译成“代理”,也许有更好的译

host             —?我翻译成“主机”,希望大家不要理解成服务器了,L是一台普通的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中,普遍存在使用“代理”设备来q行|络地址转换QNATQ,Dq种现象的原因是 IPV4 地址I间的资源耗尽危机。虽然不对称 asymmetric 的地址分配和连通性制度已l在代理中被定义Q但是却l端对端应用E序和协议制定造成了一些特D的问题。像电话会议和多媒体|络游戏。这些问题即使在IPV6世界中还是会存在Q因为NAT作ؓIPV4的一U兼Ҏ机制经常被使用[NAT-PT]Qƈ且防火墙仍然将普遍存在Q即使不再需要NAT技术?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 l构设计的,Z实现那些需要连接但是又没有固定IP地址的客L能够q接C台配|好的拥有固定IP和DNS域名的服务器?BR>    大多数的“代理”用一U?asymmetric 通信模型Q即 U网Q局域网Q?的主发v一个“外出”连接去q接公网上的L?但是公网上的L却无法发送信息给U网上的LQ除非对“代理”进行特D的配置Q,NAPTQ网l地址端口转换Q的普通情冉|Q一个私|客L不需要一个公|的固定的IP地址Q但是必要׃n一个由NAPT控制的公|的固定IP地址Q当然这个NAPT是处于同一个私|内部的Q。这L话,q些匿名的ƈ且看h难以触及的藏在NAT之后的内|主机对于像 Web览?q种软g来说׃是一个问?因ؓ内网的主机只需要发起向外部的连接就可以了。这样一来,无法触及也还是有他的优点的——那是h保密性?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.



然而,在P2P的应用中QInternet上的“客h”之间是需要徏立一个通信会话直连的。邀误和响应者也怼处于不同的NAT之后Q也总们都没有固定IP或者即使有也不是公|的IP地址。D例来_在一个普通的|络游戏体系l构中,都是通过客户端向一个具有公|固定IP的服务器发v甌q行初始化ƈ通过验证的。同Ӟ客户端之间也要徏立直q,才ɾ|络间传输的速度加快Q保证数据即时更斎ͼ不然抢不到装备啊Q呵呵)?BR>
同样的,一个文件共享应用程序也必须通过C个服务器上去查找它想要的资源Q然后再到拥有这个数据的L上去下蝲QBT|站Q走了一个中介)Q“代理”造成了很多P2P直连的问题,因ؓ藏在“代理”之后的的主机通常没有固定的端口来使其他的客户端发LTCP或UDPq接能够最l到达?BR>
RFC 3235[NAT-APPL] 要的提到了这个问题,但是没有l出M的解x案?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.



在这文章中Q我们用两种方式讨论 P2P/代理 的问题。首先,概要的讲叙已有的P2P应用E序能够在现有的代理机制中的工作原理。然后,我们提供一l应用程序设计指南,Z已有的实践,在现有的配置好的代理上,来得P2P应用E序操作更加有条理。最后,我们提供了设计指南,Z后的代理机制能够更方便支持P2P应用E序。讨论的焦点是如?直接的、广泛的 配置那些需要经q“代理”的P2P应用E序?BR>

]]>
P2P之UDPIKNAT的原理与实现 - 增强?附修改过的源代码)http://www.shnenglu.com/ivenher/articles/2676.html爱饭?/dc:creator>爱饭?/author>Thu, 12 Jan 2006 06:05:00 GMThttp://www.shnenglu.com/ivenher/articles/2676.htmlhttp://www.shnenglu.com/ivenher/comments/2676.htmlhttp://www.shnenglu.com/ivenher/articles/2676.html#Feedback0http://www.shnenglu.com/ivenher/comments/commentRss/2676.htmlhttp://www.shnenglu.com/ivenher/services/trackbacks/2676.html原始作? Hwycheng Leo(FlashBT@Hotmail.com)
源码下蝲: http://bbs.hwysoft.com/download/UDP-NAT-LEO.rar
参考:http://midcom-p2p.sourceforge.net/draft-ford-midcom-p2p-01.txt
      P2P之UDPIKNAT的原理与实现(shootingstars)

文章说明:

关于UDPIKNAT的中文资料在|络上是很少的,仅有<<P2P之UDPIKNAT的原理与实现(shootingstars)>>q篇文章有实际的参考h倹{本两年来也一直从事P2P斚w的开发工作,比较有代表性的是个人开发的BitTorrent下蝲软g - FlashBT(变态快?. 对P2P下蝲或者P2P的开发感兴趣的朋友可以访问Y件的官方主页: http://www.hwysoft.com/chs/ 下蝲看看Q说不定有收莗写q篇文章的主要目的是懒的再每ơ单独回{一些网友的提问, 一ơ性写下来, 卌省了自己的时_也方便了对于P2P的UDPIK感兴趣的网友阅d理解。对此有兴趣和经验的朋友可以l我发邮件或者访问我的个人Blog留言: http://hwycheng.blogchina.com.
您可以自p{载此文章,但是请保留此说明?BR>
再次感谢shootingstars|友的早期A? 表示谢意?BR>
------------------------------------------------------------------------------------------------------------

NAT(The IP Network Address Translator) 的概念和意义是什?

NAT, 中文译为网l地址转换。具体的详细信息可以讉KRFC 1631 - http://www.faqs.org/rfcs/rfc1631.html, q是对于NAT的定义和解释的最权威的描q。网l术语都是很抽象和艰涩的Q除非是专业人士Q否则很难从字面中来准确理解NAT的含义?BR>
要想完全明白NAT 的作用,我们必须理解IP地址的两大分c,一cLU有IP地址Q在q里我们UC内网IP地址。一cL非私有的IP地址Q在q里我们UC公网IP地址。关于IP地址的概念和作用的介l参见我的另一文? http://hwycheng.blogchina.com/2402121.html

内网IP地址: 是指使用A/B/CcM的私有地址, 分配的IP地址在全球不惧有唯一性,也因此无法被其它外网L直接讉K?BR>公网IP地址: 是指h全球唯一的IP地址Q能够直接被其它L讉K的?BR>
NAT 最初的目的是ؓ使用内网IP地址的计机提供通过数几台h公网的IP地址的计机讉K外部|络的功能。NAT 负责某些内|IP地址的计机向外部网l发出的IP数据包的源IP地址转换为NAT自己的公|的IP地址Q目的IP地址不变, q将IP数据包{发给路由器,最l到辑֤部的计算机。同时负责将外部的计机q回的IP数据包的目的IP地址转换为内|的IP地址Q源IP地址不变Qƈ最l送达到内|中的计机?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 实现了私有IP的计机分n几个公网IP地址讉KInternet的功能?BR>                              
随着|络的普及,IPv4的局限性暴露出来。公|IP地址成ؓ一U稀~的资源Q此时NAT 的功能局限也暴露出来Q同一个公|的IP地址Q某个时间只能由一台私有IP地址的计机使用。于是NAPT(The IP Network Address/Port Translator)应运而生QNAPT实现了多台私有IP地址的计机可以同时通过一个公|IP地址来访问Internet的功能。这在很大程度上暂时~解了IPv4地址资源的紧张?BR>
NAPT 负责某些内|IP地址的计机向外部网l发出的TCP/UDP数据包的源IP地址转换为NAPT自己的公|的IP地址Q源端口转ؓNAPT自己的一个端口。目的IP地址和端口不? q将IP数据包发l\由器Q最l到辑֤部的计算机。同时负责将外部的计机q回的IP数据包的目的IP地址转换内网的IP地址Q目的端口{为内|计机的端口,源IP地址和源端口不变Qƈ最l送达到内|中的计机?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 实现了私有IP的计机分n一个公|IP地址讉KInternet的功能?nbsp;                                            

在我们的工作和生zM, NAPT的作用随处可见,l大部分公司的网l架构,都是通过1至N台支持NAPT的\由器来实现公司的所有计机q接外部的Internet|络的。包括本人在写这文章的时候,也是在家中用一台IBMW记本通过一台宽带连接的台式机来讉KInternet的。我们本文章主要讨论的NAPT的问题?BR>
NAPT(The IP Network Address/Port Translator) Zȝ了P2P软g的应?

通过NAPT 上网的特点决定了只能由NAPT内的计算Z动向NAPT外部的主机发赯接,外部的主机想直接和NAPT内的计算机直接徏立连接是不被允许的。IM(x通讯)而言Q这意味着׃NAPT内的计算机和NAPT外的计算机只能通过服务器中转数据来q行通讯。对于P2P方式的下载程序而言Q意味着NAPT内的计算Z能接收到NAPT外部的连接,Dq接数用q少Q下载速度很难上去。因此P2P软g必须要解决的一个问题就是要能够在一定的E度上解决NAPT内的计算Z能被外部q接的问题?BR>
NAT(The IP Network Address Translator) q行UDPIK的原理是什?

TCP/IP传输时主要用到TCP和UDP协议。TCP协议是可靠的Q面向连接的传输协议。UDP是不可靠的,无连接的协议。根据TCP和UDP协议的实现原理,对于NAPT来进行穿透,主要是指的UDP协议。TCP协议也有可能Q但是可行性非常小Q要求更高,我们此处不作讨论Q如果感兴趣可以到Google上搜索,有些文章对这个问题做了探讨性的描述。下面我们来看看利用UDP协议来穿透NAPT的原理是什?

                        ----------------------                           ----------------------               
                        | 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 是如何将U有IP地址的UDP数据包与公网Lq行透明传输的?BR>
UDP协议包经NAPT透明传输的说?

NAPT为每一个Session分配一个NAPT自己的端口号Q依据此端口h判断收到的公网IPLq回的TCP/IP数据包{发给那台内网IP地址的计机。在q里Session是虚拟的QUDP通讯q不需要徏立连接,但是对于NAPT而言Q的要有一个Session的概念存在。NAPT对于UDP协议包的透明传输面的一个重要的问题是如何处理q个虚拟的Session。我们都知道TCPq接的Session以SYN包开始,以FIN包结束,NAPT可以很容易的获取到TCP Session的生命周期,q进行处理。但是对于UDP而言Q就ȝ了,NAPTq不知道转发出去的UDP协议包是否到达了目的LQ也没有办法知道。而且鉴于UDP协议的特点,可靠很差Q因此NAPT必须强制l持Session的存在,以便{待外部送回来的数据q{发给曄发vh的内|IP地址的计机。NAPT具体如何处理UDP Session的超时呢Q不同的厂商提供的设备对于NAPT的实Cq相同,也许几分钟,也许几个时Q些NAPT的实现还会根据设备的忙碌状态进行智能计超时时间的长短?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协议包的源地址和源端口改变传输l公|IPL?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 收到的公网IPLq回的UDP协议包的目的地址和目的端口改变传输给内网IP计算机?nbsp;                               
现在我们大概明白了NAPT如何实现内网计算机和外网L间的透明通讯。现在来看一下我们最兛_的问题,是NAPT是依据什么策略来判断是否要ؓ一个请求发出的UDP数据包徏立Session的呢Q主要有一下几个策?

A. 源地址(内网IP地址)不同Q忽略其它因? 在NAPT上肯定对应不同的Session
B. 源地址(内网IP地址)相同Q源端口不同Q忽略其它的因素Q则在NAPT上也肯定对应不同的Session
C. 源地址(内网IP地址)相同Q源端口相同Q目的地址(公网IP地址)相同Q目的端口不同,则在NAPT上肯定对应同一个Session
D. 源地址(内网IP地址)相同Q源端口相同Q目的地址(公网IP地址)不同Q忽略目的端口,则在NAPT上是如何处理Session的呢Q?BR>
D的情冉|式我们关心和要讨论的问题。依据目的地址(公网IP地址)对于Session的徏立的军_方式我们NAPT讑֤划分Z大类:

Symmetric NAPT:
对于到同一个IP地址QQ意端口的q接分配使用同一个Session; 对于C同的IP地址, L端口的连接用不同的Session.
我们U此UNAPT?Symmetric NAPT. 也就是只要本地绑定的UDP端口相同Q?发出的目的IP地址不同Q则会徏立不同的Session.

        [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 的英文意思是对称。多个端口对应多个主机,q的,对称?
                  
Cone NAPT:
对于到同一个IP地址QQ意端口的q接分配使用同一个Session; 对于C同的IP地址QQ意端口的q接也用同一个Session.
我们U此UNAPT?Cone NAPT. 也就是只要本地绑定的UDP端口相同Q?发出的目的地址不管是否相同Q?都用同一个Session.

        [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 的英文意思是锥。一个端口对应多个主机,是不是像个锥?

现在l大多数的NAPT属于后者,即Cone NAT。本人在试的过E中Q只好用了一台日本的Symmetric NAT。还好不是自q买的Q我从不买日? 希望看这文章的朋友也自觉的不要购买日本的东ѝWin9x/2K/XP/2003pȝ自带的NAPT也是属于 Cone NAT的。这是值的庆幸的,因ؓ我们要做的UDPIK只能在Cone NAT间进行,只要有一C是Cone NATQ对不vQUDPIK没有希望了Q服务器转发吧。后面会做详l分?

下面我们再来分析一下NAPT 工作时的一些数据结构,在这里我们将真正说明UDP可以IKCone NAT的依据。这里描q的数据l构只是Z说明原理Q不h实际参考h|真正感兴可以阅读Linux的中关于NAT实现部分的源码。真正的NAT实现也没有利用数据库的,呵呵Qؓ了速度Q?BR>
Symmetric NAPT 工作时的端口映射数据l构如下:

内网信息?

[NAPT 分配端口] [ 内网IP地址 ] [ 内网端口 ] [ 外网IP地址 ] [ SessionTime 开始时?]

PRIMARY KEY( [NAPT 分配端口] ) -> 表示依据[NAPT 分配端口]建立主键Q必d一且徏立烦引,加快查找.
UNIQUE( [ 内网IP地址 ], [ 内网端口 ] ) -> 表示q两个字D联合v来不能重?
UNIQUE( [ 内网IP地址 ], [ 内网端口 ], [ 外网IP地址 ] ) -> 表示q三个字D联合v来不能重?

映射?

[NAPT 分配端口] [ 外网端口 ]

UNIQUE( [NAPT 分配端口], [ 外网端口 ] ) -> 表示q两个字D联合v来不能重?

Cone NAPT 工作时的端口映射数据l构如下:

内网信息?

[NAPT 分配端口] [ 内网IP地址 ] [ 内网端口 ] [ SessionTime 开始时?]

PRIMARY KEY( [NAPT 分配端口] ) -> 表示依据[NAPT 分配端口]建立主键Q必d一且徏立烦引,加快查找.
UNIQUE( [ 内网IP地址 ], [ 内网端口 ] ) -> 表示q两个字D联合v来不能重?

外网信息?

[ wid 主键标识 ] [ 外网IP地址 ] [ 外网端口 ]

PRIMARY KEY( [ wid 主键标识 ] ) -> 表示依据[ wid 主键标识 ]建立主键Q必d一且徏立烦引,加快查找.
UNIQUE( [ 外网IP地址 ], [ 外网端口 ] ) -> 表示q两个字D联合v来不能重?

映射? 实现一对多Q的

[NAPT 分配端口] [ wid 主键标识 ]

UNIQUE( [NAPT 分配端口], [ wid 主键标识 ] ) -> 表示q两个字D联合v来不能重?
UNIQUE( [ wid 主键标识 ] ) -> 标识此字D不能重?

看完了上面的数据l构是更明白了还是更晕了Q?呵呵! 多想一会儿׃明白了。通过NAT,内网计算机向外q结是很Ҏ的,NAPT会自动处理,我们的应用程序根本不必关心它是如何处理的。那么外部的计算机想讉K内网中的计算机如何实现呢Q我们来看一下下面的程Q?BR>
c 是一台在NAPT后面的内|计机Qs是一台有外网IP地址的计机。c d?s 发vq接hQNAPT依据上面描述的规则在自己的数据结构中记录下来Q徏立一个Session. 然后 c ?s 之间可以实现双向的透明的数据传输了。如下面所C?

   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]

由此可见Q一台外|IP地址的计机惛_NAPT后面的内|计机通讯的条件就是要求NAPT后面的内|计机d向外|IP地址的计机发v一个UDP数据包。外|IP地址的计机利用收到的UDP数据包获取到NAPT的外|IP地址和映的端口Q以后就可以和内|IP的计机透明的进行通讯了?BR>   
现在我们再来分析一下我们最兛_的两个NAPT后面的内|计机如何实现直接通讯? 两者都无法d发出q接hQ谁也不知道Ҏ的NAPT的公|IP地址和NAPT上面映射的端口号。所以我们要靠一个公|IP地址的服务器帮助两者来建立q接。当两个NAPT后面的内|计机分别q接了公|IP地址的服务器后,服务器可以从收到的UDP数据包中获取到这两个NAPT讑֤的公|IP地址和这两个q接建立的Session的映端口。两个内|计机可以从服务器上获取到Ҏ的NAPT讑֤公网IP地址和映的端口了?BR>
我们假设两个内网计算机分别ؓA和BQ对应的NAPT分别为AN和BNQ?如果A在获取到B对应的BN的IP地址和映的端口后,q不急待的向q个IP
地址和映的端口发送了个UDP数据包,会有什么情况发生呢Q依据上面的原理和数据结构我们会知道QAN会在自己的数据结构中生成一条记录,标识一个新Session的存在。BN在收到数据包后,从自q数据l构中查询,没有扑ֈ相关记录Q因此将包丢弃。B是个慢性子Q此时才慢吞吞的向着AN的IP地址和映的端口发送了一个UDP数据包,l果如何呢?当然是我们期望的l构了,AN在收到数据包后,从自q数据l构中查扑ֈ了记录,所以将数据包进行处理发送给了A。A 再次向B发送数据包Ӟ一切都时畅通无M。OK, 大工告成Q且慢,q时对于Cone NAPT而言Q对于Symmetric NAPT呢?呵呵Q自己分析一下吧...

NAPT(The IP Network Address/Port Translator) q行UDPIK的具体情况分析!

首先明确的将NAPT讑֤按照上面的说明分? Symmetric NAPT ?Cone NAPT, Cone NAPT 是我们需要的。Win9x/2K/XP/2003 自带的NAPT也ؓCone NAPT?BR>
W一U情? 双方都是Symmetric NAPT:

此情况应l不存在什么问题,肯定是不支持UDPIK?BR>
W二U情? 双方都是Cone NAPT:

此情冉|我们需要的Q可以进行UDPIK?BR>
W三U情? 一个是Symmetric NAPT, 一个是Cone NAPT:

此情冉|较复杂,但我们按照上面的描述和数据机构进行一下分析也很容易就会明白了, 分析如下,

假设: A -> Symmetric NAT, B -> Cone NAT

1. A 惌?B, A 从服务器那儿获取?B 的NAT地址和映端? A 通知服务器,服务器告?B A的NAT地址和映端? B ?A 发vq接QA 肯定无法接收到。此?A ?B 发vq接Q?A 对应的NAT建立了一个新的SessionQ分配了一个新的映端口, B ?NAT 接收到UDP包后Q在自己的映表中查询,无法扑ֈ映射,因此包丢弃了?BR>
2. B 惌?A, B 从服务器那儿获取?A 的NAT地址和映端? B 通知服务? 服务器告?A B的NAT地址和映端?A ?B 发vq接, A 对应的NAT建立了一个新的SessionQ分配了一个新的映端口B肯定无法接收到。此?B ?A 发vq接, ׃ B 无法获取 A 建立的新的Session的映端口,仍是使用服务器上获取的映端口进行连接, 因此 A 的NAT在接收到UDP包后Q在自己的映表中查询,无法扑ֈ映射? 因此包丢弃了?BR>
Ҏ以上分析Q只有当q接的两端的NAT都ؓCone NAT的情况下Q才能进行UDP的内|穿透互联?BR>

NAPT(The IP Network Address/Port Translator) q行UDPIK如何进行现实的验证和分?

需要的|络l构如下:

三个NAT后面的内|机器,两个外网服务器。其中两台Cone NAPTQ一?Symmetric NAPT?BR>
验证Ҏ:

可以使用本程序提供的源码Q编译,然后分别q行服务器程序和客户端。修改过后的源码增加了客L之间直接通过IP地址和端口发送消息的命oQ利用此命oQ你可以手动的验证NAPT的穿透情cؓ了方便操作,推荐你用一个远E登陆YӞ可以直接在一台机器上操作所有的相关的计机Q这样很方便Q一个h可以完成所有的工作了。呵呵,本h是q么完成的。欢q有兴趣和经验的朋友来信批评指正Q共同进步?BR>

]]>
P2Pq_的关键技?http://www.shnenglu.com/ivenher/articles/2675.html爱饭?/dc:creator>爱饭?/author>Thu, 12 Jan 2006 05:57:00 GMThttp://www.shnenglu.com/ivenher/articles/2675.htmlhttp://www.shnenglu.com/ivenher/comments/2675.htmlhttp://www.shnenglu.com/ivenher/articles/2675.html#Feedback0http://www.shnenglu.com/ivenher/comments/commentRss/2675.htmlhttp://www.shnenglu.com/ivenher/services/trackbacks/2675.html从P2P的发展史来看QInternet的快速发展是P2Ppȝ崛v的催化剂Q在Internet上进行客?服务器模式的讉KQ得信息源分布q于集中Q边~网l的资源被闲|和费Q而P2P技术的引入Q得网l中M一个与|络相关的设备都可能为网l中的其他设备提供有效的内容服务?BR>一般的P2Ppȝ都有强烈的应用背景,pȝ实现也与应用cd紧密相关。ؓ了深入分析P2Ppȝ的关键技术,我们P2Ppȝ划分为P2Pq_层和应用层,P2Pq_包含支撑P2P应用所需的基lgQ例如,发现机制、通信、安全、资源集成等lg。P2P应用层利用P2Pq_提供的功能,向用h供专门的服务。这U区分可界定P2P的关键技术,帮助我们设计和实现更多种cȝP2P应用.
本文主要讨论P2Pq_的关键技术,全文按如下方式组l:W?节描qCP2Ppȝ的特点,W?节概括了Peer通信的各U技术,W?节叙qCP2Pq_的安全措施,W?节讨ZP2Pq_的性能问题Q最后是全文结?BR>1QP2Ppȝ特点
在P2Ppȝ中,每一个Peer都是q等的参与者,承担服务使用?/FONT>?FONT color=#ff0000>服务提供?/FONT>两个角色。资源的所有权和控制权被分散到|络的每一个节点中。服务用者和服务提供者之间进行直接通信Q可充分利用|络带宽Q减网l的拥塞状况Q得资源的有效利用率大大提高(包括各种计算资源和存储资源)。同时由于没有中央节点的集中控制Q系l的伸羃性较强,也能避免单点故障Q提高系l的定w性能?BR>但由于P2P|络的分散性、自L、动态性等特点Q造成了某些情况下Peer的访问结果是不可预见的。例如,一个请求可能得不到M应答消息的反馈。P2Ppȝ的匿名性等特点可能会带来系l的安全漏洞?BR>P2Ppȝ的这些特点也军_了P2P 应用主要包括资源׃n和协作。资源共享主要是文g׃npȝ、文件分发系l(File Distribution SystemQ。通过P2P|络实现文g׃n和文件分发,能够应付爆发式访问,pȝ的可伸羃性好Q可靠性好?BR>此类典型pȝ?/STRONG>Napster[1]QGnutella[2]QFreeNet[3]QChord-based SystemQBitTorrent[4]?BR>P2P协作应用的种cd多,包括x消息pȝ、在U游戏、共享企业应用(在提供即时消息之外,q可׃n内容和进行共同的zd如组内共同开发和~辑Q、文件搜索、pub/subpȝ{?BR>其中Q?STRONG>x消息pȝ[5]有AOL AIM、Yahoo Messenger、MSN Messenger、Jabber[6,7]{;
在线游戏有星际争霸、Net-Z和DOOMQ?BR>׃n企业应用有Groove[8]、Magi[9]Q?BR>文g搜烦?/STRONG>YouSearch[10], OpenCola{;
pub/subpȝ有Scribe、Herms{;
q有ZP2P|络构造的emailpȝ?BR>而从P2Ppȝ的典型特Ҏ分析Q常常被引证为P2P应用的科学计系l?A href="mailto:Seti@Home[11">Seti@Home[11]应该属于P2P的非典型应用。各UP2Ppȝ׃应用背景的差异,彼此互不兼容Q导致不同的P2P|络无法通信Q难以有效地利用|络资源提供服务。Sun公司l织开发的JXTA[12]目Q希望通过提供一个简单通用的P2Pq_来解册个问题。从上述应用可以看出QP2Ppȝq不能替代客?服务器系l,它们两者是相辅相成的关pR?BR>从P2Ppȝ的基本特点和应用情况分析Q我们认为P2Pq_中的Peer的通信、^台的安全和^台的性能优化q三Ҏ术是P2Ppȝ的成功与否的关键所在?BR>
2 P2P通信
P2P通信旉要解决的最基本的问题即?STRONG>如何q接
其它的终端获得信息、资源和服务。该问题可细分ؓ以下一些问题:
      1、P2P|络的拓扑结构和Peer节点的功能角色划分;
􀁺 2、资源和服务如何标识Q?BR>􀁺 3、进行资源查找时如何q行Peer定位Q?BR>􀁺 4、P2P|络中Peer节点的动态变化的处理Q?BR>􀁺 5、如何穿NATQNetwork Address TranslationQ和防火墙进行Peer节点之间的直接通信?BR>P2P|络的拓扑结构和Peer节点的角色划?BR>在P2P|络中,有两U典型的拓扑l构Q即UP2P|络和؜杂的P2P|络[13]?BR>在纯P2P|络中,每个Peer都具有同{的责Q和地位,不存在中间节点的协调。FreeNet、Gnutella都属于纯P2P|络。而在h的P2P|络中,存在着充当服务器角色的Peer节点或提供特D功能的Super-Peer节点Q这些节点保存其它Peer节点的基本状态和存储内容源信息,协助完成对其它节点的记录、查询等工作。Napster, Groove, Magi{系l均是典型的h型P2Ppȝ?BR>每一个PeerҎ其提供的角色功能可以划分ZU类型,即简单类型Peer节点Qsuper-peer节点和服务器型的peer节点。简单类型Peer节点仅仅是一个简单的l端用户Q它可以h获得服务qؓ|络中的其它Peer提供服务。Super-peer节点除了h和简单Peer节点cM的功能外Q还提供某些Ҏ功能。如JXTApȝ中就存在路由器Peer节点和会聚点Peer节点[12]Q前者作Z个桥梁,使得被防火墙或NAT隔离的Peer可以怺通信Q后者ؓ单节Ҏ供查询定位信息的功能。服务器型的Peer节点主要提供cM与客?服务器模型下的服务器功能Q如提供一个全局l一的目录查询。在Napsterq种h型的P2Ppȝ中,有若q个单Peer节点怺提供文g下蝲功能的服务,q有一个目录服务器节点提供文g条目的注册管理。Groove和Magipȝ中也均存在这L服务器型节点。而在UP2P|络中,每一个Peer节点均充当了上述的三U角艌Ӏ?BR>资源的标?BR>Z在P2P|络中准地查找资源q行Peer定位Q还需要确定Peer中存贮资源的标识Q这里我们将在P2P|络中需要进行查扄对象l称源)。不同的应用场景均有适合自n特点的资源标识方式?BR>在以文g׃nZ的应用中Q资源主要以文g的名U、关键字、源数据{进行标识。而即时消息通讯pȝ往往采用cM于电子邮件的命名方式Q如在Jabberpȝ中,Jabber的用户ID以[node@]domain/[resource]的Ş式进行地址标识[7]Q提供一个全局l一的地址I间。其中,Domain是主要的ID标识Q是与多个用戯接进行消息{发的Jabber ServerQNode为用户姓名或늧QResource属于一个NodeQ标识属于一个用L多个资源。一个用户可以同时与同一服务器徏立多ơ连接?BR>以用户之间协作ؓȝP2P应用如Groovepȝ和MagipȝQ由于在协作中对x消息通讯和文件共享的要求D有之,用户一般以用户名进行标识,而文件则以源数据标识[14]?BR>JXTA作ؓ一个解决不同P2P应用彼此不兼容的底层q_Q提Z一个统一的资源标识定义,卛_告[12]
QadvertisementQ。广告是一个XMLl构的文档,由Peer或相互协作共同完成一U应用Peer l进行发布,用来描述现有的资源、服务或实体Peer。Peer节点通过查询q告以获得各U资源的消息Q进行Peer定位?BR>
Peer的定位方?/STRONG>
在查找资源的q程中,可采用直接或间接方式定位Peer。直接定位Peer的方式比较简单,卛_用广播或多播的Ş式发出查询请求,W合查询要求的Peer节点q行应答Q然后徏立直接的通信q接。由于这U方式只能在局域网中用,所以应用范围有限。当然这U方式可以和其它的定位方式结合用以获得良好的查询效率?BR>间接方式包括三种模型Q服务器模型、洪模型、和路由模型?BR>服务器模型:该模型是Zh型的P2P拓扑l构。充当服务器的peer节点提供资源查询。peer请求发送至服务器获得查询结果,随后Q直接与目标节点通信获取所需服务。但q种方式存在单点p|问题Q同Ӟ也存在׾~性问题。但因ؓpeer节点仅在启动、停止及查询的时候才与服务器交互Q所以此时的伸羃性还是强于客?服务器模式。典型系l有NapsterQMagiQGroove和Jabber。Napsterpȝ采用一个目录服务器记录资源索引QGroovepȝ和Magipȝ均是采用动态DNS查找用户的IP地址[14]。Jabberpȝ׃其资源标识类gEmail地址Q所以,利用DNS的MX记录q行IP地址的查询[7]?BR>z流模型Q该模型ZUP2P拓扑l构。Peer节点采用z流法将查询h不断地{发至d节点Q直到到辄标节点,获得查询l果。同时ؓ了避免消息无限制的{发,查询h中设定有TTLQTime to LiveQ或HTL(Hops to Live)q行转发控制。Gnutella是采用此cL型的典型pȝ?BR>路由模型Q该模型也是ZUP2P|络l构。首先ؓ|络中的每一个peer赋予一个IDQ同Ӟ每个Peer存储的资源和服务也有cM的ID。Peer节点的\p中登C定数量的d节点。Peer的请求被转发至与所h的资源或服务的ID 最接近的PeerQ直到发现这个资源或服务[15]。插入一个新资源/服务的过E与查询q程cMQ也是通过查找该资?服务ID来确定存储的正确位置。此cL型主要用在文件共享系l中Q如FreeNet,Chord[16],CAN[17],Tapestry,Pastry{?BR>路由模型又可l分为非l构化\由模型和l构化\由模型。FreeNetpȝ属于典型的非l构化\由模型。在查找到所需资源后,Z提高搜烦性能Q系l沿搜烦路径复制资源。这P׃资源的存储位|不固定Q其行ؓ不易观察Q不定因素较大。所以相对于l构化\由模型来_其资源分布的规律性不强,难以从全局上把握整个系l的资源分布状况。而结构化路由模型如Chord, CAN, Tapestry, Pastry均采用了DHT(Distributed Hash Table)作ؓ主要的存储算法。DHT的主要思想是将资源定位用的索引Q烦引结构通常是两元组Q文件名Q实际的存储位置Q)分散存储到整个P2P|络上,q样Q哈希表的存储和查询操作׃涉及到P2P|络中的多个节点?BR>以DHT思想q行路由模型的设计时Q首先需要确定通过Hash函数q行虚拟地址I间映射的规则。虚拟地址I间的设计有多种方式Q?Chord采用的虚拟地址I间为m-位的循环地址I间[16]QCANpȝ采用的是多维的地址I间[17]。Peer节点的IP地址和端口号l过哈希函数映射到地址I间Q再映空间进行划分,每个节点负责存储属于自己I间的值对(key,value)。其ơ需要确定\p的存储内容Q即d节点的规模,以适应于不同的|络需求。这里需要对路由表项的规模与|络搜烦跌{数进行综合考虑。在动态性较强的|络中,节点频繁加入和退出网l会使得规模较大的\p更新频率q高Q操作费时。但规模较小的\p在进行资源定位时Q又使得查找旉q长。再ơ是定在接收到一个资源的查询hӞ从\p中选择转发的邻居节点的规则。最后要定新节点的插入和删除操作后Q虚拟的地址I间如何q行分裂和合q?BR>
P2P|络中节点的d和退?/STRONG>
在服务器模型的P2P|络中,׃Peer节点的状态信息和理的资源信息直接记录在服务器中QPeer节点的登录和退Z需和服务器q行交互Q由服务器进行协调处理。如在Napsterpȝ中,Peer节点dpȝ后,向服务器发送当前的|络状态和所有的文g列表信息Q由服务器更新目录烦引。在Jabber{即时消息通讯pȝ中,Peer节点往往是与用户l定的。服务器接收到用Ld消息或退出消息后Q通知订阅
该用户在U状态的所有在U用戗?BR>非结构化路由模型FreeNet中,新节炚w先需要获知网l中的若q可q接节点的信息,通过执行搜烦操作向整个网l宣布自q存在。在l构化\由模型的P2P|络中,节点的登录和退出,导致虚拟地址I间的分裂和合ƈ。Peer节点d|络的操作,cM于一个资源的查找q程。Peer节点定位到所属的地址I间后,地址I间以一定规则进行分裂。负责管理该地址I间资源的原节点所属资源按分裂的规则,部分转移到新节点。同时两个节点的路由表项和其它相兌点的路由表项均要q行修改。而Peer节点退出网l的q程Q则是登录网l的逆过E,资源需要{UdqӞ相关节点的\p同样需要更新?BR>
防火墙和NAT的穿?/STRONG>
在实际的|络通信中,Peer节点往往是一个私有网l中的节点,位于防火墙之后。这PPeer与Peer之间直接通信需要解决的一个关键问题是I越防火墙和NAT。由于防火墙会对IPq行qoQ限制了墙内外的q接Q而NAT技术虽然可以得内部网l地址映射到外部网l地址Q但要求内部|络首先发v对外q接Q否则外部网l机器无法达到内部网l[12]。穿防火墙和NAT的策略有两个基本点:
Q?Q?需要用在一般情况下可以通过防火墙的协议Q如Zh/应答方式的HTTP协议?BR>Q?Q?Peer之间q行通信Ӟ必须由内部网l的机器首先发vq接hQ如果通信双方均处于防火墙之后Q则需要有防火墙外的{发节点进行消息{发?BR>在Napsterpȝ中当Peer节点h下蝲的资源位于一个防火墙之后的节点上Q请求节点向服务器端发送需要进行{换下载的h (Alternate download request)Q由服务器通知被请求节炚w先发h件下载的q接h。而Gnutella是在查询的详细信息q回l请求者的同时发送资源文Ӟ以此方式解决文g提供者位于防火墙之后的情c?BR>JXTAq_中,其super-peer节点中的路由节点是提供防火墙和NATI越功能的特D节炏V若通信一方在防火墙之后,那么单向I越的过E由试图与防火墙后的peer Aq接的peer节点B发vQ节点B首先与\由Peerq接Q同时peer A周期性地q接路由 PeerQ由于\?Peer对Peer A是可见的Q且不在防火墙后Q连接请求消息可作ؓhttp的应{内容返回至peer A。若通信的双斚w在防火墙之后Q那么需要两个\?peer。Peer1 通过路由节点1 转发消息Q\p?消息{发至路由节点 2QPeer2周期性地向\p?发送httphQ获得消息后断开q接。JXTAq_中\p点的使用不仅可以I越防火墙,q可以解决瓶颈问题,解决|络传输的不兼容性[12]?BR>3QP2Pq_的安全机?/STRONG>
与安全有紧密关系的是P2Pq_提供的匿名性?BR>Zq行自由的交互,避免引v不必要的法律U纷Q所以,P2Ppȝ允许匿名方式的信息交换[15]。匿名性可分ؓ以下三种cdQ?BR>􀁺 发布者匿名:发布者匿名地发布服务或资?BR>􀁺 h者匿名:h方匿名地h服务或资?BR>􀁺 服务提供者匿名:P2P|络中的资源拥有者匿名地提供资源或服?BR>提供匿名性的基本Ҏ有六U:
􀁺 l播Q采用IPl播Ҏq行资源发送可以达到请求者匿名的目的。但是这U方法需要底层网l如以太|的支持?BR>􀁺 地址ƺ骗Q用面向无q接协议如UDPQ可以更改地址Q达到地址ƺ骗的目的?BR>􀁺 w䆾ƺ骗Q网l中的文件可能拥有多个备份,所以应{者往往q不是文件的提供者,如FreeNet׃用了q种Ҏ提供匿名性?BR>􀁺 隐藏路径QPeer之间q不是进行直接的消息通信Q而是通过若干的中间节点,q样可以辑ֈ发送者匿名的要求?BR>􀁺 别名Q每一个Peer在网l中均有一个别名,Peer之间通过别名q行消息传递,q种Ҏ需要一
个Proxy Server保存所有的Peer实体与别名的对应关系?BR>􀁺 强制存放Q一个文件存攄位置是由文g本n定的,发布者无法选择Q从而实现发布者匿名,如基于Chord的系l?BR>上述Ҏ可以l合应用Q例如,FreeNet采用UP2P|络中的非结构化文档路由模型Q同时在发布文g和查找文件的q程中,沿搜索\径复制文件。通过隐藏路径和n份欺骗的Ҏ辑ֈ服务提供者匿名的目的Q通过隐藏路径的方法Ş成请求者匿名,同时׃文g的发布是一个根据文件名强制存放的过E,所以也完成了发布者匿名的功能?BR>P2Pq_所h的上q特性可能会带来下列安全隐患Q?/STRONG>
􀁺 拒绝服务dQP2P应用会消耗网l带宽,占用盘I间Q得系l性能降低甚至完全瘫痪。如果被大量恶意C用,׃出现正常服务h得不到服务的现象。处理这U攻ȝ隄在于如何恶意节点和真正负蝲q重的节点区分开。从Ҏ上说Q限制网l服务请求的数量是解xl服务攻ȝҎҎ。合理选择|络底层的拓扑结构,均衡pȝ中的负蝲和资源,加入量控制{略Q这三种措施l合使用可恶意节点Ҏ无法占用q多的资源,降低其对pȝ的媄响?BR>􀁺 恶意软g分发QP2P无中央服务器控制Q允许匿名分发资源,对Y件的分发~Z控制Q如果P2Ppȝ被恶意用,会给pȝ用户带来安全隐患。通常的名誉评估系l可以用来跟t和处理Peer的状态,q根据得到的信息选择资源的提供者。但是这U方法比较消耗网l资源?BR>􀁺 信息泄露和篡改:例如Q有些P2Ppȝ在\p中保存了一批网l地址Q这些信息可能会被泄露和改Q有些P2Ppȝ例如Napster、Gnutella允许直接讉K用户盘Q恶意用户可利用q个Ҏ察看和改盘信息。这些都需要有相应的策略加以解冻I例如Q设计安全\q略,可解册\p信息泄露问题?BR>4QP2Pq_的性能改善技?/STRONG>
P2Pq_的性能指标包括h响应旉、公qx等?BR>h响应旉与P2Pq_的拓扑结构有很大关系。对于有中央服务器的P2Ppȝ如Napsterpȝ?A href="mailto:Seti@Home">Seti@HomepȝQPeer之间由服务器q行协调Q服务器变成了系l的瓉Q媄响系l性能。ؓ了改善性能Q可采用层次性的h式结构,由每一个协调者负责一个Peerl,形成一个层ơ的理l构。在非集中式的P2P|络中,主要通过消息转发来获取和查询数据Q消息{发的ơ数影响带宽的消耗,因此要尽量减消息的转发ơ数[15]。采用复制的Ҏ可提供多个资源备份,提高定w性,也减了h节点到服务节点的距离Q减了h响应旉。但复制会带来数据一致性的问题Q另一U减消息{发次数的Ҏ是徏立智能\由和|络l织Q寻扄标文件到h节点的最\径。该cL法包括:在基于DHT的结构化路由模型中设计合乎应用背景要求的路由表存储结构,以减网l中的消息蟩转数Q采用一些反馈机Ӟ地选择曄命中q的Peer节点q行消息转发Q监网l中的运行状态,l过一些负载较重的Peer节点。这些方法都可以Ҏ不同的用背景获得较好的性能提升?BR>除了通过复制改善pȝ的响应时间之外,~存的替换策略对响应旉改善也有很大影响。SmallWorld模型ȝ了网l通信中的一个有的特征Q在规则|络中随机地d量通\Q能很好减短通信距离Q减请求的响应旉Q它被用来改qFreeNet中的~存替换{略Q也获得了较好的性能改善[18]?BR>P2P体系l构使得P2Ppȝ中会出现“无政府M”行为,例如Q过量下载或有意让下载的文g中包含广告等Q这些行为导致P2P信息交换的不公^性。在P2P|络中,为避免每一个Peer享受服务而不提供服务的现象,需要实行一定的理机制。在P2P|络中引入经学中买卖交易的原理Q可以促q资源的׃n和交互。Stanford大学的P2P研究组提出了RTR(right-to-respond)协议[19]Q用以解军_z流模型中,中间节点不愿消耗资源{发请求的问题。RTR是指Ҏ询请求的响应权,Peer节点可以购买和出售系l中每个查询h的RTR。当某一Peer节点转发hӞ其它Peer节点可以向其购买RTR。购CRTR的Peer节点可以执行两个操作Q一是响应该hQ如果被h的发选中Q就可以为其提供服务q收取费用;二是再将RTR售出l其它节炏V通过q种ҎQPeer节点在经利益的׃下会不断转发hQ扩大搜索范围。同时可
以促q拥有类D源或服务的Peer节点频繁联系QŞ成Peer GroupQ提高搜索效率?BR>另一个利用经学原理的实例是数据交易(data trading)Ҏ的引入[20]。P2Ppȝl常采用数据备䆾的机制来增强资源可用性,提高pȝ性能。而用户往往不愿无偿提供存储资源备䆾其它数据。这时利用数据交易的Ҏ提供怺备䆾Q即获得Ҏ存储I间或数据资源是以向Ҏ提供存储I间为前提的。系l中Peer节点之间建立了良好的怺备䆾关系Q将会减搜索和讉K的开销。以上这些实例均表明Q采用经学中以交易为基的资源管理机Ӟ可以提高P2Ppȝ的资源用率?BR>5Q小l?BR>P2P计算Q作为分布式计算的一个分支,目前不论是从技术研I还是品开发来看,都已成ؓ了一个重要的领域。P2P的算法、^台和应用都将有进一步的发展I间。P2P的思想也被q泛地应用在很多其他的研I域。本文着重介l了P2P的发展背景、P2Ppȝ的特点,在P2Pq_层识别出若干P2Pq_的关键技术,包括Peer的通信技术、P2Pq_的安全机制和P2Pq_的性能改善技术,q些技术的ȝ和分析能对设计和实现P2Pq_和应用vC定的借鉴和指g用?BR>参考文献:
[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, “Jabber Technology Overview?BR>[8] Preeti Mehra,Groove,16th November,2001,ECE-579
[9] Gregory Alan Bolcer,Michael Gorlick,”Peer-to-Peer Architectures and the Magi Open-Source Infrastructure? Endeavors Technology ,2000
[10] Mayank Bawa,Roberto J.Bayardo Jr.,Sridhar Rajagopalan,Eugene J.Shekita, “Make it Fresh,Make it QuickQSearching 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, “Interoperablility of Peer-To-Peer File Sharing Protocols?ACM SIGecom Exchanges,Vol.2,No.2,August 2002
[14] Dana Moore,John Hebeler, 苏忠,战晓L? 《对{网》,清华大学出版C?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. ”Chord: A scalable Peer-to-peer Lookup Protocol for Internet Applications?BR>[17] S.Ratnasamy,P,Francis, M. Handley, R.Karp,and S.Shenker,”A 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




]]>
þþƷһ| ɫۺϾþþþۺһ| ƷþƷ| ŷպƷþþþ| ŷһþ| ƷŮþþþ| þAV߳AVAV| þþþþþþþþ| Ʒþ»| þ2019Ļ| þ99Ʒþþþþ| ɫþþþþۺ| һõþۺϺݺAV| þþþŮۺ| þþƷһպ| ŷһþþƷ| Ʒþþ| ޹˾þۺһ77 | ˾þô߽AVɫɫ| ĻþþƷ| þҹɫtvվ| þþƷһ| þþƷרѶ| þþþһ| VۺVŷþ| þþù| һƷþ| þùƷһƷ| bƷþþþþþ| þþþþAv뾫Ʒר| þþþþþĻ| ѹۿ˾þѹۿ| þþþùƷ| ľþþþ| þùƵ| þþþùһëƬ | þþƷƷʢۿ| þþƷһ| 뾫ƷþɪӰ | vaþþþ| Ʒþþþ㽶|