Kcptun: Gost(h2c)+KCP模式的稳定性探讨

Created on 24 Mar 2020  ·  8Comments  ·  Source: xtaci/kcptun

目前的代理方式是这样的:

ss --> gost(h2c) --> kcp-client <-----> kcp-server --> gost(h2c) --> ss

我中间用了一层gost的h2c模式做管道,可以看见在日志里面 17:11:53打开,到17:16:34的时候才session过期。

我发现这样的好处是在晚上高延迟的情况下,速度还是非常不错,即使是fast模式。而且只用开一个connection

现在的问题是在断开的时候(17:16:34)会有明显的卡顿,比如看视频的时候,如果session过期,视频会卡10-20s左右。

看见了一个以前issue里面的描述.

设置了scavengettl:-1之后的效果应该是tcp不断udp就不断吧? 而不是在保持tcp不断的情况下以autoexipre为间隔切换底层的udp连接, 来保证tcp长连接下底层的udp连接不被过期.

请问:怎么设置能达到在connection断开或者切换的时候不卡顿?我期望的是KCP能在网络断开或者不好的情况下能自动切换connection,能让gost的h2c的管道不断。但是目前看来好像不是这样的。

可能期望的结果:保持gost的h2c的管道不断的情况下以autoexipre为间隔切换底层的udp连接, 来保证tcp长连接下底层的udp连接不被过期

2020/03/24 17:11:34 version: 20200201
2020/03/24 17:11:34 smux version: 1
2020/03/24 17:11:34 listening on: [::]:8567
2020/03/24 17:11:34 encryption: salsa20
2020/03/24 17:11:34 nodelay parameters: 0 30 2 1
2020/03/24 17:11:34 remote address: v-p-s:938
2020/03/24 17:11:34 sndwnd: 2548 rcvwnd: 2548
2020/03/24 17:11:34 compression: false
2020/03/24 17:11:34 mtu: 1350
2020/03/24 17:11:34 datashard: 10 parityshard: 3
2020/03/24 17:11:34 acknodelay: false
2020/03/24 17:11:34 dscp: 0
2020/03/24 17:11:34 sockbuf: 4194304
2020/03/24 17:11:34 smuxbuf: 4194304
2020/03/24 17:11:34 streambuf: 2097152
2020/03/24 17:11:34 keepalive: 10
2020/03/24 17:11:34 conn: 3
2020/03/24 17:11:34 autoexpire: 0
2020/03/24 17:11:34 scavengettl: -1
2020/03/24 17:11:34 snmplog: 
2020/03/24 17:11:34 snmpperiod: 60
2020/03/24 17:11:34 quiet: false
2020/03/24 17:11:34 tcp: false
2020/03/24 17:11:34 initiating key derivation
2020/03/24 17:11:34 key derivation done
2020/03/24 17:11:34 smux version: 1 on connection: 0.0.0.0:47117 -> v-p-s:938
2020/03/24 17:11:34 smux version: 1 on connection: 0.0.0.0:50792 -> v-p-s:938
2020/03/24 17:11:34 smux version: 1 on connection: 0.0.0.0:45486 -> v-p-s:938
2020/03/24 17:11:53 stream opened in: 127.0.0.1:48276 out: v-p-s:938(3)
2020/03/24 17:16:34 session marked as expired v-p-s:938
2020/03/24 17:16:34 smux version: 1 on connection: 0.0.0.0:32912 -> v-p-s:938
2020/03/24 17:16:34 stream opened in: 127.0.0.1:48758 out: v-p-s:938(3)
2020/03/24 17:16:34 session normally closed v-p-s:938
2020/03/24 17:28:04 stream closed in: 127.0.0.1:48276 out: v-p-s:938(3)
2020/03/24 17:28:05 session marked as expired v-p-s:938
2020/03/24 17:28:05 smux version: 1 on connection: 0.0.0.0:49610 -> v-p-s:938
2020/03/24 17:28:05 stream opened in: 127.0.0.1:52002 out: v-p-s:938(3)
2020/03/24 17:28:05 session normally closed v-p-s:938
2020/03/24 17:28:35 stream closed in: 127.0.0.1:52002 out: v-p-s:938(3)
2020/03/24 17:28:35 smux version: 1 on connection: 0.0.0.0:35750 -> v-p-s:938
2020/03/24 17:28:35 session marked as expired v-p-s:938
2020/03/24 17:28:35 stream opened in: 127.0.0.1:52066 out: v-p-s:938(3)
2020/03/24 17:28:35 session normally closed v-p-s:938
2020/03/24 17:29:05 stream closed in: 127.0.0.1:52066 out: v-p-s:938(3)
2020/03/24 17:29:05 stream opened in: 127.0.0.1:52114 out: v-p-s:938(5)

