我遇到了一个问题,客户端服务器应用程序经常向服务器发送 UDP 数据,服务器重定向回客户端。但在少数情况下,我在客户端根本收不到数据包。
我检查了客户端路由器,发现它没有收到任何数据包,但服务器端路由器显示它已将数据包传输到客户端。那么数据包在哪里丢失了呢?
有时我还观察到,经过一段时间后,客户端会在一段时间后开始接收数据包。我检查了服务器端路由器和应用程序,发现 NAT 端口存在差异,因为服务器路由器从不同的 NAT 端口接收,但客户端仍从前一个端口发送。
我不明白为什么这个客户端 NAT 端口会因服务器端路由器上的活动会话而改变...这是双重 NAT 的情况吗?
答案1
双重 NAT 是指从源到目标的路径中发生两次网络地址转换。例如,一个 NAT 在另一个 NAT 之后。这种情况不太可能发生,但有时也有可能。例如,执行 NAT 的 wifi 路由器连接到另一个网络,该网络的网关也执行 NAT。
UDP 是一种不可靠的协议。因此数据包可能根本无法到达。应用程序应该足够智能来处理这种情况。
对于 UDP 应用程序,通常当客户端(位于 NAT 后面)通过 NAT 向服务器发送 UDP 数据包时,NAT 会打开一个端口,以便从服务器接收响应并将其转发回客户端。这是动态的,并且只会在规定的时间内打开。您没有说明您使用的是哪种 NAT,所以谁知道这些超时可能是多少。