单独用 kcptun 10Mbps,而加上 rsock 600Kbps
david9991 opened this issue · 33 comments
单独用 kcptun 10Mbps,而加上 rsock 只有 600Kbps,有什么需要注意的吗?
--type tcp 就很慢,--type udp 很正常,难道我这 TCP 被限速了?
rsock开了几个端口
默认 10 个。
sudo client_rsock_Darwin -l xxxx -d en0 -t xxxx --type udp 这样就比较快,不过过断时间可能需要重启一下再能继续通信。
sudo client_rsock_Darwin -l xxxx -d en0 -t xxxx --type tcp 这样就非常慢,10M:600K 这么个速度。
sudo client_rsock_Darwin -l xxxx -d en0 -t xxxx --type all 这样和 tcp 差不多速度。
电信网络。
不过过断时间可能需要重启一下再能继续通信
重启这个问题,出现的是不是在比如电脑黑屏休眠再打开的时候?如果是这样,应该是shadowsocks、kcptun状态的问题。只需要关闭shadowsocks(turn shadowsocks off ),再重新打开(turn shadowsocks on)就行。还有这里的过一段时间,指的是过多久?
速度慢这个问题:你把日志贴上来看看。日志在这里:/var/log/rsock/rsock.log 。只需要贴这一个
不是休眠的问题,用着用着不一定什么时候就全挂了。因为我改了 ss 加上了 health-check,所以一挂立马就知道,试着重启一下 rsock 好了,不知道是不是巧合,这块还需要时间来观察。
有时间我取个 log 给你,不过我之前看 log 好像并没看出什么特别的,因为慢的时候好像也并没有产生什么 log。上个网真是折腾那……XD
是一个编译选项和log库的问题。我本地开发测试的二进制和发布到release上的不一样。所以一直没有出现这个问题。明天我修改了重新发布上来
2018-03-26 09:19:43.769 DEBUG [304270] [ISockApp::doInit@60] conf: {"daemon": true, "log": "/var/log/rsock/1", "param": {"cap_timeout": 10, "dev": "en0", "duration": 30, "hash": "hello135", "lcapIp": "y.y.y.y", "ludp": "127.0.0.1:7973", "ports": "10001-10010", "taddr": "x.x.x.x", "type": "tcp", "unPath": ""}, "server": false, "verbose": false}
2018-03-26 09:19:43.770 DEBUG [304270] [RCap::Init@50] filter : tcp and (ip src x.x.x.x) and (ip dst y.y.y.y) and ( src portrange 10001-10010 )
2018-03-26 09:19:44.069 DEBUG [304270] [INetGroup::AddNetConn@64] Add INetConn: tcp:y.y.y.y:60021-x.x.x.x:10001
2018-03-26 09:19:44.310 DEBUG [304270] [INetGroup::AddNetConn@64] Add INetConn: tcp:y.y.y.y:60032-x.x.x.x:10002
2018-03-26 09:19:44.545 DEBUG [304270] [INetGroup::AddNetConn@64] Add INetConn: tcp:y.y.y.y:60035-x.x.x.x:10003
2018-03-26 09:19:44.842 DEBUG [304270] [INetGroup::AddNetConn@64] Add INetConn: tcp:y.y.y.y:60040-x.x.x.x:10004
2018-03-26 09:19:45.149 DEBUG [304270] [INetGroup::AddNetConn@64] Add INetConn: tcp:y.y.y.y:60045-x.x.x.x:10005
2018-03-26 09:19:45.437 DEBUG [304270] [INetGroup::AddNetConn@64] Add INetConn: tcp:y.y.y.y:60051-x.x.x.x:10006
2018-03-26 09:19:45.728 DEBUG [304270] [INetGroup::AddNetConn@64] Add INetConn: tcp:y.y.y.y:60063-x.x.x.x:10007
2018-03-26 09:19:46.071 DEBUG [304270] [INetGroup::AddNetConn@64] Add INetConn: tcp:y.y.y.y:60071-x.x.x.x:10008
2018-03-26 09:19:46.307 DEBUG [304270] [INetGroup::AddNetConn@64] Add INetConn: tcp:y.y.y.y:60078-x.x.x.x:10009
2018-03-26 09:19:46.548 DEBUG [304270] [INetGroup::AddNetConn@64] Add INetConn: tcp:y.y.y.y:60080-x.x.x.x:10010
2018-03-26 09:19:46.556 DEBUG [304270] [ClientGroup::Init@43] client, listening on udp: 127.0.0.1:7973
2018-03-26 09:19:48.176 DEBUG [304270] [*ClientGroup::newConn@198] new cconn:127.0.0.1:58035, conv: 2
2018-03-26 09:19:49.016 DEBUG [304270] [ConnReset::Input@44] cmd: 2
2018-03-26 09:19:49.016 DEBUG [304270] [ConnReset::Input@44] cmd: 2
2018-03-26 09:19:49.069 DEBUG [304270] [ConnReset::Input@44] cmd: 2
2018-03-26 09:19:49.069 DEBUG [304270] [ConnReset::Input@44] cmd: 2
2018-03-26 09:19:49.069 DEBUG [304270] [ConnReset::Input@44] cmd: 2
2018-03-26 09:19:49.069 DEBUG [304270] [ConnReset::Input@44] cmd: 2
2018-03-26 09:19:49.069 DEBUG [304270] [ConnReset::Input@44] cmd: 2
2018-03-26 09:19:54.013 DEBUG [304270] [ConnReset::Input@44] cmd: 2
youtube开3个1080p卡不卡
不过这次好像又出现一段时间后就会断的情况,重启又好了
这个断的情况还出现吗。“断”指的是程序崩溃了,还是没速度。我这儿出现断的情况通常是笔记本休眠唤醒的时候,会没速度。这个时候只需要重启客户端shadowsocks(同时也重启了kcptun)就可以了。
刚刚外网路由器断了一下,然后 health-check 就开始超时了,重启一下 rsock 就又连上了。不知道这是 ss,kcp,rsock 哪个断网后复归有问题。
@david9991 路由器断了等于tcp断了。这个要看中间的一系列路由器怎么处理,如果立即返回RST/FIN,那么rsock会立即重新连接,如果中间的路由器不发这两种flag(当然也不会转发数据),那么会在20s后重新连接。
网络断开不会受到RST/FIN这是有可能的,我自己测试过。
@iceonsun 你有没有试过这么一个情况,就是原本使用 WIFI 连网,然后切换成 iPhone 热点,这时通信就会断掉,再切回 WIFI,rsock 连接也无法恢复,我这次等了 7 分钟也没有恢复。然后试着重启一下 rsock 立刻就能恢复。
PS: 我的 Health-check 是 Layer 7 的,所以应用层恢复才算恢复。Layer 4 health-check 有时候会有假象。
看看是否可以自动恢复
普通情况下,你试了可以重连吧。
然后切换成 iPhone 热点
这个没试过。
切换成iphone热点肯定就不能通信了(此时外网网卡不一样),这是正常的。
又切换回wifi的时候,无法连接
你尝试重启一下kcptun看行不行。如果可以的话,就是kcptun和rsock的状态没对上。
我试了下,断网再重新连上,短时间是可以自己恢复的,不能自己恢复时候,我试着重启一下 kcp 还是不走数据,但重启一下 rsock 之后就可以立即恢复。
你把操作步骤按123描述一下,我重现一下现象
- ss+kcp+rsock 连接上。
- 在服务器一侧断网,或其它任何方式断网,断久一点。(比如把服务端 kill 掉一会)
- 恢复网络。
然后数据就不走了,等几个分也是没有数据的。 - 重启 rsock,数据恢复。
这个是因为client尝试重连服务器有次数限制(现在是10次),意思是,当服务器在这10次重试连接期间都还没有运行起来的话,client就不再重试,然后就连接就断了。
我现在把重试设置到无限次。
https://github.com/iceonsun/rsock/releases/tag/v1.7.1
你再试试,可以了就关掉这个issue
一样的。master从dev cherry-pick过去的
https://github.com/iceonsun/rsock/archive/v1.7.1.tar.gz 里面并没有你 master 里改的内容。你再确认一下二进制是用 master 编的还是用 v1.7.1.tar.gz 编的?
这次我把服务端停了 10 分钟然后启动,结果数据并没有恢复。
编进去了的。只不过是我先在dev上编了二进制,发布release,再cherry-pick 到master,最后 push 到github上。
发布的二进制压缩文件(https://github.com/iceonsun/rsock/releases/tag/v1.7.1)里面有VERSION.txt
其中commit version为 9e099513a154a3bc6198a5e2152d95a50e71913e
这个和最新的master是一样的(git diff 9e099513
)没有输出。v1.7.1 release出的source code.zip估计是按照发布二进制时master的快照(本地还未push到github master),所以比较旧。
就发布这个事,下次我先更新master后发布二进制
我用 master 重编了一下也没能自动恢复
这个是你clone下来的master,还是v1.7.1 发布页面的source code。
也没能自动恢复
重试是有时间间隔的, 1s->2s...32s->1s, 这样不断重试。最多不超过32s。我看图表中只等待了2s。
我是 clone 下来的 master。
图上第一列是 RTT,最后一列才是断线时间。是 15 分钟。也就是断开 10 分钟之后,恢复连接又等了 5 分钟还是 down 的状态。
我是这么测试的:
服务端kill掉rsock,等待10分钟,再启动rsock。client整个过程不动。
server起来以后,隔不久就看到client重连成功。此时已通。
重连这个的变更,主要改变在client。你确认一下, 启动有啥问题没(比如有旧的client在运行)。
停了 10 分钟
这个停了,指的是断网,还是kill 掉rsock
我和你的步骤一样。但我对「通」的定义是 health-check 会通过 rsock -> kcp 给 ss 发一个 PING,ss 通过 kcp -> rsock 回一个 PONG。我再试一次。
这回好使了。可能上次网络本身就是不好使。