深入理解HTTP协议
在前端性能优化之概述中,我们列举列一些优化方向,其中多处是跟http网络有关的,所以在继续往下深入之前还是有必要温习一下计算机系的必修课《计算机网络》,接下来几篇文章会围绕计算机网络中HTTP相关知识进行总结。
一、网络体系结构
HTTP协议作为计算机网络的一部分,我们要学习HTTP协议,首先得了解计算机网络大概是一个什么样的结构,HTTP在其中又是一个什么角色。
在《计算机网络》这本书中提到了3种体系结构:
网络体系机构
OSI七层网络模型网络协议,比较复杂不是很实用,而TCP/IP协议(四层)应用却是很广泛的,主要分为:
1. 应用层
2. 运输层
3. 网际层
4、网络接口层
为了综合OSI和TCP/IP的优先,实际上经常表示的是一种5层协议,如上图(C)所示,即把网络接口层分为了数据链路层和物理层。
从实质上讲TCP/IP只是最上面三层。
分层 | 协议 | |
---|---|---|
应用层 | HTTP(超文本传输协议)、FTP(文件传输协议)、TFTP、SMTP(发送邮件)、SNMP、DNS(域名系统) | |
传输层 | TCP(传输控制协议)、UDP(用户数据报协议) | |
网络层 | CMP(网际控制消息协议,发送消息,并报告有关数据包的传送错误)、IGMP(互联组管理协议,IP主机向本地多路广播路由器报告主机组成员)、IP(网际协议,负责主机和网络之间寻址和路由数据包)、ARP(地址解析协议,获得同一物理网络中的硬件主机MAC地址) | |
数据链路层 | ||
物理层 |
二、数据传输
上面我们描述了网络体系机构,一共分为了5层, 那每一次数据又是如何传输的呢
数据传输 数据传输2应用程序数据在发送到物理网络之前,会沿着协议栈从上往下传递。每层协议都将在上层协议数据的基础上加上自己的头部信息(链路层还会加上尾部信息),以为实现该层功能提供必要的信息。 发送端发送数据时,数据会从上层传输到下层,且每经过一层都会被打上该层的头部信息。而接收端接收数据时,数据会从下层传输到上层,传输前会把下层的头部信息删除。
我们注意到在应用层就产生了HTTP报文,我们在浏览器中connect中经常调试的内容就是HTTP报文内容的特殊显示。
http报文产生HTTP报文后,需要由传输层(TCP)将数据传输出去,那TCP具体要做什么事情呢?
客户端和服务端进行信息发送,是需要创建一个TCP连接的。按层此分,TCP(Transimision Control Protocal)位于传输层。提供可靠的字节流服务(为了方便传输将大块数据分割成以报文段为单位的数据包进行管理)。可靠的传输服务是指,能够把数据准确可靠的传给对方。
TCP是如何做到这些事情的呢?
1、连接建立 : 主要是指TCP/IP的三次握手来建立连接
2、将数据进行分段打包传输: 主要是实在网络传输过程中的MTU(最大传输单元)决定的,数据必须打包成段才可以传送 ;
3、对每个数据包编号控制顺序: 数据打包成段后,需要按序列号排序来发送,保证数据的连贯性
4、运输中丢失、重发和丢弃处理
5、流量控制: 通过滑动窗口来进行流量的控制
6、避免拥塞: 解决拥塞控制的办法是:采用慢启动和拥塞避免算法结合使用来控制拥塞
TCP协议一个最主要的特点是面向链接的运输层协议。TCP把连接作为最基本的抽象。TCP运输连接的建立和释放都是一个必不可少的过程。运输连接有三个阶段
建立连接(3次握手)、传输数据、断开连接(4次挥手)。
- 建立连接(3次握手)
建立连接需要在客户端和服务器之间交换三次TCP报文,具体如下:
建立连接1、Client首先创建一个TCB(传输控制块), 这个传输控制块中报文的同步位置SYN=1,同时选择一个seq的序列号,这个TCB报文中不携带任何数据,发送完成后
Client进入SYN_SEND状态,等待服务端的确认。(第一次握手)
2、Server 接受到请求后如果同意连接,则创建一个应答报文,报文头将SYN和ACK都设置为1,同时增加一个自己的初始序列号y和回复一个ack确认号,ack=x+1,此时服务端将会进入SYN_RECV状态.
3、Client收到报文校验提供后,再回复一个报文,报文头将ACK设置为1,此时增自己的序列号为seq=x+1,确认号为ack=y+1,此时都会进入ESTABLISHED状态.
- 发送数据
发送数据主要是发送http报文数据,其中涉及到数据重传、流量控制。
- 断开连接(4次挥手)
断开是双向断开,客户端向服务端请求断开和服务器向客户端发送断开请求,每次请求都会进行一次ack确认,所以是4次挥手。
TCP的释放除了四次握手释放以外,TCP还会保持一个保活计时器( keep-alive timer) 防止机器或者网络故障。
三、HTTP协议
HTTP是一个面向事物的应用层协议,是Hyper Text Transfer Protocol(超文本传输协议)的缩写。
- 基本特征
1、本事无连接,依赖TCP连接;
2、无状态,(可以依赖cookie);
3、能传输任意类型数据;
1、HTTP是无状态的面向连接的协议,无状态不代表HTTP不能保持TCP连接,HTTP使用的不是UDP协议(无连接)
2、从HTTP/1.1起,默认都开启了Keep-Alive,保持连接特性,简单地说,当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的TCP连接不会关闭,如果客户端再次访问这个服务器上的网页,会继续使用这一条已经建立的连接
3、Keep-Alive不会永久保持连接,它有一个保持时间,可以在不同的服务器软件(如Apache)中设定这个时间
网友评论