现在的大多数设备都在 NAT 之后。当我们与服务器建立连接时,路由器将为该连接创建映射并保持该映射活动一段时间。为了保持这个映射,我们必须定期主动发送保持活动数据包。
如何知道需要的保持活动间隔?这个间隔在协议(UDP,TCP,...)之间是否不同?有文件吗?
现在的大多数设备都在 NAT 之后。当我们与服务器建立连接时,路由器将为该连接创建映射并保持该映射活动一段时间。为了保持这个映射,我们必须定期主动发送保持活动数据包。
如何知道需要的保持活动间隔?这个间隔在协议(UDP,TCP,...)之间是否不同?有文件吗?
我看到这篇论文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 秒的保活,尽管这是针对路由器和 Web 服务器超时执行的,因此它可能比您真正需要的 NAT 保活更保守。
我在一些基于移动和家庭的 UDP 应用程序中使用了 60 年代,并获得了关于偶尔失败的反馈。转移到 30 秒没有看到,转移到 45 秒只看到最少数量的重新连接失败。