设置TCP空闲超时时需要考虑什么?

有什么目的有一个[低] TCP空闲超时? 例如,为什么在防火墙或负载平衡器上有60秒的超时? 是内存pipe理还是性能优化? 高延时是否存在安全风险?

如何确定最大设置是合适的还是可接受的?

长时间的空闲连接可能意味着连接断开(任一侧的应用程序崩溃,networking电缆拔出等),但是资源仍将被分配,这意味着:

  • 性能会受到一些影响。
  • 您的应用程序可能会有X个同时连接的限制,因此您可能会拒绝访问实际上没有连接的新客户端。
  • 如果您使用固定端口来源和目的地(不常见,但可能),您可能无法重新连接客户端。
  • 您可能达到连接/路由限制,阻止与其他端口的新连接,或导致意外的行为或服务器本身的崩溃。
  • 许多应用程序不会停止,直到所有连接正确closures,因此closures或重新启动服务将需要更长的时间
  • 您将无法区分断开连接和活动连接,而不检查TPCstream量一段时间或依靠应用程序日志
  • 大多数客户端应用程序不知道如何对连接断开做出反应:有些会等待内部超时,有些则会永远等待,如果客户端需要重新启动,则会导致潜在的数据丢失。

最后一个也会发生,如果你设置一个较低的TCP空闲超时时间,因为有些系统会简单地从TCP表中断开连接,而另外一些则将RST数据包发送到另一个部分。

根据您pipe理的通信types使用空闲超时(例如,Apache服务器的默认超时时间为5分钟,所以没有连接会被闲置超过5分钟[和几秒钟]),但从来没有build立一个较低的(或兴奋地相同)TCP空闲超时比您的应用程序的超时。 至less每隔几分钟执行一次长连接的keepalive,以确保连接处于活动状态(在套接字创build时定义的TCP keepalive有两个小时的超时时间,我认为这太高了)。 用户交互式软件(如ssh会话,远程桌面,FTP)会在用户阅读时闲置几分钟,所以我不会less于15分钟。

注意:除非高度密集的连接不会闲置超过几秒钟,否则我不会推荐几分钟以下的TCP空闲超时。 如果可能的话,根据你的stream量设置不同的空闲tiemouts(即6分钟的networking服务器,15的SSH会话等)。

如果需要更高的超时时间(有人请求“永久的”TCP连接),请尝试在应用程序层使用keepalive。