HTTP协议

Posted samfung

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HTTP协议相关的知识,希望对你有一定的参考价值。

TCP/IP协议族

TCP/IP协议族是一个网络通信模型,以及一整个网络传输协议家族,为互联网的基础通信架构。该协议家族的两个核心协议:TCP(传输控制协议)和IP(网际协议),为该家族中最早通过的标准。这个协议族由互联网工程任务组负责维护。TCP/IP 协议族是Internet最基本的协议,HTTP协议是它的一个子集。TCP/IP协议族按层次分为以下5层。
技术图片

1、物理层(实体层)

底下第一层。通过光缆、电缆、双绞线、无线电波等物理手段将电脑连接起来。这一层规定了网络的一些电器特性,负责传送0和1的电信号。

2、数据链路层(链接层)

单纯的0和1没有任何意义,必须规定解读方式:多少个电信号算一组?每个信号位有何意义?
这就是链路层的功能,它在实体层的上方,确定了0和1的分组方式
以太网规定,一组电信号构成一个数据包,叫作“帧”(frame)。每一帧分成两个部分:标头(head)和数据(data)。
技术图片
标头包含发送者和接受者的信息。以太网规定,连入网络的所有设备,都必须具有“网卡”。数据包必须从一块网卡传送到另一块网卡。网卡的地址,就是数据包的发送地址和接收地址,这叫做MAC地址。

广播:

同一个子网络下,1电脑要给2电脑发送数据包,同一个子网络下的3、4、5电脑也会收到该数据包,2、3、4、5电脑读取数据包的标头(head),看看接收方的MAC地址是否与自己匹配。匹配就接收这个包,做进一步处理,不匹配则丢弃这个包。这种发送方式叫作“广播”。
技术图片
有了数据包、MAC地址、广播的发送方式,“链路层”就可以在多台电脑间传送数据了。

总结简述:以太网规定一组电信号为一个数据包,MAC地址为标识一广播的方式在同一子网络下发送数据

3、网络层

链路层说到,一个子网络内以广播的方式以MAC地址为标识发送数据包。互联网是由无数个子网络组成的矩形网络,同一个子网络用广播的方式发送数据,而不同网络则采用“路由”的方式
问题来了,MAC地址是无法辨别是否同一网络下的,于是“网络层”出现后,每台计算机有了两种地址,一种是MAC地址(网卡),一种是网络地址(管理员分配的)。

IP协议:

规定网络地址的协议,叫作IP协议,它所定义的地址就被称为IP地址。
IP地址由32个二进制组成,我们一般用分成四段的十进制数表示,从 0.0.0.0 到 255.255.255.255(IPV4)。
一个IP地址分成两个部分,前一段代表网络,后一段代表主机,但不确定前一段和后一段的分割点(需要子网掩码)。
处于同一子网络下的计算机,它们IP地址的网络部分必定是相同的。假如网络部分是钱24位(二进制),那么172.16.254.2 和 172.16.254.1是处于同一子网络下。

子网掩码:

上面说到,一个IP地址我们无法知道前几位是网络部分,所以就有了子网掩码。
子网掩码表示IP地址的特征,也是一个32位二进制数字(与IP地址一一对应),网络部分全部为1,主机部分全部为0。
比如IP地址172.16.254.1的子网掩码是255.255.255.0(二进制11111111.11111111.11111111.00000000),那么这个IP地址的网络部分就是前24位(172.16.254)。

IP数据包:

根据IP协议发送的数据,叫作IP数据包,其中包含IP地址信息。
IP数据包也分为head、data两部分,IP数据包放进以太网数据包后,以太网数据包就变成下面这样
技术图片

总结简述:在链路层的基础上多了个IP地址,子网掩码用于识别IP地址的网络部分(辨别是否同一子网络下)

4、传输层

有了MAC地址和IP地址,我们可以在互联网上任意两台主机建立通信。
但有个问题是,主机接收到数据包,但不知道这个数据包是给哪个程序(进程)使用,所以这时有个参数叫端口(port)。
端口其实是每一个使用网卡的程序的编号,每个数据包发送的主机的指定端口,该端口程序就取得自己所需的数据。
端口是065535之间的一个整数,01023的端口被系统占用。

UDP协议:

