2020| --| --| --| --|
2121| uint8 | Big-Endian uint32 | Big-Endian uint16 | 可变长度 |
2222
23- ** 客户端每次开启新会话必须立即发送 ` cmdSettings frame ` 。**
23+ ** 客户端每次开启新会话必须立即发送 ` cmdSettings ` 。**
2424
2525#### command
2626
4747
4848#### cmdWaste
4949
50- 任意一方收到 cmdWaste frame 后都应将其 data 完整读出并无声丢弃。
50+ 任意一方收到 cmdWaste 后都应将其 data 完整读出并无声丢弃。
5151
5252#### cmdHeartRequest
5353
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