tcp/ip学习笔记--第23章 TCP keepalive Timer

本文介绍了TCP连接的特点及其保活机制的工作原理。当连接空闲时,通过发送探测报文来判断连接的有效性,包括正常情况、客户端崩溃、客户端重启后的响应及不可达的情况,并解释了保活定时器的潜在问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

参考:

https://download.youkuaiyun.com/download/qq_31567335/10213200

简介:

一个令大多数新手吃惊的事实是,当TCP连接空闲的时候,它们之间不会有任何数据流动。一旦连接建立起来,就算过去了几天,几个月,就算中间的网络断开了,但是只要两端的主机没有重启,连接就一直存在。

但是有很多场景,需要了解连接的另一端是否还存在,比如说服务端需要了解客户端是否还存在。大多数的TCP实现都有保活定时器,来提供这个功能。

但是,从保活定时器并不是TCP规范中的一部分。Host Requirements RFC提供了3个不使用保活定时器的理由: 1.一个好的连接可能会因为网络出现短暂的差错而释放掉,2耗费不必要的带宽 3在分组计费的情况下会花费更多的钱。


描述

一般都是服务器端开启保活定时器,当TCP连接之间超过一定的时间(可以设定,系统默认2小时)没有发送任何数据之后,就会发送一个探测报文段),

客户端会有以下4种情况:

1.客户端和网络都正常。那么客户端接收到探测报文之后会正常返回。保活定时器重新开始计时,当然,数据的交互也会导致保活定时器重新计时。

2.客户端崩溃。这种情况下客户端不会有任何响应。服务端发送的报文在75s之后会超时,然后重试最多9次,如果全部失败,则关闭连接。

3.客户端崩溃过但是已经重启完毕。那么客户端会回复reset报文,服务器端收到回复后关闭连接

4.客户主机正常运行,但是从服务器不可达 ,这在服务器看来与情况2是相同的。


报文格式

发送一个数据为空的报文,序列号为另一端期待的序列号减1。这会导致另一端重新发送ack确认报文,告诉另一端自己期待的序列号。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值