|
|
|
@ -47,21 +47,23 @@ Mux.Cool 使用对称传输格式,即客户端和服务器发送和接收相
|
|
|
|
|
|
|
|
|
|
### 元数据
|
|
|
|
|
|
|
|
|
|
元数据有若干种类型,由状态 S 来区分。所有类型的元数据都包含 ID 和 Opt 两项,其含义为:
|
|
|
|
|
元数据有若干种类型。所有类型的元数据都包含 ID 和 Opt 两项,其含义为:
|
|
|
|
|
|
|
|
|
|
- ID: 子连接的唯一标识
|
|
|
|
|
- 对于一般 MUX 子链接,ID 由 1 开始累加
|
|
|
|
|
- 对于 XUDP,ID 始终为 0
|
|
|
|
|
- Opt:
|
|
|
|
|
- D(0x01): 有额外数据
|
|
|
|
|
|
|
|
|
|
当选项 Opt(D) 开启时,额外数据格式如下:
|
|
|
|
|
|
|
|
|
|
| 2 字节 | L 字节 |
|
|
|
|
|
| 2 字节 | X-2 字节 |
|
|
|
|
|
| ------ | ------ |
|
|
|
|
|
| 长度 L | 数据 |
|
|
|
|
|
| 长度 X-2 | 数据 |
|
|
|
|
|
|
|
|
|
|
### 新建子连接 (New)
|
|
|
|
|
|
|
|
|
|
| 2 字节 | 1 字节 | 1 字节 | 1 字节 | 2 字节 | 1 字节 | X 字节 |
|
|
|
|
|
| 2 字节 | 1 字节 | 1 字节 | 1 字节 | 2 字节 | 1 字节 | A 字节 |
|
|
|
|
|
| ------ | ------ | -------- | ---------- | ------ | ---------- | ------ |
|
|
|
|
|
| ID | 0x01 | 选项 Opt | 网络类型 N | 端口 | 地址类型 T | 地址 A |
|
|
|
|
|
|
|
|
|
@ -88,6 +90,7 @@ Mux.Cool 使用对称传输格式,即客户端和服务器发送和接收相
|
|
|
|
|
| ID | 0x02 | 选项 Opt |
|
|
|
|
|
|
|
|
|
|
在保持子连接时,若 Opt(D) 开启,则这一帧所带的数据需要被发往目标主机。
|
|
|
|
|
XUDP 在 Opt(D) 之后加 UDP 地址,格式同新建子链接
|
|
|
|
|
|
|
|
|
|
### 关闭子连接 (End)
|
|
|
|
|
|
|
|
|
@ -113,4 +116,4 @@ Mux.Cool 使用对称传输格式,即客户端和服务器发送和接收相
|
|
|
|
|
Mux.Cool 协议与底层协议无关,理论上可以使用任何可靠的流式连接来传输 Mux.Cool 的协议数据。
|
|
|
|
|
|
|
|
|
|
在目标导向的协议如 Shadowsocks 和 VMess 协议中,连接建立时必须包含一个指定的地址。
|
|
|
|
|
为了保持兼容性,Mux.Cool 协议指定地址为“v1.mux.cool”。即当主连接的目标地址与之匹配时,则进行 Mux.Cool 方式的转发,否则按传统方式进行转发。
|
|
|
|
|
为了保持兼容性,Mux.Cool 协议指定地址为“v1.mux.cool”。即当主连接的目标地址与之匹配时,则进行 Mux.Cool 方式的转发,否则按传统方式进行转发。(注:这是一个程序内的标记,VMess 和 VLESS 并不会发送“v1.mux.cool”地址)
|
|
|
|
|