工作原理及术语解释

 
IP地址耗尽促成了CIDR的开发,但CIDR开发的主要目的是为了有效的使用现有的internet地址。而同时根据RFC 1631IP Network Address Translator)开发的NAT却可以在多重的internet子网中使用相同的IP,用来减少注册IP地址的使用。
  NAT技术使得一个私有网络可以通过internet注册IP连接到外部世界,位于inside网络和outside网络中的NAT路由器在发送数据包之前,负责把内部IP翻译成外部合法地址。内部网络的主机不可能同时于外部网络通信,所以只有一部分内部地址需要翻译。

   NAT 的翻译可以采取静态翻译( static translation)和动态翻译(dynamic translation)两种。 静态翻译将内部地址和外部地址一对一对应。当 NAT 需要确认哪个地址需要翻译,翻译时采用哪个地址 pool 时,就使用了动态翻译。采用 port multiplexing 技术,或改变外出数据的源 port 技术可以将多个内部 IP 地址影射到同一个外部地址,这就是 PAT port address translator )。
  当影射一个外部 IP 到内部地址时,可以利用 TCPload distribution技术 。使用这个特征时,内部主机基于 round-robin 机制,将外部进来的新连接定向到不同的主机上去。注意: load distributiong只有在影射外部地址到内部的时候才有效。
  
   NAT 使用的几种情况:
   a ,连接到 internet ,但却没有足够的合法地址分配给内部主机。
   b ,更改到一个需要重新分配地址的 ISP
   c ,有相同的 IP 地址的两个 internat 合并。
   d ,想支持负载均衡(主机)。
  
  采用 NAT后,一个最主要的改变就是你失去了端对端IPtraceability,也就是说,从此
  你不能再经过 NAT使用pingtraceroute,其次就是曾经的一些IPIP的程序不再可以正常运行,潜在的不易被观察到的缺点就是增加了网络延时。
  
   NAT 可以支持大部分 IP 协议,但有几个协议需要注意,首先 tftp rlogin,rsh,rcp ip
   multicast 都被 NAT 支持,其次就是 bootp snmp 和路由表更新全部给拒绝了。
  
   NAT的几个相关概念
   Inside Local IP address: 指定于内部网络的主机地址,全局唯一,但为私有地址
   Inside Global IP address: 代表一个或更多内部 IP 到外部世界的合法 IP (需转换的合法 IP
   Outside Global IP address: 外部网络主机的合法 IP (目标地址)
   Outside Local IP address: 外部网络的主机地址,看起来是内部网络的,该地址不必是合法 IP
   Simple Translation Entry: 影射 IP 到另一个地址的 Entry
   Extended Translation Entry: 影射 IP 地址和端口到另一个 pair Entry
  采用 NAT,可以实现以下几个功能:
   a Translation inside local addresses
   b Overloading inside global addresses
   c TCP load distribution
   d Handing overlapping networks
  下面我们一一叙述它们的工作原理。
  
   a,内部地址翻译(Translation inside local addresses)
  这是比较通用的一种方法,将内部 IP 一对一的翻译成外部地址。
  在内部主机连接到外部网络时,当第一个数据包到达 NAT 路由器时, router 检查它的 NAT 表,因为是 NAT 是静态配置的,故可以查询出来( simply entry ),然后 router 将数据包的内部局部 IP (源地址)更换成内部全局地址,再转发出去。 外部主机接受到数据包用接受到的内部全局地址来响应, NAT 接受到外部回来的数据包,再根据 NAT 表把地址翻译成内部局部 IP ,转发过去。
   b,内部全局地址复用(overloading inside glogal addresses
  使用地址和端口 pair 将多个内部地址影射到比较少的外部地址。这也是所谓的 PAT 。和内部地址翻译一样, NAT router 同样也负责查表和翻译内部 IP 地址,唯一的区别就是由于使用了 overloading router 将复用同样的内部全局 IP 地址,并存储足够的信息以区分它和其他地址,这样查询出来的是 extended entry
   NAT router 和外部主机的通讯采用翻译过的内部全局地址,故同一般的通信没有差别, router 到内部主机通讯时,同样要查 NAT 表。
  
   cTCP负载重分配(TCP load distributing 和以上两种操作不同,这是 NAT由外到内的翻译 所以那种以为 WEB server一定要放置到NAT外部的说法是错误的。
  工作原理:外部主机向虚拟主机(定义为内部全局地址)通讯, NAT router 接受外部主机的请求并依据 NAT 表建立与内部主机的连接,把内部全局地址(目的地址)翻译成内部局部地址,并转发数据包到内部主机,内部主机接受包并作出响应。 NAT router 再使用内部局部地址和端口查询数据表,根据查询到的外部地址和端口做出响应。
  此时,如果同一主机再做第二个连接, NAT router 将根据 NAT 表将建立与另一虚拟主机的连接,并转发数据。
  
   d,处理重叠网络。(两个分公司重叠网络通信)
  这种方法主要用于两个 intranet的互连,同样给我们处理两个重叠网络提供了方法。它的实现要求DNS server的支持(用于区别两个不同的主机)。
   1 ,主机 A 要求向主机 C 建立连接,先象 DNS server 做地址查询。
   2 NAT router 截获 DNS 的响应,如果地址有重叠,将翻译返回的地址。它将创建一个 simply entry 把重叠的外部全局地址(目的地址)翻译成外部局部地址。
   3 ,路由器转发 DNS 响应到主机 A ,它已经把主机 C 的地址(外部全局地址)翻译成外部局部地址。
   4 ,当路由器接受到主机 C 的数据包时,它将建立内部局部、全局,外部全局、局部地址间的转换,主机 A 将由内部局部地址(源地址)翻译成内部全局地址,主机 C 将由外部全局地址(目的地址)翻译成外部局部地址。
   5 ,主机 C 接受数据包并继续通讯。
 
 

NAT的转换表<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

   NAT 路由器怎样知道从 Internet 来的入分组的目的地址呢 ? 可能有几百个或几千个专用 IP 地址,每一个都属于一个特定主机。如果 NAT 路由器有一个转换表,问题就解决了。最简单的形式是一个转换表只有两列:专用地址和外部地址 ( 分组的目的地址 ) 。当这个路由器对出分组的源地址进行转换时,它也记下来目的地址 ——— 这个分组要去的地方。当响应从这个目的地址返回时,路由器就使用这个分组的源地址 ( 作为外部地址 ) 来找出这个分组的专用地址。图 3 给出了这个概念。应当注意,改变的 ( 被转换的 ) 地址用灰色表示。

NAT的优点和缺陷:

   NAT 方案在一定程度上减缓了 IP 地址耗尽的周期和路由表规模越来越大的问题,提供了一种非常方便的方式来解决私有网络与 Internet 的互连问题。

   NAT 的优点:

终端用户可以透明地访问 Internet
利用 NAT 可以做到对外部网络隐藏内部网络的体系结构,从外部网络无法知道究竟是哪台主机发送或接收数据,从另一个角度,它也是一个缺点。
  为已建成的私有网络方便地建立与 Internet 的连接,而不必去修改每台主机的地址以及内部路由器的配置。
   * 在实现 NAT 时,可以加入一些服务器代理和包过滤的功能,可以获得很好的安全性及其它性能,而不用增加管理的开销。
  以极少的全局地址实现一个较大型的私有网络与 Internet 的互连。
  但 NAT 方案含有很多消极特征,决定了它只能是一个临时的解决方案,包括:

  如果网络规模增大,访问 Internet 的主机增多,地址对应表的规模必然会越来越大,这将导致效率的降低。
  它会增加错误寻址的可能性。
  它隐藏了发送报文的主机的有关信息,使得外部网络难于对它们进行管理,例如,若内部网络中某台主机在 Internet 上违反安全规则, Inter—net 就无法查处 元凶
  由于 NAT 要修改相应的 IP 地址,这使得不能对包含 IP 地址或有关 IP 地址信息的内容 (
   TCP 报文头的校验和 ) 进行加密,降低了安全性。
   l 那些使用到 IP 地址的高层应用将受到限制,除非 NAT 有可能修改其中包含的 IP 地址信息,即便如此,对这些高层应用还是有所限制,如不能加密等。
   *ICMP SNMP DNS 等等各种网络上使用的协议在进行地址翻译时所带来的问题,难予考虑周全。