Git Product home page Git Product logo

Comments (1)

wen-long avatar wen-long commented on June 9, 2024 3

应该找到原因了

func (d *Defragger) Feed(m *protocol.UDPMessage) *protocol.UDPMessage {

这里的 Defragger 只有一个, 会要求被分片的包连续到达, 中间穿插了其他 PacketID 的包就会丢掉了

打上合适的日志可以看到

2024/02/04 17:23:54 frag.go:47: m.PacketID = 48970, m.FragID = 1, m.FragCount = 2, lenOfm.Data = 81
2024/02/04 17:23:54 frag.go:47: m.PacketID = 8662, m.FragID = 1, m.FragCount = 2, lenOfm.Data = 81
2024/02/04 17:23:54 frag.go:47: m.PacketID = 58833, m.FragID = 1, m.FragCount = 2, lenOfm.Data = 81
2024/02/04 17:23:54 frag.go:47: m.PacketID = 48970, m.FragID = 0, m.FragCount = 2, lenOfm.Data = 1171
2024/02/04 17:23:54 frag.go:47: m.PacketID = 8662, m.FragID = 0, m.FragCount = 2, lenOfm.Data = 1171
2024/02/04 17:23:54 frag.go:47: m.PacketID = 58833, m.FragID = 0, m.FragCount = 2, lenOfm.Data = 1171
2024/02/04 17:23:54 frag.go:47: m.PacketID = 0, m.FragID = 0, m.FragCount = 1, lenOfm.Data = 141
2024/02/04 17:23:54 frag.go:47: m.PacketID = 0, m.FragID = 0, m.FragCount = 1, lenOfm.Data = 37
2024/02/04 17:23:54 frag.go:47: m.PacketID = 40212, m.FragID = 1, m.FragCount = 2, lenOfm.Data = 81
2024/02/04 17:23:54 frag.go:47: m.PacketID = 47561, m.FragID = 1, m.FragCount = 2, lenOfm.Data = 81
2024/02/04 17:23:54 frag.go:47: m.PacketID = 40212, m.FragID = 0, m.FragCount = 2, lenOfm.Data = 1171
2024/02/04 17:23:54 frag.go:47: m.PacketID = 47561, m.FragID = 0, m.FragCount = 2, lenOfm.Data = 1171
2024/02/04 17:23:55 frag.go:47: m.PacketID = 15313, m.FragID = 1, m.FragCount = 2, lenOfm.Data = 81
2024/02/04 17:23:55 frag.go:47: m.PacketID = 0, m.FragID = 0, m.FragCount = 1, lenOfm.Data = 1121
2024/02/04 17:23:55 frag.go:47: m.PacketID = 15313, m.FragID = 0, m.FragCount = 2, lenOfm.Data = 1171
2024/02/04 17:23:55 frag.go:66: d.count = 2, d.frags = [1374392740144 1374392739952], m.PacketID = 15313, m.FragID = 0, m.FragCount = 2, lenOfm.Data = 1171
2024/02/04 17:23:55 frag.go:47: m.PacketID = 0, m.FragID = 0, m.FragCount = 1, lenOfm.Data = 37
2024/02/04 17:23:55 frag.go:47: m.PacketID = 44812, m.FragID = 1, m.FragCount = 2, lenOfm.Data = 81
2024/02/04 17:23:55 frag.go:47: m.PacketID = 44812, m.FragID = 0, m.FragCount = 2, lenOfm.Data = 1171
2024/02/04 17:23:55 frag.go:66: d.count = 2, d.frags = [1374391766448 1374391766352], m.PacketID = 44812, m.FragID = 0, m.FragCount = 2, lenOfm.Data = 1171
2024/02/04 17:23:55 frag.go:47: m.PacketID = 27731, m.FragID = 1, m.FragCount = 2, lenOfm.Data = 81
2024/02/04 17:23:55 frag.go:47: m.PacketID = 27731, m.FragID = 0, m.FragCount = 2, lenOfm.Data = 1171
2024/02/04 17:23:55 frag.go:66: d.count = 2, d.frags = [1374391766640 1374391766544], m.PacketID = 27731, m.FragID = 0, m.FragCount = 2, lenOfm.Data = 1171
2024/02/04 17:23:55 frag.go:47: m.PacketID = 15733, m.FragID = 1, m.FragCount = 2, lenOfm.Data = 81
2024/02/04 17:23:55 frag.go:47: m.PacketID = 15733, m.FragID = 0, m.FragCount = 2, lenOfm.Data = 1171
2024/02/04 17:23:55 frag.go:66: d.count = 2, d.frags = [1374393268416 1374393268320], m.PacketID = 15733, m.FragID = 0, m.FragCount = 2, lenOfm.Data = 1171
2024/02/04 17:23:55 frag.go:47: m.PacketID = 0, m.FragID = 0, m.FragCount = 1, lenOfm.Data = 235
2024/02/04 17:23:55 frag.go:47: m.PacketID = 0, m.FragID = 0, m.FragCount = 1, lenOfm.Data = 25
2024/02/04 17:23:55 frag.go:47: m.PacketID = 0, m.FragID = 0, m.FragCount = 1, lenOfm.Data = 72
{"level":"debug","time":1707038635919.616,"msg":"SOCKS5 UDP closed","addr":"127.0.0.1:60362"}


PacketID 48970 8662 58833 这些包应该是被放弃了, 没有走到 all fragments received, assemble, 所以 DOQ 有时候成功有时候失败有时候耗时特别久

修复的话我尝试把放在 map 里面, 日志会如下

2024/02/04 17:26:35 frag.go:47: m.PacketID = 62703, m.FragID = 0, m.FragCount = 2, lenOfm.Data = 1171
2024/02/04 17:26:35 frag.go:47: m.PacketID = 35260, m.FragID = 0, m.FragCount = 2, lenOfm.Data = 1171
2024/02/04 17:26:35 frag.go:47: m.PacketID = 10003, m.FragID = 0, m.FragCount = 2, lenOfm.Data = 1171
2024/02/04 17:26:35 frag.go:47: m.PacketID = 62703, m.FragID = 1, m.FragCount = 2, lenOfm.Data = 81
2024/02/04 17:26:35 frag.go:66: d.count = 2, d.frags = [1374393267696 1374393267984], m.PacketID = 62703, m.FragID = 1, m.FragCount = 2, lenOfm.Data = 81
2024/02/04 17:26:35 frag.go:47: m.PacketID = 35260, m.FragID = 1, m.FragCount = 2, lenOfm.Data = 81
2024/02/04 17:26:35 frag.go:66: d.count = 2, d.frags = [1374393267792 1374393268080], m.PacketID = 35260, m.FragID = 1, m.FragCount = 2, lenOfm.Data = 81
2024/02/04 17:26:35 frag.go:47: m.PacketID = 10003, m.FragID = 1, m.FragCount = 2, lenOfm.Data = 81
2024/02/04 17:26:35 frag.go:66: d.count = 2, d.frags = [1374393267888 1374393268176], m.PacketID = 10003, m.FragID = 1, m.FragCount = 2, lenOfm.Data = 81
2024/02/04 17:26:35 udp.go:77: frag 2
2024/02/04 17:26:35 udp.go:77: frag 1
2024/02/04 17:26:35 udp.go:77: frag 1
2024/02/04 17:26:35 frag.go:47: m.PacketID = 0, m.FragID = 0, m.FragCount = 1, lenOfm.Data = 137
2024/02/04 17:26:35 udp.go:77: frag 1
2024/02/04 17:26:35 udp.go:77: frag 1
2024/02/04 17:26:35 udp.go:77: frag 1
2024/02/04 17:26:35 frag.go:47: m.PacketID = 0, m.FragID = 0, m.FragCount = 1, lenOfm.Data = 240
2024/02/04 17:26:35 frag.go:47: m.PacketID = 0, m.FragID = 0, m.FragCount = 1, lenOfm.Data = 73
2024/02/04 17:26:35 udp.go:77: frag 1
{"level":"debug","time":1707038795163.9712,"msg":"SOCKS5 UDP closed","addr":"127.0.0.1:60533"}

DOQ 也就不会出现超时失败和耗时久了

from hysteria.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.