CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
花落谁家,你作主! 盛大widget设计大赛英雄榜
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VB >  网络编程

如何 利用 NAT 让两个局域网中的主机通讯?(100分)

楼主alee201(alee)2005-03-10 19:32:52 在 VB / 网络编程 提问

两台主机分别在不同的   局域网   中,  
  都没有公网的固定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

相关问题

  • Socket通讯时如何从Internet主机向某局域网内的一台主机发送信息?
  • 局域网通讯问题
  • 与OICQ相关的2台处于不同局域网上的主机通讯问题!
  • 局域网通讯检测是否能够连接远程主机的问题,给个思路就可以了...
  • 局域网主机的问题
  • ???获得局域网主机列表(NT/98)???
  • 两个局域网的通讯问题
  • 有谁装过 XP 做局域网主机的?进来领分!
  • 怎样在局域网中通过IP知道主机名
  • 局域网内的windows2000server能做虚拟主机吗?

关键词

  • p2p
  • 通讯
  • 连接
  • 服务器
  • 客户
  • 端口
  • 应用程序
  • 信息
  • client
  • 技术

得分解答快速导航

  • 帖主:alee201
  • hardeggwang
  • zyg0

相关链接

  • Visual Basic类图书
  • Visual Basic类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo