UDPspeeder

wangyu-MIT活跃维护

用前向纠错(FEC)在高延迟丢包链路上改善网络质量,为 TCP/UDP/ICMP 等所有流量建立隧道,降低丢包带来的卡顿。

A Tunnel which Improves your Network Quality on a High-latency Lossy Link by using Forward Error Correction, possible for All Traffics(TCP/UDP/ICMP)

20230206.0发布于 2023-02-07 13:49 UTC5,196star +1 / 7 天855fork同步于 2026-11-10 17:37 UTC

怎么上手

由 README 提炼,执行前请确认
从 https://github.com/wangyu-/UDPspeeder/releases 下载二进制发布包
服务端:./speederv2 -s -l0.0.0.0:4096 -r 127.0.0.1:7777 -f20:10 -k "passwd"
客户端:./speederv2 -c -l0.0.0.0:3333 -r44.55.66.77:4096 -f20:10 -k "passwd"
硬件要求按 README 说明

README 未说明显存或 GPU 要求;支持 Linux 主机,包括桌面 Linux、Android 手机/平板、OpenWRT 路由器和树莓派;Windows 和 MacOS 需在提供的虚拟机镜像中运行。

下载:源码 zip·GitHub Releases(安装包)本站不镜像安装包

项目说明

由 README 自动翻译提炼

用前向纠错在高延迟丢包链路上提升网络质量,可单独加速 UDP 或配合 UDP VPN 加速全部流量

用前向纠错(FEC)在高延迟丢包链路上改善网络质量,为 TCP/UDP/ICMP 等所有流量建立隧道,降低丢包带来的卡顿。

核心能力

  • 用 Reed-Solomon 前向纠错降低丢包率,代价是额外带宽
  • 配合 OpenVPN/L2TP/ShadowVPN 等 UDP VPN 可加速 TCP/UDP/ICMP 全部流量
  • 通过 -f x:y 设置每 x 个原始包发 y 个冗余包
  • 支持 --fifo 命名管道动态调整 fec、mtu、timeout 等参数
  • 提供 mode 0/1 两种 FEC 模式,mode 0 省带宽且无 MTU 问题

容易踩的坑

单独使用时只加速 UDP 连接,要加速 TCP/ICMP 需再配合 UDP 类 VPN;-k 只是简单 XOR 加密,两端必须设置相同;mode 1 不拆分数据包,需要自行关注 MTU 是否超限。

内容由模型根据 README 生成,可能不完整或不准确,以官方文档为准。看原文 README

最近发版

