Chinaunix首页 | 论坛 | 博客
  • 博客访问: 585344
  • 博文数量: 146
  • 博客积分: 5251
  • 博客等级: 大校
  • 技术积分: 1767
  • 用 户 组: 普通用户
  • 注册时间: 2006-11-10 15:58
文章分类
文章存档

2010年(12)

2008年(129)

2007年(5)

我的朋友

分类: LINUX

2008-02-01 12:08:51

由于IPv4地址资源的限制,在实际的网络部署中存在着大量的NAT设备。根据RFC3489的定义,NAT设备可以划分为四种主要的类型:

  • 全锥型(Full Cone)

nat-full-cone.jpg

如上图所示,此种类型的NAT设备固定地将内网主机X端口Y(X/Y),映射为外网地址x/y,WAN侧任意主机可以收到来自X/Y–>x/y–>的数据包,反之也可以将数据包通过x/y回传给X/Y。从图上看类似一个锥形,且数据传输不受任何限制,故称之为全锥型NAT设备。

  • 受限制的锥型(Restricted Cone)

nat-restricted-cone.jpg

相比较上一种类型,以下三种NAT类型,对WAN侧数据包都有一个共同的特征:非请勿入,即WAN侧数据能够通过x/y传送数据至X/Y的前提条件是,X/Y曾先向WAN端该主机发送了数据包。

受限制的锥型NAT相比较全锥型的NAT,要求能够A–>x/y–>X/Y的条件是,X主机先发送数据包给A。如上图所示,我们将A至x/y的回传路径用虚线表示,以表明非请勿入的限制条件。

  • 端口受限制的锥型(Port Restricted Cone)

nat-port-restricted-cone.jpg

在前一种类型基础上,该类型不但对IP地址进行了限制,而且也限制了WAN侧主机发送数据包的端口,因此我们将WAN用椭圆图表示,是一个二维空间。该限制是,只有X/Y通过x/y发送数据包到A/B后,A/B发送的数据包才能够通过x/y回送给X/Y,其它数据包全部拒绝。

  • 对称型(Symmetric)

nat-symmetric.jpg

最后一种NAT类型是限制最严格的类型,是最难穿透和令P2P应用开发者最为头痛的类型。从上图可以看出,内网主机向外网映射是一一对应的对称的关系,即只有X/Y先发包给A/B,A/B发送的数据经x/y回到X/Y,同样W/Z和C/D关系如此。

根据STUN协议,在WAN端公网上架设STUN服务器,在LAN主机使用STUN客户端,我们可以检测网络的NAT类型。其检测过程如下:

nat-detect.jpg

(1)X/Y发送Binding Request消息给服务端,服务端将在WAN侧看到的地址x/y以Binding Response消息回应客户端。客户端用本机地址、端口和x/y对比,如果相同,则说明没有经过NAT设备;如果不同则表示中途有NAT映射。

(2)检测NAT类型。同上步骤,但服务端为另外一个地址,客户端对比前后两次收到的NAT映射地址,如果两次检测的地址不相同,则表示NAT是对称型设备。

(3)如果不是对称型设备,继续检测。但发送的Binding Resquest消息要求服务端改变地址发送Binding Respone消息给客户端。如果客户端能够收到Binding Respone消息,说明NAT设备是全锥型的。

(4)如果收不到回应消息,继续检测。这次发送的Binding Resquest消息要求服务端只改变发送Binding Respone消息的端口且IP地址不改变。如果客户端收不到响应消息则说明NAT设备是端口受限型的设备;否则只是受限制的NAT设备。

那么Linux NAT是什么类型呢?

我们不妨使用上面的步骤检测一下。我们知道Linux系统在作NAT时,会建立一个源地址、源端口、目的地址、目的端口的元组[X,Y,A,B],以及NAT后反方向接收数据的元组[A,B,x,y],请注意反方向的目标地址是NAT映射后的WAN侧地址。

首先,检测的第一步骤结果,显然X/Y不同于x/y,所以经过了NAT设备。其次检测第二步,如果Linux系统x/y组合没有被其它的连接所使用,则还是使用x/y地址,所以就可能被认为不是对称型设备,还要继续检测。但这是错误的检测结果,因为如果x/y地址已经被其它连接使用了,Linux内核不会为某地址端口保持固定的映射,则 X/Y 的映射会改变,所以 Linux NAT是对称型的设备。看来根据STUN协议检测NAT设备类型还要作进一步的分析。

阅读(1846) | 评论(0) | 转发(0) |
0

上一篇:Gcc核心扩展

下一篇:Linux IP协议栈框架

给主人留下些什么吧!~~