有位读者找我说,他在面试腾讯的时候,遇到了这么个问题:

这个属于 TCP 异常断开连接的场景,这部分内容在我的「图解网络」还没有详细介绍过,这次就乘着这次机会补一补。

这个问题有几个关键词:
- 没有开启 keepalive;
- 一直没有数据交互;
- 进程崩溃;
- 主机崩溃;
我们先来认识认识什么是 TCP keepalive 呢?
这东西其实就是 TCP 的保活机制,它的工作原理我之前的文章写过,这里就直接贴下以前的内容。

如果两端的 TCP 连接一直没有数据交互,达到了触发 TCP 保活机制的条件,那么内核里的 TCP 协议栈就会发送探测报文。
- 如果对端程序是正常工作的。当 TCP 保活的探测报文发送给对端, 对端会正常响应,这样 TCP 保活时间会被重置,等待下一个 TCP 保活时间的到来。
- 如果对端主机崩溃,或对端由于其他原因导致报文不可达。当 TCP 保活的探测报文发送给对端后,石沉大海,没有响应,连续几次,达到保活探测次数后,TCP 会报告该 TCP 连接已经死亡。
所以,TC
TCP连接:进程崩溃与主机崩溃的区别

在TCP连接中,未开启keepalive且无数据交互时,主机崩溃会导致服务端无法感知,维持ESTABLISHED状态。而进程崩溃时,操作系统会发送FIN报文进行四次挥手断开连接。开启TCP keepalive可通过探测报文判断连接状态。在有数据传输场景下,客户端主机宕机后,服务端会超时重传,客户端重启会回复RST报文断开连接,否则长时间宕机后内核会通知应用连接出问题。
最低0.47元/天 解锁文章
4668

被折叠的 条评论
为什么被折叠?



