考虑存在一个服务器和多个客户端的场景。每个客户端都创建TCP连接以与服务器交互。 TCP有三种用法:
以上哪种TCP keepalive是典型的?
答案 0 :(得分:1)
服务器端keepalive:服务器发送TCP keepalive以确保客户端处于活动状态。如果客户端已死,则服务器将关闭与客户端的TCP连接。
如果客户端已死,则服务器会重置“#”连接。错误,在之后应关闭连接。
客户端keepalive:客户端发送TCP keepalive以防止服务器关闭与客户端的TCP连接。
没有。客户端发送keepalive,以便在服务器停止运行时,客户端将重置'错误,之后它应该关闭连接。
双方保持活力
双方都能够重置“连接”。由于keepalive失败,如上所述。
以上几种用法是典型的吗?
他们中的任何一个,或者没有。如果同伴定期发送,那么它也不需要保持活跃。因此,服务器通常比客户端更有用。
答案 1 :(得分:1)
实际上,服务器和客户端对等方都可以使用TCP keepalive。确保操作系统最终释放与死连接相关的任何资源非常有用。请注意,如果由于两台主机之间的路由器出现问题而导致两台主机之间的连接丢失,则两台主机都必须独立检测到该连接已死,并自行进行清理。
现在,每个主机将在每个连接上维护一个计时器,以指示其最后一次接收与该连接关联的数据包的时间。当该计时器超过本地定义的某个阈值时,主机将发送一个keepalive数据包(即,主机不交换有关其自己的keepalive配置的信息)。因此,具有最短保活时间的主机将主动向另一个主机发送保活数据包。如果该数据包确实通过,则另一台主机(即具有较高存活时间的主机)将对该数据包作出响应并重置其自己的计时器;因此,除非连接确实丢失,否则具有较高存活时间的主机肯定永远不会达到发送存活数据包本身的需要。
可以说,服务器在保持活动状态方面通常比客户端计算机更具攻击性(也就是说,它们通常被配置为具有更短的保持活动时间),因为挂起的连接通常会对服务器软件产生不良影响(例如,软件可以接受有限数量的并发连接,或者服务器可以派生与每个连接相关的新流程实例。