如何 利用 NAT 让两个局域网中的主机通讯?(100分)
两台主机分别在不同的 局域网 中,
都没有公网的固定IP ,如何像 QQ 或 MSN 那样建立起通讯呢?
我想一定是通过 NAT , 但是 本人对 NAT 不懂,
那位高手 帮忙指点一下,或者 没有时间,给点 资料,好 让我自己去研究。
问题点数:100、回复次数:9Top
1 楼mndsoft(枕善居(http://www.mndsoft.com/)回复于 2005-03-10 19:42:09 得分 0
顶顶Top
2 楼alee201(alee)回复于 2005-03-10 19:56:58 得分 0
我找到了理论知识:
位于不同NAT后面(Peers behind different NATs)
假设客户端A和B都有自己的私有IP地址,也都位于不同的NAT后面。P2P应用程序在A、B和服务器S上运行,用的都是UDP端口1234。A和B各自和服务器S建立UDP通讯连接,使NAT A为A的连接分配一个自己的公共端口62000,而NAT B为B的连接分配的是31000端口。
Server S
18.181.0.31:1234
|
|
+----------------------+----------------------+
| |
NAT A NAT B
155.99.25.11:62000 138.76.29.7:31000
| |
| |
Client A Client B
10.0.0.1:1234 10.1.1.3:1234
现在推想一下,客户端A想要直接和B建立一个UDP通讯会话。假设A简单的发一个UDP信息包到B的公共地址138.76.29.7:31000,然而NAT B将会丢弃这些进入的数据信息(除非它是一个FULL cone NAT),原因是NAT B和S已经建立的外部会话,而A发送的信息中的源地址和端口号是和S不匹配的(可以参照一下上面的内容,匹配才能接受)。同样,假如B发送一个条UDP数据包给A的公网地址,NAT A也会丢弃。
但是,假设A发出一个UDP数据信息给B的公网IP地址,同时也通过服务器S传递一个请求给B,要求B也发一个UDP信息给A的公网IP地址。A直接向B的公共IP地址(138.76.29.7:31000)发送的数据包会让NAT A在A的私有地址和B的公网地址之间建立了一个新的连接会话。同时,B到A的公网地址(155.99.25.11:62000)的信息会导致NAT B在B的私有地址和A的公共地址之间建立一个新的连接会话。一旦这种新的UDP连接在两者之间建立起来,客户端A和B就不需要服务器S的"介绍"就能彼此直接通讯了。
UDP hole punching技术有几个很有用的特点。一旦在两个位于middlebox后面的客户端建立了一个直接的P2P连接,在连接中的任何一方都可以扮演一个"介绍人"的角色,依次继续和另一个客户端建立连接,减少了最初的服务器S的负担。如果说有[STUN]的话,假如两个中的任意一个或两个都碰巧不在middlebox后面,上述应用程序将同样可以建立P2P通讯通道,应用程序不需要尝试明确middlebox的类型。Hole punching技术甚至可以自动的运用在多级NAT下面,多重NAT就是那些客户端需要经历多级地址转换才能进入公网
-----------------------------------
翻译至:
Internet Draft B. Ford
Document: draft-ford-midcom-p2p-03.txt M.I.T.
Expires: December 12, 2004 P. Srisuresh
Caymas Systems
D. Kegel
kegel.com
http://community.csdn.net/Expert/topic/3421/3421050.xml?temp=.7222406
但是具体应该怎么运用呢?Top
3 楼zyg0(影子(被评为本年度最可爱流氓)回复于 2005-03-11 08:42:04 得分 0
有固定ip的服务器是全部的关键,如果没有就不能实现netTop
4 楼hardeggwang(硬蛋)回复于 2005-03-11 09:34:12 得分 50
文章大意,我觉得是这样:
这就好比两家人各有一个男孩和女孩(Client A & Client B),俩人想交朋友(建立UDP连接)
要是男方或者女方直接去家(NAT)里找去,家长(NAT)肯定连家门都不让进(不允许简历连接),因为他们还不认识这两个孩子呢
就要通过一个介绍人(Server)给介绍一下,对彼此的家长说,这两个孩子不错,可以处朋友
家长经这么一说,就同意了,两个人就可以处朋友了(建立了UDP连接)
Top
5 楼zyg0(影子(被评为本年度最可爱流氓)回复于 2005-03-11 09:46:08 得分 50
还要补充一下 2个人处朋友后,具体怎么发展,要看2个人的了,但是要注意,有时间限制的,要是一定时间2个人不联系的话,就联系不上了Top
6 楼starsoulxp(星魂)回复于 2005-03-11 09:50:22 得分 0
http://www.cn700.com/Down_144/20041023141245.htmlTop
7 楼alee201(alee)回复于 2005-03-11 10:15:25 得分 0
udp 打洞技术 的原理我已经了解了, 但最后 还有一个疑问:
一个NAT 创建的 udp SESSION 的有效时间 怎么确定? 及 zyg0(影子(如影随行) 补充的:“一定时间2个人不联系的话,就联系不上了”。
问题 是 通常情况 这个 udp SESSION 的有效时间 多长。Top
8 楼alee201(alee)回复于 2005-03-11 10:16:53 得分 0
谢谢 以上各位的解答。Top
9 楼hardeggwang(硬蛋)回复于 2005-03-11 10:27:40 得分 0
NAT所起的作用是固定的,它不会因不同的服务而不同
想QQ和MSN那种服务,具体的机制是由客户端软件与服务器共同来完成的
也就是说与NAT无关
简单地说,NAT所起的作用就是对子网机器传来的数据包加工之后传出去,将收到的数据包分析后发给子网内对应的机器。
可以这么想:就像一个单位的采购员,每个部门把想买的东西告诉他,买了之后,他再把东西分给具体的部门。但一定不能买错,更不能分错。Top




