Page 54 - Web性能权威指南
P. 54

TCP 超时和 NAT

                从技术角度讲,NAT 设备不需要额外的 TCP 超时机制。TCP 协议就遵循一个设计
                严密的握手与终止过程,通过这个过程就可以确定何时需要添加或删除转换记录。
                遗憾的是,实际应用中的 NAT 设备给 TCP 和 UDP 会话应用了类似的超时逻辑。

                这样就导致 TCP 连接有时候也需要双向 keep-alive 分组。如果你的 TCP 连接突然
                断开,那很有可能就是中间 NAT 超时造成的。


               3.2.2 NAT穿透

               不可预测的连接状态处理是 NAT 设备带来的一个严重问题,但更为严重的则是很
               多应用程序根本就不能建立 UDP 连接。尤其是 P2P 应用程序,涉及 VoIP、游戏和
               文件共享等,它们客户端与服务器经常需要角色互换,以实现端到端的双向通信。

               NAT 带来的第一个问题,就是内部客户端不知道外网 IP 地址,只知道内网 IP 地
               址。NAT 负责重写每个 UDP 分组中的源端口、地址,以及 IP 分组中的源 IP 地址。
               如果客户端在应用数据中以其内网 IP 地址与外网主机通信,连接必然失败。所谓的
              “透明”转换因此也就成了一句空话,如果应用程序想与私有网络外部的主机通信,
               那么它首先 必须知道自己的外网 IP 地址。
               然而,知道外网 IP 地址还不是实现 UDP 传输的充分条件。任何到达 NAT 设备外网 IP
               的分组还必须有一个目标端口,而且 NAT 转换表中也要有一个条目可以将其转换为内
               部主机的 IP 地址和端口号。如果没有这个条目(通常是从外网传数据进来),那到达的
               分组就会被删除(图 3-4)。此时的 NAT 设备就像一个分组过滤器,除非用户通过端口
               转发(映射)或类似机制配置过,否则它无法确定将 . 分组发送给哪台内部主机。











                                                  ገ࣑՗


                                                  ాྪ                ྔྪ

                                                        ܋੨                ܋੨




               图 3-4:由于没有映射规则,入站分组直接被删除

               36   |   第 3 章
   49   50   51   52   53   54   55   56   57   58   59