龙空技术网

【Java面试】服务端挂了,客户端的TCP连接还在吗?

跟着Mic学架构 408

前言:

当前我们对“java服务器连接失败”都比较注意,朋友们都需要了解一些“java服务器连接失败”的相关资讯。那么小编在网摘上网罗了一些有关“java服务器连接失败””的相关内容,希望朋友们能喜欢,大家快快来学习一下吧!

服务端挂了,客户端的TCP连接还在吗?会怎么处理呢?

一个工作了5年的粉丝在面试的时候被这个奇葩问题搞蒙了。

这个问题在我之前整理的大厂面试指南里面,有标准的回答,大家可以去Si信我发送【Mic】领取。

问题解析

这个问题的考察点还是很偏的,但是它确实是一个很好的问题。

一方面,在目前的应用架构中,网络通信是基础,在遇到网络故障时,我们可以更快速的排查和解决问题。

另一方面,对于网络IO知识的掌握,也是一个高级程序员必备的技能。

我们都知道,客户端和服务端在建立连接的时候会使用三次握手来建立可靠的会话。

但是一旦服务端因为异常导致连接断开了,客户端在没有感知的情况下继续写消息一定会失败。

但这个连接会怎么处理呢?这个问题难的点在于,TCP连接的断开设计到四次挥手「图片」,但是由于服务器端已经下线了。

没办法完成四次挥手,所以脑子一下就转不过来了。

下面来看一下正确的回答方式

问题答案

当客户端向一个已经断开的服务端发送消息时,底层TCP协议会尝试发送数据包,但是由于服务端已经不再响应,数据包将无法到达服务端。

TCP协议会尝试多次发送数据包,一般来说,TCP协议的最大重传次数是6次。

如果在达到重传次数以后仍然没有收到确认消息,TCP协议会认为连接已经失效并关闭连接。

由于正常情况下,TCP连接的关闭需要四次挥手,但是服务器是下线状态导致无法完成FIN数据包的发送。

这个时候客户端会尝试多次重传FIN数据包,但最终会因为没有收到服务端的响应而放弃发送FIN数据包,并直接关闭连接。

这个时候客户端直接关闭连接是安全的。

以上就是我的理解。

总结

好了,今天的分享就到这里结束了

如果喜欢我的作品,记得点赞、收藏、关注

需要高手面试文档合集(附赠大厂内部面试文档)或者有不懂的技术面试题想咨询的小伙伴可以关注公众号【Mic聊架构】回复暗号【999】。

标签: #java服务器连接失败