Releases: nyarime/NRUP
Releases · nyarime/NRUP
v1.5.2
v1.5.1
v1.5.0
v1.4.3
v1.4.2
v1.4.2 — FEC智能平滑 + 代码清理
FEC自适应优化
- EWMA平滑FEC有效性(α=0.3, 防震荡)
- 连续丢包≥5立即提升FEC(不等周期)
- 每次最多±2 parity变化
Metrics暴露
- ConnStats: FECDecodes/FECRecovered/FECEffectiveness/CurrentParity
- GetMetrics: 完整FEC+SACK数据
代码清理 (-326行)
- 删除4个未使用文件 + 5个死函数 + 2个死类型
- go vet零警告
弱网改进
- 20%丢包: 100%送达
- 30%丢包: 100%送达
go get github.com/nyarime/nrup@v1.4.2
v1.4.1
v1.4.1 — SACK选择性重传 + FEC闭环
SACK选择性重传
- 32位bitmap标记已收到的包
- 只重传真正丢失的包(非Go-Back-N)
- 每3包发一次SACK(可配置SACKInterval)
FEC有效性反馈
- 追踪FEC实际恢复率
- effectiveness >80% → 降低冗余(省带宽)
- effectiveness <30% → 提高冗余(加强保护)
- FEC+SACK协同:FEC恢复大部分,SACK补漏
效果
- 重传次数预计下降40-70%
- 带宽利用更合理(不盲目冗余)
- 零breaking change
go get github.com/nyarime/nrup@v1.4.1
NRUP v1.4.0
v1.4.0
- ClientHello双发 + 服务端跳过重复包
- 5档自适应冗余 (EWMA α=0.28)
- FEC大包自动分片
- SessionStore接口
- 三档模式 (anyconnect/none/CipherNone)
- 弱网: 30%→100%, 50%→97%
go get github.com/nyarime/nrup@v1.4.0
NRUP v1.3.0
v1.3.0
新增
- 5档自适应小包冗余 (<20%=2份, >20%=3, >35%=4, >50%=5)
- 大包自动分片 (>1024B拆分后FEC编码,不再需要StreamMode)
- StreamEncoder (流式FEC编码+Flush)
- SessionStore 接口 (可插入Redis持久化0-RTT)
修复
- 所有TCP代理流量现在有FEC保护 (之前需StreamMode绕过)
- Disguise='' 默认anyconnect (之前误走none模式)
弱网提升
| 场景 | v1.2.1 | v1.3.0 |
|---|---|---|
| 40% + 200ms | 87% | 97% |
go get github.com/nyarime/nrup@v1.3.0
NRUP v1.2.1
v1.2.1
三档模式
| 模式 | Disguise | Cipher | 每包开销 | 场景 |
|---|---|---|---|---|
| 公网过墙 | anyconnect | auto | 41B | 默认 |
| 专线加速 | none | auto | 28B | 加密无伪装 |
| 内网传输 | none | none | 0B | 纯可靠UDP |
FEC + ARQ + BBR 三档全部保留。
新增
CipherNone— 零加密模式(noopAEAD)Disguise="none"— 无DTLS record header- 三种组合覆盖全场景
使用
// 专线加速
cfg := &nrup.Config{Disguise: "none", Cipher: nrup.CipherAuto}
// 内网传输
cfg := &nrup.Config{Disguise: "none", Cipher: nrup.CipherNone}go get github.com/nyarime/nrup@v1.2.1
NRUP v1.2.0
v1.2.0
新增
- 0-RTT 会话恢复:首次握手后缓存 session(24h TTL),后续连接通过
Config.ResumeID跳过完整握手 - 防重放:HMAC(key, timestamp) + 5 分钟滑动窗口
- 自动降级:ticket 过期自动走完整握手
v1.1.0 → v1.2.0 完整变更
- v1.1.0: serverHandshake 迁移到 net.PacketConn(demux 兼容)、ServerHello 冗余双发、Ed25519 认证修复、CI + 文档
- v1.1.1: 握手重试 3→5 次(指数退避 500ms)、动态冗余(>35% 丢包发 3 份)
- v1.2.0: 0-RTT 会话恢复
弱网实测
| 场景 | 送达率 |
|---|---|
| 正常网络 | 100% |
| 1-10% 丢包 | 100% |
| 20% 丢包 + 200ms | 90% |
| 30% 丢包 + 200ms | 93% |
极端丢包(v1.1.1+)
| 场景 | 握手 | 送达 |
|---|---|---|
| 40% + 200ms | 100% | 87% |
| 50% + 300ms | 100% | 77% |
| 70% + 500ms | 100% | 63% |
0-RTT 使用
conn, _ := nrup.Dial(addr, nrup.DefaultConfig())
sessionID := conn.SessionID()
conn.Close()
cfg := nrup.DefaultConfig()
cfg.ResumeID = sessionID
conn, _ = nrup.Dial(addr, cfg) // 0-RTTgo get github.com/nyarime/nrup@v1.2.0