http2-frame-WINDOW_UPDATE

本文详细介绍了HTTP/2协议中WINDOW_UPDATE帧的工作原理及其使用场景。此帧用于实现流量控制,允许接收端通知发送端增加其流量控制窗口大小,从而避免拥塞并确保数据的高效传输。

WINDOW_UPDATE帧(type=0x8)用来实现流量控制

WINDOW_UPDATE用来通知对等端(数据发送端)加大流量控制窗口值。增量为 Window Size Increment,单位为字节数。

算法是这样的:

  1. 发送端保有一个流量控制窗口(window)初始值。初始值的设定请参考SETTING 帧的 SETTINGS_INITIAL_WINDOW_SIZE
  2. 发送端每发送一个DATA帧,就把window递减,递减量为这个帧的大小。如果当前window小于帧大小,那么这个帧就必须被拆分到不大于window,如果window等于0,就不能发送任何帧
  3. 接收端可以发送 WINDOW_UPDATE帧给发送端,发送端以帧内指定的Window Size Increment作为增量,加到window上
 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |X|              Window Size Increment (31)                     |
 +-+-------------------------------------------------------------+

###字段
**X** :保留字段,1bit
**Window Size Increment** 31bits unsigned int

限定

流量控制只适用于数据帧。非数据帧是不受流量控制的,必须被接收和处理,除非接收端无法为帧分配资源。

可以针对整个连接或者某个具体的流。帧的流标识符为0 针对整个连接;否则指的是被影响的流;

可以由一个已经发送带有END_STREAM标记的帧的对等端来发送。这意味着接收端可以在“半关闭(远程)”或者“关闭”的流上接收WINDOW_UPDATE帧。接收端绝对不能作为错误处理

即使发生了帧错误,只要没有发生连接错误,接收端都必须以此帧来计算流控窗口(window)。因为发送端一发送就将这个帧计入了流量控制窗口,如果接收端没有这样做,发送端和接收端的流量控制
会出现差异。

所有类型的流量控制都是逐跳的(hop-by-hop);中介端不在依赖的连接上转发WINDOW_UPDATE帧。但是,接收端对数据的节流措施可以直接传播到原始发送端(而不是仅仅限于最近的中介)。

错误处理

接收端如果无法接收帧,可以响应一个流错误或者类型为流量控制错误的连接错误

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值