文章目录
- 网络地址转换 NAT 概述
- 最基本的 NAT 方法
- NAT 转换表的作用
- 网络地址与端口号转换 NAPT
- NAT 和 NAPT 的缺陷
网络地址转换 NAT 概述
尽管因特网采用了无分类编址方法来减缓 IPv4 地址空间耗尽的速度,但由于因特网用户数量的急剧增长,特别是大量小型办公室和家庭网络接入因特网的需求不断增加,IPv4地址空间即将耗尽的危险仍然没有解除(实际上,因特网号码分配管理局 IANN 于 2011 年 2 月 3 日宣布,IPv4 地址已经分配完毕)。
网络地址转换(NetworkAddress Translation,NAT)技术于 1994 年被提出,用来缓解 IPv4 地址空间即将耗尽的问题。
NAT 能使大量使用内部专用地址的专用网络用户共享少量外部全球地址来访问因特网上的主机和资源。
这种方法需要在专用网络连接到因特网的路由器上,安装 NAT 软件。装有 NAT 软件的路由器称为NAT路由器,它至少要有一个有效的外部全球地址 I P G IP_G IPG。所有使用内部专用地址的主机在和外部因特网通信时,都要在NAT路由器上将其内部专用地址转换成 I P G IP_G IPG。
最基本的 NAT 方法
基本流程:
-
主机A 向 主机B 发起连接请求:
- 主机A 有一个专用地址 I P A IP_A IPA,它试图与具有全球地址 I P B IP_B IPB 的主机B建立连接。
- 主机A 生成一个 IP 数据报,该数据报的源地址为 I P A IP_A IPA,目标地址为 I P B IP_B IPB。
-
NAT路由器修改源地址:
-
当IP数据报通过NAT路由器时,路由器将其源地址由 I P A IP_A IPA 修改为全局可访问的地址 I P G IP_G IPG。
-
修改后的IP数据报的源地址变为 I P G IP_G IPG,而目标地址仍然是 I P B IP_B IPB。
-
-
IP 数据报通过因特网到达 主机B:修改后的 IP 数据报通过因特网传递给主机B。
-
主机B 响应:主机B收到请求后,生成一个响应的IP数据报,源地址为 I P B IP_B IPB,目标地址为 I P A IP_A IPA。
-
NAT路由器再次修改目标地址:
- 当响应的 IP 数据报返回并通过 NAT 路由器时,路由器将其目标地址由 I P A IP_A IPA 修改回 I P G IP_G IPG。
- 修改后的IP数据报的目标地址变为 I P G IP_G IPG,而源地址仍然是 I P B IP_B IPB。
-
IP 数据报返回至 主机A:修改后的 IP 数据报通过因特网返回至 主机A。
上述最基本的 NAT 方法有一个缺点:如果 NAT 路由器拥有 n(n比较小) 个全球 IP 地址,那么专用网内最多可以同时有 n 台主机接入因特网。若专用网内的主机数量大于 n,则需要轮流使用 NAT 路由器中数量较少的全球 IP 地址。
NAT 转换表的作用
- NAT 路由器维护一张转换表,记录内网地址 I P A IP_A IPA 和外网地址 I P G IP_G IPG 的对应关系。
- 当数据报通过 NAT 路由器时,路由器会查询此表来确定如何修改 源/目标地址。
通过这种机制,NAT 允许多台拥有专用地址的计算机共享同一个全球可访问的 IP 地址,从而节省了公网 IP 资源,并且增加了内网的安全性,因为外部网络看不到内网的真实地址。
网络地址与端口号转换 NAPT
由于目前绝大多数基于 TCP/IP 协议栈的网络应用,都使用运输层的传输控制协议 TCP
或用户数据报协议 UDP
,为了更加有效地利用NAT路由器中的全球 IP 地址,现在常将NAT转换和运输层端口号结合使用。
这样就可以使内部专用网中使用专用地址的大量主机,共用NAT路由器上的1个全球IP地址,因而可以同时与因特网中的不同主机进行通信。
将 NAT 和运输层端口号结合使用,称为网络地址与端口号转换(Network Address and Port Translation,NAPT)
现在很多家用路由器将家中各种智能设备(手机、平板、笔记本电脑、台式电脑、物联网设备等)接入因特网,这种路由器实际上就是一个NAPT路由器,但往往并不运行路由选择协议。
主机A、主机B 向服务器发送 IP 数据报
-
修改后的源端口号是由
NAPT
路由器动态分配的 -
主机 B 与主机 A 选择的源端口号相同,这纯属巧合(端口号仅在本主机中才有意义)。特意这样举例,就是为了能更好地说明NAPT路由器还会对源端口号重新动态分配。
-
设备A 和 设备B 分别尝试连接到 服务器C:
-
设备A 的本地 IP 地址是
192.168.0.6
,它尝试连接到 服务器C 的 IP 地址218.75.230.30
上的端口 80。 -
设备B 的 本地IP 地址是
192.168.0.9
,也尝试连接到同一 服务器C 的相同端口80。
-
-
NAPT
路由器修改源地址和源端口号:-
对于 设备A 的数据包,NAPT 路由器将其源地址从
192.168.0.6
修改为113.218.175.235
,并为其分配一个新的源端口号50001
。 -
对于 设备B 的数据包,NAPT 路由器同样将其源地址从
192.168.0.9
修改为113.218.175.235
,但为其分配不同的源端口号50002
。
-
-
数据包通过因特网到达服务器C:修改后的数据包通过因特网传递给 服务器C。
-
服务器C 响应:服务器C 接收到请求后,生成响应的数据包,源地址为
218.75.230.30
,目标地址为113.218.175.235
,目标端口号分别为50001
和50002
。 -
NAPT
路由器再次修改目标地址和目标端口号:当响应的数据包返回并通过 NAPT 路由器时,路由器会根据之前保存的映射表,将目标地址和目标端口号还原为各自的本地地址和端口号。
这样,NAPT
就完成了双向的地址和端口转换,使内网设备能够通过有限的公有IP地址访问互联网。
NAT 和 NAPT 的缺陷
尽管 NAT(和NAPT) 的出现在很大程度上缓解了 IPv4 地址资源紧张的局面,但 NAT(和NAPT) 对网络应用并不完全透明,会对某些网络应用产生影响。
NAT(和NAPT) 的一个重要特点就是通信必须由专用网内部发起,因此拥有内部专用地址的主机不能直接充当因特网中的服务器。
对于目前 P2P 这类需要外网主机主动与内网主机进行通信的网络应用,在通过 NAT 时会遇到问题,需要网络应用自身使用一些特殊的NAT穿透技术来解决。