Skip to content

Commit ca0cd61

Browse files
author
anytls
committed
Update documentation
1 parent 3c6058c commit ca0cd61

File tree

1 file changed

+20
-20
lines changed

1 file changed

+20
-20
lines changed

docs/protocol.md

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
|--|--|--|--|
2121
| uint8 | Big-Endian uint32 | Big-Endian uint16 | 可变长度 |
2222

23-
**客户端每次开启新会话必须立即发送 `cmdSettings frame`**
23+
**客户端每次开启新会话必须立即发送 `cmdSettings`**
2424

2525
#### command
2626

@@ -47,7 +47,7 @@
4747

4848
#### cmdWaste
4949

50-
任意一方收到 cmdWaste frame 后都应将其 data 完整读出并无声丢弃。
50+
任意一方收到 cmdWaste 后都应将其 data 完整读出并无声丢弃。
5151

5252
#### cmdHeartRequest
5353

@@ -63,7 +63,7 @@
6363

6464
如果您的服务器软件架构不支持回报出站连接状态,也可以在收到 cmdSYN 后直接发送 cmdSYNACK。
6565

66-
cmdSYNACK 若不带有 data,则表示代理出站连接 TCP 握手成功。若带有 data,则 data 代表错误信息。客户端收到错误信息后必须关闭对应 stream。
66+
cmdSYNACK 若不带有 data,则表示代理 stream 握手成功。若带有 data,则 data 代表错误信息。客户端收到错误信息后必须关闭对应 stream。
6767

6868
#### cmdPSH
6969

@@ -101,11 +101,11 @@ v=2
101101

102102
#### cmdAlert
103103

104-
其 data 为服务器发送的警告文本信息,客户端需要将其读出并打印到日志,然后双方关闭连接
104+
其 data 为服务器发送的警告文本信息,客户端需要将其读出并打印到日志,然后双方关闭会话
105105

106106
#### cmdUpdatePaddingScheme
107107

108-
当服务器收到客户端的 `padding-md5` 不同于服务器时,会向客户端发送更新 `paddingScheme` 的 frame,其 data 目前格式如下:
108+
当服务器收到客户端的 `padding-md5` 不同于服务器时,会发送 `cmdUpdatePaddingScheme` 向客户端请求更新,其 data 目前格式如下:
109109

110110
> Default Padding Schme
111111
@@ -128,22 +128,22 @@ stop=8
128128
129129
#### paddingScheme 具体含义与实现
130130

131+
> stop
132+
133+
`stop` 表示在第几个包停止处理 padding 比如: `stop=8` 代表只处理第 `0~7` 个包。
134+
131135
> padding0
132136
133137
`padding0` 也就是第 `0` 个包,处于认证部分,不支持分包。客户端应将该长度的 padding 与 sha265(password) 一并发送。
134138

135139
提示:认证部分的开销为 34 字节。
136140

137-
> stop
138-
139-
`stop` 表示在第几个包停止处理 padding 比如: `stop=8` 代表只处理第 `0~7` 个包。
140-
141141
> padding1 开始
142142
143-
- padding1 开始处于会话部分,采用 padding 策略分包和/或填充:如果分包发送完之后,用户数据仍然有剩余,则直接发送剩余数据。如果分包发送完之前,用户数据已发送完毕,则发送 `cmdWaste frame` 垃圾 padding 数据(建议用 0)做填充。
144-
- 分包策略,比如:上述 paddingScheme 将包 `2` 将分成 5 个尺寸在 400-500 / 500-1000 的小包发送(这里的尺寸指 TLS PlainText 的尺寸,不计算 TLS 加密等开销)。
145-
- 中间的 `c` 是检查符号,含义:若上一个分包发送完毕后,用户数据已无剩余,则直接对本次写入返回,不再发送后续的填充包。
146-
- 包计数器以写到 TLS 的次数为准,包 `1` 应该包括:`cmdSettings` 和首个 Stream 的 `cmdSYN + cmdPSH(代理目标地址数据)`
143+
- padding1 开始处于会话部分,采用策略分包和/或填充:如果分包发送完之后,用户数据仍然有剩余,则直接发送剩余数据。如果分包发送完之前,用户数据已发送完毕,则发送 `cmdWaste` 携带数据(建议用 0)做填充。
144+
- 策略示例:上述 paddingScheme 将包 `2` 将分成 5 个尺寸在 400-500 / 500-1000 的包发送(这里的尺寸指 TLS PlainText 的尺寸,不计算 TLS 加密等开销)。
145+
- 策略中的 `c` 是检查符号,含义:若上一个分包发送完毕后,用户数据已无剩余,则直接对本次 Write TLS 返回,不再发送后续的填充包。
146+
- 包计数器以 Write TLS 的次数为准,包 `1` 应该包括:`cmdSettings` 和首个 Stream 的 `cmdSYN + cmdPSH(代理目标地址)`
147147
-`2` 应该是代理自用户的第一个数据包,比如 TLS ClientHello。
148148
- 假如在 stop 之前的某个包的发送策略没有被 PaddingScheme 定义,那么直接发送该包。
149149

