5

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

  1. 服务器端keepalive:服务器发送TCP keepalive以确保客户端处于活动状态。如果客户端死机,服务器将关闭与客户端的 TCP 连接。
  2. Client-side keepalive:客户端发送 TCP keepalive 以防止服务器关闭与客户端的 TCP 连接。
  3. 双方keepalive:服务器和客户端都发送TCP keepalive,如1和2所述。

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

4

2 回答 2

6

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

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

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

于 2019-03-26T16:24:51.260 回答
4

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

如果客户端死了,服务器会收到一个“连接重置”错误,之后它应该关闭连接。

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

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

双方保活

如上所述,由于保活失败,双方都能够获得“连接重置”。

以上哪些用法是典型的?

他们中的任何一个,或者没有。如果对等点定期发送,它实际上也不需要保持活动状态。因此,它通常对服务器比对客户端更有用。

于 2017-08-11T09:32:40.353 回答