P2P之UDP穿透NAT的原理与实现之我见

P2P之UDP穿透NAT的原理与实现之我见:

下面先强调3个概念, 非常重要,红字为重点

1.主机1想向主机2发送数据:从主机1开始——到NAT1——到外网——到NAT2,到了NAT2这里,主机1向主机2发送的数据就会丢弃了,为什么呢?NAT2在此时相当于一个防火墙,为了安全,对于主机1发送过来的数据会做丢弃处理。
这时候主机1想要和主机2通讯有两种方法:
1. 在路由上做端口映射,把通讯需要的端口映射到主机2(这个对于在内网玩过远控的人都知道吧)
2. 在NAT2处进行“打洞”,意思把通讯需要的端口在NAT上标记出来,让NAT知道访问这个端口就是要访问主机2(这个和端口映射的意思差不多)

2.那么我们如果想从外部发送一个数据报给居于内网的计算机有什么办法呢?首先,我们必须在此内网的NAT上打上一个“洞”(也就是在NAT上建立一个Session),这个洞不能由外部来打,只能由此内网内的被访问主机来打,而且这个洞是有方向的, 比如从内部某台主机(192.168.0.10)向外部的某个IP(219.237.60.1)发送一个UDP包,那么就在这个内网的NAT 设备上打了一个方向为219.237.60.1的“洞”(这就是称为UDPHolePunching的技术),以后219.237.60.1就可以通过这 个洞与内网的192.168.0.10联系了。(但是其他的IP不能利用这个洞)。

3.概念:私有地址/端口和公有地址/端口
我们知道,现在大部分网络采用的都是NAPT(Network Address/Port Translator)了,这个东东的作用是一个对外的对话在经过NAT之后IP地址和端口号都会被改写,在这里,我们把一次会话中客户自己认为在使用的IP地址和端口号称为私有地址/端口,而把经过NAPT之后被改写的IP地址和端口号称为公有地址/端口. 可以简单理解成:路由器192.168.0.1-255:端口就是私有, 连接公网IP的就是公有。

下面讲解下流程:

客户端首先得到自己的私有地址/终端,然后向server端发送登陆请求,server端在得到这个请求之后就可以知道这个client端的公有地址/终端,server会为每一个登陆的client保存它们的私有地址/端口和公有地址/端口.

   OK,下面开始关键的打洞流程. 假设client A要向client B 对话, 但是A不知道B的地址,即使知道,根据NAT的原理,这个对话在第一次会被拒绝, 因为client B的NAT认为这是一个从没有过的外部发来的请求. 这个时候, A如果发现自己没有保存B的地址, 或者说发送给B的会话请求失败了,它会要求server端通知B向A打一个洞,这个B->A的会话意义在于它使NAT B认为A的地址/端口是可以通过(即已被认可)的地址/端口,这样A再向B发送对话的时候就不会再被NAT B拒绝了.简而言之,UDP打洞就是一个通过server保存下来的地址使得彼此之间能够直接通信的过程,server只管帮助建立连接,在建立间接之后就不再介入了。

  为什么要C/S架构了,前面说过 洞不能由外部来打,只能由此内网内的被访问主机来打,还有方向性,所以用server做桥梁是比较好的。

总结一下这个过程:如果Client A想向Client B发送信息,那么Client A发送命令给Server S,请求ServerS 命令Client B 向Client A方向打洞。呵呵,是不是很绕口,不过没关系,理解原理了就清楚了,然后Client A就可以通过Client B的外网地址与Client B通信了。

                

                                个人学习总结     请不要转载

              

                                                                                              

P2P之UDP穿透NAT的原理与实现之我见

时间: 2024-08-29 06:07:28

P2P之UDP穿透NAT的原理与实现之我见的相关文章

【转】P2P之UDP穿透NAT的原理与实现(附源代码)

作者:shootingstars (有容乃大,无欲则刚)  日期:2004-5-25 出处:P2P中国(PPcn.net) P2P 之 UDP穿透NAT的原理与实现(附源代码)原创:shootingstars参考:http://midcom-p2p.sourceforge.net/draft-ford-midcom-p2p-01.txt 论坛上经常有对P2P原理的讨论,但是讨论归讨论,很少有实质的东西产生(源代码).呵呵,在这里我就用自己实现的一个源代码来说明UDP穿越NAT的原理. 首先先介绍

P2P之UDP穿透NAT的原理与实现

论坛上经常有对P2P原理的讨论,但是讨论归讨论,很少有实质的东西产生(源代码).呵呵,在这里我就用自己实现的一个源代码来说明UDP穿越NAT的原理. 首先先介绍一些基本概念: NAT(Network Address Translators),网络地址转换:网络地址转换是在IP地址日益缺乏的情况下产生的,它的主要目的就是为了能够地址重用.NAT分为两大类,基本的NAT和NAPT(Network Address/Port Translator). 最开始NAT是运行在路由器上的一个功能模块. 最先提