@@ -161,11 +161,11 @@ stop=8
161161

162162
如果没有空闲的会话,则创建新的会话,Session 的序号 `Seq` 在一个 Client 内应单调递增。
163163

164-
Stream 在代理中继完毕被关闭时,如果对应 Session 的事件循环未遇到错误,则将 Session 放入“空闲”连接池,并且设置 Session 的空闲起始时间为 now。
164+
Stream 在代理中继完毕被关闭时,如果对应 Session 的事件循环未遇到错误,则将 Session 放入“空闲会话池”,并且设置 Session 的空闲起始时间为 now。
165165

166-
定期(如 30s)检查连接池中的空闲会话,关闭并删除持续空闲超过一定时间(如 60s)的会话。
166+
定期(如 30s)检查会话池,关闭并删除持续空闲超过一定时间(如 60s)的会话。
167167

168-
> 以上连接策略高度概括:优先复用最新的连接,优先清理最老的连接
168+
> 以上复用策略高度概括:优先复用最新的会话,优先清理最老的会话
169169
170170
### 代理
171171

@@ -185,13 +185,13 @@ Stream 在代理中继完毕被关闭时,如果对应 Session 的事件循环
185185

186186
会话层格式和命令见客户端。
187187

188-
对于一个新 Session,如果服务器在收到客户端的 `cmdSettings frame` 之前收到 `cmdSYN frame`,必须拒绝此次会话。
188+
对于一个新 Session,如果服务器在收到客户端的 `cmdSettings` 之前收到 `cmdSYN`,必须拒绝此次会话。
189189

190190
服务器有权拒绝未正确实现本协议(包括但不限于 `cmdUpdatePaddingScheme` 和连接复用)、版本过旧(有已知问题)的客户端连接。
191191

192192
当服务器拒绝这类客户端时,必须发送 `cmdAlert` 说明原因,然后关闭 Session。
193193

194-
当客户端上报的版本 `v` >= 2,服务器收到 cmdSettings 后应立即发送 cmdServerSettings frame
194+
当客户端上报的版本 `v` >= 2,服务器收到 cmdSettings 后应立即发送 cmdServerSettings。
195195

196196
### 代理
197197

@@ -210,7 +210,7 @@ anytls 协议参数不包括 TLS 的参数。应该在另外的配置分区中
210210
- `password` 必选,string 类型,协议认证的密码。
211211
- `idleSessionCheckInterval` 可选,time.Duration 类型,检查空闲会话的间隔时间。
212212
- `idleSessionTimeout` 可选,time.Duration 类型,在检查中,关闭空闲时间超过此时长的会话。
213-
- `minIdleSession` 可选,int 类型,在检查中,至少保留前 n 个空闲会话不关闭,即为后续代理连接保留一定数量的“预备会话”。
213+
- `minIdleSession` 可选,int 类型,在检查中,至少保留前 n 个空闲会话不关闭,即为后续代理保留一定数量的“预备会话”。
214214

215215
### 服务器
216216

@@ -241,6 +241,6 @@ anytls 协议参数不包括 TLS 的参数。应该在另外的配置分区中
241241

242242
#### cmdSYNACK
243243

244-
当连接意外断开且客户端未收到 RST 时,如果复用此连接,协议版本 1 的行为在极端情况下可能会导致很长的超时(取决于系统设置)。
244+
当隧道连接意外断开且客户端未收到 RST 时,协议版本 1 的行为在极端情况下可能会导致很长的超时(取决于系统设置)。
245245

246246
由于在版本 2 客户端打开 stream 时可以期待来自服务器的回复,如果长时间未收到回复,则代表可能网络出现问题,客户端可以提前关闭卡住的连接。

0 commit comments

Comments
 (0)