进一步修订代码、文档, 完善vless v1并通过go test.添加 vless1_udp_multi 配置

添加 vless_v1 示例文件。
This commit is contained in:
hahahrfool
2022-04-11 20:13:52 +08:00
parent c5ab5a201c
commit 375c95fa4e
14 changed files with 329 additions and 207 deletions

View File

@@ -1,6 +1,6 @@
# vless v1 标准
本v1标准参考v0标准并着重针对addon和udp部分进行了一些改动。原标准请参考
本v1标准参考v0标准并着重针对addon和udp部分进行了一些改动。原v0标准请参考
https://github.com/v2ray/v2ray-core/issues/2636
@@ -49,27 +49,18 @@ vless 的v0 始终处于beta中而且 【udp长度】的包头仅仅在 commi
在 分离信道传输时,
首个客户端握手包的握手部分采用与tcp相同的格式
一,客户端发送的格式: 首个客户端握手包的握手部分采用与tcp相同的格式
接着是udp数据包前两字节为数据长度的2字节然后是承载数据。
二,非首包的格式:
剩余数据包中因为目标raddr已经确定所以不再有 经典传输中的 port、atype、addr部分。
不过, 因为我们服务端发往 客户端的方向 需要传输 UMFURS 信息,所以我们需要一字节来指示本次数据包的意义。
客户端 发往 服务端方向 的 数据格式:
两字节数据包长度,然后跟着承载数据。
二,服务端发送的格式:
因为我们服务端发往 客户端的方向 有时需要传输 UMFURS 信息,所以我们需要一字节来指示本次数据包的意义。
服务端 发往 客户端方向 的 数据格式:
第一字节为数据包意义指示,
0标识 普通 来自原始raddr的数据包此时 第二字节和第三字节为数据长度,然后跟着数据;
第一字节为意义指示,
0标识 普通 来自原始raddr的数据包此时 第二字节和第三字节为数据长度,然后跟着数据;
1标识 UMFURS 数据, 此时,第 2、3字节 为 port。第4字节为 atype然后是变长的addr内容定义与tcp的握手的包头一致。接着是udp数据包长度的2字节然后是承载数据。
1标识 UMFURS 数据, 此时,第 2、3字节 为 port。第4字节为 atype然后是变长的addr内容定义与tcp的握手的包头一致。接着是udp数据包长度的2字节然后是承载数据。

View File

@@ -20,7 +20,7 @@ vless v0中服务端 的回复也是有数据头的,第一字节版本号,
而且udp的话, 会有 crumfurs 模式以及 普通多路复用模式这两种模式, 所以还是要加以区分.所以v1的addon部分依然不能删掉;
不过我在这里做一些变化, v1 的addon第一字节不再是 addon长度, 而是addon类型,之后可以通过addon类型来判断addon长度.
在v1 传递udp握手时, addon第一字节为1时, 表示 “选择传输udp方式“第二字节为0时表示使用普通多路复用模式(即与trojan相同), 第二字节为1时表示使用 crumfurs模式. 使用 crumfurs模式时, 单个通道不会再传输 raddr因为仅用于单个raddr的信息传输.
在v1 传递udp握手时, addon第一字节为1时, 表示 “选择传输udp使用 分离信道方式“,此时 单个通道不会再传输 raddr因为仅用于单个raddr的信息传输.
所以v1的 tcp读写特别简单一旦握手成功不会有任何数据头产生没有丝毫额外开销直接直连 (与trojan相同)
@@ -35,16 +35,11 @@ https://www.zhihu.com/question/29916578
所以vless v1外面包websocket的话是不需要再重新加长度的加了就是多此一举。
所以,我规定 vless v1 的udp实现中会判断连接本身如果连接 使用的是websocket或者类似的本身就加了数据长度头的则udp包无需再加长度。
也就是说v1不再是一个与底层连接无关的协议判断是否有ws或者grpc这种高级协议的存在对于这些进行判断就可以进行优化。
虽然udp加长度只是加了两字节但这只是write部分read部分的话为了防止粘包就加了buffer确实是多了一层内存读写操作所以能精简就要精简毕竟视频直播视频聊天等这种使用udp的部分都是 流量大户。总之这种优化能视udp的使用用途有不同程度的性能提升
而且作为翻墙要素我们是推荐ws或grpc来配合cdn的所以还真是有用
v1主要还是 隔离信道的 udp over tcp 的 fullcone 的实现属于重要的创新上面提到的优化也就占20%的 v1协议的独特之处。请接着读下文查看fullcone部分
隔离信道的 udp over tcp 的 fullcone 的实现属于 v1 重要的创新
## 关于udp over tcp 的 vless 的 fullcone
@@ -162,7 +157,7 @@ UMFURS 信息内容1字节atype几字节的IP视ip为ipv4和ipv6. 因
CRUMFURS 信道与普通UDP信道一样要传 udp长度头。在应用ws或者grpc后则应不传这个等我实现ws或grpc了再说
### 流量特征的避免
另外,为了避免 【同时具有两个tcp链接且一个tcp链接只有入方向没有出方向】 的流量特征我们实际上不能让crumfurs成为真正的单独通道。
不过,为了避免 【同时具有两个tcp链接且一个tcp链接只有入方向没有出方向】 的流量特征我们实际上不能让crumfurs成为真正的单独通道。
所以, 我们 crumfurs信息的传输要隐藏在普通链接中。 所以我们udp数据头部除了长度头之外还要有一字节的 crumfurs标识如果为0 则意味着没有 crumfurs信息产生而如果为1的话后面会附带crumfurs信息。