我读过有关 Quake 3 网络代码的文章,他们必须处理一些较旧的 NAT 随机切换客户端端口的情况。
这个问题现在有多普遍?在实施游戏网络协议时是否值得处理?
换句话说,实现虚拟连接的UDP网络协议是否需要处理NAT突然改变客户端端口的情况?
答案1
您不应该依赖于来自同一主机的连接之间的源端口的稳定性,并且如果您使用无连接的 UDP(通常推荐用于游戏应用程序,因为保持低延迟胜过需要可靠的传输),您不应该期望它们在单个数据包之间保持稳定。
NAT 本质上通常需要处理源端口信息,因此这使情况变得更加复杂,尽管单级 NAT 可能相对聪明,并且尝试一旦有多个层(在移动网络和一些免费无线接入点中并不罕见)消失,就保持从一个给定主机到另一个主机的数据包的源端口稳定。
答案2
不,不值得处理。正确的网络不会使用较旧的 NAT,它们会使用正确的工具来完成工作。