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


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 时都不成立 。这里将讨论其中一些问题 。

内部网络上的服务很多网络服务或服务器假定,如果建立监听套接字,则 Internet 上的所有客户机都可以与之联系 。如果在网络的边界上有 NAT 设备,为了将通信引入到内部网络服务,NAT 需要存在端口映射 。但在网络边缘上有 NAT 设备时,NAT 却要求进行端口映射,以便将输入通讯转发给内部网络上的服务 。因此,该服务仅对专用网络上的客户机有效 。它对于 Internet 其余部分而言不可用 。
该问题最常见的解决办法是手动配置端口映射,使 NAT 设备将定向给 NAT 特定外部 IP 地址和端口的通信转发给该服务所用的内部 IP 地址和端口 。
利用该端口映射,服务可以接收输入数据包,从而使服务可被专用网络外部的客户机所使用 。建立端口映射之前,网络是断开的 。
手动配置映射通常很复杂,为了正确配置映射需要较有经验的用户 。因此,除非是联系自己宽带 Internet 服务提供商、PC 制造商、零售商或 Internet 网关制造商的客户服务中心以尝试找到问题的根源及解决方案,否则许多一般用户或小型企业用户将无法使用所需的应用程序或服务 。上述情况还会造成映射的不严格:许多外部客户机都可以使用该映射来连接服务器 。
嵌入地址或端口
有些网络应用程序假定客户机所分配的 IP 地址和端口将始终可进行全局路由,并可直接在 Internet 上使用 。许多情况下,它们属于 IETF 保留地址范围内的专用 IP 地址 。应用程序会在发送给服务器的数据包的负载中包含该专用 IP 地址或端口 。服务器可以将该嵌入地址用作联系客户机时所用的地址 。

推荐阅读