前言:
       最近我用java做了一个C/S的类似QQ之类的IM系统(即时通讯系统),遇到了不能跨局域网通讯的问题,经过在网上,和书上查阅了一些资料,了解了一些情况,现在就总结一下我的解决方案吧(本人也是在不断错误中学习,如果有什么不对的地方,请大家多多指教)。

问题描述:
         一般情况下,只能在同一个子网即同一个虚拟局网里通讯,或者子网访问外网,外网访问不了内网。因为虚拟局域网相对于外网都是透明的,所以外网是不能直接访问子网,举个例子:校园网里的学生信息管理系统(MIS),需要是校园网里面的IP地址才能访问,校园网以外的IP是不能访问,这样的做法的好处不用我多说吧。。
而即时通讯需要相互交流信息,所以需要相互都能访问到,问题是:如何跨子网通讯?

问题分析:

2.ClientA在子网,ClientB在外网

者IP的数据包;如果ClientA发送数据包给ClientB,ClientB接受数据包的IP来源并不是ClientA,而已中转站(路由器)的IP。

解决方案:

单,这里就不多说了。

吧。
1)NAT
这里默认是用NAT,端口号没有转换,如果是NAPT,实现的原理也是差不多的,只是细节不同。

关于第二种情况,原理如下:
NATA:路由器对外的wlanIP:168.38.2.2;路由器对内的lanIP:192.168.1.10

1.首先,A(内网IP)先向B(外网IP)发送UDP包,NAT会产生session,存放192.168.1.10-- >168.38.2.225的映射关系

2.接下来,只要B把信息发给NATA,NATA会自动把信息转发给A

关于第三种情况,原理如下:

务器,记录了所有客户端的真实IP(如果是内网IP就记录内网IP),我是用TCP来实现客户端和服务器的通讯,这里要用到了TCP穿透,这里先不讲,最后总结说一下。

或者如图:(ps:图片是网上下载的)

务器--客户端之间可以相互通讯。客户端会向客户端发送自身的真实IP(如A:192.168.1.110),服务器接受到这信息之后,同时也会知道信息源的IP(如:NATA的外网IP:210.38.196.110),因为接受方总能知道信息包的最直接来源。此时,服务器就记录了ClientA的IP、NATA外网IP和ClientB的IP、NATB外网IP。

要想A<------>B之间无需经过第三方的通讯,必须在NATA中为B打个洞,在NATB中为A打个洞。

NATB发送到NATA的,都会转发到A子网中,此过程叫NATA为B打洞。同理NATB也可以为A打洞。

具体过程:server会发送信息告知A,B的NATB的外网IP;告知B,A的NATA的外网IP。这样子,A可以先发送一个数据包到NATB(外网IP:210.38.196.30),NATA会生成一个session记录A————>NATB的映射关系。数据包到达NATB时,NATB因为还未为A打洞,会丢包。然后B向NATA(外网IP:210.38.196.110)发送数据包,NATB会生成一个session记录B————>NATA的映射关系。此时,NATA接受到来自NATB的数据包,会查找下session映射,发现有A————>NATB的映射关系,会把包转发给A。只要A再发信息给NATB时,NATB也会根据session来转发给B。双方打洞完成。

利用第三方服务器来帮P2P对等点之间的UDP打洞,是比较全面的方案,此方案适用于P2P对等点在任何网络点(说得可能比较绝对吧,大家有什么不同意见记得提出来哦,纯属个人的偏见)

总结:

立方打洞)
样)
一样)

由于我开发的只是简单的即时通讯系统,可能很多复杂的情况我没有考虑进去,例如存在多个NAT的嵌套,NAPTIP地址端口号转换没有考虑进去,路由器中的session的生命周期的不确定(有时候是几分钟,有时候几个小时不定),所以需要定期地进行穿透等等等等。

