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支持内网不同主机之间通信。

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s