网络地址转换(NAT)详解

 网络地址转换(NAT,Network Address Translation)属接入广域网(WAN)技术,是一种将私有(保留)地址转化为合法IP地址的转换技术,它被广泛应用于各种类型Internet接入方式和各种类型的网络中。原因很简单,NAT不仅完美地解决了lP地址不足的问题,而且还能够有效地避免来自网络外部的攻击,隐藏并保护网络内部的计算机

  虽然NAT可以借助于某些代理服务器来实现,但考虑到运算成本和网络性能,很多时候都是在路由器上来实现的。

  随着接入Internet的计算机数量的不断猛增,IP地址资源也就愈加显得捉襟见肘。事实上,除了中国教育和科研计算机网(CERNET)外,一般用户几乎申请不到整段的C类IP地址。在其他ISP那里,即使是拥有几百台计算机的大型局域网用户,当他们申请IP地址时,所分配的地址也不过只有几个或十几个IP地址。显然,这样少的IP地址根本无法满足网络用户的需求,于是也就产生了NAT技术。

  l.NAT简介

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

  NAT将自动修改IP报文的源IP地址和目的IP地址,Ip地址校验则在NAT处理过程中自动完成(对于ICMP,NAT也自动完成地址转换)。有些应用程序将源IP地址嵌入到IP报文的数据部分中,所以还需要同时对报文进行修改,以匹配IP头中已经修改过的源IP地址。否则,在报文数据都分别嵌入IP地址的应用程序就不能正常工作。

  2.NAT实现方式

  NAT的实现方式有三种,即静态转换Static Nat动态转换Dynamic Nat 端口多路复用OverLoad

  静态转换是指将内部网络的私有IP地址转换为公有IP地址,IP地址对是一对一的,是一成不变的,某个私有IP地址只转换为某个公有IP地址。借助于静态转换,可以实现外部网络对内部网络中某些特定设备(如服务器)的访问。

  动态转换是指将内部网络的私有IP地址转换为公用IP地址时,IP地址对是不确定的,而是随机的,所有被授权访问上Internet的私有IP地址可随机转换为任何指定的合法IP地址。也就是说,只要指定哪些内部地址可以进行转换,以及用哪些合法地址作为外部地址时,就可以进行动态转换。动态转换可以使用多个合法外部地址集。当ISP提供的合法IP地址略少于网络内部的计算机数量时。可以采用动态转换的方式。

  端口多路复用(Port address Translation,PAT)是指改变外出数据包的源端口并进行端口转换,即端口地址转换(PAT,Port Address Translation).采用端口多路复用方式。内部网络的所有主机均可共享一个合法外部IP地址实现对Internet的访问,从而可以最大限度地节约IP地址资源。同时,又可隐藏网络内部的所有主机,有效避免来自internet的攻击。因此,目前网络中应用最多的就是端口多路复用方式。

受到NAT影响的应用程序

一些高层协议(比如FTP,Quake,SIP,VPN)是在IP包的有效数据内发送网络层(第三层)信息的。比如,主动模式的FTP使用单独的端口分别来控制命令传输和数据传输。当请求一个文件传输时,主机在发送请求的同时也通知对方自己想要在哪个端口接受数据。但是,如果主机是在一个简单的NAT防火墙后发送的请求,那么由于端口的映射将会使对方接收到的信息无效。

一个应用层网关(Application Layer Gateway或ALG)可以修正这个问题。运行在NAT防火墙设备上的ALG软件模块可以更新任何由地址转换而导致无效的信息。显然,ALG需要明白它所要修正的上层协议,所以每个有这种问题的协议都需要有一个单独的ALG。
  但是,除FTP外的大多数传统的客户机-服务器协议不需要发送网络层(第三层)信息,也就不需要ALG
  这个问题的另一个可能的解决方法是使用象STUN这样的技术,但是这只针对建立在UDP上的高层协议,并且需要它内建这种技术。这种技术对对称NAT也是无效的。还有一种可能的方案是UPnP,但它需要和NAT设备配合起来使用.

工作原理

当一台小型商务企业的内部网计算机用户连接到 Internet 资源时,该用户的 TCP/IP 协议产生一个 IP 数据包,该数据包包含以下值,这些值位于 IP  TCP  UDP 标头中:(粗体内容表示受 NAT 影响的项目)
  
  • 目标 IP 地址:Internet 资源 IP 地址
  •  IP 地址:私有 IP 地址
  • 目标端口:Internet 资源 TCP  UDP 端口
  • 源端口源应用程序 TCP  UDP 端口
  
  请求源主机或者其它路由器将此 IP 数据包发送给 NAT, 然后由 NAT 将向外发送的数据包的地址解析如下:
  
  • 目标IP地址:Internet 资源 IP 地址
  • IP 地址:ISP 分配的公用地址
  • 目标端口:Internet 资源 TCP  UDP 端口
  • 源端口:重新映射的源应用程序TCP  UDP 端口
  
  NAT 将重新映射的 IP 数据包发送到 Internet 。响应计算机将向 NAT 返回一个响应。当 NAT 接收到此响应时,该数据包将包含以下地址信息:
  
  • 目标IP 地址:ISP 分配的公用地址
  • IP地址:Internet 资源 IP 地址
  • 目标端口:重新映射的源应用程序 TCP  UDP 端口
  • 源端口:Internet 资源的 TCP 或者 UDP 端口
  
  当 NAT 完成映射和解析地址后,将向 Internet 客户端发送数据包,此数据包包含以下地址信息:
  
  • 目标 IP 地址:私有 IP 地址
  •  IP 地址:Internet 资源 IP 地址
  • 目标端口:源应用程序TCP 或者 UDP 端口
  • 源端口:Internet 资源 TCP  UDP 端口
  
  对于向外发送的数据包,源 IP 地址和 TCP/UDP 端口号将被映射到一个公用源 IP 地址和一个可能变化的 TCP/UDP端口号。对于接收的数据包,目标 IP 地址和 TCP/UDP 端口号将被映射到私有 IP 地址和初始 TCP/UDP 端口号。

  那么,NAT转换表何时进行初始化呢,一般有三种方式:手工初始化,外发数据报时,传入名字查找。大多数NAT实现方式都使用外发数据报时初始化转换表,当内部主机通过NAT向外发送数据报时,NAT此时在转换表中创建一个表项。 

posted @ 2009-10-09 10:01  gshine  阅读(4376)  评论(0编辑  收藏  举报