Um túnel que melhora a qualidade da rede em um link com perdas de alta latência usando correção de erros de encaminhamento.
Quando usado sozinho, o UDPspeeder melhora apenas a conexão UDP. No entanto, se você usou UDPspeeder + qualquer VPN baseada em UDP juntos, você pode melhorar qualquer tráfego (incluindo TCP/UDP/ICMP), atualmente OpenVPN/L2TP/ShadowVPN são suportados。
ou
Suponha que a rede local do seu servidor esteja com perdas. Basta estabelecer uma conexão VPN ao seu servidor com UDPspeeder + qualquer VPN baseada em UDP, acessar seu servidor através desta conexão VPN e a qualidade da sua conexão será significativamente melhorada. Com parâmetros bem ajustados, você pode facilmente reduzir a taxa de perda de pacotes IP ou UDP/ICMP para menos de 0,01%. Além de reduzir a taxa de perda de pacotes, o UDPspeeder também pode melhorar significativamente a latência do TCP e a velocidade de download do TCP de thread único.
Wiki UDPspeeder
简体中文
testado em um link com latência de 100 ms e 10% de perda de pacotes em ambas as direções
Host Linux (incluindo Linux para desktop, telefone/tablet Android, roteador OpenWRT ou Raspberry PI).
Para Windows e MacOS Você pode executar o UDPspeeder dentro desta imagem de máquina virtual de 7,5 MB.
O UDPspeeder usa FEC (Forward Error Correction) para reduzir a taxa de perda de pacotes, ao custo de largura de banda adicional. O algoritmo para FEC é chamado 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.
Verifique a Wikipedia para mais informações, https://en.wikipedia.org/wiki/Reed–Solomon_error_correction
Baixe a versão binária em https://github.com/wangyu-/UDPspeeder/releases
Suponha que o IP do seu servidor seja 44.55.66.77, você tem um serviço escutando na porta 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 "
Agora conectar-se à porta UDP 3333 no lado do cliente é equivalente a conectar-se à porta 7777 no lado do servidor, e a conexão foi reforçada pelo UDPspeeder.
-f20:10
significa enviar 10 pacotes redundantes para cada 20 pacotes originais.
-k
permite criptografia XOR simples
Consulte o guia de configuração 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
Use um fifo (pipe nomeado) para enviar comandos ao programa em execução. Por exemplo --fifo fifo.file
, você pode usar os seguintes comandos para alterar os parâmetros dinamicamente:
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
Verifique o wiki para mais informações:
https://github.com/wangyu-/UDPspeeder/wiki
Você também pode experimentar o tinyfecVPN, uma VPN leve e de alto desempenho com a função UDPspeeder integrada, repositório:
https://github.com/wangyu-/tinyfecVPN
Você pode usar udp2raw com UDPspeeder juntos para obter melhor velocidade em algum ISP com UDP QoS (aceleração de UDP), repositório:
https://github.com/wangyu-/udp2raw-tunnel