美文网首页
深入理解Http协议一

深入理解Http协议一

作者: zhangAllen | 来源:发表于2020-08-20 16:55 被阅读0次

    深入理解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)中设定这个时间

    相关文章

      网友评论

          本文标题:深入理解Http协议一

          本文链接:https://www.haomeiwen.com/subject/lmhejktx.html