代码之家  ›  专栏  ›  技术社区  ›  Jingguo Yao

TCP keepalive的典型用法是什么?

  •  5
  • Jingguo Yao  · 技术社区  · 9 年前

    考虑一个场景,其中存在一个服务器和多个客户端。每个客户端创建TCP连接以与服务器交互。TCP alive有三种用法:

    1. 服务器端keepalive:服务器发送TCP keepalive以确保客户端处于活动状态。如果客户端已死亡,服务器将关闭与客户端的TCP连接。
    2. 客户端keepalive:客户端发送TCP keepalive以防止服务器关闭与客户端的TCP连接。

    以上TCP keepalive的哪些用法是典型的?

    2 回复  |  直到 9 年前
        1
  •  6
  •   James    7 年前

    实际上,服务器和客户端对等方都可以使用TCP keepalive。确保操作系统最终释放与死连接相关的任何资源非常有用。请注意,如果两台主机之间的连接由于它们之间的路由器出现问题而丢失,那么两台主机都必须独立检测到连接已断开,并自行清理。

    现在,每个主机将在每个连接上维护一个计时器,指示它最后一次收到与该连接相关联的数据包的时间。当计时器超过本地定义的某个阈值(即,主机不交换有关其自身keepalive配置的信息)时,主机将发送keepalive数据包。因此,保持时间最短的主机将主动向另一个主机发送保持数据包。如果数据包确实通过,另一个主机(即保持时间较高的主机)将响应该数据包并重置其自己的计时器;因此,具有较高保留时间的主机肯定永远不会达到发送保留数据包本身的需要,除非连接确实已丢失。

    可以说,服务器在keepalive上通常比客户端机器更具攻击性(也就是说,它们通常配置的keepalive时间更少),因为挂起连接通常会对服务器软件产生不良影响(例如,软件可能接受有限数量的并发连接,或者服务器可能会派生与每个连接相关联的新进程实例)。

        2
  •  4
  •   user207421    9 年前

    服务器端keepalive:服务器发送TCP keepalive以确保客户端处于活动状态。如果客户端已死亡,服务器将关闭与客户端的TCP连接。

    如果客户端已死亡,服务器将收到“连接重置”错误, 之后

    客户端keepalive:客户端发送TCP keepalive以防止服务器关闭与客户端的TCP连接。

    否。客户端发送keepalive,这样如果服务器死了,客户端将收到“连接重置”错误,之后应关闭连接。

    以上哪种用法是典型的?

    任何一个,或者没有。如果一个同龄人定期发送邮件,那么它实际上也不需要keepalive。因此,它对服务器的用处往往大于客户端。

    推荐文章