Skip to content

tcp-brutal#5727

Closed
LjhAUMEM wants to merge 1 commit intoXTLS:mainfrom
LjhAUMEM:tcp-brutal
Closed

tcp-brutal#5727
LjhAUMEM wants to merge 1 commit intoXTLS:mainfrom
LjhAUMEM:tcp-brutal

Conversation

@LjhAUMEM
Copy link
Contributor

既然引入了 hy,那么再补个 tcp brutal

xray 中使用 tcp-brutal

前置准备

  • linux
  • kvm vps
  • 安装了对应内核的 linux header,快速检查软件源是否有对应 header apt-cache show "linux-headers-$(uname -r)"
curl -fsSL -O https://raw.githubusercontent.com/apernet/tcp-brutal/204aeea3437a83599c1c1fa1b97e4425cfdfc49d/scripts/install_dkms.sh
curl -fsSL -O https://github.com/apernet/tcp-brutal/releases/download/v1.0.3/tcp-brutal.dkms.tar.gz
bash install_dkms.sh --local tcp-brutal.dkms.tar.gz

参考配置,可自由搭配传输安全

"inbounds": [
  {
    // "listen": "127.0.0.1",
    "port": 1081,
    "protocol": "vless",
    "settings": {
      "clients": [
        {
          "id": "5783a3e7-e373-51cd-8642-c83782b807c5"
        }
      ],
      "decryption": "none"
    },
    "streamSettings": {
      "netword": "tcp",
      "tcpSettings": {
        "rate": 19660800, // 150mbps
        "cwnd": 15
      }
    }
  }
]

目前的 CustomSockopt 只会在监听的时候设置一次
而 inet_csk_ca 是面向连接的,要在连接建立后设置 brutal rate
https://github.com/apernet/tcp-brutal/blob/204aeea3437a83599c1c1fa1b97e4425cfdfc49d/brutal.c#L88

测试下来提升有限,bbr 只能跑 1mbps 的设置了 150mbps 也才提升到 50mbps

@Fangliding
Copy link
Member

Fangliding commented Feb 25, 2026

莫用这种还得在服务端下行速率改的土坯房了 https://github.com/XTLS/Xray-core/tree/mux-brutal 有一个我很久之前设计自用的正经使用 mux cool 协商速率兼容其他TCP Based传输的版本 只是刚需 #4231 所以一直没拿出来

@LjhAUMEM
Copy link
Contributor Author

还没看过 xray 的 mux,服务端需要设置什么吗

共存应该没问题,这个模式类似 force-brutal,抛弃了协商部分,还支持设置 cwnd

hy 给的 example 设置的就是 15,.c 文件里也支持 range

https://github.com/apernet/tcp-brutal/blob/204aeea3437a83599c1c1fa1b97e4425cfdfc49d/example/server.py#L18

https://github.com/apernet/tcp-brutal/blob/204aeea3437a83599c1c1fa1b97e4425cfdfc49d/brutal.c#L18

@Fangliding
Copy link
Member

Fangliding commented Feb 25, 2026

还没看过 xray 的 mux,服务端需要设置什么吗

因为是自用没写 理论上需要服务端设置一个最大值手动允许 但是在fork维护config是一件很恼火的事情(每次更新都得重新生成proto)所以我没加 加进去很简单

共存应该没问题,这个模式类似 force-brutal,抛弃了协商部分,还支持设置 cwnd

我还是那句话 大多数人不理解没必要开放设置 hy2也没开

hy 给的 example 设置的就是 15,.c 文件里也支持 range

https://github.com/apernet/tcp-brutal/blob/204aeea3437a83599c1c1fa1b97e4425cfdfc49d/example/server.py#L18

https://github.com/apernet/tcp-brutal/blob/204aeea3437a83599c1c1fa1b97e4425cfdfc49d/brutal.c#L18

首先 hy2 里默认值是20(实际值2.0 这里因为是整数类型所以小数点左移一位当小数)(正如注释所说)

还有这个 range 跟调用者无关 你自己写的应该知道它的 sockopt 参数啊 再说了它也不会自动 tuning 这个参数 它只是做了一个范围检查防止调用者失误写入过于不合适的值

@LjhAUMEM
Copy link
Contributor Author

你自己写的应该知道它的 sockopt 参数啊

和 rate 共用了 23301,并没有单独的参数

@Fangliding
Copy link
Member

@Fangliding
Copy link
Member

所以你觉得 MIN_CWND_GAIN 和 MAX_CWND_GAIN 要咋传进去

@LjhAUMEM
Copy link
Contributor Author

我以为你是说 CustomSockopt 里可以单独设置的 opt 参数

相当于还是把拥塞控制算法和 mux 绑起来了,理论上可以设置正常使用的 tcp 连接,虽然可能不及 mux 的效率

force-brutal 在设置小带宽场景下还是可以抛弃掉协商的,协商主要作用于不同客户端可承受的最大带宽场景,比如到客户端 A 线路最大支持 200mbps,客户端 B 为 100mbps,服务端为 G 口,都想跑满各自的带宽,协商就有作用,但其实都可以直接 force 30mbps 来使用,以及只有个人使用的场景也可以直接 force

@Fangliding
Copy link
Member

Fangliding commented Feb 25, 2026

那和 rate 共用 22301 的是啥

@LjhAUMEM
Copy link
Contributor Author

那和 rate 共用 22301 是啥

TCP_BRUTAL_PARAMS 你自己写的不知道吗,同时设置 rate 和 cwnd

type TCPBrutalParams struct {
Rate uint64
CwndGain uint32
}

更像是从 sing 搬过来的 https://github.com/SagerNet/sing-mux/blob/main/brutal_linux.go

@Fangliding
Copy link
Member

设置部分是从sing弄来的
你说 .c 里支持range还放了那两行的位置 我就纳闷怎么个支持法 咋传进去的 一问 你又说共用一个22301我就更看不懂了

@Fangliding
Copy link
Member

相当于还是把拥塞控制算法和 mux 绑起来了,理论上可以设置正常使用的 tcp 连接,虽然可能不及 mux 的效率

原项目粗体强调了必须搭配多路复用使用 否则服务端往客户端十几条连接每个都认为自己这条连接有这么多带宽会导致链路上实际被发送的数据包远超 brutal 设置的期望宽带

@LjhAUMEM
Copy link
Contributor Author

好的,那我先关了,期待 mux 的 pr

@LjhAUMEM LjhAUMEM closed this Feb 25, 2026
@LjhAUMEM LjhAUMEM mentioned this pull request Feb 28, 2026
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

Successfully merging this pull request may close these issues.

2 participants