服务器信息
未更新
系统
-
-
-
-
内存
-
-
存储
-
-
-
电源
-
-
IO 速率
读
-
写
-
WiFi
SSID-
IP-
频率-
信号-
实时网速
下行
-
上行
-
CPU 核心
CPU 使用统计
-
加载中...
业务状态
未更新
进程信息
加载中...
QF-TEK 服务
加载中...
加载中...
SakuraFrp 樱花
只读
检测中...
加载中...
TCP 转发管理
未加载
管理 tcp_mux 转发服务配置(
~/install/tcp_mux/config.ini)。
保存后 mux 每 10 秒自动热加载生效。
转发协议说明(帧格式 / 帧类型 / 使用流程)
设备
FRP 公网隧道
tcp.qftek.top:32200
tcp_mux(本机监听端口)
本地服务端口
mux 对数据帧完整透传,不拆包不合并;设备与本地服务之间按帧格式通信。
① 帧格式(帧头 14 字节 + 数据)
| 字段 | 长度 | 偏移 | 说明 |
|---|---|---|---|
| 帧同步字 | 6 字节 | 0 | 固定 AA 55 5A A5 FF EC,连续检测到即视为帧开始 |
| 帧类型 | 1 字节 | 6 | 见下方帧类型表 |
| 服务ID | 1 字节 | 7 | 0~255,即本页"本地转发服务"中的 服务ID |
| 会话ID | 2 字节 | 8 | 大端。由 mux 分配,设备需保存并回填 |
| 数据长度 | 4 字节 | 10 | 大端,负载字节数 |
| 数据负载 | N 字节 | 14 | 实际业务数据 |
② 帧类型
| 值 | 名称 | 方向 | 含义 |
|---|---|---|---|
0x00 | DATA | 双向 | 业务数据帧,mux 原样转发 |
0x01 | SESS_REQ | 设备→mux | 请求分配会话ID(sid=0、无数据) |
0x02 | SESS_RESP | mux→设备 | 返回分配到的会话ID,设备需保存 |
0x03 | HEARTBEAT | 设备→mux | 心跳包(每 60s 一次) |
0x04 | HB_RESP | mux→设备 | 心跳响应 |
0x05 | ERROR | mux→设备 | 错误通知,data[0] 为错误码 |
③ 错误码(ERROR 帧 data[0])
| 错误码 | 含义 |
|---|---|
0x01 | 服务未启用(对应服务使能为"关闭") |
0x02 | 服务连接失败(本地端口未监听) |
0x03 | 服务端掉线 |
0x04 | 会话ID 无效(未分配或已过期) |
④ 设备端使用流程
- 通过 FRP 公网隧道连接 mux(如
tcp.qftek.top:32200); - 发
SESS_REQ(服务ID=X),等待SESS_RESP拿到会话ID; - 发
DATA(服务ID=X, sid, 业务数据),mux 原样转发给本地服务; - 本地服务按同样格式回
DATA帧,mux 按(服务ID, sid)路由回设备; - 每 60s 发一次
HEARTBEAT保活,超过 90s 无心跳会被踢出,需重新连接。
⑤ 设备端示例(C 伪代码)
// 1. 连接 mux(FRP 公网地址)
int fd = connect_to("tcp.qftek.top", 32200);
// 2. 请求会话:SESS_REQ(服务ID=0)
frame_build(FRAME_TYPE_SESS_REQ, 0, 0, NULL, 0, buf, sizeof(buf));
send(fd, buf, FRAME_HDR_LEN); // 帧头 14 字节
// 3. 等待 SESS_RESP,保存返回的 sid
uint16_t my_sid = recv_sid(fd);
// 4. 发送业务数据:DATA(服务ID=0, sid=my_sid, 数据)
frame_build(FRAME_TYPE_DATA, 0, my_sid, data, len, buf, sizeof(buf));
send(fd, buf, FRAME_HDR_LEN + len);
// 5. 每 60s 心跳:HEARTBEAT
frame_build(FRAME_TYPE_HEARTBEAT, 0, 0, NULL, 0, buf, sizeof(buf));
send(fd, buf, FRAME_HDR_LEN);
本地服务收到的也是完整帧(含 14 字节帧头),回包需按同样格式构造;
TCP 粘包/拆包按「同步字 + 长度字段」自动处理,检测到新同步字时上一帧未收完则丢弃上一帧。
监听中的公网端口
端口
备注
操作
加载中...
本地转发服务
服务ID
服务名称
端口
使能
操作
加载中...