P2P对等网络 – NAT类型

内容参考来自:《P2P技术全面解析》

什么是NAT?

Network Address Translation(网络地址转换),对外网有统一的IP,对内会给主机分配内网IP。当内网设备和外网进行通信的时候,对外的IP都是该NAT的IP,只是不同主机分配的端口号不同。常见的NAT设备如路由器。NAT负责将设备内网IP和外网IP进行转换。NAT是可以多层连接的,一般用户是主机连接外网时,多数都要经过多层NAT。比如自家路由器,运营商的NAT等。

NAT类型

NAT主要可以分为两类:基本NAT和NAPT(Network Address/Port Translation)。基本NAT一般用于NAT拥有多个公网IP的情形下,将公网IP地址与内网进行静态绑定。NAPT与基本的NAT技术不同,他将内部连接映射到外部网络中的一个单独的IP地址上,同时在该地址上加上一个由NAT设备选定的端口好,即NAPT技术是对基本NAT技术的一个扩展,它实施的是对的转换。

根据映射方式的不同,NAPT可以进一步分为两种类型:圆锥型NAT(Cone NAT)和对称型NAT(Symmetric NAT)。其中圆锥型NAT包括完全圆锥形NAT(Full Cone NAT)、受限圆锥型NAT(Restricted Cone NAT)和端口受限圆锥型NAT(Port Restricted Cone NAT)。在P2P通信中一般要穿越的是NAPT。

完全圆锥型(Full Cone NAT):NAT把所有来自相同内部IP地址和端口的请求映射到相投的外部IP地址和端口。任何一个外部主机均可通过该映射发送数据到该内部主机。

受限圆锥型(Restricted Cone NAT):NAT把所有来自相同内部IP地址和端口的请求映射到相同的外部IP地址和端口。但是只有当内部主机先给外部主机的IP地址发送数据包,该外部主机才能向该内部主机发送数据包。

端口受限圆锥型(Port Restricted Cone NAT):端口受限圆锥型和受限圆锥型类似,只是多了端口号的限制,即只有内部主机向IP为[ip_address:port]的外部主机发送一个数据包,该外部主机才能够把源端口号为[port]的数据包发送给北部主机。

对称型(Symmetric NAT):这种类型的NAT与上述3种类型不同,当同一内部主机使用相同的端口与不同地址的外部主机进行通信时,NAT对该内部主机的映射会有所不同。对称型NAT不能保证所有会话的私有地址和公开IP之间绑定的一致性。相反,它为每个新的会话分配一个新的端口号。

P2P网络中NAT应该具备的特性

在P2P网络中,为了保证相关P2P应用可以成功穿越NAT,NAT设备应该具备以下特性。

1、端口映射的一致性

UDP打洞技术要求NAT设备对端口映射必须一致,即要求从同一内网地址和端口建立的连接映射为相同的公网地址和端口。所以对称型NAT不支持UDP打洞。

2、支持内网不同的主机之间使用外网IP通信

为了实现UDP打洞,需要NAT支持内部的主机能够和内部其他主机进行会话。目前很多NAT并不支持该功能。如果两设备在同一NAT后,可以直接用内网地址进行通信。但是如果最外层的NAT相同,内部又连接了不同的子NAT,设备在不同子NAT后。此时设备不能用内网IP通信,同时外网IP通信又被限制。也会导致NAT穿透失败。

NAT设备的检测方法

1、检测所在NAT是圆锥型还是对称型

首先需要准备两台外网服务器,NAT内一个设备使用同一端口向两个服务器发送数据(使用UDP发送),两台服务器都可以得到该设备的外网地址和端口。之后设备从服务器获取这两个外网和端口进行对比。如果两个外网地址和端口不相同,则NAT为对称型的。反之,NAT为圆锥型。

2、检测所在NAT是否支持内网不同主机使用外网IP通信

只需要在同一个设备打开两个端口,和服务器通信后,分别获取这两个端口的外网IP和端口。如果设备能使用这两个端口的外网IP通信,则说明NAT支持内网不同主机之间通信。

P2P对等网络 – UDP穿透NAT

参考内容:UDP 构建p2p打洞过程的实现原理

双方都在局域网内就没有办法TCP直连,以下方法只适用于NAT符合被穿透的情况下。假设A向B发送消息。

