生动形象记住三次握手,四次挥手
三次握手
前提:有一个人叫客户端,有一个人叫服务器。服务器那里有一些好东西,客户端时不时的上门讨要。
情景1:握手一次
客户端站在门口大喊:服务器,你的语文作业借我看看
正常情况:
服务器直接把作业从门缝扔给你
异常情况:
服务器不在家,客户端嗓子都喊哑了,也没和服务器联系上。
情景2:握手两次
客户端还是在门外喊:服务器,语文作业借我看看
正常情况:
服务器说:好的
然后慢吞吞的把作业翻箱倒柜找出来,给你了
异常情况:
服务器走神了,半天后才反应过来有人跟他要作业,说:好的,你还在门口吗?(客户端消息延迟,过了很久才到达服务器)
没人回答,原来人已经走了
情景3:握手三次
客户端门外又来大喊:服务器,作业借我看看
服务器在屋里回答:好的,你还在门口吗?
客户端说:我还在,你快把作业给我。
然后服务器找到作业,塞到门缝里,给了客户端。完成了连接。
总结:
一次握手肯定不行,你都不知道对方有没有收到你的消息,怎么能和对方联系上?
二次握手也不行,你弄了好半天才回复别人的消息,结果别人走了,也没法建立正常的联系。(发送的消息因为网络延迟等原因,过了很久才给到客户端。或者客户端发送的消息因为延迟等原因,过来很久才到你这里,这个消息已经过期了,你再回答也没什么意义)
三次握手可以,确保了双方都正常,能接收数据。
四次挥手
前提:客户端过节回家了,他妈妈服务器给他准备了很多好吃的,现在要准备回去上班了,客户端跟他妈妈告别
情景1:一次挥手
客户端说:我走了!,然后扭头就走
服务器:目无尊长,长辈同意了吗就走,我准备的东西还没给你呢?
客户端卒
情景2:二次挥手
客户端:我走了?(等待服务器同意回话)
服务器:我知道了,等会。
客户端听到回答,没等就走了。服务器:说让你走了吗,我东西还没准备好呢?
客户端卒
情景3:
客户端:我走了?(等待同意)
服务器:我知道了,等会儿
服务器:一股脑儿把准备的好东西都塞到你怀里后,不停的说:好了,可以走了(不听到回答,会一直说这句话)
客户端以为完事了,走了。服务器还在不停等待回复:可以走了,可以走了,...
客户端因为把长辈晾在一边,卒
情景4:
客户端:我走了?(等待同意)
服务器:我知道了,等我准备会
服务器:一股脑儿把准备的好东西都塞给你,说好了
客户端:那我真走了?(试探性的等待一会儿,确保长辈听到这句话后闭口不言)。长辈没有回答,便是默认了,便退下了。
客户端满血复活。
总结:
一次挥手肯定不行,因为服务器可能还有正在发送的数据没有完毕。
二次挥手,服务器只是说我知道了你要走,但是我还没准备好让你走,因为还有数据没有发送完毕。
三次挥手:此时已经把数据发送给客户端了,才说你可以走了。
四次挥手:客户端表示自己知道了自己真的可以走了,等待消息能传达到服务器后,就走了。(之所以要 TIME-WAIT 2MSL时间,是因为要确保消息有效。如果服务器听到第四次的消息,就会关闭,否则就会不停的重复第三次挥手说:好了,可以走了。所以客户端要等待一会儿,发现服务器没有说:可以走了,就说明服务器收到了我们第四次的消息,也就真的可以关闭了)
图片来自这篇文章