前言:网上一查一大堆,但是对于我这种死脑筋来说呢,都觉得无法理解透彻,最后得益于​​这位大神​​的讲解,我终于灵感一现,得出了自己的一套透彻理解法。

1、由于仅有两次握手,造成了如下尴尬的故事:

(介绍即将建立连接的两个对象)

A和B是一对很好的异性朋友哦

(场景一,A发出第一次握手信号X,B并没有收到,自然也无从发出第二次握手了)

有一天,A想找B帮个忙,A对B发消息说:想请你帮个忙

A发完消息就把手机放一边了,一边做事一边等待回复了,但是由于网络原因,A一直不知道这条信息压根没发过去

(场景二,A等待超时,于是作废第一次握手的X信号,重新发出 第一次握手信号Y,B收到信号,立马回复了第二次握手信号,两次握手成功,意味着连接建立起来了,A就给B发去了一系列待发的信息)

A下班了,一看手机,B还没回她,她气得又发了条信息:关键时刻不见人影,究竟帮不帮我的忙?!

这条消息准确无误的发到了B的手上,B几乎秒回:当然帮啦,啥事儿啊??

(第二次握手成功,连接成功建立起来)

然后A就和B讲了她的困难,B也及时给予了帮助,两人都很开心

(场景三,B收到了来自A的第一次握手信号X,随即发出第二次握手信号,因为完成两次握手,B单方面的认为可以通信了,就开始等待A发消息,然而A早就作废了握手信号X,自然不会接受X的第二次握手信号,直接无视了B。这就是因为仅有两次握手而造成了尴尬的局面)

第二天,B收到一条信息:想请你帮个忙

B开心要命,立马又秒回了过去:啥事啊?

当然这条信息并不是A今天发的,而是昨天没法成功的那条信息现在发过去了,A一看,觉得B说的话好奇怪,就没理他,继续去忙事情了

B这边呢,抓耳挠腮地等回复,又不敢多问,整个人坐立不安了整整一天。

 

2、现在用三次握手来解决上述的尴尬吧

(场景一,A发出第一次握手信号X,等待超时,于是又发了第一次握手信号Y,B收到信息发出第二次握手信号,A收到信息又发出第三次握手信号,连接建立起来,并且B得知了握手信号X被作废的消息)

A对B发消息:快来帮我个忙!

长时间得不到回复的A又生气地对B发小心说:关键时刻人呢?

B收到消息,秒回道:咋啦??

A这才发现自己刚刚信息没发成功,便截了张图给B,回道:一开始发的消息没发过去,误会你了,你快来帮我支支招吧!

然后A就和B讲了她的困难,B也及时给予了帮助,两人都很开心

(场景二,B收到了X握手信号,他知道是迟到的无效信息,便作废不理了)

第二天,B收到了来自A的消息:快来帮我个忙!

B一看,这不就是A昨天没发成功的消息嘛,屁大点事儿当时还那么着急,哈哈~   然后B一笑了之了

 

3、简述一下三次握手的好处

  只有两次握手的时候,服务器端单方面认为已建立新的连接,并一直等待消息到超时(B坐立不安了一整天),白白地浪费了资源(B耽误了工作),而三次握手就几乎很好地解决了问题。

  握手次数看似越多越好,越多越安全,但是多次握手也会占用更多资源,比如A要想给B发消息,两个人之间先要来回发上十几次确认收到的信息,然后才能正常通话,这也是一种浪费时间、浪费资源、非常不合理的方式,三次握手是比较适中的选择。