基于Cone NAT穿越的完全P2P通信研究

时间:2022-06-21 03:51:57

基于Cone NAT穿越的完全P2P通信研究

摘要:Network Address Translation(NAT)技术能够解决公网IP地址紧缺的问题,确保网络安全,但也阻隔了不同子网内peer之间的直接通信。文章介绍了基于User Datagram Protocol(UDP)的UDP Hole Punching技术实现NAT的穿越,并提出在完全P2P环境下内网中的P2P节点加入P2P网络并实现了NAT穿透的Friend Select Node(FSN)模型。

关键词:NAT;UDP Hole Punching;完全P2P;FSN

0 引言

网络地址转换协议(NAT:Network Address Translation),通过将局域网上的主机地址映射为Internet上的合法IP地址,从而实现网络地址复用。NAT对解决当前IP地址短缺问题、构建防火墙、保证网络安全等都发挥了重要作用。但是随着基于Internet的P2P网络技术的广泛应用,更多的内网主机需要参与到P2P中来。NAT协议下的主机IP地址(私网IP地址)在Internet上是不可见的,Internet上的主机不能主动访问这些NAT协议下的主机,而位于不同NAT协议下的主机间更是无法相互识别而不能直接交换信息。但是P2P网络要求任何主机之间都能够直接对等交换信息,因此P2P网络应用必须解决穿越NAT实现双向对等通信的问题。

本文将重点围绕着Cone NAT穿越的完全P2P通信方法展开研究。

1 网络地址转换(NAT)的类型划分

按照端口号转换与否,NAT可以分为以下两种:

(1)Basic NAT:将私网主机的私有IP地址转换成公网IP地址,但并不转换TCP/UDP端口信息。

(2)Network Address Port Translation(NAPT):NAPT将单独的公网IP地址和内部多台主机进行绑定,当不同的内部主机和外部通信时,NAT不仅将内部主机的私有IP转换为公网IP,而且连端口号一起转换。

按照端口号的分配情况,NAPT又可以分为以下两种:

(1)Symmetric NAT:当同一个内部主机向不同的外网主机发起多个会话时,Symmetric NAT为这些会话分配不同的端口,Symmetric NAT能够区别多个不同的会话并进行地址转换。

(2)Cone NAT:与Symmetric NAT不同,当同一个内部主机向不同的外网主机发起多个会话时,Cone NAT为这些会话分配同一个端口,并通过判断数据包的来源(即反馈数据包中的IP地址和端口)来维持会话。所分配的同一个端口在所有会话结束后才收回。

由于当前的NAT几乎都是Cone NAT,所以本文只是基于Cone NAT进行了研究,后面出现的NAT要是不特别说明,指的是Cone NAT。

2 P2P节点穿越Cone NAT方法

UDP是简单的传输协议,几乎不提供可靠性措施,是无连接的协议,但是效率非常高。不像TCP协议,传输数据之前要建立一种虚拟的连接关系,它只要知道对方的IP地址和UDP端口,就可以进行数据传输。在P2P网络中,采用UDP方式进行数据传输,所以能够获得主机的Internet合法IP地址就可以进行数据交换。

P2P的两个节点分布有以下几种情况:

(1)两个节点都有自己的公网地址。

(2)两个节点都使用同一个Cone NAT。

(3)一个节点有公网地址,另外一个节点使用一个ConeNAT协议。

(4)两个节点使用不同的Cone NAT。

下面就对两个P2P节点在不同内网下,穿越NAT的User Datagram Protocol(UDP)Hole Punching方法进行介绍。

如图1所示,假设两台主机A和B处于不同的Cone NAT协议下。它们穿越NAT进行直接通信的过程如下:

(1)A和B先登录到注册服务器(P2P Server),并向服务器发送各自的实际IP地址和UDP端口信息。

(2)注册服务器记录这两个IP地址和端口号,同时从接收到的UDP数据报头中提取源IP地址和端口信息,同样记录IP地址和端口号。这样在注册服务器上的映射表中就增加两条记

上一篇:Windows平台下补丁管理系统的设计与实现 下一篇:基于复杂递归类问题的可重用程序模板研究