From adb3a8890f2f993604941ceae6510c3286e6f9a2 Mon Sep 17 00:00:00 2001 From: wangyu- Date: Thu, 19 Oct 2017 20:17:26 -0700 Subject: [PATCH 01/43] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 2ec037e..801f0cc 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ or ![image_vpn](/images/en/udpspeeder+openvpn3.PNG) -[简体中文](/doc/README.md) +[简体中文](/doc/README.zh-cn.md) # Efficacy tested on a link with 100ms latency and 10% packet loss at both direction From 87972b880103cc06c83936fc646a7a097ee39a8d Mon Sep 17 00:00:00 2001 From: wangyu- Date: Thu, 19 Oct 2017 20:25:06 -0700 Subject: [PATCH 02/43] Create 11 --- images/cn/11 | 1 + 1 file changed, 1 insertion(+) create mode 100644 images/cn/11 diff --git a/images/cn/11 b/images/cn/11 new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/images/cn/11 @@ -0,0 +1 @@ + From f99a84a5a028df3aeb16d4a5b115c9adfff4e101 Mon Sep 17 00:00:00 2001 From: wangyu- Date: Thu, 19 Oct 2017 22:25:40 -0500 Subject: [PATCH 03/43] Add files via upload --- images/cn/speedercn.PNG | Bin 0 -> 35177 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 images/cn/speedercn.PNG diff --git a/images/cn/speedercn.PNG b/images/cn/speedercn.PNG new file mode 100644 index 0000000000000000000000000000000000000000..db8a7060d64cc4498ed7763834429a34d4d9e587 GIT binary patch literal 35177 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 MpmH@`?xE}d16bcG#Q*>R literal 0 HcmV?d00001 From 9bd370730137e1a4adcfc3579c5dbe4eee61b326 Mon Sep 17 00:00:00 2001 From: wangyu- Date: Thu, 19 Oct 2017 20:31:02 -0700 Subject: [PATCH 04/43] Update README.zh-cn.md --- doc/README.zh-cn.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/README.zh-cn.md b/doc/README.zh-cn.md index 9e94a56..31395e9 100644 --- a/doc/README.zh-cn.md +++ b/doc/README.zh-cn.md @@ -1,5 +1,5 @@ # UDPspeeder -![image0](/images/Capture7.PNG) +![image0](/images/cn/speedercn.PNG) UDP双边加速工具,降低丢包率,配合vpn可以加速任何协议,尤其适用于加速游戏和网页打开速度;同时也是一个UDP连接的调试和统计工具。 这个是我自己稳定用了一个月的项目,用来加速美服的Brawl Stars和亚服的Mobile Legend,效果不错。加速前卡得几乎没法玩,加速后就没怎么卡过了。 From 60aa420a99e1fe2d9e8d0268fc59e9fb553edff0 Mon Sep 17 00:00:00 2001 From: wangyu- Date: Thu, 19 Oct 2017 20:38:08 -0700 Subject: [PATCH 05/43] Update README.zh-cn.md --- doc/README.zh-cn.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/doc/README.zh-cn.md b/doc/README.zh-cn.md index 31395e9..0da98f0 100644 --- a/doc/README.zh-cn.md +++ b/doc/README.zh-cn.md @@ -3,6 +3,11 @@ UDP双边加速工具,降低丢包率,配合vpn可以加速任何协议,尤其适用于加速游戏和网页打开速度;同时也是一个UDP连接的调试和统计工具。 这个是我自己稳定用了一个月的项目,用来加速美服的Brawl Stars和亚服的Mobile Legend,效果不错。加速前卡得几乎没法玩,加速后就没怎么卡过了。 + +最新的版本是v2版,在v1版的基础上增加了fec功能。如果你用的是路由器上自带的客户端,它很可能是v1版的。 + +[v1版readme.md](/doc/README.zh-cn.v1.md) + #### 效果 ![image0](/images/Capture8.PNG) #### 原理简介 From 43f8bb236724ae0ad0ed7c05875814c86fe73401 Mon Sep 17 00:00:00 2001 From: wangyu- Date: Thu, 19 Oct 2017 20:42:35 -0700 Subject: [PATCH 06/43] Update README.zh-cn.v1.md --- doc/README.zh-cn.v1.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/doc/README.zh-cn.v1.md b/doc/README.zh-cn.v1.md index 9e94a56..0d0d25b 100644 --- a/doc/README.zh-cn.v1.md +++ b/doc/README.zh-cn.v1.md @@ -1,4 +1,4 @@ -# UDPspeeder +# UDPspeeder (v1) ![image0](/images/Capture7.PNG) UDP双边加速工具,降低丢包率,配合vpn可以加速任何协议,尤其适用于加速游戏和网页打开速度;同时也是一个UDP连接的调试和统计工具。 @@ -6,7 +6,7 @@ UDP双边加速工具,降低丢包率,配合vpn可以加速任何协议, #### 效果 ![image0](/images/Capture8.PNG) #### 原理简介 -目前原理是多倍发包。以后会做各种优化,比如:对高频率的短包先合并再冗余;FEC(Forward Error Correction),在包速低的时候多倍发包,包速高时用FEC。 +目前原理是多倍发包。以后会做各种优化,比如:对高频率的短包先合并再冗余;FEC(Forward Error Correction),在包速低的时候多倍发包,包速高时用FEC(这些功能在v2版里已经实现)。 跟net-speeder比,优势在于client和server会把收到的多余包自动去掉,这个过程对上层透明,没有兼容性问题。而且发出的冗余数据包会做长度和内容的随机化,抓包是看不出发了冗余数据的,所以不用担心vps被封的问题。 @@ -135,16 +135,16 @@ kcptun在udp层有RS code,也是一种冗余传输,通过openvpn把流量转 udp协议本身是ip协议加上了端口之后的直接封装,udp继承了ip协议的实时/乱序到达特性,更适合中转vpn。 -#### UDPspeeder + kcptun/finalspeed + ss 同时加速tcp和udp流量 +#### UDPspeeder + kcptun/finalspeed + $**** 同时加速tcp和udp流量 如果你需要用加速的tcp看视频和下载文件,这样效果比vpn方案更好。不论是速度,还是流量的耗费上。 ![image0](/images/Capture3.PNG) -#### UDPspeeder + openvpn + ss 混合方案 +#### UDPspeeder + openvpn + $**** 混合方案 也是我正在用的方案。优点是可以随时在vpn和ss方案间快速切换。 -实际部署起来比图中看起来的还要简单。不需要改路由表,需要做的只是用openvpn的ip访问ss server。 +实际部署起来比图中看起来的还要简单。不需要改路由表,需要做的只是用openvpn的ip访问$**** server。 ![image0](/images/Capture10.PNG) -(也可以把图中的ss server换成其他的socks5 server,这样连ss client也不需要了) +(也可以把图中的$**** server换成其他的socks5 server,这样连$**** client也不需要了) # 编译教程 暂时先参考udp2raw的这篇教程,几乎一样的过程。 From 0d4c59552f659a2758b5f3d800e0c5a7daf614b1 Mon Sep 17 00:00:00 2001 From: wangyu- Date: Thu, 19 Oct 2017 20:45:24 -0700 Subject: [PATCH 07/43] Update README.zh-cn.v1.md --- doc/README.zh-cn.v1.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/doc/README.zh-cn.v1.md b/doc/README.zh-cn.v1.md index 0d0d25b..8260989 100644 --- a/doc/README.zh-cn.v1.md +++ b/doc/README.zh-cn.v1.md @@ -3,6 +3,9 @@ UDP双边加速工具,降低丢包率,配合vpn可以加速任何协议,尤其适用于加速游戏和网页打开速度;同时也是一个UDP连接的调试和统计工具。 这个是我自己稳定用了一个月的项目,用来加速美服的Brawl Stars和亚服的Mobile Legend,效果不错。加速前卡得几乎没法玩,加速后就没怎么卡过了。 + +**目前最新版是v2版,这个是旧版主页** + #### 效果 ![image0](/images/Capture8.PNG) #### 原理简介 From 5228a3c44d71c589dc74136ce446a0eab50d291b Mon Sep 17 00:00:00 2001 From: wangyu- Date: Thu, 19 Oct 2017 20:46:24 -0700 Subject: [PATCH 08/43] Update README.zh-cn.v1.md --- doc/README.zh-cn.v1.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/README.zh-cn.v1.md b/doc/README.zh-cn.v1.md index 8260989..ec1bc78 100644 --- a/doc/README.zh-cn.v1.md +++ b/doc/README.zh-cn.v1.md @@ -4,7 +4,7 @@ UDP双边加速工具,降低丢包率,配合vpn可以加速任何协议, 这个是我自己稳定用了一个月的项目,用来加速美服的Brawl Stars和亚服的Mobile Legend,效果不错。加速前卡得几乎没法玩,加速后就没怎么卡过了。 -**目前最新版是v2版,这个是旧版主页** +注:目前最新版是v2版,这个是旧版主页 #### 效果 ![image0](/images/Capture8.PNG) From dbed5c3e6ba7e71be664ef0047f6c5d69b9e0891 Mon Sep 17 00:00:00 2001 From: wangyu- Date: Thu, 19 Oct 2017 22:53:31 -0500 Subject: [PATCH 09/43] Add files via upload --- images/cn/speeder_kcptun.PNG | Bin 0 -> 47339 bytes images/cn/speeder_vpn_s.PNG | Bin 0 -> 33568 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 images/cn/speeder_kcptun.PNG create mode 100644 images/cn/speeder_vpn_s.PNG diff --git a/images/cn/speeder_kcptun.PNG b/images/cn/speeder_kcptun.PNG new file mode 100644 index 0000000000000000000000000000000000000000..9dc5a31b34d0e9666b499a4a5b75f206a7aa09f9 GIT binary patch literal 47339 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 literal 0 HcmV?d00001 diff --git a/images/cn/speeder_vpn_s.PNG b/images/cn/speeder_vpn_s.PNG new file mode 100644 index 0000000000000000000000000000000000000000..401a9181de2983f13d3d96e2e0da8f14c52ca569 GIT binary patch literal 33568 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 SBT37^zrzPC_P+oexc>t`LLlD& literal 0 HcmV?d00001 From e8fe62300d1b766d174d14f108679098e6e4617e Mon Sep 17 00:00:00 2001 From: wangyu- Date: Thu, 19 Oct 2017 20:56:28 -0700 Subject: [PATCH 10/43] Update README.zh-cn.v1.md --- doc/README.zh-cn.v1.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/doc/README.zh-cn.v1.md b/doc/README.zh-cn.v1.md index ec1bc78..30e7814 100644 --- a/doc/README.zh-cn.v1.md +++ b/doc/README.zh-cn.v1.md @@ -4,7 +4,7 @@ UDP双边加速工具,降低丢包率,配合vpn可以加速任何协议, 这个是我自己稳定用了一个月的项目,用来加速美服的Brawl Stars和亚服的Mobile Legend,效果不错。加速前卡得几乎没法玩,加速后就没怎么卡过了。 -注:目前最新版是v2版,这个是旧版主页 +注:目前最新版是v2版,这个是v1版的主页 #### 效果 ![image0](/images/Capture8.PNG) @@ -138,16 +138,16 @@ kcptun在udp层有RS code,也是一种冗余传输,通过openvpn把流量转 udp协议本身是ip协议加上了端口之后的直接封装,udp继承了ip协议的实时/乱序到达特性,更适合中转vpn。 -#### UDPspeeder + kcptun/finalspeed + $**** 同时加速tcp和udp流量 +#### UDPspeeder + kcptun/finalspeed + $*** 同时加速tcp和udp流量 如果你需要用加速的tcp看视频和下载文件,这样效果比vpn方案更好。不论是速度,还是流量的耗费上。 -![image0](/images/Capture3.PNG) +![image0](/images/cn/speeder_kcptun.PNG) -#### UDPspeeder + openvpn + $**** 混合方案 -也是我正在用的方案。优点是可以随时在vpn和ss方案间快速切换。 -实际部署起来比图中看起来的还要简单。不需要改路由表,需要做的只是用openvpn的ip访问$**** server。 +#### UDPspeeder + openvpn + $*** 混合方案 +也是我正在用的方案。优点是可以随时在vpn和$*** 方案间快速切换。 +实际部署起来比图中看起来的还要简单。不需要改路由表,需要做的只是用openvpn的ip访问$*** server。 -![image0](/images/Capture10.PNG) -(也可以把图中的$**** server换成其他的socks5 server,这样连$**** client也不需要了) +![image0](/images/cn/speeder_vpn_s.PNG) +(也可以把图中的$*** server换成其他的socks5 server,这样连$*** client也不需要了) # 编译教程 暂时先参考udp2raw的这篇教程,几乎一样的过程。 From 34523fee1133c1baec48f74398a38cb3d676e7a3 Mon Sep 17 00:00:00 2001 From: wangyu- Date: Thu, 19 Oct 2017 21:03:27 -0700 Subject: [PATCH 11/43] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 801f0cc..0d06b08 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # UDPspeeder Network Speed-Up Tool. Boost your Connection on a High Lantency High Packet-Loss Link by using Forward Error Correction. -When used alone,UDPspeeder speeds-up only udp connection.Nevertheless,if you used UDPspeeder + any UDP-based VPN together,you can speed-up any traffic(include tcp/udp/icmp)。 +When used alone,UDPspeeder speeds-up only UDP connection.Nevertheless,if you used UDPspeeder + any UDP-based VPN together,you can speed-up any traffic(include TCP/UDP/ICMP)。 ![](/images/en/udpspeeder.PNG) From 2e52b163ec0a59cde6c04b297e60e0d75e4ff68d Mon Sep 17 00:00:00 2001 From: wangyu- Date: Thu, 19 Oct 2017 23:24:45 -0500 Subject: [PATCH 12/43] Add files via upload --- images/cn/scp_compare.PNG | Bin 0 -> 29854 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 images/cn/scp_compare.PNG diff --git a/images/cn/scp_compare.PNG b/images/cn/scp_compare.PNG new file mode 100644 index 0000000000000000000000000000000000000000..1ea6621328427c68481794d1d062fd281d9440cb GIT binary patch literal 29854 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�XU<(KP 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�@=g1>=!_PcU%P5CDEHJ_ zIXOVJ$fG<*01VlBd>c9T|0Mf$YJ&o`m-w{_Sw`2@MZz`qu(#$Wkybl=*z0_@mMv!o z1T$hUbGdlND~7bavSyD@&NRO6~4QiyWDInv*!$wX@lLJTJL7*2o#;En?Kn;6M_n>n}5pZ?<+Uk~Rgknb8GHJO74=8s;H9%fV=g2QeNt%GQ@xGevu5vRD7NPI=gDl|BZLSzyKaz)Pmk0YZ)64L&SiX z5X%2Dr{#S6qY|Y2-`=zTF{lmv_ag6qp8hSC^RKCm{sv3K)a7GP`(Gv|LE^W!uY|pa zpNNT}QQKOlCnxXt`AMX^6Dkw_%O2hr zZ^{2jnf%{tfB@#%{9mlve_j<=GX4LuIa8iJ2AR=Bzvxn=&&OnnK2eZWm8tk_{{8;} D`mr#3 literal 0 HcmV?d00001 From 55516c16d5ccfc58f5381c8ddb32979762fa0a1a Mon Sep 17 00:00:00 2001 From: wangyu- Date: Thu, 19 Oct 2017 21:28:25 -0700 Subject: [PATCH 13/43] Update README.zh-cn.md --- doc/README.zh-cn.md | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/doc/README.zh-cn.md b/doc/README.zh-cn.md index 0da98f0..dd01d87 100644 --- a/doc/README.zh-cn.md +++ b/doc/README.zh-cn.md @@ -1,15 +1,15 @@ # UDPspeeder +双边加速工具,降低丢包率,软件本身的功能是加速UDP;不过,配合vpn可以加速任何协议。通过合理配置,可以加速游戏,降低游戏的丢包和延迟;也可以加速下载和看视频这种大流量的应用。 ![image0](/images/cn/speedercn.PNG) -UDP双边加速工具,降低丢包率,配合vpn可以加速任何协议,尤其适用于加速游戏和网页打开速度;同时也是一个UDP连接的调试和统计工具。 -这个是我自己稳定用了一个月的项目,用来加速美服的Brawl Stars和亚服的Mobile Legend,效果不错。加速前卡得几乎没法玩,加速后就没怎么卡过了。 +我自己稳定用了几个月,用来加速美服的Brawl Stars和亚服的Mobile Legend,效果不错。加速前卡得几乎没法玩,加速后就没怎么卡过了。 -最新的版本是v2版,在v1版的基础上增加了fec功能。如果你用的是路由器上自带的客户端,它很可能是v1版的。 - -[v1版readme.md](/doc/README.zh-cn.v1.md) +最新的版本是v2版,在v1版的基础上增加了fec功能。如果你用的是v1版(路由器固件里自带的集成版很可能是v1版的),请看[v1版主页](/doc/README.zh-cn.v1.md) #### 效果 ![image0](/images/Capture8.PNG) + +![image0](/images/cn/scp_compare.PNG) #### 原理简介 目前原理是多倍发包。以后会做各种优化,比如:对高频率的短包先合并再冗余;FEC(Forward Error Correction),在包速低的时候多倍发包,包速高时用FEC。 @@ -140,16 +140,16 @@ kcptun在udp层有RS code,也是一种冗余传输,通过openvpn把流量转 udp协议本身是ip协议加上了端口之后的直接封装,udp继承了ip协议的实时/乱序到达特性,更适合中转vpn。 -#### UDPspeeder + kcptun/finalspeed + ss 同时加速tcp和udp流量 +#### UDPspeeder + kcptun/finalspeed + $*** 同时加速tcp和udp流量 如果你需要用加速的tcp看视频和下载文件,这样效果比vpn方案更好。不论是速度,还是流量的耗费上。 -![image0](/images/Capture3.PNG) +![image0](/images/cn/speeder_kcptun.PNG) -#### UDPspeeder + openvpn + ss 混合方案 -也是我正在用的方案。优点是可以随时在vpn和ss方案间快速切换。 -实际部署起来比图中看起来的还要简单。不需要改路由表,需要做的只是用openvpn的ip访问ss server。 +#### UDPspeeder + openvpn + $*** 混合方案 +也是我正在用的方案。优点是可以随时在vpn和$\*\*\*方案间快速切换。 +实际部署起来比图中看起来的还要简单。不需要改路由表,需要做的只是用openvpn的ip访问$*** server。 -![image0](/images/Capture10.PNG) -(也可以把图中的ss server换成其他的socks5 server,这样连ss client也不需要了) +![image0](/images/cn/speeder_vpn_s.PNG) +(也可以把图中的$*** server换成其他的socks5 server,这样连$*** client也不需要了) # 编译教程 暂时先参考udp2raw的这篇教程,几乎一样的过程。 From 8b2957818a5e48dfcad7bdd41c222a5c59d3efab Mon Sep 17 00:00:00 2001 From: wangyu- Date: Thu, 19 Oct 2017 21:30:06 -0700 Subject: [PATCH 14/43] Update README.zh-cn.md --- doc/README.zh-cn.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/doc/README.zh-cn.md b/doc/README.zh-cn.md index dd01d87..a5d3f9f 100644 --- a/doc/README.zh-cn.md +++ b/doc/README.zh-cn.md @@ -1,7 +1,8 @@ # UDPspeeder -双边加速工具,降低丢包率,软件本身的功能是加速UDP;不过,配合vpn可以加速任何协议。通过合理配置,可以加速游戏,降低游戏的丢包和延迟;也可以加速下载和看视频这种大流量的应用。 ![image0](/images/cn/speedercn.PNG) +双边加速工具,降低丢包率,软件本身的功能是加速UDP;不过,配合vpn可以加速任何协议。通过合理配置,可以加速游戏,降低游戏的丢包和延迟;也可以加速下载和看视频这种大流量的应用。 + 我自己稳定用了几个月,用来加速美服的Brawl Stars和亚服的Mobile Legend,效果不错。加速前卡得几乎没法玩,加速后就没怎么卡过了。 最新的版本是v2版,在v1版的基础上增加了fec功能。如果你用的是v1版(路由器固件里自带的集成版很可能是v1版的),请看[v1版主页](/doc/README.zh-cn.v1.md) From 2d08c6f7ec1c6aa30fc2fddb6703ecc8e327ed6d Mon Sep 17 00:00:00 2001 From: wangyu- Date: Thu, 19 Oct 2017 23:32:19 -0500 Subject: [PATCH 15/43] Add files via upload --- images/cn/scp_compare2.PNG | Bin 0 -> 30051 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 images/cn/scp_compare2.PNG diff --git a/images/cn/scp_compare2.PNG b/images/cn/scp_compare2.PNG new file mode 100644 index 0000000000000000000000000000000000000000..efa12c593a7b346bce0cd4bd0f9528ae197e12e4 GIT binary patch literal 30051 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 LvUJtwuYvyuwK Date: Thu, 19 Oct 2017 21:32:58 -0700 Subject: [PATCH 16/43] Update README.zh-cn.md --- doc/README.zh-cn.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/README.zh-cn.md b/doc/README.zh-cn.md index a5d3f9f..a479668 100644 --- a/doc/README.zh-cn.md +++ b/doc/README.zh-cn.md @@ -10,7 +10,7 @@ #### 效果 ![image0](/images/Capture8.PNG) -![image0](/images/cn/scp_compare.PNG) +![image0](/images/cn/scp_compare2.PNG) #### 原理简介 目前原理是多倍发包。以后会做各种优化,比如:对高频率的短包先合并再冗余;FEC(Forward Error Correction),在包速低的时候多倍发包,包速高时用FEC。 From 3ad201ba564d4a72007a9b4b9722eadc2d9645e7 Mon Sep 17 00:00:00 2001 From: wangyu- Date: Thu, 19 Oct 2017 21:52:37 -0700 Subject: [PATCH 17/43] Update README.zh-cn.md --- doc/README.zh-cn.md | 81 +++++++++++++++++++++------------------------ 1 file changed, 37 insertions(+), 44 deletions(-) diff --git a/doc/README.zh-cn.md b/doc/README.zh-cn.md index a479668..ff1f8e1 100644 --- a/doc/README.zh-cn.md +++ b/doc/README.zh-cn.md @@ -3,37 +3,30 @@ 双边加速工具,降低丢包率,软件本身的功能是加速UDP;不过,配合vpn可以加速任何协议。通过合理配置,可以加速游戏,降低游戏的丢包和延迟;也可以加速下载和看视频这种大流量的应用。 -我自己稳定用了几个月,用来加速美服的Brawl Stars和亚服的Mobile Legend,效果不错。加速前卡得几乎没法玩,加速后就没怎么卡过了。 +我自己稳定用了几个月,用来加速美服的Brawl Stars和亚服的Mobile Legend,效果不错,加速前卡得几乎没法玩,加速后就没怎么卡过了。用来看视频也基本全天满速。 最新的版本是v2版,在v1版的基础上增加了fec功能。如果你用的是v1版(路由器固件里自带的集成版很可能是v1版的),请看[v1版主页](/doc/README.zh-cn.v1.md) #### 效果 ![image0](/images/Capture8.PNG) -![image0](/images/cn/scp_compare2.PNG) +![image0](/images/cn/scp_compare.PNG) #### 原理简介 -目前原理是多倍发包。以后会做各种优化,比如:对高频率的短包先合并再冗余;FEC(Forward Error Correction),在包速低的时候多倍发包,包速高时用FEC。 +同时支持FEC(Forward Error Correction)和多倍发包,FEC算法是Reed-Solomon。 跟net-speeder比,优势在于client和server会把收到的多余包自动去掉,这个过程对上层透明,没有兼容性问题。而且发出的冗余数据包会做长度和内容的随机化,抓包是看不出发了冗余数据的,所以不用担心vps被封的问题。 -每个冗余数据包都是间隔数毫秒(可配置)以后延迟发出的,可以避开中间路由器因为瞬时buffer长度过长而连续丢掉所有副本。 +可以在多个冗余包之间引入延迟(时间可配)来对抗突发性的丢包,避开中间路由器因为瞬时buffer长度过长而连续丢掉所有副本。 -模拟一定的延迟抖动,这样上层应用计算出来的RTT方差会更大,以等待后续冗余包的到达,不至于发生在冗余包到达之前就触发重传的尴尬。 - -#### 适用场景 -绝大部分流量不高的情况。程序本身加速udp,但是配合openvpn可以加速任何流量。网络状况不好时,游戏卡得没法玩,或者网页卡得没法打开,使用起来效果最好。对于解决语音通话的断断续续效果也不错。不适合大流量的场景,比如BT下载和在线看视频。 无论从自己使用效果的角度,还是从国际出口带宽占用的角度,都建议不要在大流量环境使用。 +可以模拟一定的延迟抖动(时间可配),这样上层应用计算出来的RTT方差会更大,以等待后续冗余包的到达,不至于发生在冗余包到达之前就触发重传的尴尬。 #### 其他功能 输出UDP收发情况报告,可以看出丢包率。 模拟丢包,模拟延迟,模拟jitter。便于通过实验找出应用卡顿的原因。 -重复包过滤功能可以关掉,模拟网络本身有重复包的情况。用来测试应用对重复报的支持情况。 - client支持多个udp连接,server也支持多个client -目前有amd64,x86,ar71xx,树莓派armv7和android的binary - 如果你需要绕过UDP屏蔽/QoS,或者需要连接复用/连接保持功能,或者是加密。解决方案在另一个repo(可以跟UDPspeeder一起使用): https://github.com/wangyu-/udp2raw-tunnel @@ -54,17 +47,17 @@ https://github.com/wangyu-/UDPspeeder/releases 假设你有一个server,ip为44.55.66.77,有一个服务监听在udp 7777端口。 假设你需要加速本地到44.55.66.77:7777的流量。 ``` 在client端运行: -./speeder_ar71xx -l0.0.0.0:3333 -r 44.55.66.77:8855 -c -d2 -k "passwd" +./speederv2 -s -l0.0.0.0:4096 -r 127.0.0.1:7777 -f20:10 -k "passwd" 在server端运行: -./speeder_amd64 -l0.0.0.0:8855 -r127.0.0.1:7777 -s -d2 -k "passwd" +./speederv2 -c -l0.0.0.0:3333 -r44.55.66.77:4096 -f20:10 -k "passwd" ``` 现在client和server之间建立起了tunnel。想要连接44.55.66.77:7777,只需要连接 127.0.0.1:3333。来回的所有的udp流量会被加速。 ###### 注: --d2 表示除了本来的包以外,额外再发2个冗余包。可调。 +-f20:10 表示对每20个原始数据发送10个冗余包。 -k 指定一个字符串,server/client间所有收发的包都会被异或,改变协议特征,防止UDPspeeder的协议被运营商针对。 @@ -72,8 +65,8 @@ https://github.com/wangyu-/UDPspeeder/releases ### 命令选项 ``` -UDPspeeder -git version:b4bd385e88 build date:Sep 11 2017 10:29:25 +UDPspeeder V2 +git version:99f6099e86 build date:Oct 19 2017 13:35:38 repository: https://github.com/wangyu-/UDPspeeder usage: @@ -81,54 +74,54 @@ usage: run as server : ./this_program -s -l server_listen_ip:server_port -r remote_ip:remote_port [options] common option,must be same on both sides: - -k,--key key for simple xor encryption,default:"secret key" + -k,--key key for simple xor encryption. if not set,xor is disabled main options: - -d duplicated packet number, -d 0 means no duplicate. default value:0 - -t duplicated packet delay time, unit: 0.1ms,default value:20(2ms) - -j simulated jitter.randomly delay first packet for 0~jitter_value*0.1 ms,to - create simulated jitter.default value:0.do not use if you dont - know what it means - --report turn on udp send/recv report,and set a time interval for reporting,unit:s + -f,--fec x:y forward error correction,send y redundant packets for every x packets + --timeout how long could a packet be held in queue before doing fec,unit: ms,default :8ms + --mode fec-mode,available values: 0,1 ; 0 cost less bandwidth,1 cost less latency(default) + --report turn on send/recv report,and set a period for reporting,unit:s advanced options: - -t tmin:tmax simliar to -t above,but delay randomly between tmin and tmax - -j jmin:jmax simliar to -j above,but create jitter randomly between jmin and jmax - --random-drop simulate packet loss ,unit:0.01% - --disable-filter disable duplicate packet filter. - -m max pending packets,to prevent the program from eating up all your memory, - default value:0(disabled). -other options: - --log-level 0:never 1:fatal 2:error 3:warn + --mtu 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 + -j,--jitter simulated jitter.randomly delay first packet for 0~ ms,default value:0. + do not use if you dont know what it means. + -i,--interval scatter each fec group to a interval of ms,to protect burst packet loss. + default value:0.do not use if you dont know what it means. + --random-drop simulate packet loss ,unit:0.01%. default value: 0 + --disable-obscure disable obscure,to save a bit bandwidth and cpu +developer options: + -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 + -q,--queue-len max fec queue len,only for mode 0 + --decode-buf size of buffer of fec decoder,unit:packet,default:2000 + --fix-latency try to stabilize latency,only for mode 0 + --delay-capacity max number of delayed packets + --disable-fec completely disable fec,turn the program into a normal udp tunnel + --sock-buf buf size for socket,>=10 and <=10240,unit:kbyte,default:1024 +log and help options: + --log-level 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 - --sock-buf buf size for socket,>=10 and <=10240,unit:kbyte,default:1024 -h,--help print this help message ``` ### 包发送选项,两端设置可以不同。 只影响本地包发送。 -##### -d 选项 -设置冗余包数量。 -##### -t 选项 -为冗余包的发送,增加一个延迟.对中间路由buffer做优化,应对瞬时Buffer过长导致的连续丢包.对于多个冗余包,依次在前一个包的基础上增加这个延迟。 +##### -f 选项 +设置fec参数,影响数据的冗余度 ##### -j 选项 为原始数据的发送,增加一个延迟抖动值。这样上层应用计算出来的RTT方差会更大,以等待后续冗余包的到达,不至于发生在冗余包到达之前就触发重传的尴尬。配合-t选项使用。正常情况下跨国网络本身的延迟抖动就很大。可以不用设-j ##### --report  选项 数据发送和接受报告。开启后可以根据此数据推测出包速和丢包率等特征。 -##### 加强版 -t 选项 -跟普通-t类似,允许设置最大值最小值,用随机延迟发送冗余包。 - ##### 加强版 -j 选项 允许给jitter选项设置最大值最小值。在这个区间随机化jitter。如果最大值最小值一样就是模拟延迟。可以模拟高延迟、高jitter的网络环境。 ##### --random-drop 选项 随机丢包。模拟恶劣的网络环境时使用。 -### 包接收选项,两端设置可以不同。只影响本地包接受 -##### --disable-filter     -关闭重复包过滤器。这样配合-d 选项可以模拟有重复包的网络环境。 - # 应用 #### UDPspeeder + openvpn加速任何流量 From e158c3922e74d05388a4ddf6854393e2cf7c3bcd Mon Sep 17 00:00:00 2001 From: wangyu- Date: Thu, 19 Oct 2017 21:54:41 -0700 Subject: [PATCH 18/43] Update README.zh-cn.md --- doc/README.zh-cn.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/README.zh-cn.md b/doc/README.zh-cn.md index ff1f8e1..a6a142b 100644 --- a/doc/README.zh-cn.md +++ b/doc/README.zh-cn.md @@ -1,9 +1,9 @@ # UDPspeeder ![image0](/images/cn/speedercn.PNG) -双边加速工具,降低丢包率,软件本身的功能是加速UDP;不过,配合vpn可以加速任何协议。通过合理配置,可以加速游戏,降低游戏的丢包和延迟;也可以加速下载和看视频这种大流量的应用。 +双边加速工具,降低丢包率,软件本身的功能是加速UDP;不过,配合vpn可以加速全流量(包括TCP/UDP/ICMP)。通过合理配置,可以加速游戏,降低游戏的丢包和延迟;也可以加速下载和看视频这种大流量的应用。 -我自己稳定用了几个月,用来加速美服的Brawl Stars和亚服的Mobile Legend,效果不错,加速前卡得几乎没法玩,加速后就没怎么卡过了。用来看视频也基本全天满速。 +我自己稳定用了几个月,用来加速美服的Brawl Stars和亚服的Mobile Legend,效果不错,加速前卡得几乎没法玩,加速后就没怎么卡过了。用来看视频也基本满速。 最新的版本是v2版,在v1版的基础上增加了fec功能。如果你用的是v1版(路由器固件里自带的集成版很可能是v1版的),请看[v1版主页](/doc/README.zh-cn.v1.md) From 919a6022d03dca28ef5638564a304c2496171e62 Mon Sep 17 00:00:00 2001 From: wangyu- Date: Fri, 20 Oct 2017 01:08:28 -0500 Subject: [PATCH 19/43] Add files via upload --- images/en/fec.PNG | Bin 0 -> 30285 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 images/en/fec.PNG diff --git a/images/en/fec.PNG b/images/en/fec.PNG new file mode 100644 index 0000000000000000000000000000000000000000..d4b48c994c2d0197db6646d722d4e9371edb04f0 GIT binary patch literal 30285 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 aaK+x%&xS>q$5}uP|3}Z@aK7%j;Qs}2Zx93k literal 0 HcmV?d00001 From a48e9a08d9a7d043ec3fc76921f2395e5d964145 Mon Sep 17 00:00:00 2001 From: wangyu- Date: Thu, 19 Oct 2017 23:11:34 -0700 Subject: [PATCH 20/43] Update README.zh-cn.md --- doc/README.zh-cn.md | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/doc/README.zh-cn.md b/doc/README.zh-cn.md index a6a142b..cdd19f1 100644 --- a/doc/README.zh-cn.md +++ b/doc/README.zh-cn.md @@ -12,15 +12,17 @@ ![image0](/images/cn/scp_compare.PNG) #### 原理简介 -同时支持FEC(Forward Error Correction)和多倍发包,FEC算法是Reed-Solomon。 +主要原理是通过冗余数据来对抗网络的丢包,发送冗余数据的方式支持FEC(Forward Error Correction)和多倍发包,其中FEC算法是Reed-Solomon。 -跟net-speeder比,优势在于client和server会把收到的多余包自动去掉,这个过程对上层透明,没有兼容性问题。而且发出的冗余数据包会做长度和内容的随机化,抓包是看不出发了冗余数据的,所以不用担心vps被封的问题。 +![image0](/images/en/fec.PNG) -可以在多个冗余包之间引入延迟(时间可配)来对抗突发性的丢包,避开中间路由器因为瞬时buffer长度过长而连续丢掉所有副本。 -可以模拟一定的延迟抖动(时间可配),这样上层应用计算出来的RTT方差会更大,以等待后续冗余包的到达,不至于发生在冗余包到达之前就触发重传的尴尬。 #### 其他功能 +在多个冗余包之间引入延迟(时间可配)来对抗突发性的丢包,避开中间路由器因为瞬时buffer长度过长而连续丢掉所有副本。 + +模拟一定的延迟抖动(时间可配),这样上层应用计算出来的RTT方差会更大,以等待后续冗余包的到达,不至于发生在冗余包到达之前就触发重传的尴尬。 + 输出UDP收发情况报告,可以看出丢包率。 模拟丢包,模拟延迟,模拟jitter。便于通过实验找出应用卡顿的原因。 @@ -47,10 +49,10 @@ https://github.com/wangyu-/UDPspeeder/releases 假设你有一个server,ip为44.55.66.77,有一个服务监听在udp 7777端口。 假设你需要加速本地到44.55.66.77:7777的流量。 ``` 在client端运行: -./speederv2 -s -l0.0.0.0:4096 -r 127.0.0.1:7777 -f20:10 -k "passwd" +./speederv2 -s -l0.0.0.0:4096 -r127.0.0.1:7777 -f20:10 -k "passwd" 在server端运行: -./speederv2 -c -l0.0.0.0:3333 -r44.55.66.77:4096 -f20:10 -k "passwd" +./speederv2 -c -l0.0.0.0:3333 -r44.55.66.77:4096 -f20:10 -k "passwd" ``` 现在client和server之间建立起了tunnel。想要连接44.55.66.77:7777,只需要连接 127.0.0.1:3333。来回的所有的udp流量会被加速。 From 7dbd5b2575a5f856bb59b6c57c0641c80ad8bdae Mon Sep 17 00:00:00 2001 From: wangyu- Date: Thu, 19 Oct 2017 23:16:22 -0700 Subject: [PATCH 21/43] Update README.zh-cn.md --- doc/README.zh-cn.md | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/doc/README.zh-cn.md b/doc/README.zh-cn.md index cdd19f1..3d58c9a 100644 --- a/doc/README.zh-cn.md +++ b/doc/README.zh-cn.md @@ -1,5 +1,7 @@ # UDPspeeder ![image0](/images/cn/speedercn.PNG) +或 +![image0](/images/Capture2.PNG) 双边加速工具,降低丢包率,软件本身的功能是加速UDP;不过,配合vpn可以加速全流量(包括TCP/UDP/ICMP)。通过合理配置,可以加速游戏,降低游戏的丢包和延迟;也可以加速下载和看视频这种大流量的应用。 @@ -14,10 +16,10 @@ #### 原理简介 主要原理是通过冗余数据来对抗网络的丢包,发送冗余数据的方式支持FEC(Forward Error Correction)和多倍发包,其中FEC算法是Reed-Solomon。 +对于FEC方式的原理图: + ![image0](/images/en/fec.PNG) - - #### 其他功能 在多个冗余包之间引入延迟(时间可配)来对抗突发性的丢包,避开中间路由器因为瞬时buffer长度过长而连续丢掉所有副本。 @@ -130,12 +132,6 @@ log and help options: 如果你只是需要玩游戏,效果预期会kcp/finalspeed方案更好。可以优化tcp游戏的延迟(通过冗余发包,避免了上层的重传)。比如魔兽世界用的是tcp连接。 ![image0](/images/Capture2.PNG) -跟openvpn via kcptun方式的对比: - -kcptun在udp层有RS code,也是一种冗余传输,通过openvpn把流量转成tcp,再通过kcptun加速是有一定效果的。但是tcp只支持按序到达。按序到达的意思是,如果你发了1 2 3 4 5 6 ,6个包,如果第一个包丢了,那么必须等第一个包重传成功以后 2 3 4 5 6 才能到达;只要有一个包不到,后续数据包就要一直等待。用tcp承载udp流量会破坏udp的实时性。会造成游戏卡顿更严重。 - -udp协议本身是ip协议加上了端口之后的直接封装,udp继承了ip协议的实时/乱序到达特性,更适合中转vpn。 - #### UDPspeeder + kcptun/finalspeed + $*** 同时加速tcp和udp流量 如果你需要用加速的tcp看视频和下载文件,这样效果比vpn方案更好。不论是速度,还是流量的耗费上。 ![image0](/images/cn/speeder_kcptun.PNG) From a0d23221a6d55810aef9ecce326ab19f7a1af24a Mon Sep 17 00:00:00 2001 From: wangyu- Date: Thu, 19 Oct 2017 23:17:09 -0700 Subject: [PATCH 22/43] Update README.zh-cn.md --- doc/README.zh-cn.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/doc/README.zh-cn.md b/doc/README.zh-cn.md index 3d58c9a..5407a9a 100644 --- a/doc/README.zh-cn.md +++ b/doc/README.zh-cn.md @@ -1,7 +1,5 @@ # UDPspeeder ![image0](/images/cn/speedercn.PNG) -或 -![image0](/images/Capture2.PNG) 双边加速工具,降低丢包率,软件本身的功能是加速UDP;不过,配合vpn可以加速全流量(包括TCP/UDP/ICMP)。通过合理配置,可以加速游戏,降低游戏的丢包和延迟;也可以加速下载和看视频这种大流量的应用。 From 3db1b7c0681bfef7c893ef30dcd134a22e3235d6 Mon Sep 17 00:00:00 2001 From: wangyu- Date: Thu, 19 Oct 2017 23:35:23 -0700 Subject: [PATCH 23/43] Update README.zh-cn.md --- doc/README.zh-cn.md | 26 +++++++++++++++++++++----- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/doc/README.zh-cn.md b/doc/README.zh-cn.md index 5407a9a..099d8eb 100644 --- a/doc/README.zh-cn.md +++ b/doc/README.zh-cn.md @@ -19,6 +19,8 @@ ![image0](/images/en/fec.PNG) #### 其他功能 +对包的内容和长度做随机化(可以理解为混淆),从抓包看不出你发送了冗余数据,不用担心vps被封。 + 在多个冗余包之间引入延迟(时间可配)来对抗突发性的丢包,避开中间路由器因为瞬时buffer长度过长而连续丢掉所有副本。 模拟一定的延迟抖动(时间可配),这样上层应用计算出来的RTT方差会更大,以等待后续冗余包的到达,不至于发生在冗余包到达之前就触发重传的尴尬。 @@ -111,19 +113,32 @@ log and help options: ``` ### 包发送选项,两端设置可以不同。 只影响本地包发送。 ##### -f 选项 -设置fec参数,影响数据的冗余度 -##### -j 选项 -为原始数据的发送,增加一个延迟抖动值。这样上层应用计算出来的RTT方差会更大,以等待后续冗余包的到达,不至于发生在冗余包到达之前就触发重传的尴尬。配合-t选项使用。正常情况下跨国网络本身的延迟抖动就很大。可以不用设-j +设置fec参数,影响数据的冗余度。 +##### --timeout 选项 +指定fec编码器在编码时候最多可以引入多大的延迟。越高fec越有效率,加速游戏时调低可以降低延迟。 + +##### --mode 选项 +fec编码器的工作模式。对于mode 0,编码器会积攒一定数量的packet,然后把他们合并再切成等长的片段(切分长度由--mtu指定)。对于mode 1,编码器不会做任何切分,而是会把packet按最大长度对齐,fec冗余包的长度为对齐后的长度(最大长度)。 + +mode 0更省流量,在丢包率正常的情况下效果和mode 1是一样的;mode 1延迟更低,在极高丢包的情况下表现更好。 + +mode 0使用起来可以不用关注mtu,因为fec编码器会帮你把包切分到合理的大小。用mode 1时必须合理设置上层应用的mtu。 ##### --report  选项 数据发送和接受报告。开启后可以根据此数据推测出包速和丢包率等特征。 -##### 加强版 -j 选项 -允许给jitter选项设置最大值最小值。在这个区间随机化jitter。如果最大值最小值一样就是模拟延迟。可以模拟高延迟、高jitter的网络环境。 +##### -j 选项 +为原始数据的发送,增加一个延迟抖动值。这样上层应用计算出来的RTT方差会更大,以等待后续冗余包的到达,不至于发生在冗余包到达之前就触发重传的尴尬。配合-t选项使用。正常情况下跨国网络本身的延迟抖动就很大。可以不用设-j + +##### -i 选项 +指定一个时间窗口,长度为n毫秒。同一个fec分组的数据在发送时候会被均匀分散到这n毫秒中。可以对抗突发性的丢包。 + ##### --random-drop 选项 随机丢包。模拟恶劣的网络环境时使用。 +# 使用经验 + # 应用 #### UDPspeeder + openvpn加速任何流量 @@ -139,6 +154,7 @@ log and help options: 实际部署起来比图中看起来的还要简单。不需要改路由表,需要做的只是用openvpn的ip访问$*** server。 ![image0](/images/cn/speeder_vpn_s.PNG) + (也可以把图中的$*** server换成其他的socks5 server,这样连$*** client也不需要了) # 编译教程 暂时先参考udp2raw的这篇教程,几乎一样的过程。 From dc5c7c4e059c0babaea8ddf3744af4a8597be675 Mon Sep 17 00:00:00 2001 From: wangyu- Date: Fri, 20 Oct 2017 00:47:04 -0700 Subject: [PATCH 24/43] Update README.zh-cn.md --- doc/README.zh-cn.md | 42 +++++++++++++++++++++++++++++++++++++++++- 1 file changed, 41 insertions(+), 1 deletion(-) diff --git a/doc/README.zh-cn.md b/doc/README.zh-cn.md index 099d8eb..4598562 100644 --- a/doc/README.zh-cn.md +++ b/doc/README.zh-cn.md @@ -139,14 +139,53 @@ mode 0使用起来可以不用关注mtu,因为fec编码器会帮你把包切 # 使用经验 +### FEC还是多倍发包,如何选择 + +对于游戏,游戏的流量本身不大,延迟很重要,多倍发包是最有效的解决方案,多倍发包不会引入额外的延迟。 + +对于其他日常应用(延迟要求一般),在合理配置的情况下,FEC的效果肯定好过多倍发包。不过需要根据网络的最大丢包来配置FEC参数,才能有稳定的效果。如果配置不当,对于--mode 1可能会完全没有效果;对于--mode 0,可能效果会比不用UDPspeeder还差。 + +### V2版如何多倍发包 + +只要在设置-f参数时把x设置为1,fec算法就退化为多倍发包了。例如-f1:1,表示2倍发包,-f1:2表示3倍发包,以此类推。另外可以加上`--mode 0 -q1`参数,防止fec编码器试图积攒和合并数据,获得最低的延迟。 + +2倍发包的完整参数: + +``` +./speederv2 -s -l0.0.0.0:4096 -r127.0.0.1:7777 -f20:10 -k "passwd" +./speederv2 -c -l0.0.0.0:3333 -r44.55.66.77:4096 -f20:10 -k "passwd" +``` + +如果你只需要多倍发包,可以直接用回V1版,V1版配置更简单,占用内存更小,而且经过了几个月的考验,很稳定。 + +### 根据网络丢包合理设置FEC参数 + +默认的FEC参数为-f20:10,对每20个包,额外发送10个冗余包,也就是1.5倍发包。已经可以适应绝大多数的网络情况了,对于10%的网络丢包,可以降低到0.01%以下;对于20%的网络丢包,可以降低到2.5%。 + +如果你的网络丢包很低,比如在3%以下,可以尝试调低参数。比如-f20:5,也就是1.2倍发包,这个参数已经足够把3%的丢包降低到0.01%以下了。 + +如果网络丢包超过20%,需要把-f20:10调大。 + +如果你实在不会配,那么也可以用回V1版。 + +### 根据CPU处理能力来调整FEC参数 + +FEC算法很吃CPU,初次使用建议关于UDPspeeder的CPU占用。如果CPU占用过高,可以在冗余度不变的情况下把FEC分组大小调小,否则的话效果可能很差。 + +比如-f20:10和-f10:5,都是1.5倍的冗余度,而-f20:10的FEC分组大小是30个包,-f10:5的FEC分组大小是15个包。-f20:10更费CPU,但是在一般情况下效果更稳定。fec分组大小建议设置在50以下,否则不但很耗CPU,还有其他副作用。 + # 应用 #### UDPspeeder + openvpn加速任何流量 如果你只是需要玩游戏,效果预期会kcp/finalspeed方案更好。可以优化tcp游戏的延迟(通过冗余发包,避免了上层的重传)。比如魔兽世界用的是tcp连接。 ![image0](/images/Capture2.PNG) +具体配置见,[UDPspeeder + openvpn config guide](/doc/udpspeeder_openvpn.md). + +另外,这种方案加速TCP时效果可以和BBR叠加,UDPspeeder用来改善丢包率,BBR负责重传,是不错的组合。 + #### UDPspeeder + kcptun/finalspeed + $*** 同时加速tcp和udp流量 -如果你需要用加速的tcp看视频和下载文件,这样效果比vpn方案更好。不论是速度,还是流量的耗费上。 +如果你需要用加速的tcp看视频和下载文件,这样效果比UDPspeeder+vpn方案更好(在没有BBR的情况下)。 ![image0](/images/cn/speeder_kcptun.PNG) #### UDPspeeder + openvpn + $*** 混合方案 @@ -156,6 +195,7 @@ mode 0使用起来可以不用关注mtu,因为fec编码器会帮你把包切 ![image0](/images/cn/speeder_vpn_s.PNG) (也可以把图中的$*** server换成其他的socks5 server,这样连$*** client也不需要了) + # 编译教程 暂时先参考udp2raw的这篇教程,几乎一样的过程。 From e5e7c302d65e82fa7058955c85dfa41121289484 Mon Sep 17 00:00:00 2001 From: wangyu- Date: Fri, 20 Oct 2017 00:49:24 -0700 Subject: [PATCH 25/43] Update README.zh-cn.md --- doc/README.zh-cn.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/doc/README.zh-cn.md b/doc/README.zh-cn.md index 4598562..15818af 100644 --- a/doc/README.zh-cn.md +++ b/doc/README.zh-cn.md @@ -172,7 +172,9 @@ mode 0使用起来可以不用关注mtu,因为fec编码器会帮你把包切 FEC算法很吃CPU,初次使用建议关于UDPspeeder的CPU占用。如果CPU占用过高,可以在冗余度不变的情况下把FEC分组大小调小,否则的话效果可能很差。 -比如-f20:10和-f10:5,都是1.5倍的冗余度,而-f20:10的FEC分组大小是30个包,-f10:5的FEC分组大小是15个包。-f20:10更费CPU,但是在一般情况下效果更稳定。fec分组大小建议设置在50以下,否则不但很耗CPU,还有其他副作用。 +比如-f20:10和-f10:5,都是1.5倍的冗余度,而-f20:10的FEC分组大小是30个包,-f10:5的FEC分组大小是15个包。-f20:10更费CPU,但是在一般情况下效果更稳定。把分组调小可以节省CPU。 + +另外,fec分组大小不宜过大,否则不但很耗CPU,还有其他副作用,建议控制在50以下。 # 应用 From d9b86647098176f9b7e5e99716e24a263ddd832c Mon Sep 17 00:00:00 2001 From: wangyu- Date: Fri, 20 Oct 2017 01:35:55 -0700 Subject: [PATCH 26/43] Update README.zh-cn.md --- doc/README.zh-cn.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/doc/README.zh-cn.md b/doc/README.zh-cn.md index 15818af..e170a86 100644 --- a/doc/README.zh-cn.md +++ b/doc/README.zh-cn.md @@ -7,6 +7,9 @@ 最新的版本是v2版,在v1版的基础上增加了fec功能。如果你用的是v1版(路由器固件里自带的集成版很可能是v1版的),请看[v1版主页](/doc/README.zh-cn.v1.md) +配合vpn加速全流量的原理图(已测试支持VPN的有OpenVPN、L2TP、$\*\*\*VPN): + +![image0](/images/Capture2.PNG) #### 效果 ![image0](/images/Capture8.PNG) From bc92925b30cd9910b3f23e478f770d82f26eace3 Mon Sep 17 00:00:00 2001 From: wangyu- Date: Fri, 20 Oct 2017 01:46:30 -0700 Subject: [PATCH 27/43] Update README.zh-cn.md --- doc/README.zh-cn.md | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/doc/README.zh-cn.md b/doc/README.zh-cn.md index e170a86..dedd652 100644 --- a/doc/README.zh-cn.md +++ b/doc/README.zh-cn.md @@ -1,7 +1,7 @@ # UDPspeeder ![image0](/images/cn/speedercn.PNG) -双边加速工具,降低丢包率,软件本身的功能是加速UDP;不过,配合vpn可以加速全流量(包括TCP/UDP/ICMP)。通过合理配置,可以加速游戏,降低游戏的丢包和延迟;也可以加速下载和看视频这种大流量的应用。 +双边网络加速工具,软件本身的功能是加速UDP;不过,配合vpn可以加速全流量(包括TCP/UDP/ICMP)。通过合理配置,可以加速游戏,降低游戏的丢包和延迟;也可以加速下载和看视频这种大流量的应用。 我自己稳定用了几个月,用来加速美服的Brawl Stars和亚服的Mobile Legend,效果不错,加速前卡得几乎没法玩,加速后就没怎么卡过了。用来看视频也基本满速。 @@ -10,6 +10,8 @@ 配合vpn加速全流量的原理图(已测试支持VPN的有OpenVPN、L2TP、$\*\*\*VPN): ![image0](/images/Capture2.PNG) + +可以和[udp2raw](https://github.com/wangyu-/udp2raw-tunnel)串联使用,在加速的同时把UDP伪装成TCP,防止UDP被运营商QOS或屏蔽。 #### 效果 ![image0](/images/Capture8.PNG) @@ -34,10 +36,6 @@ client支持多个udp连接,server也支持多个client -如果你需要绕过UDP屏蔽/QoS,或者需要连接复用/连接保持功能,或者是加密。解决方案在另一个repo(可以跟UDPspeeder一起使用): - -https://github.com/wangyu-/udp2raw-tunnel - # 简明操作说明 ### 环境要求 From 15f77da7d96d5127d7e074844c79f845966a4c4c Mon Sep 17 00:00:00 2001 From: wangyu- Date: Fri, 20 Oct 2017 01:47:25 -0700 Subject: [PATCH 28/43] Update README.zh-cn.md --- doc/README.zh-cn.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/README.zh-cn.md b/doc/README.zh-cn.md index dedd652..00882d5 100644 --- a/doc/README.zh-cn.md +++ b/doc/README.zh-cn.md @@ -11,7 +11,7 @@ ![image0](/images/Capture2.PNG) -可以和[udp2raw](https://github.com/wangyu-/udp2raw-tunnel)串联使用,在加速的同时把UDP伪装成TCP,防止UDP被运营商QOS或屏蔽。 +另外,可以和[udp2raw](https://github.com/wangyu-/udp2raw-tunnel)串联使用,在加速的同时把UDP伪装成TCP,防止UDP被运营商QOS或屏蔽。 #### 效果 ![image0](/images/Capture8.PNG) From 0351bd0e5994468438490a2ed9d3accfb2cf4d28 Mon Sep 17 00:00:00 2001 From: wangyu- Date: Fri, 20 Oct 2017 01:57:38 -0700 Subject: [PATCH 29/43] Update README.zh-cn.md --- doc/README.zh-cn.md | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/doc/README.zh-cn.md b/doc/README.zh-cn.md index 00882d5..0518c04 100644 --- a/doc/README.zh-cn.md +++ b/doc/README.zh-cn.md @@ -39,7 +39,7 @@ client支持多个udp连接,server也支持多个client # 简明操作说明 ### 环境要求 -Linux主机,可以是桌面版,可以是android手机/平板,可以是openwrt路由器,也可以是树莓派。在windows和mac上配合虚拟机可以稳定使用(speeder跑在Linux里,其他应用照常跑在window里,桥接模式测试可用)。 +Linux主机,可以是桌面版,可以是android手机/平板,可以是openwrt路由器,也可以是树莓派。在windows和mac上配合虚拟机可以稳定使用(speeder跑在Linux里,其他应用照常跑在window里,桥接模式测试可用),可以使用[这个](https://github.com/wangyu-/udp2raw-tunnel/releases/download/20170918.0/lede-17.01.2-x86_virtual_machine_image_with_udp2raw_pre_installed.zip)虚拟机镜像,大小只有7.5mb,免去在虚拟机里装系统的麻烦。 android版需要通过terminal运行。 @@ -134,18 +134,22 @@ mode 0使用起来可以不用关注mtu,因为fec编码器会帮你把包切 ##### -i 选项 指定一个时间窗口,长度为n毫秒。同一个fec分组的数据在发送时候会被均匀分散到这n毫秒中。可以对抗突发性的丢包。 - ##### --random-drop 选项 随机丢包。模拟恶劣的网络环境时使用。 +##### -k选项 +指定一个字符串,server/client间所有收发的包都会被异或,改变协议特征,防止UDPspeeder的协议被运营商针对。 + # 使用经验 -### FEC还是多倍发包,如何选择 +### 在FEC和多倍发包之间如何选择 对于游戏,游戏的流量本身不大,延迟很重要,多倍发包是最有效的解决方案,多倍发包不会引入额外的延迟。 对于其他日常应用(延迟要求一般),在合理配置的情况下,FEC的效果肯定好过多倍发包。不过需要根据网络的最大丢包来配置FEC参数,才能有稳定的效果。如果配置不当,对于--mode 1可能会完全没有效果;对于--mode 0,可能效果会比不用UDPspeeder还差。 +对于游戏以外的应用,推荐使用FEC。但是,如果FEC版的默认参数在你那边效果很差,而你又不会调,可以先用多倍发包。 + ### V2版如何多倍发包 只要在设置-f参数时把x设置为1,fec算法就退化为多倍发包了。例如-f1:1,表示2倍发包,-f1:2表示3倍发包,以此类推。另外可以加上`--mode 0 -q1`参数,防止fec编码器试图积攒和合并数据,获得最低的延迟。 @@ -153,8 +157,8 @@ mode 0使用起来可以不用关注mtu,因为fec编码器会帮你把包切 2倍发包的完整参数: ``` -./speederv2 -s -l0.0.0.0:4096 -r127.0.0.1:7777 -f20:10 -k "passwd" -./speederv2 -c -l0.0.0.0:3333 -r44.55.66.77:4096 -f20:10 -k "passwd" +./speederv2 -s -l0.0.0.0:4096 -r127.0.0.1:7777 -f1:1 -k "passwd" --mode 0 -q1 +./speederv2 -c -l0.0.0.0:3333 -r44.55.66.77:4096 -f1:1 -k "passwd" --mode 0 -q1 ``` 如果你只需要多倍发包,可以直接用回V1版,V1版配置更简单,占用内存更小,而且经过了几个月的考验,很稳定。 @@ -171,16 +175,15 @@ mode 0使用起来可以不用关注mtu,因为fec编码器会帮你把包切 ### 根据CPU处理能力来调整FEC参数 -FEC算法很吃CPU,初次使用建议关于UDPspeeder的CPU占用。如果CPU占用过高,可以在冗余度不变的情况下把FEC分组大小调小,否则的话效果可能很差。 +FEC算法很吃CPU,初次使用建议关注UDPspeeder的CPU占用。如果CPU被打满,可以在冗余度不变的情况下把FEC分组大小调小,否则的话效果可能很差。 比如-f20:10和-f10:5,都是1.5倍的冗余度,而-f20:10的FEC分组大小是30个包,-f10:5的FEC分组大小是15个包。-f20:10更费CPU,但是在一般情况下效果更稳定。把分组调小可以节省CPU。 -另外,fec分组大小不宜过大,否则不但很耗CPU,还有其他副作用,建议控制在50以下。 +另外,fec分组大小不宜过大,否则不但很耗CPU,还有其他副作用,建议x+y<50。 # 应用 #### UDPspeeder + openvpn加速任何流量 -如果你只是需要玩游戏,效果预期会kcp/finalspeed方案更好。可以优化tcp游戏的延迟(通过冗余发包,避免了上层的重传)。比如魔兽世界用的是tcp连接。 ![image0](/images/Capture2.PNG) 具体配置见,[UDPspeeder + openvpn config guide](/doc/udpspeeder_openvpn.md). From cb352c911c4373173f97933b3989189546f811fc Mon Sep 17 00:00:00 2001 From: wangyu- Date: Fri, 20 Oct 2017 04:19:29 -0700 Subject: [PATCH 30/43] Update README.zh-cn.md --- doc/README.zh-cn.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/README.zh-cn.md b/doc/README.zh-cn.md index 0518c04..c7cfa11 100644 --- a/doc/README.zh-cn.md +++ b/doc/README.zh-cn.md @@ -3,9 +3,9 @@ 双边网络加速工具,软件本身的功能是加速UDP;不过,配合vpn可以加速全流量(包括TCP/UDP/ICMP)。通过合理配置,可以加速游戏,降低游戏的丢包和延迟;也可以加速下载和看视频这种大流量的应用。 -我自己稳定用了几个月,用来加速美服的Brawl Stars和亚服的Mobile Legend,效果不错,加速前卡得几乎没法玩,加速后就没怎么卡过了。用来看视频也基本满速。 +我自己稳定用了几个月,用来加速美服的Brawl Stars和亚服的Mobile Legend,效果不错,加速前卡得几乎没法玩,加速后就没怎么卡过了。用来看视频也基本满速。用1.5倍的流量,就可以把10%的丢包率降低到万分之一以下。 -最新的版本是v2版,在v1版的基础上增加了fec功能。如果你用的是v1版(路由器固件里自带的集成版很可能是v1版的),请看[v1版主页](/doc/README.zh-cn.v1.md) +最新的版本是v2版,在v1版的基础上增加了FEC功能,更省流量。如果你用的是v1版(路由器固件里自带的集成版很可能是v1版的),请看[v1版主页](/doc/README.zh-cn.v1.md) 配合vpn加速全流量的原理图(已测试支持VPN的有OpenVPN、L2TP、$\*\*\*VPN): From de173447ba2d063b96de6806a80c2084b7bf687c Mon Sep 17 00:00:00 2001 From: wangyu- Date: Fri, 20 Oct 2017 04:20:27 -0700 Subject: [PATCH 31/43] Update README.zh-cn.md --- doc/README.zh-cn.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/README.zh-cn.md b/doc/README.zh-cn.md index c7cfa11..7f8dba7 100644 --- a/doc/README.zh-cn.md +++ b/doc/README.zh-cn.md @@ -1,9 +1,9 @@ # UDPspeeder ![image0](/images/cn/speedercn.PNG) -双边网络加速工具,软件本身的功能是加速UDP;不过,配合vpn可以加速全流量(包括TCP/UDP/ICMP)。通过合理配置,可以加速游戏,降低游戏的丢包和延迟;也可以加速下载和看视频这种大流量的应用。 +双边网络加速工具,软件本身的功能是加速UDP;不过,配合vpn可以加速全流量(包括TCP/UDP/ICMP)。通过合理配置,可以加速游戏,降低游戏的丢包和延迟;也可以加速下载和看视频这种大流量的应用。用1.5倍的流量,就可以把10%的丢包率降低到万分之一以下。 -我自己稳定用了几个月,用来加速美服的Brawl Stars和亚服的Mobile Legend,效果不错,加速前卡得几乎没法玩,加速后就没怎么卡过了。用来看视频也基本满速。用1.5倍的流量,就可以把10%的丢包率降低到万分之一以下。 +我自己稳定用了几个月,用来加速美服的Brawl Stars和亚服的Mobile Legend,效果不错,加速前卡得几乎没法玩,加速后就没怎么卡过了。用来看视频也基本满速。 最新的版本是v2版,在v1版的基础上增加了FEC功能,更省流量。如果你用的是v1版(路由器固件里自带的集成版很可能是v1版的),请看[v1版主页](/doc/README.zh-cn.v1.md) From 27801fe6c0e6f1db51f61db234d5dc9089f343db Mon Sep 17 00:00:00 2001 From: wangyu- Date: Fri, 20 Oct 2017 06:34:36 -0500 Subject: [PATCH 32/43] Add files via upload --- images/en/fec.PNG | Bin 30285 -> 86592 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/images/en/fec.PNG b/images/en/fec.PNG index d4b48c994c2d0197db6646d722d4e9371edb04f0..eff31e64444d684e95298255b0e94244973c2cef 100644 GIT binary patch literal 86592 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 z�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 aaK+x%&xS>q$5}uP|3}Z@aK7%j;Qs}2Zx93k From bbf202a438cd6e197387d76dfc3e0d0c1292ef94 Mon Sep 17 00:00:00 2001 From: wangyu- Date: Fri, 20 Oct 2017 20:04:40 -0700 Subject: [PATCH 33/43] Update README.zh-cn.md --- doc/README.zh-cn.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/doc/README.zh-cn.md b/doc/README.zh-cn.md index 7f8dba7..050925e 100644 --- a/doc/README.zh-cn.md +++ b/doc/README.zh-cn.md @@ -125,6 +125,8 @@ mode 0更省流量,在丢包率正常的情况下效果和mode 1是一样的 mode 0使用起来可以不用关注mtu,因为fec编码器会帮你把包切分到合理的大小。用mode 1时必须合理设置上层应用的mtu。 +mode 0模式的流量消耗基本完全透明。mode 1因为涉及到数据按最大长度对齐,所以流量消耗不是完全可预期。不过就实际使用来看,mode 1消耗的额外流量不多。 + ##### --report  选项 数据发送和接受报告。开启后可以根据此数据推测出包速和丢包率等特征。 From 5d6d904ff73ee49478d1eefe6acea84ee097f9b2 Mon Sep 17 00:00:00 2001 From: Sun Yongfei Date: Sat, 21 Oct 2017 11:27:39 +0800 Subject: [PATCH 34/43] Update main.cpp --- main.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/main.cpp b/main.cpp index 782b4df..b8f9294 100644 --- a/main.cpp +++ b/main.cpp @@ -8,7 +8,7 @@ #include "delay_manager.h" #include "fec_manager.h" -using namespace std; +using namespace std; typedef unsigned long long u64_t; //this works on most platform,avoid using the PRId64 typedef long long i64_t; From 1f366d56f84fe23ccd0276cf3e3c3a076d9d548a Mon Sep 17 00:00:00 2001 From: wangyu- Date: Fri, 20 Oct 2017 21:47:26 -0700 Subject: [PATCH 35/43] Update README.md --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 0d06b08..bd57d2e 100644 --- a/README.md +++ b/README.md @@ -29,6 +29,8 @@ For Windows and MacOS You can run UDPspeeder inside [this](https://github.com/wa UDPspeeder uses FEC(Forward Error Correction) to improve your connection's quality,at the cost of addtional bandwidth.The algorithm for FEC is called Reed-Solomon. +![image0](/images/en/fec.PNG) + ### Reed-Solomon ` From c4a84b5d667be7948d93972ad4ee10d0ed00e5a4 Mon Sep 17 00:00:00 2001 From: wangyu- Date: Fri, 20 Oct 2017 21:52:09 -0700 Subject: [PATCH 36/43] Update README.md --- README.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index bd57d2e..bed23ca 100644 --- a/README.md +++ b/README.md @@ -55,10 +55,10 @@ Assume your server ip is 44.55.66.77, you have a service listening on udp port 7 ```bash # Run at server side: -./speederv2 -s -l0.0.0.0:4096 -r 127.0.0.1:7777 -f20:10 +./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 +./speederv2 -c -l0.0.0.0:3333 -r44.55.66.77:4096 -f20:10 -k "passwd" ``` Now connecting to UDP port 3333 at the client side is equivalent to connecting to port 7777 at the server side,and the connection is boosted by UDPspeeder. @@ -67,6 +67,7 @@ Now connecting to UDP port 3333 at the client side is equivalent to connecting t `-f20:10` means sending 10 redundant packets for every 20 original packets. +`-k` enables simple XOR encryption to confuse DPI(Deep Packet Inspection) # Advanced Topic ### Full Options ``` From 06510d2e21fe03b783e5f7a7668a6d8da92da971 Mon Sep 17 00:00:00 2001 From: wangyu- Date: Fri, 20 Oct 2017 22:15:44 -0700 Subject: [PATCH 37/43] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index bed23ca..9a6f466 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # UDPspeeder Network Speed-Up Tool. Boost your Connection on a High Lantency High Packet-Loss Link by using Forward Error Correction. -When used alone,UDPspeeder speeds-up only UDP connection.Nevertheless,if you used UDPspeeder + any UDP-based VPN together,you can speed-up any traffic(include TCP/UDP/ICMP)。 +When used alone,UDPspeeder speeds-up only UDP connection.Nevertheless,if you used UDPspeeder + any UDP-based VPN together,you can speed-up any traffic(include TCP/UDP/ICMP),currently OpenVPN/L2TP/ShadowVPN are confirmed to be supported。 ![](/images/en/udpspeeder.PNG) From 0009531a6fb40729c04038364d7cc0fd42df3747 Mon Sep 17 00:00:00 2001 From: wangyu- Date: Fri, 20 Oct 2017 23:40:29 -0700 Subject: [PATCH 38/43] Update README.zh-cn.md --- doc/README.zh-cn.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/doc/README.zh-cn.md b/doc/README.zh-cn.md index 050925e..6281045 100644 --- a/doc/README.zh-cn.md +++ b/doc/README.zh-cn.md @@ -66,6 +66,10 @@ https://github.com/wangyu-/UDPspeeder/releases -k 指定一个字符串,server/client间所有收发的包都会被异或,改变协议特征,防止UDPspeeder的协议被运营商针对。 +注意要为UDPspeeder加速的应用设置好MTU(不是在UDPspeeder中,是在被加速的应用中),建议设置为1200。 + +另外,如果被加速的应用不能调整MTU,也可以在UDPspeeder中通过`--mode 0 --mtu 1200`设置MTU。关于`--mode 0`和`--mtu`的具体含义请看下文。 + # 进阶操作说明 ### 命令选项 From a8120dde23b2f0fab86a471ecadf4bfbfae453f2 Mon Sep 17 00:00:00 2001 From: wangyu- Date: Fri, 20 Oct 2017 23:41:37 -0700 Subject: [PATCH 39/43] Update README.zh-cn.md --- doc/README.zh-cn.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/doc/README.zh-cn.md b/doc/README.zh-cn.md index 6281045..bc729b6 100644 --- a/doc/README.zh-cn.md +++ b/doc/README.zh-cn.md @@ -60,13 +60,15 @@ https://github.com/wangyu-/UDPspeeder/releases 现在client和server之间建立起了tunnel。想要连接44.55.66.77:7777,只需要连接 127.0.0.1:3333。来回的所有的udp流量会被加速。 -###### 注: +###### 备注: -f20:10 表示对每20个原始数据发送10个冗余包。 -k 指定一个字符串,server/client间所有收发的包都会被异或,改变协议特征,防止UDPspeeder的协议被运营商针对。 -注意要为UDPspeeder加速的应用设置好MTU(不是在UDPspeeder中,是在被加速的应用中),建议设置为1200。 +###### 注意 + +要为UDPspeeder加速的应用设置好MTU(不是在UDPspeeder中,是在被加速的应用中),建议设置为1200。 另外,如果被加速的应用不能调整MTU,也可以在UDPspeeder中通过`--mode 0 --mtu 1200`设置MTU。关于`--mode 0`和`--mtu`的具体含义请看下文。 From aec423012c0d75b960bf6720a63e2eb08cde3bed Mon Sep 17 00:00:00 2001 From: wangyu- Date: Fri, 20 Oct 2017 23:45:27 -0700 Subject: [PATCH 40/43] Update README.zh-cn.md --- doc/README.zh-cn.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/README.zh-cn.md b/doc/README.zh-cn.md index bc729b6..96dae0c 100644 --- a/doc/README.zh-cn.md +++ b/doc/README.zh-cn.md @@ -52,10 +52,10 @@ https://github.com/wangyu-/UDPspeeder/releases 假设你有一个server,ip为44.55.66.77,有一个服务监听在udp 7777端口。 假设你需要加速本地到44.55.66.77:7777的流量。 ``` 在client端运行: -./speederv2 -s -l0.0.0.0:4096 -r127.0.0.1:7777 -f20:10 -k "passwd" +./speederv2 -c -l0.0.0.0:3333 -r44.55.66.77:4096 -f20:10 -k "passwd" 在server端运行: -./speederv2 -c -l0.0.0.0:3333 -r44.55.66.77:4096 -f20:10 -k "passwd" +./speederv2 -s -l0.0.0.0:4096 -r127.0.0.1:7777 -f20:10 -k "passwd" ``` 现在client和server之间建立起了tunnel。想要连接44.55.66.77:7777,只需要连接 127.0.0.1:3333。来回的所有的udp流量会被加速。 From a5612072eaaa6d3f148cb17945f771f4914501fb Mon Sep 17 00:00:00 2001 From: wangyu- Date: Fri, 20 Oct 2017 23:48:02 -0700 Subject: [PATCH 41/43] Update README.zh-cn.md --- doc/README.zh-cn.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/README.zh-cn.md b/doc/README.zh-cn.md index 96dae0c..839268e 100644 --- a/doc/README.zh-cn.md +++ b/doc/README.zh-cn.md @@ -196,8 +196,6 @@ FEC算法很吃CPU,初次使用建议关注UDPspeeder的CPU占用。如果CPU被 具体配置见,[UDPspeeder + openvpn config guide](/doc/udpspeeder_openvpn.md). -另外,这种方案加速TCP时效果可以和BBR叠加,UDPspeeder用来改善丢包率,BBR负责重传,是不错的组合。 - #### UDPspeeder + kcptun/finalspeed + $*** 同时加速tcp和udp流量 如果你需要用加速的tcp看视频和下载文件,这样效果比UDPspeeder+vpn方案更好(在没有BBR的情况下)。 ![image0](/images/cn/speeder_kcptun.PNG) @@ -210,6 +208,8 @@ FEC算法很吃CPU,初次使用建议关注UDPspeeder的CPU占用。如果CPU被 (也可以把图中的$*** server换成其他的socks5 server,这样连$*** client也不需要了) +另外,这种方案加速TCP时效果可以和BBR叠加,UDPspeeder用来改善丢包率,BBR负责重传,是不错的组合。 + # 编译教程 暂时先参考udp2raw的这篇教程,几乎一样的过程。 From be9d0270d1c4ac4d06d300f6bef844c958767060 Mon Sep 17 00:00:00 2001 From: wangyu- Date: Sat, 21 Oct 2017 06:48:41 -0700 Subject: [PATCH 42/43] Update README.zh-cn.md --- doc/README.zh-cn.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/README.zh-cn.md b/doc/README.zh-cn.md index 839268e..141e7d4 100644 --- a/doc/README.zh-cn.md +++ b/doc/README.zh-cn.md @@ -1,7 +1,7 @@ # UDPspeeder ![image0](/images/cn/speedercn.PNG) -双边网络加速工具,软件本身的功能是加速UDP;不过,配合vpn可以加速全流量(包括TCP/UDP/ICMP)。通过合理配置,可以加速游戏,降低游戏的丢包和延迟;也可以加速下载和看视频这种大流量的应用。用1.5倍的流量,就可以把10%的丢包率降低到万分之一以下。 +双边网络加速工具,软件本身的功能是加速UDP;不过,配合vpn可以加速全流量(包括TCP/UDP/ICMP)。通过合理配置,可以加速游戏,降低游戏的丢包和延迟;也可以加速下载和看视频这种大流量的应用。用1.5倍的流量,就可以把10%的丢包率降低到万分之一以下。跟 kcptun/finalspeed/BBR 等现有方案比,主要优势是可以加速 UDP 和 ICMP,现有方案几乎都只能加速 TCP。 我自己稳定用了几个月,用来加速美服的Brawl Stars和亚服的Mobile Legend,效果不错,加速前卡得几乎没法玩,加速后就没怎么卡过了。用来看视频也基本满速。 From 6d8904d144105071e956926953f42b45ea689ee0 Mon Sep 17 00:00:00 2001 From: wangyu- Date: Sat, 21 Oct 2017 06:49:52 -0700 Subject: [PATCH 43/43] Update README.zh-cn.md --- doc/README.zh-cn.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/README.zh-cn.md b/doc/README.zh-cn.md index 141e7d4..96a4bc1 100644 --- a/doc/README.zh-cn.md +++ b/doc/README.zh-cn.md @@ -11,7 +11,7 @@ ![image0](/images/Capture2.PNG) -另外,可以和[udp2raw](https://github.com/wangyu-/udp2raw-tunnel)串联使用,在加速的同时把UDP伪装成TCP,防止UDP被运营商QOS或屏蔽。 +另外,可以和udp2raw串联使用,在加速的同时把UDP伪装成TCP,防止UDP被运营商QOS或屏蔽。udp2raw: https://github.com/wangyu-/udp2raw-tunnel #### 效果 ![image0](/images/Capture8.PNG)