Win XP中网络地址转换(NAT)概述(一) Win XP NAT

简介 随着越来越多的家庭和小型企业添置计算机,它们会发现网络是一种非常强大的计算机资源共享工具。Internet 连接则是网络上更珍贵的资源,有可能被共享。为共享 Internet 连接,同时利用价格便宜、管理简单的家庭或小型办公网络,需要部署 Internet 网关。Internet 网关通常将 NAT (网络地址转换) 作为将多个主机连接到 Internet 以共享单个公共 IP 地址的途径。但不幸的是,该解决方案却会破坏多种网络应用程序。我们将在本文中对此加以说明。 现有的“NAT 穿越”技术允许网络应用程序检测是否存在本地 NAT 设备。检测到后,应用程序随即对 NAT 进行配置,定义相应的映射来解决兼容性问题。 本文属于概述性文章,将向网络应用程序的用户和开发人员简要介绍一下 NAT,介绍如何识别常见 NAT 问题,同时介绍应用程序如何使用 “NAT 穿越”解决这些问题。需要关注的 Internet 网关设备的一个重要特征是 UPnP 认证。使用者购买或从服务提供商那里租借 Internet 网关设备时,强烈建议只考虑那些通过用于 NAT 穿越的 UPnP 认证的设备,这是因为该功能对于满足用户、降低支持费用及使用更有创新性的服务和应用程序而言至关重要。 对网关设备厂商而言,在 Internet 网关设备中加入对 NAT 穿越的 UPnP 技术支持并不复杂,费用不高,也不用花大量的时间。通过使用 UPnP (已经是基于 Internet 标准和协议的),Internet 网关设备制造商就可以解决 NAT 穿越问题,并将优点延伸至大多数经过该设备的应用程序。这同许多应用程序开发人员或网关设备制造商不得不为解决上述问题而提供一次性解决方案形成鲜明的对比。本文并非旨在为希望在 Internet 网关设备中实施“NAT 穿越”的硬件制造商提供详细的指南。有关此信息,请参阅 UPnP 论坛 Web 站点。 Windows 体系结构、网络以及 UPnP 体系结构方面的知识会对充分理解本文会有所帮助,但并不是必需的。 什么是 NAT? 网络地址转换 (NAT) 是一个 Internet 工程任务组 (Internet Engineering Task Force,IETF) 标准,用于允许专用网络上的多台 PC (使用专用地址段,例如 10.0.x.x、192.168.x.x、172.x.x.x) 共享单个、全局路由的 IPv4 地址。IPv4 地址日益不足是经常部署 NAT 的一个主要原因。Windows XP 和 Windows Me 中的“Internet 连接共享”及许多 Internet 网关设备都使用 NAT,尤其是在通过 DSL 或电缆调制解调器连接宽带网的情况下。 NAT 对于解决 IPv4 地址耗费问题 (在 IPv6 部署中却没必要) 尽管很有效,但毕竟属于临时性的解决方案。这种 IPv4 地址占用问题在亚洲及世界其他一些地方已比较严重,且日渐成为北美地区需要关注的问题。这就是人们为什么长久以来一直关注使用 IPv6 来克服这个问题的原因所在。 除了减少所需的 IPv4 地址外,由于专用网络之外的所有主机都通过一个共享的 IP 地址来监控通信,因此 NAT 还为专用网络提供了一个隐匿层。NAT 与 防火墙 或代理服务器不同,但它确实有利于安全。


**图 1:使用 NAT 设备进行 Internet 通信的网络示例。
正如固定电缆调制解调器或 DSL 调制解调器可以作为 NAT 设备一样,
PC 也可以作为 NAT 设备。 **

常规 NAT 操作 NAT 设备后面的客户端通常通过 DHCP (动态主机配置协议) 分配到专用的 IP 地址,或者由管理员进行静态配置。在该专用网络的外面进行通信时,通常会发生下列事情。 在客户机上 当应用程序想同服务器通信时,它将打开与源 IP 地址、源端口、目标 IP 地址、目标端口及网络协议相关联的套接字。这样可以识别通信所需的两个端点。当应用程序利用该套接字传输信息时,客户机的专用 IP 地址 (源 IP 地址) 和端口 (源端口) 将被插入数据包的源字段中。数据包的目标字段将包含服务器的 IP 地址 (远程主机 - 目标 IP 地址) 和端口。由于该数据包的目的地是该专用网络之外的某个位置,因此客户机将把该数据包转发给默认的网关。这种情况下的默认网关就是 NAT 设备。 NAT 设备上的输出数据包 NAT 设备将截获该输出数据包,然后利用目标 IP 地址 (服务器)、目标端口、NAT 设备的外部 IP 地址、外部端口、网络协议及客户机的内部 IP 地址和端口来创建端口映射。 NAT 设备将维护这些映射组成的表,并将该端口的映射存储在表中。外部 IP 地址和端口就是该数据通信用于取代内部客户机 IP 地址和端口的公共 IP 地址和端口。 NAT 设备随即将来自客户机专用内部 IP 地址和端口的数据包的源字段转换为 NAT 设备的公共 IP 地址和端口,从而对这些数据包进行转换。 然后,数据包将通过外部网络发送出去,并最终到达目标服务器。


图 2:出站数据包转换的示例。

服务器上 当服务器接收到数据包时,它认为自己是在和一台具有可全球路由 IP 地址的计算机进行通信。它会利用自己源字段中的 IP 地址和端口将响应数据包定向到 NAT 设备的外部 IP 地址和端口。 NAT 设备上的输入数据包 NAT 从服务器那接收到这些数据包,然后将数据包与其端口映射表进行比较。如果 NAT 发现某个端口映射的远程主机 IP 地址、远程端口、外部端口及网络协议与输入数据包的源 IP 地址、源端口、目标端口和网络协议匹配,NAT 就会进行反向转换。NAT 将把数据包目标字段中的外部 IP 地址和外部端口替换为客户机的专用 IP 地址和内部端口。 然后,NAT 将内部网络上的数据包发送给客户机。然而,如果 NAT 找不到对应的端口映射,它就会丢弃输入数据包并中断连接。 NAT 的作用是,客户机将能在全球 Internet 上与专用 IP 地址进行通讯,而应用程序或客户机却无需做任何额外的工作。这意味着应用程序不必调用额外的 API,客户机也不必执行附加的配置。在这种情况下,NAT 对客户机和服务器应用程序来说都是透明的 - 所有对象都正常工作。 但是,并非所有网络应用程序都使用能与 NAT 协同工作的协议。这就是问题的所在。 NAT 与应用程序之间的常见问题 如果客户机在开始连接和接收回复时都使用同一端口,则让客户机利用 NAT 来共享单个可全局路由的 IP 地址不会有什么问题。但是,许多应用程序所用策略的假定条件在 NAT 设备用于连接 Internet 时都不成立。这里将讨论其中一些问题。

Published At
Categories with 服务器类
Tagged with
comments powered by Disqus