(五) HTTP/2的流量控制

HTTP/2利用流来实现多路复用,这引入了对TCP连接的使用争夺,会造成流被阻塞。流量控制方案确保在同一连接上的多个流之间不会造成破坏性的干扰。流量控制会用于各个独立的流,也会用于整个连接。

HTTP/2通过使用WINDOW_UPDATE帧来进行流量控制。

流量控制的原则

HTTP/2“流”的流量控制的目标是:在不改变协议的情况下允许使用多种流量控制算法。HTTP/2的流量控制具有以下特征:

  1. 流量控制是特定于一个连接的。每种类型的流量控制都是在单独的一跳的两个端点之间的,并不是在整个端到端的路径上的。(这里的一跳指的是HTTP连接的一跳,而不是IP路由的一跳)
  2. 流量控制是基于WINDOW_UPDATE帧的。接收方公布自己打算在每个流以及整个连接上分别接收多少字节。这是一个以信用为基础的方案。
  3. 流量控制是有方向的,由接收者全面控制。接收方可以为每个流和整个连接设置任意的窗口大小。发送方必须尊重接收方设置的流量控制限制。客户方、服务端和中间代理作为接收方时都独立地公布各自的流量控制窗口,作为发送方时都遵守对端的流量控制设置。
  4. 无论是新流还是整个连接,流量控制窗口的初始值是65535字节。
  5. 帧的类型决定了流量控制是否适用于帧。目前,只有DATA帧服从流量控制,所有其它类型的帧并不消耗流量控制窗口的空间。这保证了重要的控制帧不会被流量控制阻塞。
  6. 流量控制不能被禁用。
  7. HTTP/2只定义了WINDOW_UPDATE帧的格式和语义,并没有规定接收方如何决定何时发送帧、发送什么样的值,也没有规定发送方如何选择发送包。具体实现可以选择任何满足需求的算法。

具体实现也负责:

  • 管理如何基于优先级发送请求和响应。
  • 选择如何避免请求的队首阻塞。
  • 管理新流的创建。

为这些选择的算法可以与任何流量控制算法交互。

恰当地使用流量控制

流量控制的目的是保护在资源约束下运转的端点。例如,一个代理需要在许多个连接之间共享内存,并且,可能有缓慢的上游连接和快速的下游连接。流量控制解决了接收方不能处理一个流的数据,但是希望能够继续处理同一连接上其它流的数据的问题。

不需要这种能力的部署可以通告一个最大尺寸(2^31-1)的流量控制窗口,并且,当收到任何数据时,都可以通过发送WINDOW_UPDATE帧来维持这个窗口。这有效禁用了接收方的流量控制。反之,发送方必须一直遵守接收方通告的流量控制窗口。

资源(例如内存)有限的部署可以引入流量控制来限制内存消耗量。然而,如果在不知道带宽延迟乘积的情况下启用流量控制,可能无法最大化利用可用的网络资源。

即使是对当前的带宽延迟乘积有充分的了解,流量控制的实现也可能非常困难。当使用流量控制的时候,接收方必须及时地从TCP接收缓冲中读取数据。如果不这样做,当类似WINDOW_UPDATE的关键帧没有被读取和使用时,可能会导致死锁。

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2025-01-13 23:32:46

(五) HTTP/2的流量控制的相关文章

Unix网络编程学习笔记之第8章 基于UDP套接字编程

