【发布时间】:2013-03-26 06:33:08
【问题描述】:
现在大多数设备都在 NAT 之后。当我们与服务器建立连接时,路由器将为该连接创建映射并保持该映射活动一段时间。为了保持这个映射,我们必须定期主动发送keep alive包。
如何知道需要的存活时间间隔?这个间隔在协议(UDP,TCP,...)之间是否不同?有文件吗?
【问题讨论】:
标签: connection router intervals nat keep-alive
现在大多数设备都在 NAT 之后。当我们与服务器建立连接时,路由器将为该连接创建映射并保持该映射活动一段时间。为了保持这个映射,我们必须定期主动发送keep alive包。
如何知道需要的存活时间间隔?这个间隔在协议(UDP,TCP,...)之间是否不同?有文件吗?
【问题讨论】:
标签: connection router intervals nat keep-alive
我看到这篇论文TCP Wake-Up 给出了一个一般性的答案
The connection state timeout values vary from product to
product, but typical values are 30…180 seconds for UDP and
30…60 minutes for TCP [8]. This implies that applications
using UDP need to send keep-alive messages much more
frequently than those based on TCP
【讨论】:
这变化很大,但我从来没有遇到过一个标准的 ISP 家庭路由器,它保持开放 TCP 超过 10m 或一个开放 UDP 超过 3m,所以我不会接受 4.5-5m 的建议全部。
值得考虑的是,大多数 WebSockets 实现都使用 20 秒的 keep-alive,尽管这适用于路由器和 Web 服务器超时,因此它可能比您真正需要的 NAT keepalive 更保守。
我在一些基于移动和家庭的 UDP 应用程序中使用了 60s,并收到了有关偶尔失败的反馈。切换到 30 秒没有看到,切换到 45 秒只看到最少的重新连接失败。
【讨论】: