目前的代理方式是这样的:
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)
-keepalive参数调小试试
-keepalive参数调小试试
好的,我试一试。
keepalive修改为3之后,稳定的一匹!!



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这个值,暂时不想用新版了
Most helpful comment
-keepalive参数调小试试