TCP三次握手四次挥手——下篇

来源:互联网 发布:java将时间转换成秒 编辑:程序博客网 时间:2024/06/05 17:06

这是一个系列故事,没有读过上篇的不妨看看《TCP三次握手与四次挥手——上篇》


面试官:说说TCP四次挥手的过程

酋长从宫中回来不久,国王就颁布了新的TCP协议法案,这次修正版的TCP协议运行的很好,举国上下一片喜悦

从小白到菜鸟的转变

经过上次的聊天后,司马和上官成为了好朋友,今天,司马又给上官发消息了,但是这次,两人建立连接后,同时给对方发送了一个报文“在吗?”,导致过了一会,司马和上官都收到对方的“在吗?”如下图:

这里写图片描述

在聊天完后,好学的司马又去请教酋长去了,酋长说,TCP是允许你们同时给对方发消息的,这种特性有一个专业名字叫做“全双工”,“哦,原来是这样”,“司马恍然大悟。原来TCP里面的门道挺多”,下来得好好学习学习,司马心中暗自说道

一次断开连接的历程

司马又找好哥们上官聊天了,与往常一样,建立连接,聊完天后,断开连接。这次司马特别有心,用了一个小本子记录下这次TCP断开连接的过程。

① 刚开始,司马发了一个“连接释放报文段”表示自己不再发送聊天消息了
② 然后上官接到这个“连接释放报文段”后给司马发出一个“确认报文段”,表示自己收到了

这时候,司马到上官方向的连接断了,即:司马没有消息给上官发了,但是上官到司马这个方向的连接还没有断,所以上官还可以给司马发送消息,他可能还有些话没说完。如下图:

这里写图片描述


1>上官这时候如果没有啥消息给司马发了,那他也会发送一个“连接释放报文段”给司马,表明他想断开连接(上官到司马方向的连接)
2>上官这时候如果还有消息想给司马发,那就按照往常一样把消息从他这边发给司马(因为从上官到司马这个方向的连接还没有断),等到发送完成后,然后再发送”连接释放报文段

④ 司马收到这个报文后,也会给上官发送一个”确认报文段“以表明自己自己收到这个报文

⑤ 但是这个时候司马还不能撒手不管,他还需等待一段时间才可以进入到“CLOSED”(关闭)状态,表明自己的这次连接已经关闭了。可以接受下次连接了。

⑥ 当上官收司马的确认后,自己也进入“CLOSED”状态

完整的TCP四次挥手如下图:

这里写图片描述

司马心中的疑惑

司马下来看了看小本子,心中产生了一个疑惑,为什么我最后一次给上官发送确认,我还需要等一段时间,我不想等这么长时间,多麻烦。

他找酋长去诉苦去了,酋长说:“你等待这么长时间是有非常有必要的,你想啊,咱们TCP是不是规定了发出去的“请求报文(可能是请求连接,也有可能是请求关闭)”需要得到对方的确认,如果超过一定时间得不到确认会进行超时重传

如果说你给上官发送的那个确认如果在中途丢失了,上官迟迟等不到你的确认,他肯定会执行超时重传给你重新发一个请求关闭连接的报文的,如果你不等待这么长时间而直接进入关闭状态,是不是就接收不到这个重传的报文了?那上官是不是就收不到你的确认,进而上官就不能正常关闭了?如下图:

这里写图片描述

所以说,你在等的这段时间,其实是要确保你的确认让对方收到,如果对方超时重传一个连接释放报文段,这个时候你还没有关闭,那你就可以重新发一个确认给他呀”

“哦,原来是这样呀”,司马心中的怨气立马就消失了。

从此计算机帝国走向了互联网的时代

原创粉丝点击