UDP数据包也是由head、data组成。head部分定义了发出端口和接收端口。把UDP数据包放入IP数据包后,以太网数据包就变成下面这样
技术图片

TCP协议:

UDP协议的优点是比较简单,容易实现,但缺点是可靠性较差,一旦数据包发出,无法知道对方是否收到。
TCP协议可以理解为有确认机制的UDP协议。每发出一个数据包都要求确认,如果数据包丢失,收不到确认,发出方有必要重发这个数据包。
TCP协议能够确保数据不会丢失,但缺点是过程比较复杂,实现困难,消耗较多资源。

总结简述:网络层是建立在主机到主机的通信,而传输层是建立端口到端口的通信,数据接收的精准度来到了程序

5、应用层

应用程序收到传输层的数据,接下来要进行数据解读。
应用层的作用就是规定应用程序间通信的数据格式(http协议就在应用层)。
应用层的数据就放在传输层TCP数据包的data部分,所以现在以太网的数据包变成下面这样
技术图片
参考文章

HTTP协议简介

HTTP(超文本传输协议,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议。设计HTTP最初的目的是为了提供一种发布和接收html页面的方法。
客户端发起一个HTTP请求,建立一个到服务器指定端口(默认是80)的TCP连接。因此HTTP协议的优化技巧都是基于TCP协议自身特性。如TCP建立时三次握手会有延迟,为避免每次请求都要经历握手带来的延迟,应用层会选择不同的HTTP长连接方案。又如TCP建立连接慢启动(slow start)特性,所以连接重用总是比新建连接性能要好
HTTP连接使用“请求 - 响应”的方式,请求前先要建立连接,客户端向服务器发出请求后,服务器才能回复。

HTTP协议发展史

HTTP0.9

该版本极其简单,只有一个GET命令,没有header,服务端只能回应HTML字符串这一种格式,服务器发送完毕就关闭TCP连接

HTTP1.0

可以发送任何格式内容(MIME type)。
除了GET命令,还引入了POST和HEAD命令。
请求和回应的内容,除了数据部分,还加入头部信息(HTTP header),用来描述一些元数据。

缺点:
每个TCP连接只能发送一个请求。服务器响应完,连接就关闭,如果还想请求其他资源,就必须再新建一个连接。
其次就是队头阻塞(head of line blocking)。HTTP1.0规定下一个请求必须在前一个请求响应到达之前才能发送。假设前一个请求响应一直不到达,那么下一个请求就不发送,同样的后面的请求也给阻塞了。

HTTP1.1

在HTTP1.0的基础上进一步完善。

持久连接:

HTTP1.1最大的变化就是引入了持久连接(persistent connection),即TCP连接默认不关闭,可以被多个请求复用(不用手动声明Connection: keep-alive)。如果想要主动关闭连接,不论请求还是响应的header中包含了值为Connection: close,都表明当前正在使用的tcp链接在当天请求处理完毕后会被断掉。以后client再进行新的请求时就必须创建新的tcp链接了。对于同一个域名,大多数浏览器允许同时建立6个持久连接

管道机制:

HTTP1.1还引入了管道机制(pipelining),即在同一个TCP连接里面,客户端可以同时发送多个请求,但服务器还是按照顺序来进行回应

其他:

HTTP1.1还新增了PUT、PATCH、HEAD、OPTIONS、DELETE请求方式。另外请求头还新增了 Host 字段,用来指定服务器域名(DNS服务器解析域名只能解析到IP地址,所以需要Host字段指定到同一个IP地址上的不同web站点服务)。

缺点:

虽然HTTP1.1引入了管道机制,但似乎并不能很好地解决问题。同一个TCP连接里可以同时发送多个请求,但服务器还是要按照顺序响应返回,如果第一个请求阻塞了,那么后面的请求即使处理完毕了也需要等待。这就造成了队头阻塞。为了避免这个问题,只有两种方法,一是减少请求数,二是同时多开持久连接。
































以上是关于HTTP协议的主要内容,如果未能解决你的问题,请参考以下文章

HTTP协议工作原理是啥 HTTP协议工作原理介绍【详解】

HTTP 之 HTTP协议(HTTP协议概述HTTP消息缓存控制相关头部Cookie相关头部)

HTTP协议

Linux-http协议(应用层协议)-http概述-http格式-http版本-http方法-http状态码

大话http协议

Http协议简单解析