《趣谈网络协议》学习笔记 day04

2023-01-18  本文已影响0人  陈卧虫

http1.1

http1.1 是基于tcp实现的应用层协议,所以请求需要建立连接,由于建立连接和断开连接的过程很耗费资源,通过keep-alive机制可以让多个请求复用同一个连接。文本协议,每次请求都需发送完整的数据。

虽然可以多个请求复用同一个连接,但实际是在一个队列中排队发送,当队头的请求出现问题时,就会堵塞整个发送,也就是队头堵塞问题。

请求的格式

由三部分组成:

  1. 请求头:用于表示本次请求的方法,路劲,协议版本
  2. 首部:配置信息
  3. 实体:具体参数


    image.png
GET /search HTTP/1.1  
Accept-Language: zh-cn  
Accept-Encoding: gzip, deflate  
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; TheWorld)  
Connection: Keep-Alive  

响应的格式

也是三部分组成:

  1. 响应头:协议版本,响应状态,描述信息
  2. 首部:配置信息
  3. 实体:响应结果


    image.png

http 2.0

是对http1.1的优化,主要有几个方面:

  1. 减少请求头的无效传输,通过在通信两端建立索引表,相同的头字段只需发送索引id即可。
  2. 将tcp连接虚拟成多个流,彼此互不干扰,不同的请求就可以通过不同的流发送,从而避免对队头堵塞问题。同时流也是有优先级的,确定不同请求的紧急程度。
  3. 内容编码,信息编程成二进制,分割成更小的帧,header帧传输Header,data帧传输实体内容。每一个header帧都代表着一个新的流。帧的发送是乱序的,目的是为了避免队头堵塞。

quic

  1. tcp的包是严格有序的,仍然存在串行问题。所以为了彻底解决这个问题,quic选择使用udp作为底层的传输协议。
  2. 自定义连接机制:不再通过四元组表示一个连接(源ip,源端口,目标ip,目标端口),而是通过一个64位(8字节)的随机数标识一个连接。
  3. 自定义重传机制:通过包的序号持续递增的机制,哪怕包丢失,重发的包序号也会递增,从而确认更加准确的RTT(往返时间)。而发送的位置通过offset来确认。
  4. 无堵塞的多路复用: udp的多个流之间没有依赖,也不需要有序发送,做到了真正的并发。
  5. 自定义的流量控制:滑动窗口中位置不再依据最近一次连续递增的应答,而是依据实际应答的个数,哪怕中间有包丢失,应答依然有效,窗口右移。
上一篇下一篇

猜你喜欢

热点阅读