考虑存在一台服务器和多个客户端的场景。每个客户端都会创建 TCP 连接来与服务器交互。 TCP live有三种用法:
- 服务器端keepalive:服务器发送TCP keepalive以确保客户端处于活动状态。如果客户端死亡,服务器将关闭与客户端的 TCP 连接。
- 客户端keepalive:客户端发送TCP keepalive以防止服务器关闭与客户端的TCP连接。
- 双向保活:服务器和客户端均发送 TCP 保活,如 1 和 2 中所述。
上述 TCP keepalive 的哪些用法是典型的?
实际上,服务器和客户端都可以使用 TCP keepalive。确保操作系统最终释放与死连接相关的任何资源非常有用。请注意,如果两台主机之间的连接由于它们之间的路由器出现问题而丢失,那么两台主机都必须独立检测连接是否已断开,并自行清理。
现在,每个主机将在每个连接上维护一个计时器,指示它最后一次收到与该连接关联的数据包的时间。当计时器超过本地定义的某个阈值时,主机将发送保活数据包(即主机不交换有关其自己的保活配置的信息)。因此保活时间最短的任一主机都会主动向另一台主机发送保活数据包。如果数据包确实通过了,另一台主机(即保活时间较长的主机)将响应该数据包并重置自己的计时器;因此,具有较高保活时间的主机肯定永远不会达到需要发送保活数据包本身,除非连接确实已经丢失。
可以说,服务器在保活方面通常比客户端计算机更积极(也就是说,它们通常会配置较短的保活时间),因为挂起的连接通常会对服务器软件产生不良影响(例如,软件可能会接受有限数量的并发连接,否则服务器可能会分叉与每个连接关联的新流程实例)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)