http协议

流媒体协议详解_步基的博客-CSDN博客

目录

一 http简介

1 http版本

2http应用层参数意义

3 队头阻塞问题

二 quic协议详解

1 重传机制

2 流量控制

3连接迁移


一 http简介

1 http版本

http0.9

目录

1991年发布, 没有header,功能非常简单,只支持GET

http1.0

1996年发布,明文传输安全性差,header特别大。它相对0.9有以下增强:

  • 增加了header(使用元数据与数据解耦)
  • 增加了status code,用于声明请求的结果。
  • content-type可以传输其它文件。
  • 请求头增加了http/1.0版本号。

支持GET, POST 和 HEAD方法

缓存策略:http1.0的缓存策略主要是依赖header中的If-Modiified-Since,Expire(到期)

缺点:短连接,每请求一次资源就新建一次tcp连接

http1.1

1997发布,是现在使用最广泛的版本。它相对1.0有以下增强:

  • 可以设置keepalive让http重用tcp连接(请求必需串行发送),长连接
  • 支持pipeline传输,请求发出后可以继续发送请求
  • 增加了HOST头,让服务端知道用户请求的是哪个域名
  • 增加了type、language、encoding等header
  • 断点续传(通过在 Header 设置参数)
  • 新增OPTIONS、PUT、PATCH、DELETE、TRACE 和 CONNECT 方法。

缓存策略:http1.1的缓存策略要比http1.0略多,例如 Entity tag(实体标签), If-Unmodified-Since, If-Match, If-None-Match等.

2014年更新了内容:

  • 增加了TLS支持,即https传输
  • 支持四种模型:短连接,可重用tcp的长链接,服务端push模型(服务端主动将数据推送到客户端cache中),websocket模型

缺点:还是文本协议,客户端服务端都需要利用cpu解压缩

http2.0

2015年发布,主要是提升安全性与性能。它相对1.1的增强有:

  • header压缩(合并同时发出请求的相同部分)
  • 二进制分帧传输,更方便头部只传输差异部分
  • 流多路复用,同一服务下只需要用一个连接,节省了连接
  • 服务器推送,一次客户端请求服务端可以多次响应。
  • 可以在一个tcp连接中并发发送请求

缺点:基于tcp传输,会有队头阻塞问题(丢包停止窗口滑动),tcp会丢包重传。tcp握手延时长,协议僵化问题。

http3.0  

2018年发布,基于谷歌的QUIC,底层使用udp代码tcp协议,用户空间使用。(TCP/udp由操作系统内核实现,系统空间)

这样解决了队头阻塞问题,同样无需握手,性能大大地提升,默认使用tls加密。

2http应用层参数意义

range:下载范围

connection:close   短连接,keep alive长连接

延伸http1.0和http1.1的区别:

a http1.0只支持短连接,http1.1可支持长连接

b http1.1新增host字段,支持虚拟主机。同一个物理主机上可能对应多个虚拟ip,分别对应不同的网站,通过host字段可以区分不同的网站

c 请求方法

HTTP1.0定义了三种请求方法: GET, POST 和 HEAD方法。
HTTP1.1新增了五种请求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法。

3 队头阻塞问题

队头阻塞(Head-of-Line blocking, 简写:HOL blocking), 是http协议的一个著名问题, 它会导致延时的提高。队头阻塞, 是指第一个数据包(队头)受阻而导致整列数据包传输受阻。队头阻塞在OSI的多个层中都有, 例如:

HTTP队头阻塞
TLS队头阻塞
TCP队头阻塞
 

http1.0中, http队头阻塞是指:在同一个TCP通道上,客户端的第一个http请求, 会阻塞该客户端后续的http请求,直到客户端接收完毕第一个http请求的响应。如下图所示:请求1发出后, 不能立即发出请求2, 要等响应1收到后, 才能发出请求2。要点:阻塞在客户端请求

                               http1.0队头阻塞

http1.1中, http队头阻塞是指:在同一个TCP通道上,服务端的第一个http响应, 会阻塞服务端后续的http响应,直到服务端发送完毕第一个http响应。要点:阻塞在服务端响应

                              http1.1队头阻塞

http队头阻塞的原因, 是因为http协议设计上, 不支持响应的乱序。应对方式: 请求和响应都带上同一个唯一ID。在http2中, 增加了streamId, 一对请求和响应, 会带有同一个streamId.

TLS队头阻塞是指:在同一个TCP通道上,接收端, 要等待组成完整数据的所有TCP包, 都接收完毕后, TLS才可以进行解密。

TCP队头阻塞, 既包含了发送端的队头阻塞, 也包含了接收端的队头阻塞.
TCP发送端队头阻塞是指:在同一个TCP通道上,第一个TCP滑动窗口内的多个分组, 在全部发送且ack确认完成前, 会阻塞后续的滑动窗口的发送。

TCP接收端队头阻塞是指:在同一个TCP通道上,如果sequence number较小的包丢失了,则后续sequence number较大的包都会积压在接收端缓存中, 且无法被应用层获取到。

二 quic协议详解

1 重传机制

packet number;PKN=4,重传的PKN=2的数据包。offset表示该数据包在总数据中的偏移

2 流量控制

与tcp流量控制滑动窗口原理类似

 和 TCP 不同的是:QUIC 的滑动窗口分为 Connection 和 Stream 两种级别。Connection 流量控制:规定了所有数据流的总窗口大小;Stream 流量控制:规定了每个流的窗口大小。

 则整个 Connection 的可用窗口大小为:20+30+10 = 60

3连接迁移

当客户端切换网络时,和服务器的连接并不会断开,仍然可以正常通信,对于 TCP 协议而言,这是不可能做到的。因为 TCP 的连接基于 4 元组:源 IP、源端口、目的 IP、目的端口,只要其中 1 个发生变化,就需要重新建立连接。但 QUIC 的连接是基于 64 位的 Connection ID,网络切换并不会影响 Connection ID 的变化,连接在逻辑上仍然是通的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

步基

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值