diff --git a/docs/configuration/inbound/naive.md b/docs/configuration/inbound/naive.md index a360fa95..1f1e8078 100644 --- a/docs/configuration/inbound/naive.md +++ b/docs/configuration/inbound/naive.md @@ -50,13 +50,10 @@ QUIC congestion control algorithm. | Algorithm | Description | |----------------|---------------------------------| | `bbr` | BBR | -| `bbr_standard` | BBR (Standard version) | -| `bbr2` | BBRv2 | -| `bbr2_variant` | BBRv2 (An experimental variant) | | `cubic` | CUBIC | | `reno` | New Reno | -`bbr` is used by default (the default of QUICHE, used by Chromium which NaiveProxy is based on). +`bbr` is used by default. #### tls diff --git a/docs/configuration/inbound/naive.zh.md b/docs/configuration/inbound/naive.zh.md index 0984d310..1e4c8900 100644 --- a/docs/configuration/inbound/naive.zh.md +++ b/docs/configuration/inbound/naive.zh.md @@ -50,13 +50,10 @@ QUIC 拥塞控制算法。 | 算法 | 描述 | |----------------|--------------------| | `bbr` | BBR | -| `bbr_standard` | BBR (标准版) | -| `bbr2` | BBRv2 | -| `bbr2_variant` | BBRv2 (一种试验变体) | | `cubic` | CUBIC | | `reno` | New Reno | -默认使用 `bbr`(NaiveProxy 基于的 Chromium 使用的 QUICHE 的默认值)。 +默认使用 `bbr`。 #### tls diff --git a/docs/configuration/outbound/naive.md b/docs/configuration/outbound/naive.md index 8dfa9004..40b32e2e 100644 --- a/docs/configuration/outbound/naive.md +++ b/docs/configuration/outbound/naive.md @@ -109,7 +109,7 @@ QUIC congestion control algorithm. | `cubic` | CUBIC | | `reno` | New Reno | -`bbr` is used by default (the default of QUICHE, used by Chromium which NaiveProxy is based on). +`cubic` is used by default (the default of Chromium, which NaiveProxy is based on). #### quic_session_receive_window diff --git a/docs/configuration/outbound/naive.zh.md b/docs/configuration/outbound/naive.zh.md index 1e381863..1efafa44 100644 --- a/docs/configuration/outbound/naive.zh.md +++ b/docs/configuration/outbound/naive.zh.md @@ -109,7 +109,7 @@ QUIC 拥塞控制算法。 | `cubic` | CUBIC | | `reno` | New Reno | -默认使用 `bbr`(NaiveProxy 基于的 Chromium 使用的 QUICHE 的默认值)。 +默认使用 `cubic`(NaiveProxy 基于的 Chromium 的默认值)。 #### quic_session_receive_window diff --git a/docs/schema.json b/docs/schema.json index 888dca5c..96107d14 100644 --- a/docs/schema.json +++ b/docs/schema.json @@ -6634,9 +6634,6 @@ "type": "string", "enum": [ "bbr", - "bbr_standard", - "bbr2", - "bbr2_variant", "cubic", "reno" ] diff --git a/go.mod b/go.mod index a2baaa74..fa5966a7 100644 --- a/go.mod +++ b/go.mod @@ -44,13 +44,13 @@ require ( github.com/sagernet/gvisor v0.0.0-20260727.0-sing-box-mod.1 github.com/sagernet/netlink v0.0.0-20260814022025-64455d367bbf github.com/sagernet/nftables v0.3.0-mod.4 - github.com/sagernet/quic-go v0.61.0-sing-box-mod.5 + github.com/sagernet/quic-go v0.61.0-sing-box-mod.6 github.com/sagernet/sing v0.9.0-beta.4 github.com/sagernet/sing-cloudflared v0.1.3-0.20260706062323-d9787e794aa3 github.com/sagernet/sing-mux v0.3.5 github.com/sagernet/sing-openconnect v0.0.0-20260810065514-53aa8058f8df github.com/sagernet/sing-openvpn v0.0.0-20260729104525-103eb5fe5eb6 - github.com/sagernet/sing-quic v0.7.0-beta.3 + github.com/sagernet/sing-quic v0.7.0-beta.4 github.com/sagernet/sing-shadowsocks v0.2.8 github.com/sagernet/sing-shadowsocks2 v0.2.1 github.com/sagernet/sing-shadowtls v0.2.1 diff --git a/go.sum b/go.sum index ca87bfd4..270ca6d6 100644 --- a/go.sum +++ b/go.sum @@ -316,8 +316,8 @@ github.com/sagernet/netlink v0.0.0-20260814022025-64455d367bbf h1:b/3rm+KvxzuYRc github.com/sagernet/netlink v0.0.0-20260814022025-64455d367bbf/go.mod h1:xLnfdiJbSp8rNqYEdIW/6eDO4mVoogml14Bh2hSiFpM= github.com/sagernet/nftables v0.3.0-mod.4 h1:vnOtcDYeSXv2e5RoRuGH0lrpttQFJ8iC4ICS2nhlDSo= github.com/sagernet/nftables v0.3.0-mod.4/go.mod h1:8kslHG4VvYNihcco+i6uxIX7qbT8A56T0y5q7U44ZaQ= -github.com/sagernet/quic-go v0.61.0-sing-box-mod.5 h1:D41e0fUHgdiYV2r4eGF3LgnBWNjYHm781dNW87IDzWc= -github.com/sagernet/quic-go v0.61.0-sing-box-mod.5/go.mod h1:hmLC8GJPp+BrpBgrgJnacvI4fZGIhasuy1ROJJ8GR4E= +github.com/sagernet/quic-go v0.61.0-sing-box-mod.6 h1:67bgUBU2QKK6jNz46GB5919wwRHcOHSafgmhD2gVf2Y= +github.com/sagernet/quic-go v0.61.0-sing-box-mod.6/go.mod h1:hmLC8GJPp+BrpBgrgJnacvI4fZGIhasuy1ROJJ8GR4E= github.com/sagernet/sing v0.9.0-beta.4 h1:DYoEzb3FeCZ9bA66hJmL0NFDXckZpa4oYF/VpbFJEkE= github.com/sagernet/sing v0.9.0-beta.4/go.mod h1:K3Owt3xPhHugvlnlPPxZJ/exXdaJfEPOTNorGk4AXjo= github.com/sagernet/sing-cloudflared v0.1.3-0.20260706062323-d9787e794aa3 h1:3y6++yIa8XlDhxPkpR4p+7RUHVY2KTP9CPIGnWmOlO8= @@ -328,8 +328,8 @@ github.com/sagernet/sing-openconnect v0.0.0-20260810065514-53aa8058f8df h1:ogyC7 github.com/sagernet/sing-openconnect v0.0.0-20260810065514-53aa8058f8df/go.mod h1:4AKZLVcvY3r54UaK2Gbnm7aN8pOwdLz+y4EP0QFZ5Eg= github.com/sagernet/sing-openvpn v0.0.0-20260729104525-103eb5fe5eb6 h1:ZAvhkor0prJ8KEX9EmTEH+gJ1WlA3ffjS8GZT6KKq9c= github.com/sagernet/sing-openvpn v0.0.0-20260729104525-103eb5fe5eb6/go.mod h1:PWX7WygD8jpwfqfaGNySXpJYTn0SOwjBI1BKHHC2+Bw= -github.com/sagernet/sing-quic v0.7.0-beta.3 h1:jQA8vurQ2c8uKebdSq5G1N4EnSLpq2l6rEGJ7Dv6hXA= -github.com/sagernet/sing-quic v0.7.0-beta.3/go.mod h1:FPgVlDoSLWJlCjtT8WrFIAll4t2OutSP9nq0Iq74JLg= +github.com/sagernet/sing-quic v0.7.0-beta.4 h1:frzDiZqUbT0yLVaVfgaLtoVQ/zGa3xIsDTHP+aSM/W8= +github.com/sagernet/sing-quic v0.7.0-beta.4/go.mod h1:rJFeVxbEej2iuyeCJ3drKW+p5rOgtLIW3XhZ6ty7Fig= github.com/sagernet/sing-shadowsocks v0.2.8 h1:PURj5PRoAkqeHh2ZW205RWzN9E9RtKCVCzByXruQWfE= github.com/sagernet/sing-shadowsocks v0.2.8/go.mod h1:lo7TWEMDcN5/h5B8S0ew+r78ZODn6SwVaFhvB6H+PTI= github.com/sagernet/sing-shadowsocks2 v0.2.1 h1:dWV9OXCeFPuYGHb6IRqlSptVnSzOelnqqs2gQ2/Qioo= diff --git a/option/naive.go b/option/naive.go index 601365a1..eee3c959 100644 --- a/option/naive.go +++ b/option/naive.go @@ -6,21 +6,11 @@ import ( "github.com/sagernet/sing/common/json/badoption" ) -type QuicheCongestionControl string - -const ( - QuicheCongestionControlDefault QuicheCongestionControl = "" - QuicheCongestionControlBBR QuicheCongestionControl = "TBBR" - QuicheCongestionControlBBRv2 QuicheCongestionControl = "B2ON" - QuicheCongestionControlCubic QuicheCongestionControl = "CQBC" - QuicheCongestionControlReno QuicheCongestionControl = "RENO" -) - type NaiveInboundOptions struct { ListenOptions Users []auth.User `json:"users,omitempty"` Network NetworkList `json:"network,omitempty"` - QUICCongestionControl string `json:"quic_congestion_control,omitempty" enum:"bbr,bbr_standard,bbr2,bbr2_variant,cubic,reno"` + QUICCongestionControl string `json:"quic_congestion_control,omitempty" enum:"bbr,cubic,reno"` InboundTLSOptionsContainer } diff --git a/protocol/naive/quic/inbound_init.go b/protocol/naive/quic/inbound_init.go index b391a263..3f59355a 100644 --- a/protocol/naive/quic/inbound_init.go +++ b/protocol/naive/quic/inbound_init.go @@ -15,8 +15,6 @@ import ( "github.com/sagernet/sing-box/option" "github.com/sagernet/sing-box/protocol/naive" "github.com/sagernet/sing-quic" - "github.com/sagernet/sing-quic/congestion_bbr1" - "github.com/sagernet/sing-quic/congestion_bbr2" congestion_meta1 "github.com/sagernet/sing-quic/congestion_meta1" congestion_meta2 "github.com/sagernet/sing-quic/congestion_meta2" "github.com/sagernet/sing/common" @@ -48,44 +46,13 @@ func init() { switch options.QUICCongestionControl { case "", "bbr": congestionControl = func(conn *quic.Conn) congestion.CongestionControl { - return congestion_meta2.NewBbrSender( - congestion_meta2.DefaultClock{TimeFunc: timeFunc}, - congestion.ByteCount(conn.Config().InitialPacketSize), - congestion.ByteCount(congestion_meta1.InitialCongestionWindow), - ) - } - case "bbr_standard": - congestionControl = func(conn *quic.Conn) congestion.CongestionControl { - return congestion_bbr1.NewBbrSender( - congestion_bbr1.DefaultClock{TimeFunc: timeFunc}, - congestion.ByteCount(conn.Config().InitialPacketSize), - congestion_bbr1.InitialCongestionWindowPackets, - congestion_bbr1.MaxCongestionWindowPackets, - ) - } - case "bbr2": - congestionControl = func(conn *quic.Conn) congestion.CongestionControl { - return congestion_bbr2.NewBBR2Sender( - congestion_bbr2.DefaultClock{TimeFunc: timeFunc}, - congestion.ByteCount(conn.Config().InitialPacketSize), - 0, - false, - ) - } - case "bbr2_variant": - congestionControl = func(conn *quic.Conn) congestion.CongestionControl { - return congestion_bbr2.NewBBR2Sender( - congestion_bbr2.DefaultClock{TimeFunc: timeFunc}, - congestion.ByteCount(conn.Config().InitialPacketSize), - 32*congestion.ByteCount(conn.Config().InitialPacketSize), - true, - ) + return congestion_meta2.NewBbrSenderWithProfile(conn.InitialPacketSize(), congestion_meta2.ProfileStandard) } case "cubic": congestionControl = func(conn *quic.Conn) congestion.CongestionControl { return congestion_meta1.NewCubicSender( congestion_meta1.DefaultClock{TimeFunc: timeFunc}, - congestion.ByteCount(conn.Config().InitialPacketSize), + conn.InitialPacketSize(), false, ) } @@ -93,7 +60,7 @@ func init() { congestionControl = func(conn *quic.Conn) congestion.CongestionControl { return congestion_meta1.NewCubicSender( congestion_meta1.DefaultClock{TimeFunc: timeFunc}, - congestion.ByteCount(conn.Config().InitialPacketSize), + conn.InitialPacketSize(), true, ) } @@ -104,6 +71,7 @@ func init() { quicListener, err := qtls.ListenEarly(udpConn, tlsConfig, &quic.Config{ MaxIncomingStreams: 1 << 60, Allow0RTT: true, + DisablePathManager: true, }) if err != nil { udpConn.Close()