UDP穿越NAT原理(p2p)

转载自:http://blog.csdn.net/ldd909/article/details/5979967 论坛上经常有对P2P原理的讨论,但是讨论归讨论,很少有实质的东西产生(源代码).在这里我就用自己实现的一个源代码来说明UDP穿越NAT的原理. 首先先介绍一些基本概念: NAT(Network Address Translators),网络地址转换:网络地址转换是在IP地址日益缺乏的情况下产生的,它的主要目的就是为了能够地址重用.NAT分为两大类,基本的NAT和NAPT(Network

【原创】IP摄像头技术纵览(七)---P2P技术—UDP打洞实现内网NAT穿透

[原创]IP摄像头技术纵览(七)-P2P技术-UDP打洞实现内网NAT穿透 本文属于<IP摄像头技术纵览>系列文章之一: Author: chad Mail: [email protected] 本文可以自由转载,但转载请务必注明出处以及本声明信息. NAT技术的实际需求在10几年前就已经出现,为了解决这个问题,10几年来全世界的牛人早已经研究好了完整的解决方案,网上有大量优秀的解决方案文章,笔者自知无法超越,所以秉承拿来主义,将优秀文章根据个人实验及理解整理汇录于此,用于解释IP摄像头整个技

NAT的全然分析及其UDP穿透的全然解决方式

NAT的全然分析及其UDP穿透的全然解决方式 一:基本术语 防火墙 防火墙限制了私网与公网的通信,它主要是将(防火墙)觉得未经授权的的包丢弃,防火墙仅仅是检验包的数据,并不改动数据包中的IP地址和TCP/UDPport信息. 网络地址转换(NAT) 当有数据包通过时,网络地址转换器不仅检查包的信息,还要将包头中的IP地址和port信息进行改动.以使得处于NAT之后的机器共享几个仅有的公网IP地址(一般是一个).网络地址转换器主要有两种类型. P2P应用程序 P2P应用程序是指,在已有的一个公共s

p2p软件如何穿透内网进行通信

http://blog.chinaunix.net/uid-22326462-id-1775108.html 首先先介绍一些基本概念: NAT(Network Address Translators),网络地址转换:网络地址转换是在IP地址日益缺乏的情况下产生的,它的主要目的就是为了能够地址重用.NAT分为两大类,基本的NAT和NAPT(Network Address/Port Translator). 最开始NAT是运行在路由器上的一个功能模块.最先提出的是基本的NAT,它的产生基于如下事实:

浅谈NAT的原理、缺陷及其解决之道

为什么会有NAT 犹如windows统治着绝大部份桌面系统一样,TCP/IP也是网络协议中的实际统治者,而IP正是这个协议统治的基础,作为标识TCP/IP网络中每个结点的IP地址,由于它只有32个bit的空间,随着网络的发展,它变得越来越稀有,再加上IP地址地区分配的极端不平衡,已使一些地区比如亚洲部分国家的IP资源很快就会用完,在IPv6还没有普及开来之时,为了解决IP地址的燃眉之急,我们需要一种手段来尽量减少对公网IP的使用,这种手段就是NAT(Network Address Transla

【转】NAT工作原理

深入学习NAT工作原理 我们单位中的电脑很多,组成了一个局域网,网络中只有一个电脑和外网(Internet)相连,当然有一个外网地址,但仅仅一个.我以前一直不明白,我们局域网的电脑均能上网,几台同时上也没有问题,究竟是怎么实现的? 当时我知道,Internet网上的计算机都必须有一个IP地址(公址Public IP),才能和Internet网络上其他设备正确通信.在某个时刻必须是唯一的(这句话某个时刻要解释一下,我以前家用电脑是通过电信上网的,每次登陆上网都会从电信公司ISP得到一个公址Publ

vmware nat模式原理探究,实现虚拟机跨网段管理

vmware nat模式原理探究: 理解nat模式,我们能更加了解主机与虚拟机之间如何通信,以及虚拟机如何实现上网. 以及便于我们分析虚拟机与主机无法通信和无法上外网的问题. 下面通过实战:虚拟网络拓扑,抓包分析. 为什么要探究nat模式? 从日常需求出发: 我们电脑上用到的虚拟机越来越多,需要固定IP,方便管理. 网络环境经常会变,我们可能在家办公和在公司办公网段不一样,每次要改为同一个网段再连接使用,比较麻烦. 首先理解vmware的三种模式: bridge模式:相当于一台hub,真实主机与