存勖闲

2018-12-21 00:47

HTTP相关的一些东西

本文作者:IMWeb 存勖闲 原文出处:IMWeb社区 未经同意,禁止转载

这几天一直在看关于HTTP和前端性能优化相关的内容,今天先写一篇关于HTTP的文章,如果时间允许的话再接着把前端性能优化的写完。毕竟还要留着时间去看小片嘛😌

接下来就是正文啦!

浏览器输入URL后HTTP请求返回的完整过程

就是下图这个啦(这个可是我从某课网偷来的) URL输入到请求返回

从输入地址到页面渲染

从输入地址到页面渲染

在HTTP的五层分层中:

  • 应用层为应用软件提供了很多服务,构建于TCP协议之上,屏蔽网络传输相关细节

  • 传输层向用户提供可靠的端到端(End-to-End)服务,向高层屏蔽了下层数据通信的细节

  • 网络层为数据在结点之间传输创建逻辑链路

  • 数据链路层在通信的实体间建立数据链路

  • 物理层主要作用是定义物理设备如何传输数据

    guocheng.png

统一资源标识符URI

URI用字符串标识某一互联网资源,包括URL和URN。 URL为统一资源定位符,表示资源的地点(互联网上所处的位置); URN为永久统一资源定位符:资源在移动之后还能被找到,目前还没有非常成功的使用方案。

TCP连接中的三次握手与四次挥手

这部分内容是面试中的重点,尤其是SYN、ACK啥的,好乱😵 先放图😏

1544508932779.png

其中:起初两端的TCP进程都是CLOSED状态。主动打开连接的是客户端,被动打开连接的是服务器

  1. 第一次握手:客户端向服务器发出连接请求保温,这是报文首部中的同部位SYN=1,同时选择一个初始序列号seq=x,此时,TCP客户端进程进入了SYN-SENT(同步已发送状态)。TCP规定,SYN报文段(SYN=1的报文段)不能携带数据,但需要消耗掉一个序号。

  2. 第二次握手:服务器收到请求报文后,如果同意连接就发出确认报文。确认报文中ack=1,SYN=1,确认号为ACK=x+1,同时也要为自己初始化一个序号seq=y,此时服务器进入了SYN-RCVD(同步收到)状态。这个报文不能携带数据,但是同样要消耗一个序号。

  3. 第三次握手:客户端收到确认后,还要向服务器给出确认。确认报文的ack=1,ACK=y+1,自己的序列号seq=x+1,此时,TCP连接建立,客户端进入ESTABLISHED(已建立连接)状态。TCP规定,ACK报文段可以携带数据,但是如果不携带数据则不消耗序号。

当服务端收到客户端的确认后也进入ESTABLISHED状态,此后双方就可以开始连通了。

四次挥手:

  • 第一次挥手:客户端向服务器发送一个FIN报文段,将设置seq=x+2和ACK=y+1,;此时,客户端进入 FIN_WAIT_1状态,这表示客户端没有数据要发送服务器了,请求关闭连接;

  • 第二次挥手:服务器收到了客户端发送的FIN报文段,向客户端回一个ACK报文段,ACK=x+3;服务器进入了CLOSE_WAIT状态,客户端收到服务器返回的ACK报文后,进入FIN_WAIT_2状态;

  • 第三次挥手:服务器会观察自己是否还有数据没有发送给客户端,如果有,先把数据发送给客户端,再发送FIN报文;如果没有,那么服务器直接发送FIN报文给客户端。请求关闭连接,同时服务器进入LAST_ACK状态;

  • 第四次挥手:客户端收到服务器发送的FIN报文段,向服务器发送ACK报文段,然后客户端进入TIME_WAIT状态;服务器收到客户端的ACK报文段以后,就关闭连接;此时,客户端等待2MSL后依然没有收到回复,则证明Server端已正常关闭,客户端也可以关闭连接了。

好啦,突然看了看,剩下总结的都可以归为缓存了,那就在下一篇里面再写吧,拜拜了您呐😁

0条评论

    您需要 注册 一个IMWeb账号或者 才能进行评论。