Skip to content
This repository has been archived by the owner on Mar 17, 2024. It is now read-only.

ws的 early 和 smux 同时打开时,会连不上 #46

Closed
e1732a364fed opened this issue Apr 27, 2022 · 5 comments
Closed

ws的 early 和 smux 同时打开时,会连不上 #46

e1732a364fed opened this issue Apr 27, 2022 · 5 comments
Assignees
Labels
bug Something isn't working

Comments

@e1732a364fed
Copy link
Owner

根据用户反馈,我测了一下,如题。

这个是vs目前的架构造成的。需要仔细思考一下如何解决。

@e1732a364fed e1732a364fed added the bug Something isn't working label Apr 27, 2022
@ghost
Copy link

ghost commented Apr 29, 2022

trojan开了use mux又减速了 以前不是这样

@e1732a364fed
Copy link
Owner Author

trojan开了use mux又减速了 以前不是这样

我这里内网测速没遇到任何问题。我也没修改 内层mux的代码。

实际使用时的降速问题应该由线路问题造成。

@e1732a364fed
Copy link
Owner Author

e1732a364fed commented May 8, 2022

解决这个bug,要使用 “逆序”写入的方式,先处理最内层,然后再一次向外写入

也就是说,在监听时,我们是顺序 抽丝剥茧,层层解包,而在 拨号时,要 反过来,由内而外 进行包装。

而目前的代码依然是由外到内,这是不科学的,要改。

但有个问题,就是,对于 vless/trojan这种没有握手阶段的 协议 来说,是无所谓的,但是一旦存在握手阶段,那么就必须 由外向内建立连接。

因为如果是由内向外的话,实际上是在没有建立连接的情况下获取子数据,这个仅限很少的情况。

@e1732a364fed
Copy link
Owner Author

实际上,仔细思考了,

在有 内层 mux存在时,很难进行 ws 的 early data,它们在原理上可能就是冲突的。

因为,假设我们不知道内层mux 是如何实现的,那么内层mux,以及更深层的 内层代理协议,可能都是有握手阶段的,而这个阶段在 ws 是不可预知的。

虽然我们在配置后是完全已知的,但也要要求 内部的所有协议都同时支持 0-rtt才可以。而smux 应该是不支持0-rtt,或者说没有暴露出接口的。

也就是说,解决该bug的唯一办法,就是放弃 earlydata。

@e1732a364fed
Copy link
Owner Author

8db2856

修复了这个问题。

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

1 participant