为什么需要分块
受限链路单包能承载的长度往往只有几百字节,而固件镜像、配置文件这类对象远大于此。分块传输把对象切成定长块,每个块报文携带块编号、块大小标记与续传标志:请求体方向与响应体方向各有对应选项,接收方按编号重组,丢块时只需重传那一块。
基本信息
| 块大小 | 取值按 2 的幂,从 16 字节到 1024 字节 |
|---|---|
| 编号语义 | 以块大小为单位递增,接收方据此判断顺序与是否缺块 |
| 续传标志 | 指示后续是否还有块,最后一块置为结束 |
| 两个方向 | 请求体分块与响应体分块使用各自的选项 |
| 协商能力 | 服务端可在响应中下调建议的块大小,客户端应据此调整 |
传输要点
传输要点
# 块大小取值:16、32、64、128、256、512、1024 字节,均为 2 的幂
# 请求体分块:携带请求体块选项,按编号递增发送
# 响应体分块:携带响应体块选项,接收方按编号拼接还原
# 续传标志:最后一块置为结束,中途中断时记录已确认的最大编号
# 服务端建议更小块大小时,客户端应下调后继续,而不是坚持原值典型使用场景
- 固件下发:把镜像分块推送到设备,中断后从已确认的块继续
- 配置包更新:较大的配置文件通过分块传输避免单包超限
- 日志回传:设备侧日志分段上传,避免长时间占用链路
- 资源发现导出:设备一次返回多个资源描述时可能超出单包长度
块大小不是越大越好:更大的块意味着单包更长,在丢包率较高的链路上失败概率上升,反而增加总传输量。
分块传输中断后若实现不支持从中间续传,整包重下会在弱网上成倍放大流量与耗电,设备接入前要专门验证续传行为。