![NAT 和 UDP 默认回复](https://linux22.com/image/1418613/NAT%20%E5%92%8C%20UDP%20%E9%BB%98%E8%AE%A4%E5%9B%9E%E5%A4%8D.png)
如果我将 UDP 数据包从 NAT 后面的本地端口 M 的机器 A 发送到机器 B 的端口 N,而机器 B 位于 NAT 之外(在互联网上的其他地方),我是否可以合理地预期 NAT 会将从机器 B(本地端口 N)收到的 UDP 数据包传递回机器 A 上的端口 M,而不需要在 NAT 上手动进行端口转发?
我知道如果路由器配置为尽可能保留源端口,并且该源端口未被使用,那么答案是肯定的。但我的问题更多的是关于概率。大多数情况下,大多数路由器是否默认启用此配置。
换句话说,如果我制作一个使用 UDP 的多人游戏,是否可以合理地期望它能在大多数人的计算机上运行(即使大多数人在家里都有路由器)?
答案1
DNS 查询的行为就像这样:端口 53 上的 UDP 数据包从您的计算机发送到 Internet,然后再返回。
但这只是一种“回复-响应”的事情,响应不应及时延迟,否则将会丢失。
在游戏中,服务器和客户端之间会有很多数据包。您需要实现对服务器状态的持续轮询才能使其正常工作。请记住:一个问题 - 一个答案。
从技术上讲,你可以通过这种方式实现游戏,而无需在路由器上打开端口