跳转到主要内容

使用 UDP/KCP 连接 NPS

在特定网络中用 KCP 替代 TCP 承载 NPC 与 NPS 的桥接连接

KCP 使用 UDP 承载 NPC 与 NPS 之间的桥接连接。在低丢包、低抖动且 UDP 畅通的专线或内网中,它可能降低部分交互延迟;公网、移动网络或受限网络不一定更快。

服务端配置

在 nps.conf 中设置并重启 NPS:

bridge_type=kcp
bridge_port=8024

bridge_port 此时是 UDP 端口。需要同时修改云安全组、主机防火墙和容器端口发布,例如 Docker 使用 8024:8024/udp。

客户端配置

无配置文件模式:

./npc -server=nps.example.com:8024 -vkey=客户端验证密钥 -type=kcp

配置文件模式:

[common]
server_addr=nps.example.com:8024
vkey=客户端验证密钥
conn_type=kcp

两端协议必须一致。服务端切换后,所有 NPC 都必须改为 KCP;TCP NPC 无法连接 KCP 监听。

不兼容与排障

  • KCP 不能使用基于 TCP 的端口复用 。
  • TLS 桥接监听只用于 TCP,不能叠加到 KCP。
  • NPC 的 proxy_url 只用于 TCP 代理连接,不解决 UDP/KCP 被阻断的问题。
  • 某些运营商、企业防火墙和云平台会限制 UDP,NAT 映射也可能更快失效。

切换前先从 NPC 所在网络测试服务端 UDP 可达,并保留回滚到 TCP 的维护窗口。上线后比较实际业务延迟、丢包、CPU 和重连次数;若日志持续出现 ping timeout,优先恢复 TCP,再排查 UDP 路径和 MTU。