-
Notifications
You must be signed in to change notification settings - Fork 833
推荐设置(旧)和解释
./speederv2 -s -l0.0.0.0:4096 -r127.0.0.1:7777 -k "passwd" --mode 0 -f20:10
./speederv2 -c -l0.0.0.0:3333 -r44.55.66.77:4096 -k "passwd" --mode 0 -f20:10
里面的-f20:10
表示对每20个数据包发送10个冗余包,需要根据自己网络的丢包率调整。如果你实在不会测自己网络的丢包率,那就把参数调得大一些(比如-f15:15
、-f10:20
等),先保证使用起来没问题,再逐渐调小。
注:如果你不是极端专业的玩家,用这个设置玩游戏也可以。多出几毫秒延迟,基本上不可感知。
提醒:即使你是土豪,即使你的本地宽带有200M、VPS流量不限量;请不要使用过高的冗余度,这样除了对你自己没好处以外,还会挤占国际出口带宽,造成网络拥堵。
首先必须说明,程序自带默认的-q 200
和--timeout 8
参数。
--mode 0 -f20:10
参数的完整形式是--mode 0 -f20:10 -q 200 --timeout 8
。含义是: fec编码器最多积攒8ms的数据,最多积攒200个数据包。之后,fec编码器会把搜集到的数据先合并再拆分成20个等长的数据包,然后发送10个冗余包。得益于reed solomon算法,只要这30个包中的任意20个被收到,就可以完整恢复出数据。
另外,程序还自带默认的参数--mtu 1250
,编码器会考虑mtu,如果再积攒数据会导致拆分后的数据包超过1250(可以自己调整),那么编码器就不会继续积攒数据。而是立即开始做fec。
你可以尝试调整--timeout
选项。调高可以使FEC编码器能够积攒更多的包,更有效率;调低可以降低延迟。-q
选项也可以调整,不过一般没必要调整。
除非你是开发者,建议不要调整--mtu
选项。
如果你使用了--mode 1
模式,fec编码器不会对数据包进行任何拆分,所以会有mtu问题,不推荐新手使用。
--mode 1 -f20:10
参数的完整形式是--mode 1 -f20:10 --timeout 8
。意思是,编码器先搜集20个数据包,然后对这20个数据包发送10个冗余包。如果在8毫秒内没能积攒到20个数据包,也会立即做fec。 如果有数据包超过mtu的长度,fec编码器会打一条warning日志,但是不会发生任何拆分。
--mode 1
模式有一个优化,对于-f20:10
的前20个数据包不必等做完fec以后发送,而是可以立即发送,只要数据包不丢,就不会引入延迟。除了mtu问题以外,还有一个缺点,就是不会把数据包切分到等长,这样在做FEC时需要把数据包对齐到最大长度(用0填充),生成的冗余包会比--mode 0
模式长一些,所以更耗流量。
-q
参数在--mode 1
模式下无效。
你也可以尝试下面的选项。
./speederv2 -s -l0.0.0.0:4096 -r127.0.0.1:7777 -k "passwd" --mode 0 -f20:10 -i10
./speederv2 -c -l0.0.0.0:3333 -r44.55.66.77:4096 -k "passwd" --mode 0 -f20:10 -i10
-i10
的意思是把 -f20:10
的一共30个包均匀分散到10毫秒中发送。可以抵抗网络的突发性丢包(一丢丢一片那种),但是会牺牲一些延迟(小于10毫秒)。你还可以尝试-i5
-i20
等。
如果-f20:10
的冗余度不够,可以尝试调高。如果无论怎么改参数效果都不理想,可能是你的运营商对udp有限速,可以尝试串联udp2raw。
新的推荐参数。以前推荐的参数需要考虑MTU问题,而很多人对MTU没有概念。所以,现在推荐一个新的参数,免去考虑MTU的烦恼。
玩游戏的推荐设置:
./speederv2 -s -l0.0.0.0:4096 -r127.0.0.1:7777 -k "passwd" --mode 0 -f2:4 -q1
./speederv2 -c -l0.0.0.0:3333 -r44.55.66.77:4096 -k "passwd" --mode 0 -f2:4 -q1
-f2:4
表示对每2个数据包发送4个冗余包。也就是3倍发包。里面的2不要改,4可以自己调整(比如改成2/3/5之类的数字,-f2:2
就是2倍发包,-f2:3
是2.5倍发包)。
提醒:多倍发包只对游戏有意义,因为不会引入额外延迟。 对于视频和下载,FEC参数-f20:10
用1.5倍的流量就可以达到好几倍发包的效果。 所以不要用多倍发包来看视频和下载,害人又害己。
-q1
是--mode 0
模式下针对游戏的一个特殊设置,意思是,只要收到1个包就开始做FEC,可以防止fec编码器试图积攒数据包。不会引入延迟。
--mode 0 -q1 -f2:4
的意思是,只要收到1个数据包就立即开始做FEC,首先把这1个数据包拆成2个,然后再发送4个冗余包。得益于reed solomon算法,只要这6个包中的任意2个被收到,就可以完整恢复出数据。
另外,程序里有优化,并不是所有数据包都会被拆成2个;如果程序判断拆包不合适(overhead过大),也可能会不拆。
-q1
只适合配合-f2:xxx
,不要滥用此参数。
也可尝试如下设置:
./speederv2 -s -l0.0.0.0:4096 -r127.0.0.1:7777 -k "passwd" --mode 0 -f2:4 --timeout 1
./speederv2 -c -l0.0.0.0:3333 -r44.55.66.77:4096 -k "passwd" --mode 0 -f2:4 --timeout 1
前面说的-q1
的意思是收到一个包就开始做FEC,--timeout 1
的意思是积攒1毫秒的数据包以后开始做FEC。--timeout 1
更高效一些(可以把几个短包合并到一起,或者把短包合并到长包里捎带发送),但是会牺牲一毫秒的延迟。通常--timeout
的值越高,效率越高,但是延迟也越高。
另外你也可以尝试 -q2
、--timeout 2
等,甚至把-q
和--timeout
一起用,比如-q5 --timeout 3
的意思是,最多积攒5个数据包,最多积攒3毫秒的数据。
如果指定了-q1
选项,--timeout
的值就无效了,不必再设置--timeout
。
你也可以尝试加前面提到的-i
选项。还可以尝试串联udp2raw。