Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

单独用 kcptun 10Mbps,而加上 rsock 600Kbps #1

Closed
david9991 opened this issue Mar 22, 2018 · 33 comments
Closed

单独用 kcptun 10Mbps,而加上 rsock 600Kbps #1

david9991 opened this issue Mar 22, 2018 · 33 comments

Comments

@david9991
Copy link

单独用 kcptun 10Mbps,而加上 rsock 只有 600Kbps,有什么需要注意的吗?

@david9991
Copy link
Author

--type tcp 就很慢,--type udp 很正常,难道我这 TCP 被限速了?

@iceonsun
Copy link
Owner

rsock开了几个端口

@david9991
Copy link
Author

默认 10 个。

@david9991
Copy link
Author

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 差不多速度。
电信网络。

@iceonsun
Copy link
Owner

iceonsun commented Mar 23, 2018

@david9991

不过过断时间可能需要重启一下再能继续通信

重启这个问题,出现的是不是在比如电脑黑屏休眠再打开的时候?如果是这样,应该是shadowsocks、kcptun状态的问题。只需要关闭shadowsocks(turn shadowsocks off ),再重新打开(turn shadowsocks on)就行。还有这里的过一段时间,指的是过多久?

速度慢这个问题:你把日志贴上来看看。日志在这里:/var/log/rsock/rsock.log 。只需要贴这一个

@david9991
Copy link
Author

不是休眠的问题,用着用着不一定什么时候就全挂了。因为我改了 ss 加上了 health-check,所以一挂立马就知道,试着重启一下 rsock 好了,不知道是不是巧合,这块还需要时间来观察。
有时间我取个 log 给你,不过我之前看 log 好像并没看出什么特别的,因为慢的时候好像也并没有产生什么 log。上个网真是折腾那……XD

@iceonsun
Copy link
Owner

是一个编译选项和log库的问题。我本地开发测试的二进制和发布到release上的不一样。所以一直没有出现这个问题。明天我修改了重新发布上来

@david9991
Copy link
Author

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

@iceonsun
Copy link
Owner

@david9991 https://github.com/iceonsun/rsock/releases
你再试试看。

@david9991
Copy link
Author

@iceonsun 好使了。

@iceonsun
Copy link
Owner

youtube开3个1080p卡不卡

@david9991
Copy link
Author

@iceonsun 比单独 KCP 是慢一点儿。开 3 个没试过,不过感觉缓冲比以前慢了点,但可以接受。你这10个端口应该也是 roundrobin 的吧。

@david9991
Copy link
Author

@iceonsun 现在速度是很不错的,不过这次好像又出现一段时间后就会断的情况,重启又好了。这回是 --type=tcp。我再观察下现象。

@iceonsun iceonsun reopened this Mar 27, 2018
@iceonsun
Copy link
Owner

iceonsun commented Mar 27, 2018

不过这次好像又出现一段时间后就会断的情况,重启又好了

这个断的情况还出现吗。“断”指的是程序崩溃了,还是没速度。我这儿出现断的情况通常是笔记本休眠唤醒的时候,会没速度。这个时候只需要重启客户端shadowsocks(同时也重启了kcptun)就可以了。

@david9991
Copy link
Author

@iceonsun 是没速度,Health-check 超时。有没有办法自动恢复?因为我有的 client 是做服务器用,不能一断就重启服务呢。;)

@david9991
Copy link
Author

刚刚外网路由器断了一下,然后 health-check 就开始超时了,重启一下 rsock 就又连上了。不知道这是 ss,kcp,rsock 哪个断网后复归有问题。

@iceonsun
Copy link
Owner

@david9991 路由器断了等于tcp断了。这个要看中间的一系列路由器怎么处理,如果立即返回RST/FIN,那么rsock会立即重新连接,如果中间的路由器不发这两种flag(当然也不会转发数据),那么会在20s后重新连接。

网络断开不会受到RST/FIN这是有可能的,我自己测试过。

@david9991
Copy link
Author

@iceonsun 嗯,那可能是这种情况。下次再断我多等一会儿,看看是否可以自动恢复。

