(转) 穿越NAT总结
对穿越NAT做些总结:
先做个约定:
内网A中有:A1(192.168.0.8)、A2(192.168.0.9)两用户,
网关X1(一个NAT设备)有公网IP 1.2.3.4
内网B中有:B1(192.168.1.8)、B2(192.168.1.9)两用户,
网关Y1(一个NAT设备)有公网IP 1.2.3.5
公网服务器:C (6.7.8.9) D (6.7.8.10)
NAT两大类:
l NAT(Network Address Translators):称为基本的NAT
在客户机时 192.168.0.8:4000——6.7.8.9:8000 |
在网关时 1.2.3.4:4000——6.7.8.9:8000 |
服务器C 6.7.8.9:8000 |
其核心是替换IP地址而不是端口,这会导致192.168.0.8使用4000端口后,192.168.0.9如何处理?
具体参考RFC 1631
基本上这种类型的NAT设备已经很少了。或许根本我们就没机会见到。
l NAPT(Network Address/Port Translators)
其实这种才是我们常说的 NAT
NAPT的特点是在网关时,会使用网关的 IP,但端口会选择一个和临时会话对应的临时端口。
如下图:
在客户机时 192.168.0.8:4000——6.7.8.9:8000 |
在网关时 1.2.3.4:62000——6.7.8.9:8000 |
服务器C 6.7.8.9:8000 |
网关上建立保持了一个1.2.3.4:62000的会话,用于192.168.0.8:4000与6.7.8.9:8000之间的通讯。
对于NAPT,又分了两个大的类型:
差别在于,当两个内网用户同时与6.7.8.9:8000的处理方式不同:
1、Symmetric NAT型 (对称型)
在客户机时 192.168.0.8:4000——6.7.8.9:8000 192.168.0.8:4000——6.7.8.10:8000 |
在网关时,两个不同session但端口号不同 1.2.3.4:62000——6.7.8.9:8000 1.2.3.4:62001——6.7.8.10:8000 |
服务器C 6.7.8.9:8000 |
服务器 D 6.7.8.10:8000 |
这种形式会让很多p2p软件失灵。
2、Cone NAT型(圆锥型)
在客户机时 192.168.0.8:4000——6.7.8.9:8000 192.168.0.8:4000——6.7.8.10:8000 |
在网关时,两个不同session但端口号相同 1.2.3.4:62000——6.7.8.9:8000 1.2.3.4:62000——6.7.8.10:8000 |
服务器C 6.7.8.9:8000 |
服务器D 6.7.8.10:8000 |
目前绝大多数属于这种。Cone NAT又分了3种类型:
a) Full Cone NAT(完全圆锥型):从同一私网地址端口192.168.0.8:4000发至公网的所有请求都映射成同一个公网地址端口1.2.3.4:62000 ,192.168.0.8可以收到任意外部主机发到1.2.3.4:62000的数据报。
b) Address Restricted Cone NAT (地址限制圆锥型):从同一私网地址端口192.168.0.8:4000发至公网的所有请求都映射成同一个公网地址端口1.2.3.4:62000,只有当内部主机192.168.0.8先给服务器C 6.7.8.9发送一个数据报后,192.168.0.8才能收到6.7.8.9发送到1.2.3.4:62000的数据报。
c) Port Restricted Cone NAT(端口限制圆锥型):从同一私网地址端口192.168.0.8:4000发至公网的所有请求都映射成同一个公网地址端口1.2.3.4:62000,只有当内部主机192.168.0.8先向外部主机地址端口6.7.8.9:8000发送一个数据报后,192.168.0.8才能收到6.7.8.9:8000发送到1.2.3.4:62000的数据报。
请注意上述描叙中的区别!
穿越NAT的实现:
A1在客户机时 192.168.0.8:4000——6.7.8.9:8000 |
X1在网关时 1.2.3.4:62000——6.7.8.9:8000 |
服务器C 6.7.8.9:8000 |
B1在客户机时 192.168.1.8:4000——6.7.8.9:8000 |
Y1在网关时 1.2.3.5:31000——6.7.8.9:8000 |
两内网用户要实现通过各自网关的直接呼叫,需要以下过程:
1、 客户机A1、B1顺利通过格子网关访问服务器C ,均没有问题(类似于登录)
2、 服务器C保存了 A1、B1各自在其网关的信息(1.2.3.4:62000、1.2.3.5:31000)没有问题。并可将该信息告知A1、B2。
3、 此时A1发送给B1网关的1.2.3.5:31000是否会被B1收到?答案是基本上不行(除非Y1设置为完全圆锥型,但这种设置非常少),因为Y1上检测到其存活的会话中没有一个的目的IP或端口于1.2.3.4:62000有关而将数据包全部丢弃!
4、 此时要实现A1、B1通过X1、Y1来互访,需要服务器C告诉它们各自在自己的网关上建立“UDP隧道”,即命令A1发送一个 192.168.0.8:4000——1.2.3.5:31000的数据报,B1发送一个192.168.1.8:4000——1.2.3.4:62000的数据报,UDP形式,这样X1、Y1上均存在了IP端口相同的两个不同会话(很显然,这要求网关为Cone NAT型,否则,对称型Symmetric NAT设置网关将导致对不同会话开启了不同端口,而该端口无法为服务器和对方所知,也就没有意义)。
5、 此时A1发给Y1,或者B1发给X1的数据报将不会被丢弃且正确的被对方收到
综合P2P可实现的条件需要:
1、 中间服务器保存信息、并能发出建立UDP隧道的命令
2、 网关均要求为Cone NAT类型。Symmetric NAT不适合。
3、 完全圆锥型网关可以无需建立udp隧道,但这种情况非常少,要求双方均为这种类型网关的更少。
4、 假如X1网关为Symmetric NAT, Y1为Address Restricted Cone NAT 或Full Cone NAT型网关,各自建立隧道后,A1可通过X1发送数据报给Y1到B1(因为Y1最多只进行IP级别的甄别),但B2发送给X1的将会被丢弃(因为发送来的数据报中端口与X1上存在会话的端口不一致,虽然IP地址一致),所以同样没有什么意义。
5、 假如双方均为Symmetric NAT的情形,新开了端口,对方可以在不知道的情况下尝试猜解,也可以达到目的,但这种情形成功率很低,且带来额外的系统开支,不是个好的解决办法。
6、 不同网关型设置的差异在于,对内会采用替换IP的方式、使用不同端口不同会话的方式,使用相同端口不同会话的方式;对外会采用什么都不限制、限制IP地址、限制IP地址及端口。
7、 这里还没有考虑同一内网不同用户同时访问同一服务器的情形,如果此时网关采用AddressRestricted Cone NAT 或Full Cone NAT型,有可能导致不同用户客户端可收到别人的数据包,这显然是不合适的。
一些现在常用的技术:
ALG(应用层网关):它可以是一个设备或插件,用于支持SIP协议,主要类似与在网关上专门开辟一个通道,用于建立内网与外网的连接,也就是说,这是一种定制的网关。更多只适用于使用他们的应用群体内部之间。
UpnP :它是让网关设备在进行工作时寻找一个全球共享的可路由IP来作为通道,这样避免端口造成的影响。要求设备支持且开启upnp功能,但大部分时候,这些功能处于安全考虑,是被关闭的。即时开启,实际应用效果还没经过测试。
STUN(Simple Traversalof UDP Through Network):这种方式即是类似于我们上面举例中服务器C的处理方式。也是目前普遍采用的方式。但具体实现要比我们描述的复杂许多,光是做网关Nat类型判断就由许多工作,RFC3489中详细描述了。
TURN(Traveral Using Relay NAT):该方式是将所有的数据交换都经由服务器来完成,这样NAT将没有障碍,但服务器的负载、丢包、延迟性就是很大的问题。目前很多游戏均采用该方式避开NAT的问题。这种方式不叫p2p。
ICE(Interactive Connectivity Establishment):是对上述各种技术的综合,但明显带来了复杂性。
总之,NAT的存在代表着一种时尚,那就是——不求简单,但求复杂,坚决把你搞晕,反正没我责任。
转载于:https://www.cnblogs.com/LinFx/archive/2012/09/17/2688885.html
(转) 穿越NAT总结相关推荐
- P2P网络“自由”穿越NAT的“秘密”
P2P网络"自由"穿越NAT的"秘密"<?xml:namespace prefix = o ns = "urn:schemas-microsof ...
- TCP实现P2P通信、TCP穿越NAT的方法、TCP打洞
原文地址:http://www.vckbase.com/document/viewdoc/?id=1773 这个标题用了两个顿号三个名称,其实说得是同一个东西,只是网上有不同的说法罢了,另外好像还有人 ...
- UDP穿越NAT原理
http://blog.csdn.net/ldd909/article/details/5979967 论坛上经常有对P2P原理的讨论,但是讨论归讨论,很少有实质的东西产生(源代码).在这里我就用自己 ...
- P2P网络穿越 NAT穿越
http://blog.csdn.net/mazidao2008/article/details/4933730 ------------------------------------------- ...
- IPSEC是如何穿越NAT的
我们知道IPSEC在工作的时候,如果遇到了NAT,就会带来麻烦,什么麻烦呢?(IPSEC的基础需要清晰) 主要有2种麻烦 1 如果IPSEC和NAT在同一台设备上的时候,是先进行路由查找,然后进行进行 ...
- 穿越NAT的p2p通信方法研究
穿越NAT的p2p通信方法研究 日期:2008-12-08 来源:P2P网 作者:未知 字体:大 中 小 <script src="http://www.ppcn.net/ads/b ...
- 穿越NAT的SDWAN技术实现(下)
本文章内容过长,上中篇请移步主页进行观看,本篇是文章的最终篇,感谢各位看官的支持 书接上文,我们继续来说说NAT在SDWAN中的技术实现. 穿越NAT建立SDWAN隧道 在SDWAN网络中,通常将CP ...
- 穿越NAT的SDWAN技术实现(上)
在SDWAN网络中,为了节省IP地址资源,分支站点的用户经常会使用私网IP地址.通过NAT将私网IP地址转换为公网IP地址后,该站点的用户才能访问其他站点.CPE发出的报文在经过NAT设备后,IP地址 ...
- HTTPS为什么可以穿越NAT端口映射设备?
以下斜体部分是来自读者的问题 HTTPS为什么可以穿越NAT端口映射设备? 我的理解是:当一个TCP连接到达端口映射设备(比如防火墙)时,该设备从实现原理上可以看作是作为后端服务器和前端客户端之间的中 ...
- PPTP协议抓包分析及PPTP穿越NAT
目录 1.PPTP协议概述 2.链接控制 3.报文流程 3.1.PPTP建立拓扑 3.2.详细报文解释 4.PPTP穿越NAT原理报文分析 4.1.控制连接 4.2.数据连接 1.PPTP协议概述 P ...
最新文章
- java字符串与基本数据_java --字符串与基本数据类型之间的转换
- 2021年春季学期-信号与系统-第七次作业参考答案
- Android 自动扫描歌曲,Android扫描本地音乐文件开发案例分享
- 【hadoop】hadoop 安装 kerberos
- pdf 模版 汉字和数字_PDF怎么添加数字签名?这款编辑器软件很多人都说好用
- 如何进入mysql命令界面
- Context-Aware Patch Generation for Better Automated Program Repair -上下文感知补丁生成更好的自动化程序修复
- 论高碳艺术与低碳艺术
- electron制作聊天界面(仿制qq)
- 虎牙直播怎么换html5,虎牙直播助手怎么改名字 昵称更换方法
- 输入某年某月某日,判断这一天是这一年的第几天?
- 终极解锁邮件签名证书(S/MIME证书)
- SSDAlloc:用 SSD 扩展内存
- 函数凹凸性证明中点函数值和函数值中点的关系
- 六大设计原则之开闭原则
- 网络变压器作用:广泛应用在有线局域网中的网络变压器的作用是什么?
- 织梦新建php支持标签,织梦教程:新建php页面且模板支持读取标签
- SCT2450,SCT2450Q,降压DCDC
- 设计一个算法求象棋这些棋子各代表哪些数字
- post_thumbnail_html,WordPress自带thumbnail缩略图功能使用介绍