P2P之NAT穿透原理介绍
背景
一次项目中,对于主动协议接入的设备,客户希望能够设备端直接推送码流到客户端以此减少中心媒体的负载。所以对P2P这块方案做了了解,这里做下整理。
基本概念
P2P对等网络
即对等计算机网络,是一种在对等者(Peer)之间分配任务和工作负载的分布式应用架构 ,是对等计算模型在应用层形成的一种组网或网络形式。“Peer”在英语里有“对等者、伙伴、对端”的意义。因此,从字面上,P2P可以理解为对等计算或对等网络。国内一些媒体将P2P翻译成“点对点”或者“端对端”,学术界则统一称为对等网络(Peer-to-peer networking)或对等计算(Peer-to-peer computing),其可以定义为:网络的参与者共享他们所拥有的一部分硬件资源(处理能力、存储能力、网络连接能力、打印机等),这些共享资源通过网络提供服务和内容,能被其它对等节点(Peer)直接访问而无需经过中间实体。在此网络中的参与者既是资源、服务和内容的提供者(Server),又是资源、服务和内容的获取者(Client)
P2P网络特点
优点 | 缺点 |
|
|
P2P主要应用
- 文件内容共享和下载
- 计算能力和存储共享
- 即时通讯系统
- 游戏
- 网络电视
- 等等
思考
我们来看一组网络模型:
分别在两个网段内的C和D该如何来建立通信呢?
一般情况是这样的:
通过一个中心服务E,C和D分别连接到E,然后通过E来转发数据,这样就行完成C和D的相互通信。但是这种方式,针对用户端较多,且传输数据量较大时,中心节点的负载会急剧增大,导致构建中心服务的成本很高。如果能够端到端直接通信则中心成本能够降低很多。
NAT穿透
NAT
NAT(Network Address Translation,网络地址转换)是1994年提出的。当在专用网内部的一些主机本来已经分配到了本地IP地址(即仅在本专用网内使用的专用地址),但现在又想和因特网上的主机通信(并不需要加密)时,可使用NAT方法。
这种方法需要在专用网连接到因特网的路由器上安装NAT软件。装有NAT软件的路由器叫做NAT路由器,它至少有一个有效的外部全球IP地址。这样,所有使用本地地址的主机在和外界通信时,都要在NAT路由器上将其本地地址转换成全球IP地址,才能和因特网连接。
另外,这种通过使用少量的公有IP 地址代表较多的私有IP 地址的方式,将有助于减缓可用的IP地址空间的枯竭。在RFC1632中有对NAT的说明。
NAT上有关系对应表,当NAT内部地址向外部目标地址发送报文时,会产生一个内部地址和NAT对外地址的对应关系。
同时,也会有NAT对外地址和目标地址的映射关系
一般来讲, NAT可以分为四种类型,分别是:
- 全锥型(Full Cone)
- 受限锥型(Restricted Cone), 或者说是IP受限锥型
- 端口受限锥型(Port Restricted Cone), 或者说是IP + PORT受限锥型
- 对称型(Symmetric)
全锥型(Full Cone)
- 全锥型是最容易连通的NAT,因为只需要内部ip+port在NAT表中有申明过,则外部任意IP,端口均可以透过NAT对外映射的的IP、端口访问。
- 同一个内部地址,向不同目标地址发送报文时,使用的NAT对外地址相同
如上图,如果B在NAT A上有一个对外的映射地址,那么不管是C还是D都能通过该映射地址访问到B.
受限锥型(Restricted Cone)
对于目标IP的任意端口均可以访问NAT对外映射的地址。即,只限制IP不限制端口。
同一个内部地址,向不同目标地址发送报文时,使用的NAT对外地址相同
端口受限锥型(Port Restricted Cone)
- 只有当外部主动请求的的源IP和端口等于内部网发送的请求的目的IP和端口是才能通信。即NAT表中,必须有源地址和目的地址的对应关系。
- 同一个内部地址,向不同目标地址发送报文时,使用的NAT对外地址相同
对称型(Symmetric)
- 如果发送的包的目的IP 和 PORT相同,那么映射 IP 和 PORT将相同。内部的同一台机器,同一个端口如果目的地址不同,那么映射的端口也不同,所以只有他主动连的服务器才可能知道他的映射后端口,别的服务器如果想连他只能靠猜测端口。
- 对于这种NAT,连接不同的外部目标(IP或者端口不同),原来NAT打开的端口会变化,而Cone NAT则不会。
非对称型NAT穿透过程
这里示例介绍对称型中限制最多的穿透过程(两个端口限制型的NAT穿透过程),因为这个过程会包含所有限制更少的穿透过程。
1. 首先,C和D连接一个中心服务E.
2. 通过中心服务E交换双方的对外通信地址
3. C向从E拿到的D的外部通信地址发送一个报文,此时NAT B没有该路由信息,报文会被丢弃,但是NAT A上会有NAT A 到 NAT B的映射。
4. D向从E拿到的D的外部通信地址发送一个报文,此时NAT A上已经有对应路由信息,所以信息能够通过NAT A发送到C。
5. 此时NAT B上也有对NAT A的映射关系,至此C和D的P2P通信连接建立。
对称型NAT穿透
由于对称型NAT对于不同的目的地址,对外映射端口会发生改变,所以上述过程将无法直接打通,目前常用的方法是端口猜想,主要是基于大部分对称NAT一般新分配的端口是向下自增的原理。这里不做具体介绍,过程基本和上述描述一致。