@david9991
Copy link
Author

david9991 commented Mar 28, 2018

@iceonsun 你有没有试过这么一个情况,就是原本使用 WIFI 连网,然后切换成 iPhone 热点,这时通信就会断掉,再切回 WIFI,rsock 连接也无法恢复,我这次等了 7 分钟也没有恢复。然后试着重启一下 rsock 立刻就能恢复。
PS: 我的 Health-check 是 Layer 7 的,所以应用层恢复才算恢复。Layer 4 health-check 有时候会有假象。
screen shot 2018-03-28 at 8 02 47 pm

@iceonsun
Copy link
Owner

看看是否可以自动恢复

普通情况下,你试了可以重连吧。

然后切换成 iPhone 热点

这个没试过。

切换成iphone热点肯定就不能通信了(此时外网网卡不一样),这是正常的。

又切换回wifi的时候,无法连接

你尝试重启一下kcptun看行不行。如果可以的话,就是kcptun和rsock的状态没对上。

@david9991
Copy link
Author

我试了下,断网再重新连上,短时间是可以自己恢复的,不能自己恢复时候,我试着重启一下 kcp 还是不走数据,但重启一下 rsock 之后就可以立即恢复。

@iceonsun
Copy link
Owner

你把操作步骤按123描述一下,我重现一下现象

@david9991
Copy link
Author

david9991 commented Mar 30, 2018

  1. ss+kcp+rsock 连接上。
  2. 在服务器一侧断网,或其它任何方式断网,断久一点。(比如把服务端 kill 掉一会)
  3. 恢复网络。
    然后数据就不走了,等几个分也是没有数据的。
  4. 重启 rsock,数据恢复。

@iceonsun
Copy link
Owner

这个是因为client尝试重连服务器有次数限制(现在是10次),意思是,当服务器在这10次重试连接期间都还没有运行起来的话,client就不再重试,然后就连接就断了。

我现在把重试设置到无限次。

https://github.com/iceonsun/rsock/releases/tag/v1.7.1

你再试试,可以了就关掉这个issue

@david9991
Copy link
Author

Tag 打错了?不应该是 9e09951

@iceonsun
Copy link
Owner

iceonsun commented Apr 1, 2018

一样的。master从dev cherry-pick过去的

@david9991
Copy link
Author

david9991 commented Apr 1, 2018

https://github.com/iceonsun/rsock/archive/v1.7.1.tar.gz 里面并没有你 master 里改的内容。你再确认一下二进制是用 master 编的还是用 v1.7.1.tar.gz 编的?
这次我把服务端停了 10 分钟然后启动,结果数据并没有恢复。
screen shot 2018-04-01 at 4 01 54 pm

@david9991
Copy link
Author

好吧,我用 master 重编了一下也没能自动恢复……必须把 rsock 重启才能恢复。
screen shot 2018-04-01 at 4 20 35 pm

@iceonsun
Copy link
Owner

iceonsun commented Apr 1, 2018

编进去了的。只不过是我先在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。

@david9991
Copy link
Author

我是 clone 下来的 master。
图上第一列是 RTT,最后一列才是断线时间。是 15 分钟。也就是断开 10 分钟之后,恢复连接又等了 5 分钟还是 down 的状态。

@iceonsun
Copy link
Owner

iceonsun commented Apr 1, 2018

我是这么测试的:

服务端kill掉rsock,等待10分钟,再启动rsock。client整个过程不动。

server起来以后,隔不久就看到client重连成功。此时已通。

重连这个的变更,主要改变在client。你确认一下, 启动有啥问题没(比如有旧的client在运行)。

停了 10 分钟

这个停了,指的是断网,还是kill 掉rsock

@david9991
Copy link
Author

我和你的步骤一样。但我对「通」的定义是 health-check 会通过 rsock -> kcp 给 ss 发一个 PING,ss 通过 kcp -> rsock 回一个 PONG。我再试一次。

@david9991
Copy link
Author

这回好使了。可能上次网络本身就是不好使。

@iceonsun iceonsun closed this as completed Apr 1, 2018
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants