|
|
|
# 使用经验
|
|
|
|
|
|
|
|
### 在FEC和多倍发包之间如何选择
|
|
|
|
## 在FEC和多倍发包之间如何选择
|
|
|
|
|
|
|
|
对于游戏,游戏的流量本身不大,延迟很重要,多倍发包是最佳解决方案,多倍发包不会引入额外的延迟。FEC编码器需要先积攒一些数据,才可以做FEC,延迟无法避免;对于多倍发包,没有这个问题,所以没有额外延迟。
|
|
|
|
|
| ... | ... | @@ -10,7 +8,7 @@ |
|
|
|
|
|
|
|
只有V2版才支持FEC;V1和V2版都支持多倍发包。 下文里除了有特殊说明,讲的都是V2版。
|
|
|
|
|
|
|
|
### MTU问题
|
|
|
|
## MTU问题
|
|
|
|
|
|
|
|
如果你的log里报MTU的问题,而你又不知道在哪里调。建议就用UDPspeederV2的`--mode 0`模式,可以杜绝MTU问题。
|
|
|
|
|
| ... | ... | @@ -18,7 +16,7 @@ |
|
|
|
|
|
|
|
x>=2是唯一的注意事项,一定要注意。
|
|
|
|
|
|
|
|
### <del>V2版如何多倍发包</del>(不再推荐,仅供参考,请看下文的新的方式)
|
|
|
|
## <del>V2版如何多倍发包</del>(不再推荐,仅供参考,请看下文的新的方式)
|
|
|
|
|
|
|
|
只要在设置-f参数时把x设置为1,fec算法就退化为多倍发包了。例如-f1:1,表示2倍发包,-f1:2表示3倍发包,以此类推。另外建议加上"--mode 1"参数,可以获得更低的延迟。
|
|
|
|
|
| ... | ... | @@ -35,7 +33,7 @@ x>=2是唯一的注意事项,一定要注意。 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### V2版如何多倍发包(新);玩游戏的推荐设置
|
|
|
|
## V2版如何多倍发包(新);玩游戏的推荐设置
|
|
|
|
|
|
|
|
新的推荐参数。旧的参数需要考虑MTU问题,而很多人对MTU没有概念。所以,现在推荐一个新的参数,免去考虑MTU的烦恼。
|
|
|
|
|
| ... | ... | @@ -52,7 +50,7 @@ x>=2是唯一的注意事项,一定要注意。 |
|
|
|
|
|
|
|
提醒:多倍发包只对游戏有意义,因为不会引入额外延迟。 FEC参数`-f20:10`用1.5倍的流量就可以达到好几倍发包的效果。 所以不要用多倍发包来看视频和下载,害人又害己。
|
|
|
|
|
|
|
|
### 非游戏场景的推荐设置
|
|
|
|
## 非游戏场景的推荐设置
|
|
|
|
|
|
|
|
```
|
|
|
|
./speederv2 -s -l0.0.0.0:4096 -r127.0.0.1:7777 -f20:10 -k "passwd" --mode 0
|
| ... | ... | @@ -62,14 +60,14 @@ x>=2是唯一的注意事项,一定要注意。 |
|
|
|
|
|
|
|
注:如果你不是极端专业的玩家,用这个设置玩游戏也可以。多出几毫秒延迟,基本上不可感知。
|
|
|
|
|
|
|
|
### `-f`参数和丢包的关系;是否发包倍数越多效果就越好?
|
|
|
|
## `-f`参数和丢包的关系;是否发包倍数越多效果就越好?
|
|
|
|
比如`-f20:10`,表示对每20个原始包发送10个冗余包,流量消耗1.5倍。这样,只要30个包中有20个到达,数据就可以被完全恢复。
|
|
|
|
|
|
|
|
比如`-f1:2`,表示对每1个原始包发送2个冗余包,也就是3倍发包,流量消耗3倍。这样,只要3个包中有1个包到达,数据就可以被完全恢复。
|
|
|
|
|
|
|
|
1.5倍流量的效果是否差于3倍流量呢? 要做简单的概率计算就可以知道,一般情况下`30个包中有20个到达`的概率远高于`3个包中有1个包到达`的概率。比如在丢包率10%的情况下,`30个包中有20个到达`的概率是 99.99% ,而3个包中有1到达的概率只有99.9%, 所以在这个例子中1.5倍流量的效果远好于3倍流量(丢包率低10倍)。所以不要迷信于多倍发包,并不是消耗的流量倍数更多效果就一定更好。多倍发包的意义基本只在于可以省几毫秒的延迟,只对游戏有用。 对于下载和看视频,FEC不但更省流量,效果也更好。
|
|
|
|
|
|
|
|
### 根据网络丢包合理设置FEC参数
|
|
|
|
## 根据网络丢包合理设置FEC参数
|
|
|
|
|
|
|
|
默认的FEC参数为-f20:10,对每20个包,额外发送10个冗余包,也就是1.5倍发包。已经可以适应绝大多数的网络情况了,对于10%的网络丢包,可以降低到0.01%以下;对于20%的网络丢包,可以降低到2.5%。
|
|
|
|
|
| ... | ... | @@ -79,7 +77,7 @@ x>=2是唯一的注意事项,一定要注意。 |
|
|
|
|
|
|
|
如果你实在不会配,那么也可以用回V1版。
|
|
|
|
|
|
|
|
### 如何测试网络本身的丢包率
|
|
|
|
## 如何测试网络本身的丢包率
|
|
|
|
|
|
|
|
比如你配置好了UDPspeeder+OpenVPN,但是不知道网络本身的丢包情况。有两种方法:
|
|
|
|
|
| ... | ... | @@ -93,7 +91,7 @@ x>=2是唯一的注意事项,一定要注意。 |
|
|
|
###### NOTE2
|
|
|
|
不要用iperf3来测UDP, 有BUG,结果很离谱。
|
|
|
|
|
|
|
|
### 如何根据`--report 10`的结果计算丢包率
|
|
|
|
## 如何根据`--report 10`的结果计算丢包率
|
|
|
|
|
|
|
|
client端的 “client-->server:(original......)(fec:xxx pkt:aaa byte)”,里面的xxx表示从client到server发送了xxx个数据包。
|
|
|
|
|
| ... | ... | @@ -103,7 +101,7 @@ server端的 “client-->server:(original......)(fec:yyy pkt:bbb byte)”,里 |
|
|
|
|
|
|
|
以上方法计算出的丢包率是网络本身的丢包率。如果你用original那一列的数据计算,计算结果是被FEC纠正以后的丢包率。
|
|
|
|
|
|
|
|
### 根据CPU处理能力来调整FEC参数
|
|
|
|
## 根据CPU处理能力来调整FEC参数
|
|
|
|
|
|
|
|
FEC算法很吃CPU,初次使用建议关注UDPspeeder的CPU占用。如果CPU被打满,可以在冗余度不变的情况下把FEC分组大小调小,否则的话效果可能很差。
|
|
|
|
|
| ... | ... | @@ -111,24 +109,24 @@ FEC算法很吃CPU,初次使用建议关注UDPspeeder的CPU占用。如果CPU |
|
|
|
|
|
|
|
另外,fec分组大小不宜过大,否则不但很耗CPU,还有其他副作用,建议x+y<50。
|
|
|
|
|
|
|
|
### 改变FEC参数而不断线
|
|
|
|
## 改变FEC参数而不断线
|
|
|
|
|
|
|
|
`--fifo`选项可以在运行时改变FEC参数,无需重启程序,也不会断线。如果你在使用过程中发现网络丢包突然变高,可以动态地把冗余度调大;反之也一样,如果网络变好了,把冗余度调小节省流量。一切都是无缝进行,不会断线,也不会因为改FEC参数导致额外的丢包。
|
|
|
|
|
|
|
|
### 为什么使用之后效果反而变差了?
|
|
|
|
## 为什么使用之后效果反而变差了?
|
|
|
|
|
|
|
|
有可能是你用了`--mode 0`参数,而又没调好参数。(如果你的网络丢的包比FEC额外发的包还多,那`mode 0`模式就无法恢复出数据了)
|
|
|
|
|
|
|
|
如果你使用的是UDPspeeder+VPN的方式,如果你没有使用`--mode 0`,而确实效果变差了,那很可能是因为你的运营商对UDP有限制。一般看视频和下载都是TCP流量,而用UDPspeeder+VPN中转后流量变成了UDP流量,如果运营商对UDP做了限制,就可能导致效果比不用还差。用udp2raw可以解决,udp2raw: https://github.com/wangyu-/udp2raw-tunnel
|
|
|
|
|
|
|
|
|
|
|
|
### UDPspeeder和BBR/锐速配合
|
|
|
|
## UDPspeeder和BBR/锐速配合
|
|
|
|
|
|
|
|
UDPspeeder和BBR/锐速可以配合使用,UDPspeeder工作在IP层负责降低丢包率,BBR/锐速工作在TCP层负责优化拥塞和重传。这种情况下,可以调低UDPspeeder的冗余度,能把丢包率降低到5%以内就可以了,剩下的交给BBR/锐速解决,这样预计可以节省一些流量。如果是UDPspeeder跟Linux默认的Cubic一起用,最少也要把丢包率降低到1%以下才能流畅使用TCP。
|
|
|
|
|
|
|
|
对下文的`UDPspeeder + openvpn`和`UDPspeeder + openvpn + $***`方法有效。不过有一点区别,具体见下文。
|
|
|
|
|
|
|
|
### UDPspeeder和Kcptun配合
|
|
|
|
## UDPspeeder和Kcptun配合
|
|
|
|
|
|
|
|
UDPspeeder和Kcptun配合,UDPspeeder和Kcptun可以并联也可以串联。
|
|
|
|
|
| ... | ... | |
| ... | ... | |