计算机网络 NAT与IP隧道

目录

NAT

NAT定义

NAT的工作机制

NAT-PT (NAPT-PT)

NAT的潜在问题

 解决NAT的潜在问题与NAT穿越

IP隧道


NAT

NAT定义

NAT (Network Address Translator)是用于在本地网络中使用私有地址,在连 接互联网时转而使用全局IP地址的技术。

除转换IP地址外,还出现了可以转换 TCP、UDP端口号的NAPT (Network Address Ports Translator)技术,由此可以实 现用一个全局IP地址与多个主机的通信。

NAT (NAPT)实际上是为正在面临地址枯竭的IPv4而开发的技术。不过, 在IPv6中为了提高网络安全也在使用NAT, 在IPv4和IPv6之间的相互通信当中 常常使用NAT-PT。

NAT的工作机制

以10. 0. 0. 10的主机与163. 221. 120. 9的主机进行通信为例。

利用NAT, 途中的NAT路由器将发送源地址从10. 0. 0. 10转换为全局的IP地址 (202.244. 174.37)再发送数据。反之,当包从地址163. 221. 120. 9发过来时,目 标地址(202.244. 174.37)先被转换成私有IP地址10. 0. 0. 10以后再被转发。

计算机网络 NAT与IP隧道

在NAT (NAPT)路由器的内部,有一张自动生成的用来转换地址的表。当 10.0.0. 10向163. 221. 120. 9发送第一个包时生成这张表,并按照表中的映射关系 进行处理。

当私有网络内的多台机器同时都要与外部进行通信时,仅仅转换IP地址,人 们不免担心全局IP地址是否不够用。

这时采用包含端口号一起 转换的方式(NAPT)可以解决这个问题

计算机网络 NAT与IP隧道

在使用 TCP或UDP的通信当中,只有目标地址、源地址、目标端口、源端口以及协议类 型(TCP还是UDP)五项内容都一致时才被认为是同一个通信连接。此时所使用 的正是NAPT。

主机163. 221. 120. 9的端口号是80, LAN中有两个客户端 10. 0. 0. 10和10. 0. 0. 11同时进行通信,并且这两个客户端的本地端口都是1025。 此时,仅仅转换IP地址为某个全局地址202.244. 174.37, 会令转换后的所有数字 完全一致。为此,只要将10. 0. 0. 11的端口号转换为1026就可以解决问题。生成一个NAPT路由器的转换表,就可以正确地转换地址跟端口的组 合,令客户端A、B能同时与服务器之间进行通信。

这种转换表在NAT路由器上自动生成。例如,在TCP的情况下,建立TCP 连接首次握手时的SYN包一经发出,就会生成这个表。而后又随着收到关闭连接 时发出FIN包的确认应答从表中被删除。

NAT-PT (NAPT-PT)

现在很多互联网服务都基于IPv4。如果这些服务不能做到在IPv6中也能正常 使用的话,搭建IPv6网络环境的优势也就无从谈起了。

为了解决这个问题,就产生了NAT-PT (NAPT-PT)规范。NAT-PT是将 IPv6的首部转换为IPv4的首部的一种技术。有了这种技术,那些只有IPv6地址 的主机也就能够与IPv4地址的其他主机进行通信了。

NAT-PT有很多形式,其中最让人们期待的当属结合DNS和IP首部替换的 DNS-AIC。

计算机网络 NAT与IP隧道

NAT的潜在问题

由于NAT (NAPT)都依赖于自己的转换表,因此会有如下几点限制:

  • 无法从NAT的外部向内部服务器建立连接
  • 转换表的生成与转换操作都会产生一定的开销。
  • 通信过程中一旦NAT遇到异常需重新启动时,所有的TCP连接都将被 重置。
  • 即使备置两台NAT做容灾备份,TCP连接还是会被断开。

 解决NAT的潜在问题与NAT穿越

解决NAT上述潜在的问题有两种方法:

第一种方法就是改用IPv6。在IPv6环境下可用的IP地址范围有了极大的扩 展,以至于公司或家庭当中所有设备都可以配置一个全局IP地址。因为如果地 址枯竭的问题得到解决,那么也就没必要再使用NAT了。然而,IPv6的普及到现 在为止都远不及人们的预期,前景不容乐观。

另一种方法是,即使是在一个没有NAT的环境里,根据所制作的应用,用户 可以完全忽略NAT的存在而进行通信。在NAT内侧(私有IP地址的一边)主机 上运行的应用为了生成NAT转换表,需要先发送一个虚拟的网络包给NAT的外 侧。而NAT并不知道这个虚拟的包究竟是什么,还是会照样读取包首部中的内容 并自动生成一个转换表。这时,如果转换表构造合理,那么还能实现NAT外侧的 主机与内侧的主机建立连接进行通信。有了这个方法,就可以让那些处在不同 NAT内侧的主机之间也能够进行相互通信。此外,应用还可以与NAT路由器进行 通信生成NAT表,并通过一定的方法将NAT路由器上附属的全局IP地址传给 应用了。

如此一来,NAT外侧与内侧可以进行通信,这种现象叫做"NAT穿越”。于 是NAT那个无法从NAT的外部向内部服务器建立连接的问题也就迎刃而解了。而且这种方法与已有的IPV4环境的兼容性非常好,即使不迁移到IPv6也能 通信自如。出于这些优势,市面上已经出现了大量与NAT紧密集合的应用。

然而,NAT友好的应用程序也有它的问题。例如,NAT的规范越来越复杂, 应用的实现变得更耗时。而且应用一旦运行在一个开发者未预想到的特殊网络环 境中时,会出现无法正常工作、遇到状况时难于诊断等问题。

IP隧道

在一个网络环境里,网络A、B使用IPv6, 如果处于中间位 置的网络C支待使用IPv4的话,网络A与网络B之间将无法直接进行通信。为了 让它们之间正常通信,这时必须得采用IP隧道的功能。

计算机网络 NAT与IP隧道

IP隧道中可以将那些从网络A发过来的IPv6的包统和为一个数据,再为之 追加一个IPv4的首部以后转发给网络C。

一般情况下,紧接着IP首部的是TCP或UDP的首部。然而,现在的应用 当中"IP首部的后面还是IP首部”或者"IP首部的后面是IPv6的首部”等情 况与日俱增。这种在网络层的首部后面继续追加网络层首部的通信方法就叫做 "IP隧道”。

计算机网络 NAT与IP隧道

构造一个既支持IPv4又支持IPv6的网络是一项极其庞大的工程。在这种网络环境中,由于其路由表的量有可能会涨到平常的两倍,所以会给网络管理员增加不小的负担,而在路由器进行两种协议都要支持的设置也是相当费劲的事情。骨干网上通常使用IPV6或IPv4进行传输。

因此,那些不支持的路由器就可以采用IP隧道的技术转发数据包,而对应的IP地址也可以在一旁进行统一管理。这就在一定程度上减轻了管理员的部分工作。此外,由于骨干网的设备上仅在一旁应对IP隧道即可,这也可以大量地减少投资成本。

  • Mobile IP
  • 多播包的转播
  • IPv4网络中传送IPv6的包(6to4)
  • IPv6网络中传送IPv4的包
  • 数据链路帧通过IP包发送(L2TP)

一个利用IP隧道转发多播消息的例子。由于现在很多路由器 上没有多播包的路由控制信息,多播消息也就无法穿越路由器发送信息。那么在 这类环境当中,如果使用IP隧道,就可以使路由器用单播的形式发包,也就能够 向距离较远的链路转发多播消息。

计算机网络 NAT与IP隧道