深入理解Http协议一

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

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,542评论 6 504
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,822评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,912评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,449评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,500评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,370评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,193评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,074评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,505评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,722评论 3 335
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,841评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,569评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,168评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,783评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,918评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,962评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,781评论 2 354