4.12 TCP 连接,一端断电和进程崩溃有什么区别?

目录

[TCP keepalive TCP 的保活机制](#TCP keepalive TCP 的保活机制)

主机崩溃

进程崩溃

有数据传输的场景

客户端主机宕机,又迅速重启

客户端主机宕机,一直没有重启

TCP连接服务器宕机和进程退出情况总结


TCP keepalive TCP 的保活机制

TCP 保活机制需要通过 socket 接口设置 SO_KEEPALIVE 选项才能够生效

定义一个时间段,如果在这个时间段内(保活时间7200s,俩小时),没有任何连接相关的活动,启动TCP保活机制开始每隔一个时间段(75秒)发送一个探测报文,如果连续几个(9次)探测报文都没有得到响应,则认为TCP连接已经死亡。

主机崩溃

没开TCP keepalive的情况下,客户端宕机,服务端无法感知到客户端状态服务端的 TCP 连接将会一直处于 ESTABLISHED 连接状态,直到客户端重启。

在没有使用 TCP 保活机制且双方不传输数据的情况下,一方的 TCP 连接处在 ESTABLISHED 状态,并不代表另一方的连接还一定正常。

进程崩溃

TCP 的连接信息是由内核维护的,服务器进程崩溃内核需要回收该进程所有的TCP连接资源,内核发送第一次挥手FIN报文,后续的挥手过程也都是在内核完成,并不需要进程的参与。

所以服务端的进程退出了还是可以成功的和客户端完成TCP四次挥手的过程。

有数据传输的场景

客户端主机宕机,又迅速重启

只要有一方重启完成后,收到之前 TCP 连接的报文,都会回复 RST 报文,以断开连接

客户端主机宕机,一直没有重启

服务端超时重传报文的次数达到一定阈值后,内核就会判定出该 TCP 有问题,然后通过 Socket 接口告诉应用程序该 TCP 连接出问题了,于是服务端的 TCP 连接就会断开。

TCP连接服务器宕机和进程退出情况总结

拔掉网线后, 原本的 TCP 连接还存在吗?

拔掉网线这个动作并不会影响 TCP 连接的状态,要看拔掉网线后双方做了什么动作:

拔掉网线后,有数据传输

服务端向客户端发送的数据报文会得不到任何的响应,服务端触发超时重传机制,重传未得到响应的数据报文。

如果在服务端超时重传的过程中,把网线插回去了,客户端就会返回ACK响应报文。

如果没插回去,重传个一定次数默认15次,就断开连接了。

拔掉网线后没有数据传输

如果没有开启 TCP keepalive 机制,在客户端拔掉网线后,并且双方都没有进行数据传输,那么客户端和服务端的 TCP 连接将会一直保持存在。

而如果开启了 TCP keepalive 机制,在客户端拔掉网线后,即使双方都没有进行数据传输,在持续一段时间后,TCP 就会发送探测报文:

如果对端正常工作。TCP保活探测报文发送给对端,这样TCP保活时间会被重置等待下一个TCP保活时间到来。

如果对端主机宕机,探测报文不可达,TCP会报告该TCP死亡

拔网线总结:

相关推荐
skd89994 分钟前
MicroSIP助手,智慧语音V3.2.3版本,MicroSIP自动拨号助手
服务器
源远流长jerry7 分钟前
RDMA 传输服务详解:可靠性与连接模式的深度剖析
linux·运维·网络·tcp/ip·架构
南梦浅10 分钟前
《企业网络实战(二):NAT 实现内网 Web 服务对外发布》
网络
存储服务专家StorageExpert11 分钟前
NetApp NVME SSD 盘的学习笔记
运维·服务器·笔记·学习·存储维护·emc存储·netapp
Du_chong_huan13 分钟前
《计算机网络:自顶向下方法》第 1 章 核心知识梳理 + 原版习题解析
网络·智能路由器
小璐资源网14 分钟前
新服务器上线:标准化初始化流程
运维·服务器
2501_9181269124 分钟前
学习所有python写服务器的语句
服务器·人工智能·python·学习·个人开发
wobi_baoyan26 分钟前
【已解决】使用Maven打包发生或者启动Spring Boot项目发生 错误: 不支持发行版本 17
服务器·前端·javascript
德迅云安全杨德俊28 分钟前
直面 DDoS 威胁:从现状到解决方案
网络·安全·web安全·https·ddos
花月C40 分钟前
基于WebSocket的 “聊天” 业务设计与实战指南
java·网络·后端·websocket·网络协议