TCP为何要进行“三次握手,2021大厂Java开发面试总结+解答

**程序员:**那您且细听分说

三次握手

**程序员:**这个“三次握手”就是通信建立链接的一个过程,看下图

通俗点讲就是:

客户端:你好,我是客户端

服务端:你好,客户端,我是服务端

客户端:你好,服务端

也经常把这个过程叫做“请求->响应->响应的响应”

**面试官:**打断一下,问个问题,为什么不是两次或者四次,非得是三次呢?

**程序员:**嗯,不错,是个称职的面试官!

试想一下,客户端发送一个连接,由于丢包、超时,或是服务端根本就不想建立连接,那这个时候客户端怎么办?

客户端并不能知道结果,就只有重复的发送连接请求,虽然这个时候服务端接收到了,但客户端仍不知道这事,只能继续发请求。

此时此刻,服务端接收了客户端的请求,当然知道了客户端的存在,如果服务端不同意建立连接,客户端重试几次后就会放弃,没问题。

**如果服务端愿意建立连接呢?**这个时候就会发送响应给客户端(好了,你别叫唤了,客户端我知道你了)

到了这一步,就已经进行了两次握手!理论上,这个时候已经可以进行连接了,但是问题来了:

因为对于服务端来说,这个响应的过程也可能会丢包,不一定会达到客户端,甚至客户端完全挂了都是可能的。

对于另外的情况,在第一次握手的时候,由于网络问题,客户端向服务端发送了多个建立连接的请求,假设其中某一个建立成功,做了简单的通信,然后结束了连接,本来很正常,但是另外一些请求由于网络的延迟又到了服务端,服务端会认为这是一个正常的请求,接下来又建立连接。

因此两次握手会有着种种问题。

为了保证服务端的响应能正确接收,客户端还是需要告诉给服务端,我收到了服务端的响应,也就是给服务端一个**“响应的响应”,这样就是三次握手了**。

**面试官:**要是这个“响应的响应”要是也出现了丢包等问题没有送到呢?

**程序员:**你存心找麻烦的吧?那照你这样说你就是手握烂了,也没办法保证消息100%可靠。三次握手,保证服务端、客户端双方都确认了对方存在就足够了。

四次挥手

**面试官:**嗯,不错,来说说“四次挥手”又是什么吧!

**程序员:**建立完连接后就可以传输数据了,传输完成后则需要四次挥手来告别,过程看下图

**面试官:**这你TMD没有上一张清晰啊!

**程序员:**哎呀~面试时间有限,将就着看看啦!

通俗来讲就是…

客户端:服务端啊,我要和你拜拜了

服务端:好的,我知道了

这个时候,客户端说了拜拜,也不会向服务端发送数据了,这个时候服务端是否能马上关闭呢?

**不可以!**因为服务端可能还没处理完相应的事情,所以还是要发送数据的,这个时候的状态为等待关闭的状态,当处理完后需要继续下面步骤。

服务端:客户端,我也要和你说拜拜了

客户端:拜拜,滚吧

程序员:其实在这里也会存在一些问题,当客户端说“拜拜”,服务端说**“知道了”**,这两次是没什么问题的。

总结

蚂蚁面试比较重视基础,所以Java那些基本功一定要扎实。蚂蚁的工作环境还是挺赞的,因为我面的是稳定性保障部门,还有许多单独的小组,什么三年1班,很有青春的感觉。面试官基本水平都比较高,基本都P7以上,除了基础还问了不少架构设计方面的问题,收获还是挺大的。

CodeChina开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频】


经历这次面试我还通过一些渠道发现了需要大厂真实面试主要有:蚂蚁金服、拼多多、阿里云、百度、唯品会、携程、丰巢科技、乐信、软通动力、OPPO、银盛支付、中国平安等初,中级,高级Java面试题集合,附带超详细答案,希望能帮助到大家。

要有**:蚂蚁金服、拼多多、阿里云、百度、唯品会、携程、丰巢科技、乐信、软通动力、OPPO、银盛支付、中国平安等初,中级,高级Java面试题集合,附带超详细答案,希望能帮助到大家。

蚂蚁金服5面,总结了49个面试题,遇到的面试官都是P7级别以上

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值