前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【漫画】TCP断开连接为什么是四次挥手,不是二次挥手/三次挥手?

【漫画】TCP断开连接为什么是四次挥手,不是二次挥手/三次挥手?

作者头像
乔戈里
发布2019-05-06 14:45:52
1.1K0
发布2019-05-06 14:45:52
举报
文章被收录于专栏:Java那些事Java那些事

前情回顾:【漫画】TCP连接为什么是三次握手,而不是两次握手,也不是四次握手?

乔戈里和小萌一起去美食城吃了午饭

小萌:额...哦!这就是两次挥手,我这里就好比是服务端还有消息没发送完,乔哥你的客户端就突然把我拉黑(断开了连接),导致我(服务器)这里还有消息给你,但你因为关闭,却接受不到。所以是不能两次挥手断开TCP连接!这样是不可靠的!大体示意图如下图所示。

乔戈里:在第一次挥手中,我一开始说,我这里没话说了,代表客户端这里没消息发送了,这是第一次挥手,客户端知道自己没消息发送了;

在第二次挥手中,小萌你收到我的消息以后,知道了我乔戈里这里没消息发送了,然后继续发送消息因为你还有消息发送,这个时候是小萌你服务器端知道了客户端无消息发送了;

在第三次挥手中,小萌你说自己说完了没话要说了,准备睡觉,这里代表小萌你这个服务器没消息发送了,所以三次挥手结束,小萌你这个服务器知道了自己没有消息发送,而且小萌你还知道了客户端没有消息发送,但是由于我乔戈里这个客户端没有给你的第三次挥手回复,所以你小萌产生了疑问,乔戈里(客户端)到底知不知道我这里没有消息发送了,三次挥手就有这个问题!

小萌:对哦!因为我们讨论的是三次挥手,所以你是不会对收到的消息进行回复,在三次挥手中,我服务器不知道到底你有没有收到我断开的请求,如果你收到了,那还好,皆大欢喜咋两都去睡觉了(客户端和服务器端都断开连接),如下图所示;

小萌:那如果我小萌(服务器)断开的请求丢失了,你不知道我这里(服务器端)要断开,结果小萌我(服务器)去睡觉了(断开连接),乔戈里你(客户端)由于没有收到睡觉这个消息(断开连接),还一直傻傻地在那里等着我继续发送消息(虽然服务器没消息发送了,但是客户端不知道呀!客户端没有断开连接浪费了资源),结果就是,我安安稳稳地睡了一晚上,乔哥你可怜巴巴在那等了一晚上我的消息,大体情况如下图所示。

乔戈里:只有进行第四次挥手,我对你小萌最后说的“睡觉去了”进行回复,这样你小萌(服务器)就知道我乔戈里(客户端)知道你要断开连接了。到这里就圆满了!

你小萌(服务器)知道了我乔戈里(客户端)没有话说了(服务器知道客户端没有消息发送),你小萌(服务器)最后说完话了也要去睡觉了(服务器知道自己也没消息发送了);

而我乔戈里(客户端)一开始说自己没有消息发送了(客户端自己知道自己没有消息发送了),最后通过第四次挥手确定肯定以及一定确保我收到了你小萌(服务器)说也没话说了(客户端知道了服务器没有消息发送了,为啥这么确定,因为客户端只有在收到服务器发送的断开连接的消息,才会进行第四次挥手来进行回复哦~)。这就是四次挥手的妙处!给你花了示例图,方便你理解!

———— e n d ————

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-04-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序员乔戈里 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档