[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-2006":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":16,"subscribersCount":16,"size":16,"stars1d":16,"stars7d":16,"stars30d":17,"stars90d":16,"forks30d":16,"starsTrendScore":16,"compositeScore":18,"rankGlobal":10,"rankLanguage":10,"license":19,"archived":20,"fork":20,"defaultBranch":21,"hasWiki":20,"hasPages":20,"topics":22,"createdAt":10,"pushedAt":10,"updatedAt":35,"readmeContent":36,"aiSummary":37,"trendingCount":16,"starSnapshotCount":16,"syncStatus":15,"lastSyncTime":38,"discoverSource":39},2006,"NRUP","nyarime\u002FNRUP","nyarime","🥤 NRUP - A reliable encrypted UDP transport protocol built on DTLS","",null,"Go",143,13,1,2,0,3,3.44,"Apache License 2.0",false,"main",[23,24,25,26,27,28,29,30,31,32,33,34],"ack","arq","bbr","dtls","fec","go","low-latency","protocol","quic","rtt","tunnel","udp","2026-06-12 02:00:35","# NRUP\n\n[![CI](https:\u002F\u002Fgithub.com\u002FNyarime\u002FNRUP\u002Factions\u002Fworkflows\u002Fci.yml\u002Fbadge.svg)](https:\u002F\u002Fgithub.com\u002FNyarime\u002FNRUP\u002Factions\u002Fworkflows\u002Fci.yml)\n[![Go Reference](https:\u002F\u002Fpkg.go.dev\u002Fbadge\u002Fgithub.com\u002Fnyarime\u002Fnrup.svg)](https:\u002F\u002Fpkg.go.dev\u002Fgithub.com\u002Fnyarime\u002Fnrup)\n\n基于 nDTLS 的可靠加密 UDP 传输协议。通过 FEC 前向纠错与 ARQ 选择性重传的双重机制，在丢包时实现零延迟恢复，极端情况下通过重传保证可靠交付。为高丢包、高延迟的跨国链路和受限网络环境设计。\n\n[English](README_EN.md)\n\n## 安装\n\n```bash\ngo get github.com\u002Fnyarime\u002Fnrup@v1.4.3\n```\n\n要求 Go 1.22+。\n\n\n## 三档模式\n\n| 模式 | Disguise | Cipher | 每包开销 | 场景 |\n|------|----------|--------|---------|------|\n| 公网过墙 | `anyconnect` | `auto` | 41B | 跨国网络、审查环境（默认） |\n| 专线加速 | `none` | `auto` | 28B | 有旁路监听但无 DPI |\n| 内网传输 | `none` | `none` | 0B | 纯可靠 UDP（LAN\u002F游戏） |\n\n三档均保留 FEC + ARQ + BBR 完整可靠传输。\n\n## 架构\n\n```\n应用层\n  ↓ Write(data)\n会话层 (连接管理、迁移、0-RTT恢复)\n  ↓\n可靠层 ─┬─ FEC (Reed-Solomon, 即时恢复)\n        ├─ ARQ (选择性重传, 超时兜底)\n        └─ 小包冗余 (\u003C256B 动态2-3份+去重)\n  ↓\n拥塞层 (BBR: Pacing + CWND + ProbeRTT)\n  ↓\n加密层 (nDTLS: AES-GCM \u002F ChaCha20 \u002F None)\n  ↓\n伪装层 ─┬─ AnyConnect DTLS (默认)\n        ├─ QUIC v1\n        └─ None (裸UDP)\n  ↓\nUDP\n```\n\n## 弱网实测\n\n| 场景 | 送达率 | 说明 |\n|------|--------|------|\n| 正常网络 | 100% | ✅ |\n| 1% 丢包 + 50ms | 100% | ✅ FEC 全恢复 |\n| 5% 丢包 + 100ms | 100% | ✅ FEC 全恢复 |\n| 10% 丢包 + 100ms | 100% | ✅ FEC + ARQ |\n| 20% 丢包 + 200ms | 100% | ✅ SACK + 动态冗余 |\n| 30% 丢包 + 200ms | 100% | ✅ FEC反馈闭环 |\n\n### v1.4.3 弱网优化\n\n- **SACK选择性重传**：只重传真正丢失的包（重传次数↓40-70%）\n- **FEC有效性反馈**：根据实际恢复率动态调整冗余\n- **EWMA平滑**：防止FEC参数震荡（α=0.3）\n- **连续丢包即时响应**：≥5个连续丢包立即提升FEC（不等周期）\n- **每次最多±2 parity变化**：防剧烈震荡\n\n### 极端丢包\n\n| 场景 | 握手成功率 | 最佳送达率 |\n|------|----------|----------|\n| 40% 丢包 + 200ms | 100% | 87% |\n| 50% 丢包 + 300ms | 100% | 77% |\n| 70% 丢包 + 500ms | 100% | 63% |\n\n## 快速开始\n\n```go\nimport \"github.com\u002Fnyarime\u002Fnrup\"\n\n\u002F\u002F 服务端\nlistener, _ := nrup.Listen(\":4000\", nrup.DefaultConfig())\nconn, _ := listener.Accept()\ndefer conn.Close()\n\nbuf := make([]byte, 4096)\nn, _ := conn.Read(buf)\nconn.Write(buf[:n])\n\n\u002F\u002F 客户端\nconn, _ := nrup.Dial(\"server:4000\", nrup.DefaultConfig())\ndefer conn.Close()\n\nconn.Write([]byte(\"hello\"))\nn, _ := conn.Read(buf)\n```\n\n## 0-RTT 会话恢复\n\n```go\n\u002F\u002F 首次连接\nconn, _ := nrup.Dial(addr, nrup.DefaultConfig())\nsessionID := conn.SessionID()\nconn.Close()\n\n\u002F\u002F 后续连接（0-RTT）\ncfg := nrup.DefaultConfig()\ncfg.ResumeID = sessionID\nconn, _ = nrup.Dial(addr, cfg)\n```\n\n## 配置\n\n```go\n\u002F\u002F 公网过墙（默认）\ncfg := nrup.DefaultConfig()\n\n\u002F\u002F 专线加速（加密无伪装）\ncfg := &nrup.Config{\n    Disguise: \"none\",\n    Cipher:   nrup.CipherAuto,\n}\n\n\u002F\u002F 内网传输（纯可靠UDP）\ncfg := &nrup.Config{\n    Disguise: \"none\",\n    Cipher:   nrup.CipherNone,\n}\n\n\u002F\u002F 完整配置\ncfg := &nrup.Config{\n    FECData:              8,\n    FECParity:            4,\n    MaxBandwidthMbps:     100,\n    Cipher:               nrup.CipherAuto,\n    Disguise:             \"anyconnect\",\n    DisguiseSNI:          \"example.com\",\n    SmallPacketThreshold: 256,\n}\n```\n\n## 认证模式\n\n```go\n\u002F\u002F PSK（默认）\ncfg := nrup.DefaultConfig()\n\n\u002F\u002F Ed25519 公钥签名\ncfg := &nrup.Config{\n    AuthMode:      \"ed25519\",\n    PrivateKey:    privKey,\n    PeerPublicKey: peerPub,\n}\n```\n\n## API\n\n| 方法 | 说明 |\n|------|------|\n| `nrup.Dial(addr, cfg)` | 连接服务端 |\n| `nrup.Listen(addr, cfg)` | 监听端口 |\n| `listener.Accept()` | 接受连接 |\n| `conn.Read(buf)` | 接收数据 |\n| `conn.Write(data)` | 发送数据（小包自动冗余） |\n| `conn.GetMetrics()` | 连接指标 |\n| `conn.Close()` | 关闭连接 |\n| `conn.CloseGraceful()` | 优雅关闭 |\n| `conn.SessionID()` | 会话标识（用于 0-RTT） |\n| `conn.Migrate(addr)` | 连接迁移 |\n| `nrup.NewMux(conn)` | 多路复用 |\n\n## 性能\n\n| 指标 | 数值 |\n|------|------|\n| nDTLS 吞吐 | 108,496 pps |\n| 端对端 | 4,089 pps |\n| FEC 编码 | 187 MB\u002Fs |\n| AES-256-GCM | 330 MB\u002Fs |\n| ChaCha20 | 379 MB\u002Fs |\n| BBR | 60ns\u002Fop, 零内存分配 |\n\n## 安全模型\n\n| 威胁 | 防护 |\n|------|------|\n| MITM | PSK + HMAC \u002F Ed25519 双向认证 |\n| 重放 | 64 位滑动窗口 + 0-RTT HMAC |\n| 密钥泄露 | X25519 前向保密 |\n| 流量识别 | AnyConnect \u002F QUIC 伪装 |\n| 密钥派生 | HKDF (RFC 5869) |\n| DoS | HelloVerifyRequest Cookie |\n\n## 与 TCP \u002F KCP \u002F QUIC 的区别\n\n|          | TCP    | KCP     | QUIC    | NRUP    |\n|----------|--------|---------|---------|---------|\n| 传输层    | TCP    | UDP     | UDP     | UDP     |\n| 加密      | TLS    | 无      | TLS 1.3 | nDTLS\u002FNone |\n| 丢包恢复  | 重传    | 重传    | 重传     | FEC+ARQ |\n| 拥塞控制  | CUBIC  | 自定义  | BBR     | BBR     |\n| 队头阻塞  | 有     | 无      | 部分    | 无      |\n| 连接迁移  | 无     | 无      | 有      | 有      |\n| 0-RTT    | 无     | 无      | 有      | 有      |\n| 流量伪装  | 无     | 无      | 无      | AnyConnect\u002FQUIC |\n| 无加密模式 | 无     | 有      | 无      | 有      |\n\n## 许可证\n\nApache License 2.0\n","NRUP 是一个基于 DTLS 的可靠加密 UDP 传输协议，旨在为高丢包、高延迟的跨国链路和受限网络环境提供高效的数据传输。其核心功能包括通过 FEC 前向纠错与 ARQ 选择性重传来实现零延迟恢复，以及在极端情况下通过重传来保证数据的可靠交付。此外，NRUP 支持多种模式配置，如公网过墙、专线加速和内网传输，并且具备 0-RTT 会话恢复能力，以适应不同场景下的需求。该项目使用 Go 语言开发，适合需要在不可靠网络条件下进行安全、快速数据传输的应用场景，例如跨国通信、游戏加速等。","2026-06-11 02:47:32","CREATED_QUERY"]