透過使用前向糾錯來提高高延遲有損鏈路上的網路品質的隧道。
單獨使用時,UDPspeeder 僅改進 UDP 連線。不過,如果您同時使用UDPspeeder +任何基於UDP的VPN,您可以改善任何流量(包括TCP/UDP/ICMP),目前已確認支援OpenVPN/L2TP/ShadowVPN。
或者
假設您的伺服器的本地網路有損。只需使用 UDPspeeder + 任何基於 UDP 的 VPN 與您的伺服器建立 VPN 連接,透過此 VPN 連接存取您的伺服器,那麼您的連接品質將顯著提高。透過精心調整的參數,您可以輕鬆地將 IP 或 UDP/ICMP 丟包率降低到 0.01% 以下。除了降低丟包率之外,UDPspeeder 還可以顯著提高 TCP 延遲和 TCP 單執行緒下載速度。
UDPspeeder 維基
簡體中文
在具有 100 毫秒延遲和雙向 10% 資料包遺失的鏈路上進行測試
Linux主機(包括桌上型Linux、Android手機/平板電腦、OpenWRT路由器或Raspberry PI)。
對於 Windows 和 MacOS 您可以在這個 7.5mb 虛擬機器映像中執行 UDPspeeder。
UDPspeeder 使用 FEC(前向糾錯)來降低丟包率,但代價是額外的頻寬。 FEC 的演算法稱為 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.
檢查維基百科以獲取更多信息,https://en.wikipedia.org/wiki/Reed–Solomon_error_ Correction
從 https://github.com/wangyu-/UDPspeeder/releases 下載二進位版本
假設你的伺服器ip是44.55.66.77,你有一個服務監聽udp埠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 "
現在客戶端連接UDP端口3333相當於連接伺服器端7777端口,並且連接已經透過UDPspeeder增強了。
-f20:10
表示每20個原始資料包發送10個冗餘資料包。
-k
啟用簡單的 XOR 加密
請參閱 UDPspeeder + openvpn 設定指南。
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 shouldnt 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,.. similiar 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 similiar to -j above, but create jitter randomly between jmin and jmax
-i,--interval imin:imax similiar 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
選項使用 fifo(命名管道)向正在執行的程式發送命令。例如--fifo fifo.file
,您可以使用下列指令動態變更參數:
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
檢查維基以獲取更多資訊:
https://github.com/wangyu-/UDPspeeder/wiki
您也可以嘗試tinyfecVPN,一個內建UDPspeeder功能的輕量級高效能VPN,repo:
https://github.com/wangyu-/tinyfecVPN
您可以將 udp2raw 與 UDPspeeder 一起使用,以在某些具有 UDP QoS(UDP 節流)的 ISP 上獲得更好的速度,repo:
https://github.com/wangyu-/udp2raw-tunnel