一、概念
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的数据报。