快速读懂Http3协议总结

网络编程懒人入门(十二):快速读懂Http/3协议,一篇就够!

什么是 http3

当IETF正式标准化HTTP/2时,Google正在独立构建一个新的传输协议,名为gQUIC。它后来成为新互联网草案,并被命名为QUIC。gQUIC最初的实验证明,在网络条件较差的情况下,gQUIC在增强网页浏览体验方面的效果非常好。因此,gQUIC的发展势头越来越好,IETF的大多数成员赞成建立一个在QUIC上运行的HTTP新规范。这个新的倡议被称为HTTP/3,以区别于当前的HTTP/2标准。

从语法和语义上看,HTTP/3与HTTP/2相似。HTTP/3遵循相同的请求和响应消息交换顺序,其数据格式包含方法、标题、状态码和body。然而,HTTP/3的显著的偏差在于【协议层在UDP之上的堆叠顺序】。

也就是说 HTTP3 和 HTTP2 的最大区别在于, http2的网络层使用的是 TCP 协议, 而 HTTP3 的网络层使用的是基于 UDP 修改的quic 协议, 解决了tcp的以下限制 :

1、TCP可能会间歇性地挂起数据传输

2、TCP不支持流级复用

3、TCP会产生冗余通信

有关QUIC 的更多内容可以查看

网络编程懒人入门(十):一泡尿的时间,快速读懂QUIC协议

技术扫盲:新一代基于UDP的低延时网络传输层协议——QUIC详解

QUIC 与现有 TCP + TLS + HTTP/2 方案相比,有以下几点主要特征:

1)利用缓存,显著减少连接建立时间;

2)改善拥塞控制,拥塞控制从内核空间到用户空间;

3)没有 head of line 阻塞的多路复用;

4)前向纠错,减少重传;

5)连接平滑迁移,网络状态的变更不会影响连接断线。

从图上可以看出,QUIC 底层通过 UDP 协议替代了 TCP,上层只需要一层用于和远程服务器交互的 HTTP/2 API。这是因为 QUIC 协议已经包含了多路复用和连接管理,HTTP API 只需要完成 HTTP 协议的解析即可。

QUIC 协议的主要目的,是为了整合 TCP 协议的可靠性和 UDP 协议的速度和效率。

一张图看懂QUIC协议的优势:

### DBC 文件详解 DBC(Data Base Container)文件是一种二进制数据存储格式,广泛应用于游戏开发领域,尤其是暴雪娱乐的游戏引擎中。以下是关于 DBC 文件的用途、结构以及如何使用的详细介绍。 --- #### **一、DBC 文件的用途** DBC 文件的主要目的是以一种高效的方式存储和管理大量静态数据。这种文件常用于游戏中配置项的数据存储,例如物品属性、技能描述、NPC信息等。由于其紧凑性和易读性,DBC 文件成为许多复杂系统的理想选择[^2]。 - 游戏中的物品、技能和其他资源可以通过 DBC 文件进行统一管理和分发。 - 提供了一种标准化的方式来定义和维护游戏内的各种参数。 --- #### **二、DBC 文件的结构** DBC 文件具有严格的结构化设计,便于程序快速解析和加载。以下是其主要组成部分: 1. **头部信息** - 版本声明 (`VERSION`):标明当前 DBC 文件的具体版本号,有助于追踪修改历史并确保兼容性[^1]。 - 新符号段 (`NS_` 或 `New Symbol`):允许扩展新的关键字而不破坏原有逻辑,增强了灵活性和向后兼容能力[^1]。 2. **波特率定义 (BS_)** 这一部分通常用来设定通信协议的相关速率或其他初始化参数,尽管并非所有场景都需要此字段[^1]。 3. **记录区** 记录区内包含了多个条目,每一条目对应一组具体的数值或字符串。这些条目的排列方式遵循固定的偏移量规则,方便随机访问任意位置的内容。 4. **索引表** 如果启用了索引功能,则会在文件末尾附加一张映射表格,加速查找过程。 --- #### **三、DBC 文件的使用方法** 要有效地利用 DBC 文件,可以按照以下流程操作: 1. **创建与编辑** 使用专门工具或者脚本来生成初始版 DBC 文档。例如,某些第三方插件提供了图形界面让用户轻松输入各项细节[^3]。 2. **转换处理** 将原始形式转化为更适合目标平台的形式,比如 Excel 表格以便于人工校验,然后再反编译回标准 DBC 格式。 3. **集成部署** 把最终产物嵌入至应用程序内部,并编写相应的驱动代码实现动态加载与查询等功能。 下面展示一段简单的 Python 脚本示例来演示如何解析基本的 DBC 数据流: ```python import struct def parse_dbc(file_path): with open(file_path, &#39;rb&#39;) as f: header_size = struct.unpack(&#39;<I&#39;, f.read(4))[0] record_count = struct.unpack(&#39;<I&#39;, f.read(4))[0] field_count = struct.unpack(&#39;<I&#39;, f.read(4))[0] records = [] for _ in range(record_count): fields = [] for __ in range(field_count): value = struct.unpack(&#39;<f&#39;, f.read(4))[0] # 假设字段均为浮点数类型 fields.append(value) records.append(fields) return records result = parse_dbc(&#39;example.dbc&#39;) print(result[:5]) # 输出前五条记录作为样本验证 ``` --- #### **四、总结** 综上所述,DBC 文件凭借其独特的架构优势,在现代软件工程特别是大型网络游戏制作过程中扮演着不可或缺的角色。无论是从理论层面还是实践角度出发,掌握这一知识点都将极大地提升工作效率和技术水平。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值