一. UDP C/S的典型函数调用 UDP没有像TCP那样的连接,客户端直接sendto向某服务器发送数据,服务器端一直recvfrom阻塞,以接收任何客户端发送的数据. 二. sendto和recvfrom函数 int sendto(int sockfd, const void* buff, size_t nbytes, int flag, const struct sockaddr* to, socklen_taddrlen); int recvfrom(int sockfd, void*

第五周作业【Linux微职位】

一.请描述网桥.集线器.二层交换机.三层交换机.路由器的功能.使用场景与区别. 网桥(Bridge) 网桥是第2层的设备,它设计用来创建两个或多个LAN分段.其中,每一个分段都是一个独立的冲突域.网桥设计用来产生更大可用宽带.它的目的是过滤LAN的通信流,使得本地的通信流保留在本地,而让那些定向到LAN其他部分(分段)的通信流转发到那里去.每一台网络设备在NIC(网络接口卡)中都有一个惟一的MAC(介质访问控制)地址.网桥会记录它每一边的MAC地址,然后基于这张MAC地址表作出转发决策.网桥已被

Linux流量控制TC中的HTB队列创建与过滤

众所周知,在互联网诞生之初都是各个高校和科研机构相互通讯,并没有Linux流量控制方面的考虑和设计,IP协议的原则是尽可能好地为所有数据流服务,不同的数据流之间是平等的.然而多年的实践表明,这种原则并不是最理想的,有些数据流应该得到特别的照顾, 比如,远程登录的交互数据流应该比数据下载有更高的优先级. 针对不同的数据流采取不同的策略,这种可能性是存在的.并且,随着研究的发展和深入, 人们已经提出了各种不同的管理模式.IETF已经发布了几个标准, 如综合服务(Integrated Services

Android深度探索HAL与驱动开发-——第五章

第五章主要介绍的是:S5PV210微处理器.GPIO接口.PwM定时器和DMA控制器及UART接口SPI接口和IIC总线接口.ADC及触摸屏接口.  (1)S5PV210是一款32位微处理器,低功率,他主要有关键功能.微处理器.存储器子系统.多功能.音频子系统.安全子系统.接口和系统外设这几部分.(2)GPIO接口:他的专用寄存器包括1.端口组控制寄存器其包含控制寄存器.数据寄存器.上拉寄存器.2.端口组GPAO控制寄存器分别是控制寄存器.数据寄存器.上拉寄存器.驱动强度寄存器.电源中断模式寄存

【计算机网络 第五版】阅读笔记之五:运输层

第五章 运输层 1.运输层的功能:为应用进程之间提供端到端的逻辑通信,为应用层提供通信服务.(网络层是为主机到主机之间提供逻辑通信) 2.运输层的两个重要协议:用户数据包协议UDP和传输控制协议TCP 3.运输层的端口(协议端口号) (1) 软件端口时是应用层的各种协议进程与运输实体进行层间交互的一种地址 (2) 服务器端口号:熟知或系统端口号0-1023,登记端口号1024~49151 (3) 客户端端口号:49151~65535 短暂端口号,仅在客户进程运行时才动态选择 4.用户数据报协议U

netem 与 tc 流量控制

一.netem 与 tc: netem 是 Linux 2.6 及以上内核版本提供的一个网络模拟功能模块.该功能模块可以用来在性能良好的局域网中,模拟出复杂的互联网传输性能,诸如低带宽.传输延迟.丢包等等情 况.使用 Linux 2.6 (或以上) 版本内核的很多发行版 Linux 都开启了该内核功能,比如Fedora.Ubuntu.Redhat.OpenSuse.CentOS.Debian等等. tc 是 Linux 系统中的一个工具,全名为traffic control(流量控制).tc 可

Linux系统管理第五周作业【Linux微职位】

1.请描述网桥.集线器.二层交换机.三层交换机.路由器的功能.使用场景与区别. 网桥(Network Bridge):工作在OSI模型的第二层数据链路层,主要用于将两个局域网(LAN)连起来,根据MAC地址来转发帧(Frame).它可以有效地联接两个局域网,使本地通信限制在本网段内,并转发相应的信号至另一端.网桥主要用于联接数量不多.同一类型的网段. 集线器(Hub):工作在OSI的第一层物理层,主要用于对接收到的信号进行再生整形放大,以扩大网络的传输距离,同时把所有节点集中在以它为中心的节点上

BA-冷源系统--一次流量控制方案(转载)

空调水变一次流量控制方案 浙大网新快威科技 黄逸林 一.引言 建筑物中央空调系统的冷冻水一次泵,传统上都采用固定转速水泵.空调水的变一次流量控制系统(VPF:Variable-Primary-Flow,也称为:冷冻水一次泵变频调速控制系统)是近年才开始出现的先进控制方案.配置变频调速冷冻水泵,可以对冷冻水流量进行调节,达到精细化控制的目标.虽然在负荷侧都是变水量控制,但变频调速的一次侧控制和传统固定转速的一次泵系统不同,它比传统方式控制要求高得多.要求楼宇自控系统的工程服务者设计合理的变一次流量

TCP 流量控制和拥塞控制中的重要机制

停止等待协议: 放送方发送一个数据包,要收到接收方对该包的确认后,才发送下一个数据包. 缺点:慢,信道利用率低. ARQ Automatic Repeat reQuest 接收方采用累加确认的方式,接收方不必对每一个分组进行缺,只需要对按序到达的最后一个分组发送确认. 缺点:当发送方发送了5个分组,中间第3个丢失,那么接收方只对前两个分组进行确认.发送方只好把后面的3个分组都重传一次.这叫做Go-back-N(回退N) 选择确认 selective ack 接收方对接收到的数据字节流中,若有中间