如何从UDP服务器发送数据到NAT后面的UDP客户端?

6
我想将数据从UDP服务器发送到UDP客户端。服务器具有公共IP,并且正在监听已知端口号,因此客户端可以使用UDP向服务器发送数据,但客户端位于NAT后面,并且客户端未在已知端口上进行侦听。当服务器希望发送数据到客户端时,无法发送数据。 客户端能否联系服务器,服务器可以使用客户端网关的端口和公共地址回复吗?
是否有任何方法或良好的方法可以将数据从UDP服务器发送到位于NAT后面的UDP客户端?

2
谷歌打洞。涉及从客户端向服务器发送数据包,以便NAT认为建立了连接。 - camelccc
1
NAT穿透是一个经过深入研究的领域。以下是一些入门资料:1)http://en.wikipedia.org/wiki/UDP_hole_punching,2)http://think-like-a-computer.com/2011/09/16/types-of-nat/。 - victorx
1个回答

8

在大多数情况下,服务器可以在接收到UDP客户端的传入消息后立即发送数据。服务器可以将数据包发送到源IP和端口号。但是,如果服务器想要在需要时随时发送数据,则可能无法正常工作。NAT会清除IP/端口映射。

我能想到一种解决方案,但不是非常有效。UDP客户端应该不断向服务器发送ping请求。这样,它通过保持通信活动来防止NAT清除映射。

http://www.brynosaurus.com/pub/net/p2pnat/

上面给出的链接解释了UDP打洞。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接