JAVA面试-计算机网络-TCP三次握手

学习原因

这个是面试的一个常问热点,所以务必要掌握。

通俗示例

小红是人事部门的员工,现在正在招收IT人员,小明看到招聘信息和待遇,感觉很适合自己,所以准备和小红发消息了解具体情况。而简历在本故事中代表最终要发送的数据。

首先,小明发消息给小红,向她表示想要应聘公司的IT部门,想要投简历进一步交流了解。这是第一次信息交流,这个时候简历还没有投递,只是小明让小红知道他想要投简历应聘这个职位。这也是第一次握手的作用,用于客户端询问服务端是否可以进行交互。

而小红看到了小明的信息后,就回消息和他说,可以啊,我们人数还没招满,我欢迎你投简历。这是第二次信息交流,是小红表示她有空,也有兴趣接收小明的简历。这也是第二次握手的作用,用于服务端向客户端表示可以接收信息。

小明看到消息后,又回了小红信息说,谢谢你能给我机会去应聘这个职位,我现在简历准备好了,也做好发送简历的准备了,你现在开放一下邮箱,两分钟后就能接收到我的简历了。这是第三次信息交互,为了小红知道小明已经做好发送简历准备,并让小红开放接收简历的渠道,让简历能顺利接收。这也是第三次握手的作用,让服务端知道客户端已经做好发送信息准备,并让服务端开放信息接收,从而完成三次握手。

小红看到消息后,打开了邮箱接收功能,过了一会,就接收到了小明的简历了。

以上就是三次握手的通俗表达,第一次小明询问是否还招人,第二次是小红回复还招人,第三次是小明为了确保小红能收到信息,进行最终的确认。这就是三次握手的通俗表达。

有的人可能觉得最后还要再提醒,就很墨迹,觉得可以改成下面这个步骤:

1、小明跟小红发消息,我想要应聘贵公司,如果还招人的话,我直接投简历给您。这是第一次

2、小红回消息说,我们还招人,你投吧。然后就打开邮箱等待接收简历。这是第二次

3、小明看到信息后,直接发送简历,然后小红就可以接受到简历了。

按照上面的描述,直接就省略了小明第三次最终确认的步骤,减少了信息交互的步骤,提升了信息交互效率,何乐而不为呢?按照效率来说,的确是这样的,毕竟少了一次信息最终确认,但是这样可能导致资源浪费的问题。

我再讲两个例子,来描述只交换信息两次的两大弊端。

弊端一:

1、小明跟小红发消息,我想要应聘贵公司,如果还招人的话,我直接投简历给您。这是第一次。但是好巧不巧,这一次发送时页面一直转圈圈等待,小明以为没有发送出去,刷新页面又再发送一遍。而实际上第一次由于网络卡顿,已经发出去了,但是比第二次更晚到达。

2、这时候,小红接受到小明第二次发送的信息,小红回消息说,我们还招人,你投吧。然后就打开邮箱等待接收简历。这是第二次。小明接收到信息后就直接发送简历过去,完成信息交互。

3、而在小红接收到简历后,突然,小明发送的第一次信息突破重重关卡又到了,这是时候小红就接收到小明第一次的发送信息。然后小红以为这是小明要重新发一个建立给她,所以又开放邮箱,并回复小明说,你可以发消息了。

4、这时候小明看到消息直接蒙逼,简历都发过去了,没法发第二遍了,所以小红和小明都只能在那干瞪眼。半小时后小红气愤的关闭了邮箱。

弊端二:

1、小明跟小红发消息,我想要应聘贵公司,如果还招人的话,我直接投简历给您。这是第一次。

2、小红回消息说,我们还招人,你投吧。然后就打开邮箱等待接收简历。这是第二次。

小明看到消息后,刚准备发消息,但好巧不巧,家里停电了,没网了,小明只能在这苦苦等待。而小红呢,完全不知道小明那边的问题,也是在那里傻等,等着小明发简历。从而导致小红没法去处理其它问题,而小红等了半小时后,直接关了小明的联系。

可以看到,如果没有第三次的最终确认,提前确认发送环境等,可能就导致小红白等半小时。

而又有人可能会说了,你这不扯淡嘛,难道第三次确认之后,就能保证小明能百分百成功发送简历到小红那里了吗?就算有第三次的环境确认,最后发送的时候还是可能因为停电没网而导致发送不成功嘛。

对,的确,即使最终确认后,最终发送也会有断网的风险。甚至就算提升到10000000次握手,都无法确保信息能够准确发送和接收,为什么?因为发送过去的确认信息,只能保证发送当时的那一刻,发送方环境是好的,就好像12点整小明发送信息说我的电脑好的一匹,随时可以发送信息,但是小红接收到信息可能是12点10分,这十分钟时间里面的电脑状态是随时会变化的,可能十二点零一秒,电脑就用不了了,所以,无论多少次握手,都无法确保信息能准确发送。

那三次握手的意义是什么?

因为三次握手是确保双方互相知道对方状态正常的最低成本方案。

这句话怎么理解?

我们再说如果只要两次握手,

第一次发送信息,是小明发送信息给小红,只是确认小红是否还招人,并没有向小红表述他的环境能百分百发送成功简历。所以小红不知道小明能否百分百发送成功简历。

第二次发送信息,是小红发送信息给小明,让小明知道她能接收信息。这个时候小明知道小红做好接收简历准备,但是小红不知道小明做好简历发送准备。

如果是三次握手,

第一次发送信息,是小明发送信息给小红,只是确认小红是否还招人,并没有向小红表述他的环境能百分百发送成功简历。所以小红不知道小明能否百分百发送成功简历。

第二次发送信息,是小红发送信息给小明,让小明知道她能接收信息。这个时候小明知道小红做好接收简历准备,但是小红不知道小明做好简历发送准备。

第三次发送信息,是小明发送信息给小红,让小红知道小明已经做好发送简历的准备。这个时候小明知道小红做好接收简历准备,小红也知道小明做好简历发送准备。

这就是三次握手和两次握手的本质区别。一个是双方知道,一个只是单方面知道。如此三次握手比两次握手更加安全。

而最低成本方案的概念就是说,通过三次接收,双方都知道对方已经OK了,直接发数据就行,没必要再第四次,第五次握手了。

三次握手处理问题的本质

三次握手最终要解决的问题,就是网络信息交互的不稳定问题。提升信息交互成功率,降低由于无法接受到信息而导致的资源浪费问题。

以上就是三次握手的理解,之后还会继续进行修改,如果有什么建议,我会及时采纳和更正。

原文地址:https://www.cnblogs.com/LY-CS/p/14593663.html