保活机制是一种在不影响数据流内容的情况下探测对方的方式。
和名字正好相反,是服务器用来确认什么时候应该断开连接的一种机制。
保活机制
保活功能在默认情况下是关闭的o TCP连接的任何一端都可以请求打开这一功能。保活功能可以被设置在连接的一端、两端,或者两端都没有。
机制
在一段时间(称为保活时间,keepalivetime)内连接处于非活动状态,开启保活功能的一端将向对方发送一个保活探测报文。如果发送端没有收到响应报文,那么经过一个已经提前配置好的保活时间间隔(keepaliveinterval),将继续发送保活探测报文,直到发送探测报文的次数达到保活探测数(keepaliveprobe),这时对方主机将被确认为不可到达,连接也将被中断。
报文
保活探测报文为一个空报文段(或1个字节),序列号等于对方主机发送的ACK报文的最大序列号减1。
因为这一序列号的数据段已经被成功接收,所以不会对到达的报文段造成影响,但探测报文返回的响应可以确定连接是否仍在工作。接收方收到该报文以后,会认为是之前丢失的报文,所以不会添加进数据流中。但是仍然要发送一个ACK确认。
探测及其响应报文丢失后都不会重传。探测方主动不重传,相应方的ACK报文并不能自己重传,所以需要保活探测数。
保活结果
- 对方主机仍在工作
服务器端正常收到ACK,说明客户端正常工作。
请求端将保活计时器重置。重新计时。 - 对方主机已经崩溃
对方的TCP将不会响应ACK。
超过保活探测数以后,认为对方主机已经关闭,连接也将被断开。 - 客户主机崩溃并且已重启
客户端响应是一个重置报文段,请求端将会断开连接。 - 对方主机仍在工作
但是因为其他原因就是没有收到ACK。
网友评论