乔戈里和小萌一起去美食城吃了午饭
小萌:额...哦!这就是两次挥手,我这里就好比是服务端还有消息没发送完,乔哥你的客户端就突然把我拉黑(断开了连接),导致我(服务器)这里还有消息给你,但你因为关闭,却接受不到。所以是不能两次挥手断开TCP连接!这样是不可靠的!大体示意图如下图所示。
乔戈里:在第一次挥手中,我一开始说,我这里没话说了,代表客户端这里没消息发送了,这是第一次挥手,客户端知道自己没消息发送了;
在第二次挥手中,小萌你收到我的消息以后,知道了我乔戈里这里没消息发送了,然后继续发送消息因为你还有消息发送,这个时候是小萌你服务器端知道了客户端无消息发送了;
在第三次挥手中,小萌你说自己说完了没话要说了,准备睡觉,这里代表小萌你这个服务器没消息发送了,所以三次挥手结束,小萌你这个服务器知道了自己没有消息发送,而且小萌你还知道了客户端没有消息发送,但是由于我乔戈里这个客户端没有给你的第三次挥手回复,所以你小萌产生了疑问,乔戈里(客户端)到底知不知道我这里没有消息发送了,三次挥手就有这个问题!
小萌:对哦!因为我们讨论的是三次挥手,所以你是不会对收到的消息进行回复,在三次挥手中,我服务器不知道到底你有没有收到我断开的请求,如果你收到了,那还好,皆大欢喜咋两都去睡觉了(客户端和服务器端都断开连接),如下图所示;
小萌:那如果我小萌(服务器)断开的请求丢失了,你不知道我这里(服务器端)要断开,结果小萌我(服务器)去睡觉了(断开连接),乔戈里你(客户端)由于没有收到睡觉这个消息(断开连接),还一直傻傻地在那里等着我继续发送消息(虽然服务器没消息发送了,但是客户端不知道呀!客户端没有断开连接浪费了资源),结果就是,我安安稳稳地睡了一晚上,乔哥你可怜巴巴在那等了一晚上我的消息,大体情况如下图所示。
乔戈里:只有进行第四次挥手,我对你小萌最后说的“睡觉去了”进行回复,这样你小萌(服务器)就知道我乔戈里(客户端)知道你要断开连接了。到这里就圆满了!
你小萌(服务器)知道了我乔戈里(客户端)没有话说了(服务器知道客户端没有消息发送),你小萌(服务器)最后说完话了也要去睡觉了(服务器知道自己也没消息发送了);
而我乔戈里(客户端)一开始说自己没有消息发送了(客户端自己知道自己没有消息发送了),最后通过第四次挥手确定肯定以及一定确保我收到了你小萌(服务器)说也没话说了(客户端知道了服务器没有消息发送了,为啥这么确定,因为客户端只有在收到服务器发送的断开连接的消息,才会进行第四次挥手来进行回复哦~)。这就是四次挥手的妙处!给你花了示例图,方便你理解!
————e n d————
卡通人物出自公众号:叔婆饭
领取专属 10元无门槛券
私享最新 技术干货