TCP/IP 第23章 TCP的保活定时器

第23章 TCP的保活定时器

TCP连接有一个比较特殊的现象,服务端和客户端,如果之间已经没有数据往来,但是两端都没有关闭连接。则两端的连接一直存在,但是如果有一段异常关机或重启,则另一端则会一段时间后也关闭连接。这个功能如何实现的呢?实际很简单,TCP有一个保活定时器,每隔2小时(默认值,可以配置),发送一个探查消息,如果有回应,则连接继续保持,如果没有回应,则探查消息一共发送10次,间隔为75秒。

如果一个给定的连接在两个小时之内没有任何动作,则服务器就向客户发送一个探查报文段(我们将在随后的例子中看到这个探查报文段看起来像什么)。客户主机必须处于以下4个状态之一。
1、客户主机依然正常运行,并与服务器通信正常。客户的TCP响应正常,服务器在两小时以后再次复位保活定时器。如果在两个小时定时器复位之前又有通信发生,则定时器在交换数据后的未来2小时再复位;
2、客户主机已经关机,或正在重启,则无法响应服务端的探查消息,服务端每隔75秒连续发送10次探查消息,则关闭连接;
3、客户主机已经重新启动完成,收到服务端探查消息,发送rst消息,服务端关闭连接;
4、客户主机运行正常,但是与服务端网络中断,同情况2。

情况2:


情况3:

情况4:


这里面注意情况4和情况2实际上服务端处理是一样的,对于TCP其对ICMP的网络不可达消息是忽略掉的。

启动保活定时器:
int keepalive_on = 1;
setsockopt (sock_fd, SOL_SOCKET, SO_KEEPALIVE, (void *)&keepalive_on, sizeof(keepalive_on)) ;


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值