Most helpful comment

-keepalive参数调小试试

All 8 comments

-keepalive参数调小试试

-keepalive参数调小试试

好的,我试一试。

keepalive修改为3之后,稳定的一匹!!

WechatIMG351
WechatIMG348
WechatIMG350

2020/03/24 18:22:24 version: 20200201
2020/03/24 18:22:24 smux version: 1
2020/03/24 18:22:24 listening on: [::]:8567
2020/03/24 18:22:24 encryption: salsa20
2020/03/24 18:22:24 nodelay parameters: 0 30 2 1
2020/03/24 18:22:24 remote address: v-p-s:59938
2020/03/24 18:22:24 sndwnd: 2548 rcvwnd: 2548
2020/03/24 18:22:24 compression: false
2020/03/24 18:22:24 mtu: 1350
2020/03/24 18:22:24 datashard: 10 parityshard: 3
2020/03/24 18:22:24 acknodelay: false
2020/03/24 18:22:24 dscp: 0
2020/03/24 18:22:24 sockbuf: 4194304
2020/03/24 18:22:24 smuxbuf: 4194304
2020/03/24 18:22:24 streambuf: 2097152
2020/03/24 18:22:24 keepalive: 3
2020/03/24 18:22:24 conn: 3
2020/03/24 18:22:24 autoexpire: 0
2020/03/24 18:22:24 scavengettl: -1
2020/03/24 18:22:24 snmplog: 
2020/03/24 18:22:24 snmpperiod: 60
2020/03/24 18:22:24 quiet: false
2020/03/24 18:22:24 tcp: false
2020/03/24 18:22:24 initiating key derivation
2020/03/24 18:22:25 key derivation done
2020/03/24 18:22:25 smux version: 1 on connection: 0.0.0.0:36477 -> v-p-s:59938
2020/03/24 18:22:25 smux version: 1 on connection: 0.0.0.0:39905 -> v-p-s:59938
2020/03/24 18:22:25 smux version: 1 on connection: 0.0.0.0:59715 -> v-p-s:59938
2020/03/24 18:22:41 stream opened in: 127.0.0.1:37102 out: v-p-s:59938(3)
2020/03/24 18:27:25 stream opened in: 127.0.0.1:39862 out: v-p-s:59938(3)
2020/03/24 18:38:25 stream closed in: 127.0.0.1:39862 out: v-p-s:59938(3)
2020/03/24 18:42:24 smux version: 1 on connection: 0.0.0.0:49282 -> v-p-s:59938
2020/03/24 18:42:24 session marked as expired v-p-s:59938
2020/03/24 18:42:24 stream opened in: 127.0.0.1:48020 out: v-p-s:59938(3)
2020/03/24 18:42:25 session normally closed v-p-s:59938

其他人需要测试的可以试一试这个方式,以下是脱敏之后的大概搭建方法:

server:

~/ss -m aes-128-gcm -k abc -s 0.0.0.0:9949

~/gost/gost -L=h2c://:9984

~/kcptun/kcptun -l :9938 -t 127.0.0.1:9984 --rcvwnd 2548 --sndwnd 2548 --key abc --crypt salsa20 --mode fast --nocomp --tcp


client:


sudo /home/pi/kcptun/kcptun -r v-p-s-server:9938 -l :8567 --conn 3 --autoexpire 0 --scavengettl -1 --keepalive 3 --rcvwnd 2548 --sndwnd 2548 --key abc --crypt salsa20 --mode fast --nocomp --tcp

~/gost/gost -L=tcp://:19931/127.0.0.1:9949?ttl=60 -F=h2c://127.0.0.1:8567?ping=20

本地 ss client 连接 127.0.0.1:19931 

其他人需要测试的可以试一试这个方式,以下是脱敏之后的大概搭建方法:

server:

~/ss -m aes-128-gcm -k abc -s 0.0.0.0:9949

~/gost/gost -L=h2c://:9984

