kcptunB, 解决存在已久的卡死问题

2019-03-23 13:46:21 +08:00
 cs8425

kcptunB, B 是指 Breaking fixes/features.

跟原版的差异是加入了一些不相容旧版的修复以及功能(可手动关闭), 由于需要同时更新伺服端以及客户端才有作用, 原作者目前不打算合并

改变 /改善:

  1. 修复"快写慢读的 stream 造成整个 session 卡死"的问题, 不相容旧版, 预设启用
  2. 修复 keepalive, 解决某些情况下网路正常但仍然断线, 预设启用
  3. 加入简单的 socks5/http proxy (不需使用另外的 port)
  4. 新功能可手动关闭以维持原版相容(等于原版), 如需使用新功能, 伺服端以及客户端都必须更新到此版并启用功能
  5. 加入 ARMv8/aarch64/arm64 的执行档, 可以直接在安卓上执行
  6. 解决安卓版 DNS resolve 问题

github: https://github.com/cs8425/kcptunB

download: https://github.com/cs8425/kcptunB/releases

如果有使用的欢迎回报感想 /问题, 看有没有机会合并回原版

1326 次点击
所在节点    分享创造
13 条回复
noli
2019-03-23 15:07:07 +08:00
请问你在改善一中提到的,快写慢读的情况什么情形下会出现?
whoisghost
2019-03-23 15:07:54 +08:00
不错!我都是自己从头到尾写一个。
cs8425
2019-03-23 15:55:07 +08:00
@noli #1
当`--sockbuf`较小, "网站 A --> kcptun"的速度远大于"kcptun --> 使用者"的速度时会发生
常见于使用者高速下载东西的同时还想要浏览其他网页时会卡卡的
会发现这问题是因为很久之前看油管都是同时搜寻+连开分页载入影片
结果只有一个分页有载入, 其他分页会卡住(包括搜寻的页面)
原本以为是频宽问题
多方尝试后最终确认是 multiplexing 的 smux 造成的
`--sockbuf`不够大, 其中一个 stream 快写慢读会造成 buffer 用尽导致其他 stream 都卡住
已经可以由 test 复现问题, 请移驾到 smux 专案察看详情
noli
2019-03-23 17:07:54 +08:00
配置文件的格式和 kcptun 是兼容的吗?有示例吗?
cs8425
2019-03-23 17:56:27 +08:00
@noli #3
兼容, 不过建议把`--keepalive`换成`--keepalivems`
其他比较可能会用到的参数为: `--keepalive-timeout`, `--streambuf`, `--ser`, `--dns`
noli
2019-03-23 19:16:13 +08:00
@cs8425 #5

如果要用 json 文件使用 built-in SOCKS 或者 http proxy 该怎么写?
cs8425
2019-03-23 21:06:45 +08:00
@noli #6
依样画葫芦, json 设定跟 cli 选项名称一样, 加上`"ser": "socks5",`就好
sobigfish
2019-03-23 21:32:07 +08:00
能成功编译 for iOS 的么?
cs8425
2019-03-24 19:33:10 +08:00
@sobigfish #8
暂时不能, 等您提交 golang cross compile for iOS 的 PR
noli
2019-03-30 04:08:00 +08:00
v2.0.4 client_freebsd_amd64

Failed to set necessary TCP_FASTOPEN socket option: operation not permitted

无其他报错,但是无法连接成功;同时服务端报一个 broken pipe
noli
2019-03-30 04:12:03 +08:00
@noli #10 Sorry 是误报
noli
2019-03-30 04:21:17 +08:00
@noli #11 好了,这次确定不是误报了,同样的配置双端都是 v2.0.2 能成功连接,而双端都是 v2.0.4 时则不能
错误信息如上述,freebsd amd64
cs8425
2019-03-30 09:10:17 +08:00
@noli #10 #12
刚刚去装了台 VM 测试
如果`net.inet.tcp.fastopen.server_enable`设为 0 是有错误讯息没错
但是仍可以正常连线
无法复现不能连线的状况, 请提供更详细的资讯
版本: FreeBSD freebsd 12.0-RELEASE FreeBSD 12.0-RELEASE r341666 GENERIC amd64

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/547687

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX