cty123 / TrojanRust

Trojan-rust is a rust implementation for Trojan protocol that is targeted to circumvent GFW. This implementation focus on performance and stability above everything else.
MIT License
112 stars 24 forks source link

discarding possible duplicate packet #16

Closed spongebob888 closed 1 year ago

spongebob888 commented 1 year ago

我发现当使用QUIC + Trojan 一段时间后,总是会报警告:

[2023-02-20T06:27:40Z WARN quinn_proto::connection] discarding possible duplicate packet

出现这个警告时,延迟会高出许多,体验上感觉速度变慢了。并且这个警告一旦出现,每次发生数据传输都会 发生该警告。这个问题 leaf 也存在。见 eycorsican/leaf#349 ps: 我使用xray作为客户端

cty123 commented 1 year ago

这个应该是quic库报的错,跟协议应该没什么关系。不过我在测试的时候完全没看到这个问题,我猜有可能跟使用bbr有什么关联。具体的要去挖quinn源码这个报错的地方才能知道。

cty123 commented 1 year ago

我稍微看了下源码,https://github.com/quinn-rs/quinn/blame/389d7ce5067fbef460f0730861340b15f13d4803/quinn-proto/src/connection/mod.rs#L1952, 这个dedup好像没什么问题,我感觉是因为你的网络通信延迟/丢包导致这条warning然后体验速度变慢,而不是这个warning本身导致的问题。有可能是bbr的发包频率比一般情况下高,然后导致消息重发然后接收端收到重复的消息,你可以试试revert那个bbr的commit看看还会不会出错。但是这个duplicate包本身这个问题是无法避免的,只要你的网络环境够烂,duplicate非常多也不意外。

spongebob888 commented 1 year ago

确实,晚高峰的时候容易报这个错误。我查了下QUIC协议,协议是允许重复发包的,所以这应该是个安全的Warning。不过 BBR 只管发包,不管接收包,如果是接收端报错应该不是服务端BBR的问题(我使用xray客户端,没有bbr)。