重新规划网关与节点的交互协议,实现统一命令位的识别和处理

This commit is contained in:
2025-05-16 15:13:16 +08:00
parent d65fe4db6f
commit 8a6a4833d4
22 changed files with 609 additions and 373 deletions

View File

@@ -2,7 +2,7 @@
### 目录结构
server/fwd: 服务端核心代码
server/fwd: 网关核心代码
- core: 核心代码,目前主要是连接管理
- dispatcher: 请求处理器,负责解析传入协议,并将请求分发到对应的处理器
@@ -24,7 +24,7 @@ server/fwd: 服务端核心代码
## 底层协议设计
### 步骤说明
### 步骤说明(待更新)
1. 启动转发服务,尝试注册自身到后端服务,随后持续报告心跳
2. 启动边缘节点后,尝试注册自身到后端服务,随后持续报告心跳
@@ -36,33 +36,71 @@ server/fwd: 服务端核心代码
8. 当成功建立数据通道后,边缘节点将数据通道标识以及对目标地址的连接结果提供给转发服务
9. 如果连接成功建立,则开始代理流量,如果连接失败,则关闭数据通道
### 协议报文详情
### 协议报文说明
协议中所有数值都以大端形式传输
#### 建立控制通道
控制通道命令列表:
1.客户端发送:
| 编码 | 命令 | 发起方 | 备注 |
|----|-------|-------|--------------------|
| 1 | pong | proxy | 网关响应,和 status 相同 |
| 2 | ping | edge | 边缘节点心跳 |
| 3 | open | edge | 边缘节点连接到网关 |
| 4 | close | edge | 边缘节点断开连接 |
| 5 | proxy | proxy | 网关通知节点打开数据通道用来转发数据 |
| id(4) |
|--------|
| 客户端 ID |
### 建立控制通道
2.服务端发送:
1.节点发起
| cmd(1) | id(4) |
|---------|-------|
| 命令固定为 3 | 节点 ID |
2.网关响应
| status(1) |
|-----------|
| 状态,固定为 1 |
#### 建立数据通道
### 控制通道心跳
1.服务端发送:
1.节点发起
| tag(16) | dst_len(2) | dst_buf(n) |
|---------|------------|------------|
| 通道标识 | 目标地址长度 | 目标地址 |
| cmd(1) |
|---------|
| 命令固定为 2 |
2.客户端发送
2.网关响应
| status(1) |
|-----------|
| 状态,固定为 1 |
### 关闭控制通道
1.节点发起
| cmd(1) |
|---------|
| 命令固定为 4 |
2.网关响应:
| status(1) |
|-----------|
| 状态,固定为 1 |
### 建立数据通道
1.网关发送:
| cmd(1) | tag(16) | dst_len(2) | dst_buf(n) |
|---------|---------|------------|------------|
| 命令固定为 5 | 通道标识 | 目标地址长度 | 目标地址 |
2.节点发送:
| tag(16) | status(1) |
|---------|-----------------------|
@@ -76,9 +114,12 @@ server/fwd: 服务端核心代码
```json5
{
"content": "string", // base64 编码的请求体
"nonce": "string", // 随机数值
"timestamp": "number" // 时间戳,精确到毫秒
"content": "string",
// base64 编码的请求体
"nonce": "string",
// 随机数值
"timestamp": "number"
// 时间戳,精确到毫秒
}
```