~/kcptun/kcptun -l :9938 -t 127.0.0.1:9984 --rcvwnd 2548 --sndwnd 2548 --key abc --crypt salsa20 --mode fast --nocomp --tcp


client:


sudo /home/pi/kcptun/kcptun -r v-p-s-server:9938 -l :8567 --conn 3 --autoexpire 0 --scavengettl -1 --keepalive 3 --rcvwnd 2548 --sndwnd 2548 --key abc --crypt salsa20 --mode fast --nocomp --tcp

~/gost/gost -L=tcp://:19931/127.0.0.1:59949?ttl=60 -F=h2c://127.0.0.1:8567?ping=20

本地 ss client 连接 127.0.0.1:19931 

没看懂服务端9984与9949怎么关联上的。

其他人需要测试的可以试一试这个方式,以下是脱敏之后的大概搭建方法:

server:

~/ss -m aes-128-gcm -k abc -s 0.0.0.0:9949

~/gost/gost -L=h2c://:9984

~/kcptun/kcptun -l :9938 -t 127.0.0.1:9984 --rcvwnd 2548 --sndwnd 2548 --key abc --crypt salsa20 --mode fast --nocomp --tcp


client:


sudo /home/pi/kcptun/kcptun -r v-p-s-server:9938 -l :8567 --conn 3 --autoexpire 0 --scavengettl -1 --keepalive 3 --rcvwnd 2548 --sndwnd 2548 --key abc --crypt salsa20 --mode fast --nocomp --tcp

~/gost/gost -L=tcp://:19931/127.0.0.1:59949?ttl=60 -F=h2c://127.0.0.1:8567?ping=20

本地 ss client 连接 127.0.0.1:19931 

没看懂服务端9984与9949怎么关联上的。

上面写错了,不好意思,已经修改了。

~/gost/gost -L=tcp://:19931/127.0.0.1:59949?ttl=60 -F=h2c://127.0.0.1:8567?ping=20

修改为

~/gost/gost -L=tcp://:19931/127.0.0.1:9949?ttl=60 -F=h2c://127.0.0.1:8567?ping=20

用了gost的本地端口转发, 本地的19931映射到远程的9949(SS端口),通过通道-F=h2c://127.0.0.1:8567?ping=20

通道:

gost(h2c) --> kcp-client <-----> kcp-server --> gost(h2c)

其他人需要测试的可以试一试这个方式,以下是脱敏之后的大概搭建方法:

server:

~/ss -m aes-128-gcm -k abc -s 0.0.0.0:9949

~/gost/gost -L=h2c://:9984

~/kcptun/kcptun -l :9938 -t 127.0.0.1:9984 --rcvwnd 2548 --sndwnd 2548 --key abc --crypt salsa20 --mode fast --nocomp --tcp


client:


sudo /home/pi/kcptun/kcptun -r v-p-s-server:9938 -l :8567 --conn 3 --autoexpire 0 --scavengettl -1 --keepalive 3 --rcvwnd 2548 --sndwnd 2548 --key abc --crypt salsa20 --mode fast --nocomp --tcp

~/gost/gost -L=tcp://:19931/127.0.0.1:59949?ttl=60 -F=h2c://127.0.0.1:8567?ping=20

本地 ss client 连接 127.0.0.1:19931 

没看懂服务端9984与9949怎么关联上的。

上面写错了,不好意思,已经修改了。

~/gost/gost -L=tcp://:19931/127.0.0.1:59949?ttl=60 -F=h2c://127.0.0.1:8567?ping=20

修改为

~/gost/gost -L=tcp://:19931/127.0.0.1:9949?ttl=60 -F=h2c://127.0.0.1:8567?ping=20

用了gost的本地端口转发, 本地的19931映射到远程的9949(SS端口),通过通道-F=h2c://127.0.0.1:8567?ping=20

通道:

gost(h2c) --> kcp-client <-----> kcp-server --> gost(h2c)

谢谢,我也来试试这个方法。

20210103版本踩了个坑,设置一定时间的autoexpire后,即使scavengettl设了-1,到了时间上层应用还是会直接掉线
新版可能不支持-1这个值,暂时不想用新版了

Was this page helpful?
0 / 5 - 0 ratings

Related issues

flyer5200 picture flyer5200  ·  5Comments

raszzh picture raszzh  ·  4Comments

cocoasoda picture cocoasoda  ·  9Comments

channingbox picture channingbox  ·  6Comments

ng-life picture ng-life  ·  5Comments