今日在github上发现三个不错的工具,此篇文章先介绍UDP加速工具。
此工具是一个Client->Server结构的,经过此工具处理的数据包可以有效降低UDP的丢包率,原理是采用了 FEC算法。缺点就是流量增加了,用1.5倍的流量,就可以把10%的丢包率降低到万分之一以下。这种算法应用在对战平台里打DOTA和魔兽争霸非常不错。
FEC :是一种前向性纠错技术,发送方将要发送的数据加上一定的冗余纠错码一起发送,接收方则根据纠错码对接收到的数据进行差错检测,如发现差错,则由接收方进行纠错。FEC算法大量应用与视频传输中。
原理官方文档已经介绍的很清楚了,请大家参考下面的文档:
https://github.com/wangyu-/UDPspeeder/blob/branch_libev/doc/README.zh-cn.md
编译的时候会报错:
g++ -o speederv2 -I. main.cpp log.cpp common.cpp lib/fec.cpp lib/rs.cpp packet.cpp delay_manager.cpp fd_manager.cpp connection.cpp fec_manager.cpp misc.cpp tunnel_client.cpp tunnel_server.cpp my_ev.cpp -isystem libev -std=c++11 -Wall -Wextra -Wno-unused-variable -Wno-unused-parameter -Wno-missing-field-initializers -lrt -ggdb -static -O2
/usr/bin/ld: cannot find -lrt
/usr/bin/ld: cannot find -lstdc++
/usr/bin/ld: cannot find -lm
/usr/bin/ld: cannot find -lc
collect2: error: ld returned 1 exit status
make: *** [makefile:29: all] Error 1
原因是 有 -static 参数,修改makefile文件, 把其中的 -static 参数去掉即可编译成功。
测试:
./speederv2 -s -l 0.0.0.0:4096 -r 127.0.0.1:7777 -f 20:10 -k "123456"
./speederv2 -c -l 0.0.0.0:3333 -r 172.19.112.178:4096 -f 20:10 -k "123456"
接下来就是要模拟 发送UDP包到Client的3333端口, Client会把UDP包转到服务器的4096端口上, Server处理后在发送给7777端口
在本机可以执行 echo "hello" > /dev/udp/127.0.0.1/3333 模拟UDP包的发送,如果不是本机,则需要使用socat进行端口转发,此工具支持tcp/udp数据转发。
socat项目
socat项目地址:http://www.dest-unreach.org/socat/