UDP打孔过期

时间:2014-01-02 08:15:38

标签: sockets udp hole-punching

更新

原来这个问题与NAT和UDP打孔无关。 所以我创建了一个new Q.

我使用以下方法实现了UDP打孔:

已知端口上的已知服务器(无NAT)正在处理传入的UDP。

NAT后面的客户端向服务器发送数据报,然后服务器通过向该客户端发送对等体的地址来响应。

客户端现在开始使用同一套接字上的UDP与对等方进行通信(当然,但是使用不同的地址。)

如果过了一会儿,客户端停止与对等方的通信,再次向服务器发送另一个数据报,这个数据报没有到达(除非我通过从服务器向客户端发送keepalive数据报来保持通道打开。)

我的问题: 怎么可以从服务器< - >客户端之间的数据报切换到peer< - >客户端之间的数据报, 但是当我切换回来并且客户端再次发送到服务器时,他们没有到达?

1 个答案:

答案 0 :(得分:3)

我怀疑这种行为特定于您的NAT。听起来端口映射逻辑存在问题。您可能会在网络上放置一个不同的NAT框,并看到不同的行为。

我的建议是始终为每个对等会话使用不同的本地端口和套接字。因此,假设您在第一个会话中使用端口2000与服务器和对等方通信,那么下一个会话应该使用完全不同的本地端口。然后,NAT与前一个端口出现的任何问题都不会影响这个新套接字。

通常,如果要在一对主机之间保持UDP通道打开,则每45秒至少应有一个数据包流。