ngtcp2 1.26.0 已新增到 CodeIT 仓库。这些软件包适用于 RHEL、CentOS、AlmaLinux、Rocky Linux 和 Oracle Linux 7、8、9 和 10,以及 Ubuntu 22.04 和 24.04。
主要变更:
- doc: 新增了用于使用 GSO 写入数据包的伪代码和文档
- build(deps): 已将 actions/stale 从 10 升级到 11
- 清理
- 不会仅因为收到 STOP_SENDING 就关闭任何 stream
- 重构了 conn
- 收紧了 32 位平台上对长报头数据包长度的检查
- map: 如果调整表大小失败则删除键
- examples/server: 检查 QUIC version
- 新增了 extendmaxdata 的回调函数
- 更新了回调测试
- 如果仍在使用,则不回收 fallback DCID
- 修复了 CUBIC 的 CWND 增加函数
- 在 handshake 完成时调用 extend_max_data
- 如果因 STREAMS_BLOCKED 违反了限制,则返回 STREAM_LIMIT 错误
- 新增了 ngtcp2_conn_tx_strmq_push_if_not
- 当数据确实被阻塞时发送 STREAM_DATA_BLOCKED/DATA_BLOCKED
- 更新了文档
- 简化了 ngtcp2_conn_write_stream
- 重新处理了传入的 NEW_CONNECTION_ID 校验
- 断言 ngtcp2_conn_tls_early_data_rejected 只会从客户端调用
- 对本地 uni stream 的 RESET_STREAM 返回 NGTCP2_ERR_STREAM_STATE
- 删除了处理对于 UDP datagram 来说过大的情况的代码
- 重命名了 ngtcp2_data_blocked 和 ngtcp2_stream_data_blocked 中的 offset
- 新增了 transport parameters 解码测试
- 新增了更多 transport parameters 解码测试
- 新增了 wf 测试
- 新增了重新发送 NEW_TOKEN 的测试
- Rtb 测试
- 简化了 conn 测试
- GHA: 已将 Ubuntu 升级到 26.04
- examples 中使用新的 munit cxx 断言重写了测试
- 将 clang-format 升级到 21
- GHA: 已将 clang 升级到 21
- 使用打包的 ossl
- GHA: 减少了 openssl1/3 作业
- GHA: 减少了 cmake 作业
- GHA: 修复了 quic interop runner
- 调整了 ngtcp2_ratelim.burst 的最大值
- 修复了 slow start pacing gain
- 当对端的 IP address 变化时重置 max UDP payload size
- 检查 picotls 加密级别
- 检查 ossl 加密级别
- Server 应在更早的级别发送 CONNECTION_CLOSE
- GHA: macos 构建使用 libressl
- 新增了 oss-scanner 文件
- examples/client: 修复了 div by zero
- examples/server: 在 32 位目标上不截断文件大小
- 限制 token 长度
- 为 rtb_reclaim_on_retry 新增了 0 长度 STREAM frame 过滤器
- 修复了第一次解密前可解密数据包的最大编号标记
- 对较短的 stream data 写入进行了惩罚
- 优化了 ngtcp2_rtb_reclaim_on_pto
- ngtcp2_conn_write_aggregate_pkt2: 检查用于结束聚合的 path
- 将 libressl 升级到 v4.4.0
- send_quantum 至少应为单个 MTU
- 在 validated_path 消失之前使用它
- 当 1 RTT key 被安装超过一次时,connection 仍可优雅关闭
- 仅在 0RTT 和 1RTT 密钥可用后才处理 0RTT 数据包
- 将客户端的 PATH_RESPONSE 限制在未验证路径上
- 明确验证路径验证超时
- 使 PATH_RESPONSE 触发 PTO
- 在 RESET_STREAM 的流关闭中回收连接级流量控制窗口
- 改进 ngtcp2_rob 的碎片阈值检测
- 处理来自服务器的过早 HANDSHAKE_DONE
- 改进 map 哈希器
- 在因 anti-amplification limit 被取消后重新启动丢包计时器
- 正确处理客户端迁回原始路径的情况
- 如果没有发送 PATH_CHALLENGE,则不启动 pv round
- 使 ngtcp2_pkt_decode_version_cid 在零输入时返回错误
- 如果没有任何内容被传递,则保持拥塞状态
- 处理没有 transport params 就不会退出的 TLS stack
- 修复包号解码
- 处理 Connection ID 限制错误
- 拒绝确认了稍后发送的数据包的 ACK
- 由于 handshake address 不可靠,移除其中的拒绝
- 在未设置 WRITE_MORE 标志时重置 ppe pending 状态
- 处理 stop_sending callback 中的 stream 关闭
- 回退 “Stop buffering data after shutting downstream read”
- 防止已使用的 DCID 被转入 retired
- 避免废弃的 DCID 被遗弃
- 当在 handshake 期间调用 ngtcp2_conn_initiate_key_update 时返回错误
- 避免 DCID 重用
- 在协商版本之前导出初始密钥
- 以另一种方式防止已使用的 DCID 被转入 retired
- 直到 handshake 完成之前都不调用 dcid_status callback
- 回退 “Make sure that NGTCP2_CONN_FLAG_PPE_PENDING is not leaked”
- 不会因缺少 DCID 和 credit 而阻塞 PATH_RESPONSE
- 在确认丢包后重置 CUBIC 撤销变量
- 修复 conn_shutdown_stream_read
- 调整密钥更新确认
- 修复内存泄漏
- 统计 Handshake 和 0RTT 密钥的解密失败
- examples/server 修复 handler 泄漏
- 在读取服务器 0.5RTT 数据包之前安装 preferred address
- 确保编码时至少分配 1 字节的 frame
- 空的 STREAM frame 计入 glitch counter
- 不清除 PTO eliciting 标志
- 修复 lost_datagram 未被调用的错误
- crypto/ossl: 也保护 tx_level 不受 0RTT 影响
- hqclient: 在关闭时移除 streams
- 修复 0RTT key 未随 callback 丢弃的问题
- 在 0RTT 中发送 control frames
- 回退 “Count empty STREAM frame toward glitch counter”
- 修复仅含 PADDING 的数据包导致的无效 qlog
- 处理获取 Connection ID 之后的内存不足
- 移除某些 frame 的问题性 glitch counter
- 写入 stream data thresh
- 修复 ngtcp2_vec_merge
- 提前停止路径验证
- 简化 map 插入
- 升级 tls 依赖
- 修复在 malloc 仅 4 字节对齐时(如 ESP32 上)发生的堆越界
- examples: 处理 if_indextoname 失败
- GHA: 移除 macos-15
ngtcp2 库栈基于 OpenSSL 4.0.3 构建,QUIC 客户端名为 osslclient。