5 个版本20230206.0
  1. 20230206.0最新正式版2023-02-07 · 2023-02-07 13:49 UTC

    Fix bug in https://github.com/wangyu-/UDPspeeder/issues/290. Add macOS m1/m2 build (speederv2_mac_m1)

  2. 20210116.02021-01-16 · 2021-01-16 19:13 UTC
    查看更新说明

    Added a warning when you send huge packets to UDPspeeder and packets are being truncated.

    (to fix the problem/confusion mentioned in https://github.com/wangyu-/UDPspeeder/issues/259 )

  3. 20200818.12020-08-18 · 2020-08-18 07:59 UTC
    查看更新说明

    Temporary fix for Issue 262.

  4. 20200714.02020-07-14 · 2020-07-14 05:43 UTC
    查看更新说明
    1. fix --key option (the longer form of -k) not working: https://github.com/wangyu-/UDPspeeder/issues/244

    2. merged pull request: https://github.com/wangyu-/UDPspeeder/pull/227. new options --out-addr --out-interface.

  5. 20190121.02019-01-21 · 2019-01-21 11:53 UTC
    查看更新说明

    Suppressed a warning log mentioned in #171

用户点评

登录用户的真实使用记录,可按版本和硬件筛选
共 0 条

    还没有人点评。第一个说出真实体验的人最有价值。

    README 原文

    未翻译

    UDPspeeder

    A Tunnel which Improves your Network Quality on a High-latency Lossy Link by using Forward Error Correction.

    When used alone, UDPspeeder improves only UDP connection. Nevertheless, if you used UDPspeeder + any UDP-based VPN together, you can improve any traffic(include TCP/UDP/ICMP), currently OpenVPN/L2TP/ShadowVPN are confirmed to be supported。

    or

    image_vpn

    Assume your local network to your server is lossy. Just establish a VPN connection to your server with UDPspeeder + any UDP-based VPN, access your server via this VPN connection, then your connection quality will be significantly improved. With well-tuned parameters , you can easily reduce IP or UDP/ICMP packet-loss-rate to less than 0.01% . Besides reducing packet-loss-rate, UDPspeeder can also significantly improve your TCP latency and TCP single-thread download speed.

    UDPspeeder Wiki

    简体中文

    Efficacy

    tested on a link with 100ms latency and 10% packet loss at both direction

    Ping Packet Loss

    SCP Copy Speed

    Supported Platforms

    Linux host (including desktop Linux,Android phone/tablet, OpenWRT router, or Raspberry PI).

    For Windows and MacOS You can run UDPspeeder inside this 7.5mb virtual machine image.

    How does it work

    UDPspeeder uses FEC(Forward Error Correction) to reduce packet loss rate, at the cost of additional bandwidth. The algorithm for FEC is called Reed-Solomon.

    image0

    Reed-Solomon

    In coding theory, the Reed–Solomon code belongs to the class of non-binary cyclic error-correcting codes. The Reed–Solomon code is based on univariate polynomials over finite fields.

    It is able to detect and correct multiple symbol errors. By adding t check symbols to the data, a Reed–Solomon code can detect any combination of up to t erroneous symbols, or correct up to ⌊t/2⌋ symbols. As an erasure code, it can correct up to t known erasures, or it can detect and correct combinations of errors and erasures. Reed–Solomon codes are also suitable as multiple-burst bit-error correcting codes, since a sequence of b + 1 consecutive bit errors can affect at most two symbols of size b. The choice of t is up to the designer of the code, and may be selected within wide limits.

    Check wikipedia for more info, https://en.wikipedia.org/wiki/Reed–Solomon_error_correction

    Getting Started

    Installing

    Download binary release from https://github.com/wangyu-/UDPspeeder/releases

    Running (improves UDP traffic only)

    Assume your server ip is 44.55.66.77, you have a service listening on udp port 7777.

    # Run at server side:
    ./speederv2 -s -l0.0.0.0:4096 -r 127.0.0.1:7777  -f20:10 -k "passwd"
    
    # Run at client side
    ./speederv2 -c -l0.0.0.0:3333  -r44.55.66.77:4096 -f20:10 -k "passwd"
    

    Now connecting to UDP port 3333 at the client side is equivalent to connecting to port 7777 at the server side, and the connection has been boosted by UDPspeeder.

    Note

    -f20:10 means sending 10 redundant packets for every 20 original packets.

    -k enables simple XOR encryption

    Improves all traffic with OpenVPN + UDPspeeder

    See UDPspeeder + openvpn config guide.

    Advanced Topic

    Full Options

    UDPspeeder V2
    git version: 3e248b414c    build date: Aug  5 2018 21:59:52
    repository: https://github.com/wangyu-/UDPspeeder
    
    usage:
        run as client: ./this_program -c -l local_listen_ip:local_port -r server_ip:server_port  [options]
        run as server: ./this_program -s -l server_listen_ip:server_port -r remote_ip:remote_port  [options]
    
    common options, must be same on both sides:
        -k,--key              <string>        key for simple xor encryption. if not set, xor is disabled
    main options:
        -f,--fec              x:y             forward error correction, send y redundant packets for every x packets
        --timeout             <number>        how long could a packet be held in queue before doing fec, unit: ms, default: 8ms
        --report              <number>        turn on send/recv report, and set a period for reporting, unit: s
    advanced options:
        --mode                <number>        fec-mode,available values: 0,1; mode 0(default) costs less bandwidth,no mtu problem.
                                              mode 1 usually introduces less latency, but you have to care about mtu.
        --mtu                 <number>        mtu. for mode 0, the program will split packet to segment smaller than mtu value.
                                              for mode 1, no packet will be split, the program just check if the mtu is exceed.
                                              default value: 1250. you typically shouldn't change this value.
        -q,--queue-len        <number>        fec queue len, only for mode 0, fec will be performed immediately after queue is full.
                                              default value: 200. 
        -j,--jitter           <number>        simulated jitter. randomly delay first packet for 0~<number> ms, default value: 0.
                                              do not use if you dont know what it means.
        -i,--interval         <number>        scatter each fec group to a interval of <number> ms, to protect burst packet loss.
                                              default value: 0. do not use if you dont know what it means.
        -f,--fec              x1:y1,x2:y2,..  similar to -f/--fec above,fine-grained fec parameters,may help save bandwidth.
                                              example: "-f 1:3,2:4,10:6,20:10". check repo for details
        --random-drop         <number>        simulate packet loss, unit: 0.01%. default value: 0.
        --disable-obscure     <number>        disable obscure, to save a bit bandwidth and cpu.
    developer options:
        --fifo                <string>        use a fifo(named pipe) for sending commands to the running program, so that you
                                              can change fec encode parameters dynamically, check readme.md in repository for
                                              supported commands.
        -j ,--jitter          jmin:jmax       similar to -j above, but create jitter randomly between jmin and jmax
        -i,--interval         imin:imax       similar to -i above, but scatter randomly between imin and imax
        --decode-buf          <number>        size of buffer of fec decoder,u nit: packet, default: 2000
        --fix-latency         <number>        try to stabilize latency, only for mode 0
        --delay-capacity      <number>        max number of delayed packets
        --disable-fec         <number>        completely disable fec, turn the program into a normal udp tunnel
        --sock-buf            <number>        buf size for socket, >=10 and <=10240, unit: kbyte, default: 1024
    log and help options:
        --log-level           <number>        0: never    1: fatal   2: error   3: warn 
                                              4: info (default)      5: debug   6: trace
        --log-position                        enable file name, function name, line number in log
        --disable-color                       disable log color
        -h,--help                             print this help message
    
    
    --fifo option

    Use a fifo(named pipe) for sending commands to the running program. For example --fifo fifo.file, you can use following commands to change parameters dynamically:

    echo fec 19:9 > fifo.file
    echo mtu 1100 > fifo.file
    echo timeout 5 > fifo.file
    echo queue-len 100 > fifo.file
    echo mode 0 > fifo.file
    

    wiki

    Check wiki for more info:

    https://github.com/wangyu-/UDPspeeder/wiki

    Related repo

    You can also try tinyfecVPN, a lightweight high-performance VPN with UDPspeeder's function built-in, repo:

    https://github.com/wangyu-/tinyfecVPN

    You can use udp2raw with UDPspeeder together to get better speed on some ISP with UDP QoS(UDP throttling), repo:

    https://github.com/wangyu-/udp2raw-tunnel