UDP穿透的过程大概如下:

  • 双方通过UDP与服务器通讯,NAT默认就做了一个外网IP和端口号与你内网IP和端口号的映射。这个无需用户设置
  • 用户A先通过服务器获得用户B的外网IP和端口
  • 用户A向用户B的外网IP和端口发送消息
  • 在这一次发送中,用户B的NAT会拒收这条消息,因为它的映射中并没有这条规则。
  • 但是用户A的NAT就会增加一条允许规则,允许接收从B发送过来的消息。
  • 服务器要求用户B发送一条消息到用户A的外网IP和端口
  • 用户B发送一条消息,这是用户A就可以接收到B的消息,而且这时B也会增加了允许规则
  • 此时网关A与网关B都增加了允许规则,所以A与B都可以向对方的外网IP和端口发送消息

P2P对等网络 – 基本原理

公司项目需要使用P2P技术做一个聊天功能,在网上找了下相关资料。在此做个记录。

参考内容:P2P技术原理点对点技术

基本概念

P2P(Peer to Peer)技术又称为对等互联网络技术,依赖网络中参与者的计算能力和带宽,而不是把依赖都聚集在较少的几台服务器上。P2P是一种网络架构,属于覆盖层(Overlay Network)的范畴,是相对于 客户端/服务器(c/s)模式来说的一种网络信息交换方式。

在传统的C/S模式中,数据的分发使用专门的服务器,多个客户端都是从此服务器获取数据。这种模式的优点是数据的一致性容易控制,系统也容易管理。但是缺点也是非常明显,服务器的个数有限,系统容易出现单一失效点。单一服务器面对众多的客户端,由于CPU能力、内存大小以及网络带宽的限制可同时服务的客户端非常有限,可扩展性差。

P2P技术正是为了解决这些问题而提出的一种对等网络架构。在P2P网络中,每个节点既可从其他节点得到服务,也可以向其他节点提供服务。所有的客户端都能狗提供资源,包括带宽、存储空间和计算能力。因此,当有节点加入并且对系统请求增多,整个系统容量也增大。这是传统具有一组固定服务器的C/S结构不能实现的。

基本结构

1、集中式对等网络(Napster、QQ)

集中式对等网络基于中央目录服务器,为网络中各节点提供目录查询服务,传输内容无需在经过中央服务器。这种网络结构比较简单,相对传统结构而言,中央服务器的负担大大降低。但是由于存在中央节点,容易形成传输瓶颈,扩展性也比较差,不适合大型网络。但这种目录集中管理模式,对于小型网络的管理和控制是一种可选的方案。

2、无结构分布式网络

无结构分布式网络和集中式网络的最显著的区别在于,它没有中央服务器,所有节点通过与相邻的节点通信,接入整个网络。

在无结构的网络中,节点采用一种查询包的机制来搜索需要的资源。具体的方式为,某个节点将包含查询包发送到与之相邻的节点,该查询包以扩散的方式在对等网络中蔓延,由于这样的方式如果不加节制,会造成信息泛滥,因此一般会设置一个适当生存时间(TTL),在查询的过程中递减,当TTL的值为0时,将不再继续发送。

无结构分布式网络组织方式比较松散,节点的加入与离开比较自用。当查询热门内容时,很容易就能找到,但如果需求的内容比较冷门,较小的TTL不容易找到,而较大的TTL值又容易引起较大的查询流量。

3、结构化分布式网络

结构式分布式网络,是近年来基于分布式哈希表(Distributed Hash Table)技术的研究成果。它的基本思想是将网络中所有的妓院整理成一张巨大的表,表内包含资源的关键字和所存方节点的地址,然后将这张表分割分别存储到网络中的每一个几点中去。当用户在网络中搜索相应的资源时,它将能发现存储与关键字对应的哈希表内容所存放的节点,在该节点中存储了包含所需资源的节点地址,然后发起搜索的节点根据这些地址信息与对应节点连接并传输资源。这是一种技术上比较先进的对等网络,它具有高度结构化,高可扩展性,节点的加入和离开比较自由。这种方式适合比较大型的网络。

以下是3种比较流行的组织结构。

  • 分布式哈希表(DHT)结构
  • 树形结构
  • 网状结构

技术的应用

1、分布式科学计算

P2P技术可以使得众多终端的CPU资源联合起来,服务于一个共同的计算。这种计算一般是计算量巨大、数据极多、耗时很长的科学计算。在每次计算过程中,任务(包括逻辑与数据等)被划分成多个片,被分配到参与科学计算的P2P节点机器上。在不影响原有计算机使用的前提下,人们利用分散的CPU资源完成计算任务,并将结果返回给一个或多个服务器,将众多结果进行整合,以得到最终结果。

2、文件共享

BitTorrent是一种无结构的网络协议。除了BitTorrent之外,还有不少著名的无结构化P2P文件共享协议,典型的有Gnutella和KaZaA

3、流媒体直播

4、流媒体点播

5、IP层语音通信