真正“搞”懂HTTP协议02之空间穿梭( 五 )


真正“搞”懂HTTP协议02之空间穿梭

文章插图
这张图并不完全,明显缺失了很大一块,但是我相信你一定知道那缺失的部分有哪些内容 , 也当作是留给你的作业吧~
其实到这里本篇就算是完事了,但是完事的有点突然,其实在描述上面的整个数据包流转的过程中,越到底层我描述的就越少,其实我刻意省略了很多关于TCP、IP以及MAC的重要内容,但是这篇系列毕竟不是讲互联网络的,大家知道它在空间上经历了哪些部分即可,如果有兴趣,大家可以自行查找资料学习,我猜你不会找,哈哈哈哈
补充:四次挥手数据传输完了之后,TCP还需要做一点事情,就是通道建立了 , 但是当我不需要的时候,我想把通道关闭,不然一直监听着有没有消息给我实在是太累了 。
当TCP关闭通道的时候 , 需要通过四次挥手来确认,它是这样挥手的:
真正“搞”懂HTTP协议02之空间穿梭

文章插图
我们解释完这张图,本章就完事啦 。
我们简单解释下这张图 , 当客户端发送一个“我不玩了”的消息后 , 就会进入到FIN_WAIT_1的状态,等待后续的服务器反?。?当服务器收到消息后,就会在之前的基础上给包序号加+1返回给客户端,那么此时服务器就进入到了CLOSED_WAIT的待关闭状态 。
我们稍微跑题一下,在学习了三次握手,和上面四次挥手的图示后,你发现一个问题没有 , 就是所有的应答都是在请求的基础包序号上+1 。换种理解方式就是+1的序号都是作为应答出现的包 。
我们继续上面的话题 , 当客户端收到了服务器的第一次响应应答后,会进入到FIN_WAIT_2的状态,为啥这里客户端要等服务器再发送一个包呢?假如服务器还有未处理完的数据要给你咋整?你不是还得接收,所以要等服务器的数据都处理完毕了,告诉客户端 , 我这边也可以不玩了才行 。
于是 , 当服务器也结束了自己的任务的时候 , 就把包发给客户端,客户端进入TIME_WAIT的状态 。当服务器收到第二次客户端的应答后,就直接关闭了 。
最后,TCP还要求客户端还是要持续的监听一段时间,这个时间就是报文最大生存时间,等了一段时间后,就进入关闭的状态了 。
我们看哈,其实整个四次挥手,一次是由客户端发起,一次服务器应答,一次是由服务器发起,客户端应答 , 最后,客户端再等待一段时间 。才最终结束整个挥手过程 。
那他为什么不可以像三次握手那样,请求 , 响应 , 响应响应,三个步骤就可以了呢 。这里有一个核心就是,建立连接时,双方都处于空闲状态,没有正在运行的程序,而关闭时,需要确定双方的程序都结束才可以 。所以再四次挥手的由服务器发起的请求的过程中,就是为了等待服务器的任务跑完 。
小结我们稍微回顾下我们本章都学习了什么 。
  • DoD模型与OSI模型的异同 , 你知道4 , 7,5都是怎么来的么?
  • 一个HTTP包在5层模型中的穿梭过程(特别简易版),你知道发送一个HTTP请求要经历哪些过程么?
  • 三次握手和四次挥手,我想握手三百次,挥手四百次,是否可以呢?
由于篇幅所限,文章很多内容并未详细涉及,因为其实本章所讲内容如果扩大一点,就可以叫做《网络基础》,嗯,可以写好几本书 。如果你对此有兴趣并且有时间,我还是十分建议去深入学习一下的 。
最后,本人能力有限,若在阅读过程中发现谬误,还望不吝指教 。非常感谢~~

推荐阅读