文章

NAT网络地址转换技术简介

NAT网络地址转换技术简介

NAT网络地址转换技术简介

NAT网络地址转换(Network Address Translation)

NAT功能

借助于NAT,私有(保留)地址的内部网络通过路由器发送数据包时,私有地址被转换成合法的IP地址,一个局域网只需使用少量IP地址即可实现私有地址网络内所有计算机与Internet的通信需求。

  • 解决公网IP地址不足。
  • 隐藏并保护位于NAT网络内部的计算机,避免来自网络外部的攻击。

NAT分类

NAT主要有以下1234型分类:

  • NAT1 完全锥形NAT(Full Clone NAT)
  • NAT2 限制性锥形NAT(Restricted Clone NAT)
  • NAT3 端口限制性锥形NAT( Port Restricted Clone NAT)
  • NAT4 对称式NAT(Symmetric NAT)

不同的类型,在创建连接时,端口的分配策略,和访问策略有不同。

NAT局限

维护大量转换表:每一次网络请求都要记录ip和端口号等映射关系,涉及多层NAT路由器时都要记录从下级传来的转换表。在硬件上需要较高的配置。为了减少转换表带来的内存消耗,NAT路由器通常会采取遗忘策略,定时清除不用的映射,但加载和清除也会产生额外的消耗。

局限:无法直接从外部向NAT后的内部服务器建立连接

1
从第一性原理出发理解NAT建立表项的动机:NAT主要是方便NAT内部的用户使用同一个公网ip访问外网,而不是方便给外网用户访问内网(不是外网有访问记录进来NAT都会生成源和目标地址的映射表项,因为有可能是无效的瞎访问)。因此要等内网对外网的网络访问联通了才会生成映射项。   
1
建立ip端口映射表项过程:只有一个子网内的私有ip先访问公网(外网)的时候,经过NAT,NAT才会维持一个表项,供外部服务器的信息传递回来。如果缺少表项,外部服务器无法直接向内网设备进行通信,因为没有私网公网映射表。   

因此P2P常使用的NAT打洞穿透,需要引入中间服务器交换打洞节点信息,和中间服务器建立连接后使得NAT自动生成映射表项。

P2P使用udp方式实现NAT打洞穿透

打洞就是让NAT留下一条访问记录,自动创建NAT映射表项。这样在对方访问自己的时候,不会因为自己的NAT因为缺少记录而把数据包丢弃。
NAT的类型不同,对NAT打洞穿透的方式和策略也有不同。UDP打洞是最常用的NAT穿透技术之一,过程如下:

  • 客户端A和B连接到一个公共的服务器:为了开始UDP打洞的过程,客户端A和B首先需要连接到一个已知的、具有公共IP地址的服务器。这通常是一个STUN服务器或任何其他能够提供外部可见IP地址和端口映射信息的服务器。
  • 获取NAT后的公网IP和端口:客户端A和B各自向这个公共服务器发送UDP请求。服务器接收到这些请求后,可以得知每个客户端的公网IP地址和端口号(即经过NAT转换后的地址)。然后,服务器将这些信息返回给相应的客户端。
  • 交换信息:接下来,客户端A和B通过该公共服务器交换彼此的公网IP地址和端口号。这样,双方都知道了对方的公网地址信息。
  • 发起UDP请求:拥有对方公网IP地址和端口号的信息后,客户端A和B尝试直接向对方发送UDP数据包。尽管最初的几个数据包可能会因为对端的NAT尚未准备好接收而丢失,但正是这些尝试在各自的NAT上创建了必要的映射规则。
  • 建立通信:一旦两端的NAT都为对方创建了适当的映射规则,来自对方的数据包就可以顺利到达。此时,客户端A和B之间的UDP连接就建立了,他们可以直接通信而无需再通过中间服务器转发数据
本文由作者按照 CC BY 4.0 进行授权