Page 55 - Web性能权威指南
P. 55
需要注意的是,上述行为对客户端应用程序不是问题。客户端应用程序基于内部网
络实现交互,会在交互期间建立必要的转换记录。不过,如果隔着 NAT 设备,那
客户端(作为服务器)处理来自 P2P 应用程序(VoIP、游戏、文件共享)的入站连
接时,就必须面对 NAT 穿透问题。
为解决 UDP 与 NAT 的这种不搭配,人们发明了很多穿透技术(TURN、STUN、
ICE),用于在 UDP 主机之间建立端到端的连接。
3.2.3 STUN、TURN与ICE
STUN(Session Traversal Utilities for NAT)是一个协议(RFC 5389),可以让应用
程序发现网络中的地址转换器,发现之后进一步取得为当前连接分配的外网 IP 地址
和端口(图 3-5)。为此,这个协议需要一个已知的第三方 STUN 服务器支持,该服
务器必须架设在公网上。
ྔྪJQںࢅ܋੨
IPǖ50.76.44.114ā܋੨ǖ23123
ޜခഗ
图 3-5:STUN 查询外网 IP 地址和端口
假设 STUN 服务器的 IP 地址已知(通过 DNS 查找或手工指定),应用程序首先向
STUN 服务器发送一个绑定请求。然后,STUN 服务器返回一个响应,其中包含在外
网中代表客户端的 IP 地址和端口号。这种简单的方式解决了前面讨论的一些问题:
• 应用程序可以获得外网 IP 和端口,并利用这些信息与对端通信;
• 发送到 STUN 服务器的出站绑定请求将在通信要经过的 NAT 中建立路由条目,
使得到达该 IP 和端口的入站分组可以找到内网中的应用程序;
• STUN 协议定义了一个简单 keep-alive 探测机制,可以保证 NAT 路由条目不超时。
有了这个机制,两台主机端需要通过 UDP 通信时,它们首先都会向各自的 STUN
服务器发送绑定请求,然后分别使用响应中的外网 IP 地址和端口号交换数据。
但在实际应用中,STUN 并不能适应所有类型的 NAT 和网络配置。不仅如此,某些
情况下 UDP 还会被防火墙或其他网络设备完全屏蔽。这种情况在很多企业网很常
UDP的构成 | 37