NAT定义、分类及检测

因项目需求,在网上找了NAT的相关资料,现整理如下:


1. NAT定义



NAT是将私有地址转换为合法IP地址的技术。通俗的讲,就是将内网与内网通信时,怎么将内网私有IP地址转换为可在网络中传播的合法IP地址。NAT的出现,完美地解决了lP地址不足的问题;而且,还能够有效地避免来自网络外部的攻击,隐藏并保护网络内部的计算机。 


2. NAT分类


RFC3489 中将 NAT 的实现分为四大类:
1. Full Cone NAT                             完全锥形 NAT
2. Restricted Cone NAT                 限制锥形 NAT(可以理解为 IP 限制)
3. Port Restricted Cone NAT        端口限制锥形 NAT(IP+Port 限制)
4. Symmetric NAT                          对称 NAT

其中完全锥形的穿透性最好,而对称形的安全性最高。


2.1 锥形NAT和对称NAT的区别


所谓锥形NAT 是指:只要是从同一个内部地址和端口出来的包,无论目的地址是否相同,NAT 都将它转换成同一个外部地址和端口。
“同一个外部地址和端口”与“无论目的地址是否相同”形成了一个类似锥形的网络结构,也是这一名称的由来。

反过来,不满足这一条件的即为对称NAT 。


2.2 举例说明


假设:
NAT 内的主机 A : IP 记为A,使用端口 1000
NAT 网关            : IP 记为NAT,用于 NAT 的端口池假设为( 5001-5999 )
公网上的主机 B : IP 记为B,开放端口 2000
公网上的主机 C : IP 记为C,开放端口 3000

假设主机 A 先后访问主机 B 和 C


1 )如果是锥形 NAT :

那么成功连接后,状态必然如下:
A ( 1000 ) —— >  NAT ( 5001 )—— >  B ( 2000 )
A ( 1000 ) —— >  NAT ( 5001 )—— >  C ( 3000 )

也就是说,只要是从 A 主机的 1000 端口发出的包,经过地址转换后的源端口一定相同。


2 )如果是对称形 NAT :

连接后,状态有可能(注意是可能,不是一定)如下:
A ( 1000 ) —— >  NAT ( 5001 )—— >  B ( 2000 )
A ( 1000 ) —— >  NAT ( 5002 )—— >  C ( 3000 )

两者的区别显而易见。

2.3 三种CONE NAT之间的区别


仍然以上面的网络环境为例, 假设 A 先与 B 建立了连接:

A ( 1000 ) —— >  NAT ( 5001 )——— >  B ( 2000 )


1) Port Restricted Cone NAT:
只有 B ( 2000 )发往 NAT ( 5001 )的数据包可以到达 A ( 1000 )
===========================================================
B ( 2000 ) —— >  NAT ( 5001 ) ——— >   A ( 1000 )
B ( 3000 ) —— >  NAT ( 5001 ) — X — >   A ( 1000 )
C ( 2000 ) —— >  NAT ( 5001 ) — X — >   A ( 1000 )


2) Restricted Cone NAT
只要是从 B 主机发往 NAT ( 5001 )的数据包都可以到达 A ( 1000 )
==========================================================
B ( 2000 ) —— >  NAT ( 5001 ) ——— >   A ( 1000 )
B ( 3000 ) —— >  NAT ( 5001 ) ——— >   A ( 1000 )
C ( 2000 ) —— >  NAT ( 5001 ) — X — >   A ( 1000 )


3) Full Cone NAT
任意地址发往 NAT ( 5001 )的数据包都可以到达 A ( 1000 )
==========================================================
B ( 2000 ) —— >  NAT ( 5001 ) ——— >   A ( 1000 )
B ( 3000 ) —— >  NAT ( 5001 ) ——— >   A ( 1000 )
C ( 3000 ) —— >  NAT ( 5001 ) ——— >   A ( 1000 )


3. NAT检测


前提条件: 有一个公网的Server,并且绑定了两个公网IP(IP-1,IP-2)。这个Server做UDP监听(IP-1,Port-1),(IP-2,Port-2),并根据客户端的要求进行应答。


第一步:检测客户端是否有能力进行UDP通信以及客户端是否位于NAT后?

1)客户端建立UDP socket。然后,用这个socket向服务器的(IP-1,Port-1)发送数据包,要求服务器返回客户端的IP和Port。
2)客户端发送请求后立即开始接受数据包。
如果无法接收到服务器的回应,则说明客户端无法进行UDP通信,可能是防火墙或NAT阻止UDP通信,这样的客户端也就不能P2P了(检测停止)。
如果能够接收到服务器的回应,需要把服务器返回的客户端(IP,Port)和这个客户端socket的 (LocalIP,LocalPort)比较。如果完全相同则客户端不在NAT后,这样的客户端具有公网IP可以直接监听UDP端口接收数据进行通信(检测停止);否则,客户端在NAT后要做进一步的NAT类型检测(继续)。


第二步:检测客户端NAT是否是Full Cone NAT?

1)客户端建立UDP socket。然后,用这个socket向服务器的(IP-1,Port-1)发送数据包,要求服务器用另一对(IP-2,Port-2)响应客户端的请求,并往回发一个数据包。
2)客户端发送请求后立即开始接受数据包。
如果无法接收到服务器的回应,则说明客户端的NAT不是一个Full Cone NAT,具体类型有待下一步检测(继续)。
如果能够接收到服务器从(IP-2,Port-2)返回的应答UDP包,则说明客户端是一个Full Cone NAT,这样的客户端能够进行UDP-P2P通信(检测停止)。


第三步:检测客户端NAT是否是Symmetric NAT?

1)客户端建立UDP socket。然后,用这个socket向服务器的(IP-1,Port-1)发送数据包,要求服务器返回客户端的IP和Port。
2)客户端发送请求后立即开始接受数据包,这个数据包一定能够收到,因为第一步保证了这个客户端可以进行UDP通信。用同样的方法用一个socket向服务器的(IP-2,Port-2)发送数据包,要求服务器返回客户端的IP和Port。 
比较上面两个过程从服务器返回的客户端(IP,Port)。如果,两个过程返回的(IP,Port)有一对不同,则说明客户端为Symmetric NAT,这样的客户端无法进行UDP-P2P通信(检测停止);否则,客户端为Restricted Cone NAT。是否为Port Restricted Cone NAT有待检测(继续)。


第四步:检测客户端NAT是否是Restricted Cone NAT还是Port Restricted Cone NAT?

1)客户端建立UDP socket,然后用这个socket向服务器的(IP-1,Port-1)发送数据包,要求服务器用IP-1和一个不同于Port-1的端口发送一个UDP 数据包响应客户端。
2)客户端发送请求后立即开始接受数据包,
如果无法接收到服务器的回应,则说明客户端是一个Port Restricted Cone NAT。
如果能够接收到服务器的回应,则说明客户端是一个Restricted Cone NAT。以上两种NAT都可以进行UDP-P2P通信。


注:
1)在客户端发送请求的过程中,要设定socket Timeout,防止无限堵塞;又因是UDP传输,最好重复发送若干次。
2)以上检测过程,只说明可否进行UDP-P2P的打洞通信。具体怎么通信,一般要借助于Rendezvous Server。
3)对于Symmetric NAT,不是说完全不能进行UDP-P2P打洞通信。你可以进行端口预测打洞,不过不能保证成功。


参考网址

http://michankong.blog.51cto.com/1464983/761270
http://www.cnblogs.com/my_life/articles/1908552.html
http://blog.csdn.net/ojhsky/article/details/6011232


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值