一、概念

NAT(Network Address Translation,网络地址转换),当在专用网内部的一些主机本来已经分配到了本地IP地址(即仅在本专用网内使用的专用地址),但现在又想和因特网上的主机通信(并不需要加密)时,可使用NAT方法。
要真正了解NAT就必须先了解现在IP地址的适用情况,私有IP地址是指内部网络或主机的IP 地址,公有IP地址是指在因特网上全球唯一的IP地址。RFC 1918为私有网络预留出了三个 IP地址块,如下:
A 类:10.0.0.0~10.255.255.255
B 类:172.16.0.0~172.31.255.255
C 类:192.168.0.0~192.168.255.255
上述三个范围内的地址不会在因特网上被分配,因此可以不必向ISP或注册中心申请而在公司或企业内部自由使用。

二、分类

NAT主要可以分为两类:基本NAT和NAPT(Network Address/Port Translation):
1)基本NAT一般是用于NAT拥有多个公网IP的情形下,将公网IP地址与内网主机进行静态绑定。
2)NAPT(Network Address/Port Translators):这种才是常见的NAT。NAPT将内部连接映射到外 部网络中的一个单独IP地址上,同时在该地址上加上一个由NAT设备选定的端口号。
一般来讲, NAT可以分为四种类型,分别是:

  • 全锥型(Full Cone)
  • 限制锥型(Restricted Cone), 或者说是IP受限锥型
  • 端口受限锥型(Port Restricted Cone), 或者说是IP + PORT受限锥型
  • 对称型(Symmetric)

假定公网一IP地址是45.6.99.100,监听端口是7545
另一IP地址是46.7.100.101,监听端口是7546
NAT routerIP地址是8.88.88.88
NAT内部client是192.168.0.3
假定client(192.168.0.3, 100)给一公网IP(45.6.99.100,7545)发送报文,报文到达路由器,路由器在自己的公网ip上开辟一个端口800,从而建立了一个映射关系(8.8.8.8,800)<--->(192.168.0.3,100), 建立映射关系后,所以(192.168.0.3,100)和(45.6.99.100,7545)之间的报文都通过这 个映射关系进行转发。

1、client(192.168.0.3, 100)和一公网IP(45.6.99.100,7545)在路由器上建立好连接关系后,如果client(192.168.0.3,100)又给(46.7.100.101,7546)发送数据:

1)复用旧的映射关系(8.8.8.8, 800)<--->(192.168.0.3, 100)和(46.7.100.101,7546) 通信,这就是锥型(Cone)NAT;
2)创建新的映射关系(8.8.8.8, 801)<--->(192.168.0.3, 100)和(46.7.100.101,7546) 通信, 这就是对称型NAT。

2、client(192.168.0.3, 100)和一公网IP(45.6.99.100,7545)在路由器上建立好连接关系后,如果这个时候路由器(8.8.8.8)在800端口上收到从另外一台server(46.7.100.101,7546)发来的数据,是不是应该转发给(192.168.0.3, 100)呢?

有四种情况:

  • 无条件转发给(192.168.0.3, 100), 这就是全锥型(Full Cone)NAT。
  • (192.168.0.3, 100)之前给(46.7.100.101)发送过数据,则转发,是受限锥型(Restricted Cone)。
  • (192.168.0.3, 100)之前给(46.7.100.101,7546)发送过数据,则转发,是端口受限锥型(Port Restricted Cone)。
  • 丢弃报文,拒绝转发, 这就是对称型NAT。

通过五元组来分析NAT

Symmetric NAT型 (对称型)

 

在客户机时    192.168.0.8:4000——6.7.8.9:8000     192.168.0.8:4000——6.7.8.10:8000
在网关时,两个不同session端口号不同     
1.2.3.4:62000——6.7.8.9:8000      1.2.3.4:62001——6.7.8.10:8000
服务器C      6.7.8.9:8000
服务器D     6.7.8.10:8000

Cone NAT型(圆锥型)

 

在客户机时              192.168.0.8:4000——6.7.8.9:8000     192.168.0.8:4000——6.7.8.10:8000
在网关时,两个不同session但端口号相同     
1.2.3.4:62000——6.7.8.9:8000     1.2.3.4:62000——6.7.8.10:8000
服务器C           6.7.8.9:8000
服务器D           6.7.8.10:8000

a)Full Cone NAT(完全圆锥型):从同一私网地址端口192.168.0.8:4000发至公网的所有请求都映射成同一个公网地址端口1.2.3.4:62000 ,192.168.0.8可以收到任意外部主机发到1.2.3.4:62000的数据报。
b)Address Restricted Cone NAT (地址限制圆锥型):从同一私网地址端口192.168.0.8:4000发至公网的所有请求都映射成同一个公网地址端口1.2.3.4:62000,只有当内部主机192.168.0.8先给服务器C 6.7.8.9发送一个数据报后,192.168.0.8才能收到6.7.8.9发送到1.2.3.4:62000的数据报。
c)Port Restricted Cone NAT(端口限制圆锥型):从同一私网地址端口192.168.0.8:4000发至公网的所有请求都映射成同一个公网地址端口1.2.3.4:62000,只有当内部主机192.168.0.8先向外部主机地址端口6.7.8.9:8000发送一个数据报后,192.168.0.8才能收到6.7.8.9:8000发送到1.2.3.4:62000的数据报。