diff --git a/docs/.vuepress/theme/components/Mermaid.vue b/docs/.vuepress/theme/components/Mermaid.vue index 85991701e..68d16505e 100644 --- a/docs/.vuepress/theme/components/Mermaid.vue +++ b/docs/.vuepress/theme/components/Mermaid.vue @@ -30,14 +30,11 @@ export default defineComponent({ startOnLoad: false, theme: dark.value ? "dark" : "default", }); - mermaid.default.render( - chartID.value!, - decodeURI(rawGraph.value!) - ).then( - ({svg, bindFunctions}) => { + mermaid.default + .render(chartID.value!, decodeURI(rawGraph.value!)) + .then(({ svg, bindFunctions }) => { html.innerHtml = svg; - } - ); + }); }); }); @@ -47,14 +44,11 @@ export default defineComponent({ startOnLoad: false, theme: dark.value ? "dark" : "default", }); - mermaid.default.render( - chartID.value!, - decodeURI(rawGraph.value!) - ).then( - ({svg, bindFunctions}) => { + mermaid.default + .render(chartID.value!, decodeURI(rawGraph.value!)) + .then(({ svg, bindFunctions }) => { html.innerHtml = svg; - } - ); + }); }); return { diff --git a/docs/config/outbound.md b/docs/config/outbound.md index adefbb2a6..4c2ae9971 100644 --- a/docs/config/outbound.md +++ b/docs/config/outbound.md @@ -93,7 +93,9 @@ Mux 功能是在一条 TCP 连接上分发多个 TCP 连接的数据。实现细 ```json { "enabled": false, - "concurrency": 8 + "concurrency": 8, + "xudpConcurrency": 128, + "xudpProxyUDP443": "reject" } ``` @@ -108,5 +110,21 @@ Mux 功能是在一条 TCP 连接上分发多个 TCP 连接的数据。实现细 这个数值表示了一个 TCP 连接上最多承载的 Mux 连接数量。比如设置 `concurrency=8` 时,当客户端发出了 8 个 TCP 请求,Xray 只会发出一条实际的 TCP 连接,客户端的 8 个请求全部由这个 TCP 连接传输。 ::: tip -填负数时,如 `-1`,不加载 mux 模块。 +填负数时,如 `-1`,不使用 mux 模块承载 TCP 流量。 ::: + +> `xudpConcurrency`: number + +使用新 XUDP 聚合隧道(也就是另一条 MUX 连接)代理 UDP 流量,填写最大并发 UDP 连接数。最小值 `1`,最大值 `1024`。 + +不使用 XUDP:为 `-1` 时,UDP 流量将使用代理协议原本的 UDP 传输方式。例如 `Shadowsocks` 会使用原生 UDP,`VLESS` 会使用 UoT。默认值或者为 `0` 时,将与 TCP 流量共享同一个 MUX 连接。 + +> `xudpProxyUDP443`: string + +控制代理的 UDP 443(Quic)流量处理方式。 + +默认 `reject` 拒绝流量(一般浏览器会自动回落到 TCP HTTP2) + +`allow` 使用上面定义的新 XUDP 聚合隧道承载流量 + +`skip` UDP 443 流量将使用代理协议原本的 UDP 传输方式。例如 `Shadowsocks` 会使用原生 UDP,`VLESS` 会使用 UoT diff --git a/docs/development/protocols/muxcool.md b/docs/development/protocols/muxcool.md index 086469242..7546360e3 100644 --- a/docs/development/protocols/muxcool.md +++ b/docs/development/protocols/muxcool.md @@ -63,9 +63,9 @@ Mux.Cool 使用对称传输格式,即客户端和服务器发送和接收相 ### 新建子连接 (New) -| 2 字节 | 1 字节 | 1 字节 | 1 字节 | 2 字节 | 1 字节 | A 字节 | -| ------ | ------ | -------- | ---------- | ------ | ---------- | ------ | -| ID | 0x01 | 选项 Opt | 网络类型 N | 端口 | 地址类型 T | 地址 A | +| 2 字节 | 1 字节 | 1 字节 | 1 字节 | 2 字节 | 1 字节 | A 字节 | 8 字节 | +| ------ | ------ | -------- | ---------- | ------ | ---------- | ------ | --------------- | +| ID | 0x01 | 选项 Opt | 网络类型 N | 端口 | 地址类型 T | 地址 A | Global ID (UDP) | 其中: @@ -80,17 +80,27 @@ Mux.Cool 使用对称传输格式,即客户端和服务器发送和接收相 - 当 T = 0x01 时,A 为 4 字节 IPv4 地址; - 当 T = 0x02 时,A 为 1 字节长度(L) + L 字节域名; - 当 T = 0x03 时,A 为 16 字节 IPv6 地址; +- Global ID (UDP): + - 客户端计算出新 UDP 连接的全局独特 ID,服务端用以确保当 TCP MUX 断线重连时,源 UDP 连接始终使用同一个端口与目标通信 在新建子连接时,若 Opt(D) 开启,则这一帧所带的数据需要被发往目标主机。 ### 保持子连接 (Keep) +TCP + | 2 字节 | 1 字节 | 1 字节 | | ------ | ------ | -------- | | ID | 0x02 | 选项 Opt | +UDP + +| 2 字节 | 1 字节 | 1 字节 | 1 字节 | 2 字节 | 1 字节 | A 字节 | +| ------ | ------ | -------- | ---------- | ------ | ---------- | ------ | +| ID | 0x02 | 选项 Opt | 网络类型 N | 端口 | 地址类型 T | 地址 A | + 在保持子连接时,若 Opt(D) 开启,则这一帧所带的数据需要被发往目标主机。 -XUDP 在 Opt(D) 之后加 UDP 地址,格式同新建子链接 +XUDP 在 Opt(D) 之后加 UDP 地址 ### 关闭子连接 (End)