[M20-P2] 实装 D2GS 1.13c 握手、下行 Huffman 解压、包长分帧与分发核心 (D2Net.dll / D2Client.dll) #510

Closed
opened 2026-09-28 13:10:05 +00:00 by troytt · 0 comments
Owner

背景与目标

实现客户端与 D2GS(TCP 4000)的底层通信层:完成进房握手、心跳保活、下行流固定码表 Huffman 解压、1.13c 权威包长表分帧与严格 fail-fast 的包分发框架。

核心内容与 1.13c Ground Truth 对标 (D2Net.dll & D2Client.dll)

  1. D2GS 进房握手与心跳:
    • 接收服务端 0xAF(压缩模式协商)→ 发送上行 0x68 D2GS_GAMELOGON(携带 MCP_JOINGAME 的 GameHash、GameToken、角色职业、版本号 0x0D 与固定常量)→ 接收 0x5C / 0x01 D2GS_WALKTOLOCATION(难度、竞技场标志、资料片标志)→ 发送 0x6B D2GS_ENTERGAMEENVIRONMENT → 接收 0x02 D2GS_LOGONSUCCESS。
    • 周期性发送 0x6D D2GS_PING(携带 GetTickCount 相对毫秒),处理下行 0x8F D2GS_PONG 计算 RTT。
  2. 下行流固定码表 Huffman 解压与头部长度解码 (D2Net.dll):
    • 对标 D2Net.dll 内置的静态字符频率 Huffman 树与首字节/双字节变长包头解码。
    • 处理单次 TCP chunk 内包含多个压缩帧、或单个压缩帧跨多个 TCP chunk 的流式重组。
  3. 1.13c 下行包长度表与分发器 (D2Client.dll):
    • 对标 1.13c D2Client.dll 下行包大小查表(0x00..0xAE 定长表 + 0x26 聊天、0x9C/0x9D 物品、0xAA/0xAB/0xAC 单位属性/怪物等变长包长度计算函数),从一个解压帧中精确切分出多条 D2GS 逻辑包。
    • Anti-Silent Failures:遇到未知包 ID 或包长越界立即抛错并转储原始帧字节,严禁静默丢弃或跳过剩余字节。

验收标准

  • 对 P0 录制的全部原版 1.13c .d2cap 抓包样本执行离线回放,Huffman 解压与包切分 100% 零错误通过。
  • Headless 客户端凭 MCP_JOINGAME 令牌连入真实 D2GS,成功收到 0x01 / 0x02 / 0x03 / 0x07 / 0x59 等初始包并保持 60 分钟心跳不断线。
## 背景与目标 实现客户端与 D2GS(TCP 4000)的底层通信层:完成进房握手、心跳保活、下行流固定码表 Huffman 解压、1.13c 权威包长表分帧与严格 fail-fast 的包分发框架。 ## 核心内容与 1.13c Ground Truth 对标 (`D2Net.dll` & `D2Client.dll`) 1. **D2GS 进房握手与心跳**: - 接收服务端 `0xAF`(压缩模式协商)→ 发送上行 `0x68 D2GS_GAMELOGON`(携带 `MCP_JOINGAME` 的 GameHash、GameToken、角色职业、版本号 `0x0D` 与固定常量)→ 接收 `0x5C` / `0x01 D2GS_WALKTOLOCATION`(难度、竞技场标志、资料片标志)→ 发送 `0x6B D2GS_ENTERGAMEENVIRONMENT` → 接收 `0x02 D2GS_LOGONSUCCESS`。 - 周期性发送 `0x6D D2GS_PING`(携带 `GetTickCount` 相对毫秒),处理下行 `0x8F D2GS_PONG` 计算 RTT。 2. **下行流固定码表 Huffman 解压与头部长度解码 (`D2Net.dll`)**: - 对标 `D2Net.dll` 内置的静态字符频率 Huffman 树与首字节/双字节变长包头解码。 - 处理单次 TCP chunk 内包含多个压缩帧、或单个压缩帧跨多个 TCP chunk 的流式重组。 3. **1.13c 下行包长度表与分发器 (`D2Client.dll`)**: - 对标 1.13c `D2Client.dll` 下行包大小查表(`0x00..0xAE` 定长表 + `0x26` 聊天、`0x9C/0x9D` 物品、`0xAA/0xAB/0xAC` 单位属性/怪物等变长包长度计算函数),从一个解压帧中精确切分出多条 D2GS 逻辑包。 - **Anti-Silent Failures**:遇到未知包 ID 或包长越界立即抛错并转储原始帧字节,严禁静默丢弃或跳过剩余字节。 ## 验收标准 - [ ] 对 P0 录制的全部原版 1.13c `.d2cap` 抓包样本执行离线回放,Huffman 解压与包切分 100% 零错误通过。 - [ ] Headless 客户端凭 `MCP_JOINGAME` 令牌连入真实 D2GS,成功收到 `0x01 / 0x02 / 0x03 / 0x07 / 0x59` 等初始包并保持 60 分钟心跳不断线。
troytt added this to the [M20] D2GS 纯客户端:接入 PvPGN + D2GS 1.13c 服务端联机 (1.13c Ground Truth) milestone 2026-09-28 13:10:05 +00:00
Sign in to join this conversation.
No Label
No project
No Assignees
1 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: troytt/diablo2-web#510
No description provided.