关于使用UDP(TCP)跨局域网,NAT穿透的心得的更多相关文章

  1. 使用TCP协议的NAT穿透技术

    一直以来,说起NAT穿透,很多人都会被告知使用UDP打孔这个技术,基本上没有人会告诉你如何使用TCP协议去穿透(甚至有的人会直接告诉你TCP协议是无法实现穿透的).但是,众所周知的是,UDP是一个无连 ...

  2. 使用TCP协议的NAT穿透技术(转)

    其实很早我就已经实现了使用TCP协议穿透NAT了,但是苦于一直没有时间,所以没有写出来,现在终于放假有一点空闲,于是写出来共享之. 一直以来,说起NAT穿透,很多人都会被告知使用UDP打孔这个技术,基 ...

  3. 使用TCP协议的NAT穿透技术 (转载)

    其实很早我就已经实现了使用TCP协议穿透NAT了,但是苦于一直没有时间,所以没有写出来,现在终于放假有一点空闲,于是写出来共享之. 一直以来,说起NAT穿透,很多人都会被告知使用UDP打孔这个技术,基 ...

  4. 网络协议之NAT穿透

    NAT IPv4地址只有32位,最多只能提供大致42.9亿个唯一IP地址,当设备越来越多时,IP地址变得越来越稀缺,不能为每个设备都分配一个IP地址.于是,作为NAT规范就出现了.NAT(Networ ...

  5. NAT穿透(UDP打洞)

    1.NAT(Network Address Translator)介绍 NAT有两大类,基本NAT和NAPT. 1.1.基本NAT 静态NAT:一个公网IP对应一个内部IP,一对一转换 动态NAT:N ...

  6. [转]UDP/TCP穿越NAT的P2P通信方法研究(UDP/TCP打洞 Hole Punching)

     [转]UDP/TCP穿越NAT的P2P通信方法研究(UDP/TCP打洞 Hole Punching) http://www.360doc.com/content/12/0428/17/6187784 ...

  7. [p2p]UDP用打洞技术穿透NAT的原理与实现

    首先先介绍一些基本概念:            NAT(Network Address             Translators),网络地址转换:网络地址转换是在IP地址日益缺乏的情况下产生的, ...

  8. udp之nat穿透的困惑

    nat穿透实现:[A]内网地址[内A]192.168.1.176:25789通过stun服务器查询映射到的外网地址为外网地址[外A]212.10.55.124:26559UDPsocketA绑定到[内 ...

  9. node.js UDP NAT 穿透实现

    源码:https://github.com/zhongchengyi/node-udp-trunnel-demo 1.原理 A登录Server, NAT A 分配端口11000,Server得到A的地 ...

随机推荐

  1. [Cocos2d-x For WP8]Effects 特效

    Effects是特殊类型的action.与修改常规的属性如透明度,位置,旋转或缩放等不同,它们修改的是一种新类型的属性:grid属性.grid属性像是一个模型,是一个线条交叉的网格,具体表现是一系列的 ...

  2. 【wikioi】1002 搭桥(dfs+最小生成树)

    http://wikioi.com/problem/1002/ 今天开始又开始刷水了哈T_T.照着hzwer神犇的刷题记录刷!!! 题解: 一开始我也不会,但是我想到了直接爆搜T_T. 好吧,题解. ...

  3. Centos 中安装Java

    http://www.oracle.com/technetwork/java/javasebusiness/downloads/java-archive-downloads-javase6-41940 ...

  4. [ZT] 几大酒店集团美国Co-Brand信用卡比较(三)如何选择最适合你的酒店联名信用卡

    原文地址: http://www.3798.com/archives/596.html 接着对我们这种不是某个酒店忠诚客户的用户选择卡片进行分析.首先要强调的是,我们比较的是信用卡项目本身,而不是酒店 ...

  5. 一、saltstack简介和安装

    系统环境:CentOS6.5 准备yum源: epel源(包含了saltstack的包).阿里源(CentOS-Base.repo) Host解析文件: # cat /etc/hosts 192.16 ...

  6. spark-shell --conf

    spark-shell --conf -h Usage: ./bin/spark-shell [options] Options: --master MASTER_URL spark://host:p ...

  7. CreateFeatureClass 异常,尝试读取或写入受保护的内存 Access

    在创建要素时出现如下异常,百思不得其解. 后经过多次试验,发现文件名改为其他的就可以了.自出的文件名为"第3条",后将文件名改为"A3"等,则可正常创建. 后再 ...

  8. dpi,ppi,dip,dp,px和sp

    一 基本概念 1. dpi (dots per inch)每英寸多少点:ppi( Pixel per inch),每英寸像素数.针对显示器的设计时,dpi=ppi. 2. dip (device in ...

  9. 三层交换单臂路由vlan间通信综合实验之降龙要点--Lee

    单臂路由三层交换机提供vlan间的通信之菜鸟之降龙详解要点: 图示 PC:左到右依次设置IP172.16.10.1,    20.1,  30.1,   40,1  ,50,1  /24 网关10.2 ...

  10. SIP中OPTIONS方法的用法及示例

    SIP中OPTIONS方法的用法及示例 用OPTIONS方法实现Keep Alive SIP keep-alive方法