V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
cs8425
V2EX  ›  分享创造

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

  •  1
     
  •   cs8425 ·
    cs8425 · 2019-03-23 13:46:21 +08:00 · 1408 次点击
    这是一个创建于 2077 天前的主题,其中的信息可能已经有所发展或是发生改变。

    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

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

    第 1 条附言  ·  2019-03-25 04:37:11 +08:00
    加入可能没啥用的 TCP Fast Open
    目前支持 linux, darwin, freebsd
    只有 linux 有实测确认正常(安卓部分尚未确认)
    darwin 跟 freebsd 需要再确认
    windows 理论上能启用, 但是还未实作...
    13 条回复    2019-03-30 09:10:17 +08:00
    noli
        1
    noli  
       2019-03-23 15:07:07 +08:00 via iPhone
    请问你在改善一中提到的,快写慢读的情况什么情形下会出现?
    whoisghost
        2
    whoisghost  
       2019-03-23 15:07:54 +08:00
    不错!我都是自己从头到尾写一个。
    cs8425
        3
    cs8425  
    OP
       2019-03-23 15:55:07 +08:00   ❤️ 1
    @noli #1
    当`--sockbuf`较小, "网站 A --> kcptun"的速度远大于"kcptun --> 使用者"的速度时会发生
    常见于使用者高速下载东西的同时还想要浏览其他网页时会卡卡的
    会发现这问题是因为很久之前看油管都是同时搜寻+连开分页载入影片
    结果只有一个分页有载入, 其他分页会卡住(包括搜寻的页面)
    原本以为是频宽问题
    多方尝试后最终确认是 multiplexing 的 smux 造成的
    `--sockbuf`不够大, 其中一个 stream 快写慢读会造成 buffer 用尽导致其他 stream 都卡住
    已经可以由 test 复现问题, 请移驾到 smux 专案察看详情
    noli
        4
    noli  
       2019-03-23 17:07:54 +08:00
    配置文件的格式和 kcptun 是兼容的吗?有示例吗?
    cs8425
        5
    cs8425  
    OP
       2019-03-23 17:56:27 +08:00
    @noli #3
    兼容, 不过建议把`--keepalive`换成`--keepalivems`
    其他比较可能会用到的参数为: `--keepalive-timeout`, `--streambuf`, `--ser`, `--dns`
    noli
        6
    noli  
       2019-03-23 19:16:13 +08:00
    @cs8425 #5

    如果要用 json 文件使用 built-in SOCKS 或者 http proxy 该怎么写?
    cs8425
        7
    cs8425  
    OP
       2019-03-23 21:06:45 +08:00
    @noli #6
    依样画葫芦, json 设定跟 cli 选项名称一样, 加上`"ser": "socks5",`就好
    sobigfish
        8
    sobigfish  
       2019-03-23 21:32:07 +08:00
    能成功编译 for iOS 的么?
    cs8425
        9
    cs8425  
    OP
       2019-03-24 19:33:10 +08:00
    @sobigfish #8
    暂时不能, 等您提交 golang cross compile for iOS 的 PR
    noli
        10
    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
        11
    noli  
       2019-03-30 04:12:03 +08:00
    @noli #10 Sorry 是误报
    noli
        12
    noli  
       2019-03-30 04:21:17 +08:00
    @noli #11 好了,这次确定不是误报了,同样的配置双端都是 v2.0.2 能成功连接,而双端都是 v2.0.4 时则不能
    错误信息如上述,freebsd amd64
    cs8425
        13
    cs8425  
    OP
       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
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3617 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 10:41 · PVG 18:41 · LAX 02:41 · JFK 05:41
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.