文章插图
这张图并不完全,明显缺失了很大一块,但是我相信你一定知道那缺失的部分有哪些内容 , 也当作是留给你的作业吧~
其实到这里本篇就算是完事了,但是完事的有点突然,其实在描述上面的整个数据包流转的过程中,越到底层我描述的就越少,其实我刻意省略了很多关于TCP、IP以及MAC的重要内容,但是这篇系列毕竟不是讲互联网络的,大家知道它在空间上经历了哪些部分即可,如果有兴趣,大家可以自行查找资料学习,我猜你不会找,哈哈哈哈
补充:四次挥手数据传输完了之后,TCP还需要做一点事情,就是通道建立了 , 但是当我不需要的时候,我想把通道关闭,不然一直监听着有没有消息给我实在是太累了 。
当TCP关闭通道的时候 , 需要通过四次挥手来确认,它是这样挥手的:
文章插图
我们解释完这张图,本章就完事啦 。
我们简单解释下这张图 , 当客户端发送一个“我不玩了”的消息后 , 就会进入到FIN_WAIT_1的状态,等待后续的服务器反?。?当服务器收到消息后,就会在之前的基础上给包序号加+1返回给客户端,那么此时服务器就进入到了CLOSED_WAIT的待关闭状态 。
我们稍微跑题一下,在学习了三次握手,和上面四次挥手的图示后,你发现一个问题没有 , 就是所有的应答都是在请求的基础包序号上+1 。换种理解方式就是+1的序号都是作为应答出现的包 。我们继续上面的话题 , 当客户端收到了服务器的第一次响应应答后,会进入到FIN_WAIT_2的状态,为啥这里客户端要等服务器再发送一个包呢?假如服务器还有未处理完的数据要给你咋整?你不是还得接收,所以要等服务器的数据都处理完毕了,告诉客户端 , 我这边也可以不玩了才行 。
于是 , 当服务器也结束了自己的任务的时候 , 就把包发给客户端,客户端进入TIME_WAIT的状态 。当服务器收到第二次客户端的应答后,就直接关闭了 。
最后,TCP还要求客户端还是要持续的监听一段时间,这个时间就是报文最大生存时间,等了一段时间后,就进入关闭的状态了 。
我们看哈,其实整个四次挥手,一次是由客户端发起,一次服务器应答,一次是由服务器发起,客户端应答 , 最后,客户端再等待一段时间 。才最终结束整个挥手过程 。
那他为什么不可以像三次握手那样,请求 , 响应 , 响应响应,三个步骤就可以了呢 。这里有一个核心就是,建立连接时,双方都处于空闲状态,没有正在运行的程序,而关闭时,需要确定双方的程序都结束才可以 。所以再四次挥手的由服务器发起的请求的过程中,就是为了等待服务器的任务跑完 。
小结我们稍微回顾下我们本章都学习了什么 。
- DoD模型与OSI模型的异同 , 你知道4 , 7,5都是怎么来的么?
- 一个HTTP包在5层模型中的穿梭过程(特别简易版),你知道发送一个HTTP请求要经历哪些过程么?
- 三次握手和四次挥手,我想握手三百次,挥手四百次,是否可以呢?
最后,本人能力有限,若在阅读过程中发现谬误,还望不吝指教 。非常感谢~~
推荐阅读
- 用 VS Code 搞 Qt6:信号、槽,以及QObject
- React动画实现方案之 Framer Motion,让你的页面“自己”动起来
- “元芳,你怎么看”这句话当时是怎么火起来的
- 元芳你怎么看怎么幽默回复(神回复系列搞笑评论)
- “-”、“_”怎么打出来(怎么打出来的字有颜色)
- 一横“_” 电脑上怎么打(电脑中横杠怎么打)
- 用昇腾AI护航“井下安全”
- 两种方法 我的世界怎么附魔(我的世界怎么搞附魔)
- 盘它!基于CANN的辅助驾驶AI实战案例,轻松搞定车辆检测和车距计算!
- MySQL 全局锁、表级锁、行级锁,你搞清楚了吗?