51工具盒子

依楼听风雨
笑看云卷云舒,淡观潮起潮落

拆解腾讯面试题:拔掉网线后,原来的TCP连接还在不在?

**问题:拔掉网线 TCP连接还在不在?**
我们在学习网络编程的时候,经常会用打电话来比喻双方的通信,那么TCP连接在拔掉网线的时候,是否和我们通电话一样,拔掉网线,通话就立即被终止了呢?
![](https://img1.51tbox.com/static/2024-06-04/col/cbabc44f6dcdfce8ed85805365c66308/5614b6d9e37c4d17b977f2e05a2d7044.jpg)
经过我的实际验证,结果总是出人意料的,在拔掉网线的时刻,进行查看,原来的TCP连接还是处于Established状态。
![](https://img1.51tbox.com/static/2024-06-04/col/cbabc44f6dcdfce8ed85805365c66308/8b77e9a2ff3543c1a172135071a7a519.jpg)
那么这是为什么呢?
从宏观上说,网线属于物理层,而我们的TCP连接是属于传输层, 物理层的改变不会直接影响到传输层。
从微观上说,TCP连接在linux内核中是一个结构体,struct socket,这个结构体包含了TCP连接的状态比如Established,拔掉网线事件发生,操作系统维护的这个结构体没有发生任何变化。
![](https://img1.51tbox.com/static/2024-06-04/col/cbabc44f6dcdfce8ed85805365c66308/2deec2474c32466cb519aa7fc7df0f89.jpg)

这是因为TCP状态的改变依赖于协议层面的交互,而非物理链路的状态。只有当TCP协议栈通过超时、错误检测或其他机制确定连接不可用时,连接状态才会改变。
所以拔掉网线的那一刻,TCP连接是还存在的,但是会一直存在吗?这就分两种情况了 1:拔掉网线后,有数据传输; 2:拔掉网线后,没有数据传输;
> > 拔掉网线后,有数据传输: > > > > 客户端拔网线后,服务端发数据无响应,引发重传机制。 > > > > 若客户端网线及时复位,服务端重传时段可顺畅接收并ACK响应,TCP连接状态维持如初,通信似乎未受扰。 > > > > 若客户端长时未恢复,服务端重传超限时将认定连接故障,经Socket通知应用并断开连接。 > > > > 客户端重连发送数据,因服务端端口无匹配连接,将以RST响应,客户端接收到后关闭连接,最终双侧TCP连接均告终。 > > > > 拔掉网线后,没有数据传输: > > > > 如果没有开启 TCP keepalive 机制,在客户端拔掉网线后,并且双方都没有进行数据传输,那么客户端和服务端的 TCP 连接将会一直保持存在。 > > > > 而如果开启了 TCP keepalive 机制,在客户端拔掉网线后,即使双方都没有进行数据传输,在持续一段时间后,TCP 就会发送探测报文来确定对方的 TCP 连接是否存活;
总结: 简单地说"拔掉网线后TCP连接是否还在"并不是一个绝对的是或否的问题。
在没有数据传输且短时间内恢复网络连接的情况下,TCP连接可能看似不受影响;
在有数据交互或长时间断网的情况下,TCP最终会检测到连接问题并采取相应的行动,导致连接断开。
题外话: 本人收集了一些技术类电子书,欢迎关注公众号获取! * END - *** ** * ** *** ![](https://img1.51tbox.com/static/2024-06-04/col/cbabc44f6dcdfce8ed85805365c66308/428766eb034d431eaecbb691bff4edad.jpg) [拆解腾讯面试题:对于socket编程,accept方法是干什么的,在三次握手中属于第几次](http://mp.weixin.qq.com/s?__biz=MzkzMzUwOTM0MQ==&mid=2247484930&idx=1&sn=b1299db158b77a43e956ccf0989823d0&chksm=c24a27b0f53daea672839ca73caafc9a744035cd60f20a3e0c34e805c8885602ec2b6c52f85f&scene=21#wechat_redirect) [直击腾讯面试题:两个数相乘,小数点后位数没有限制,写一个高精度算法](http://mp.weixin.qq.com/s?__biz=MzkzMzUwOTM0MQ==&mid=2247484908&idx=1&sn=25d804b121cd912dda225a6cc9d6f629&chksm=c24a245ef53dad48c95220bfff840a1729c9566dcfd128258061aab349908ab936746c878703&scene=21#wechat_redirect) [拆解腾讯校招面试:TCP 为什么是三次握手?不是两次、四次?](http://mp.weixin.qq.com/s?__biz=MzkzMzUwOTM0MQ==&mid=2247485081&idx=1&sn=e4b8b228e6b4aa124e9f9f5630eaa69f&chksm=c24a272bf53dae3d298c3ecf6d618ce150831d2ca9208e29ab85c6431e3eb530ccb40cce03fe&scene=21#wechat_redirect)
赞(5)
未经允许不得转载:工具盒子 » 拆解腾讯面试题:拔掉网线后,原来的TCP连接还在不在?