省心的优化网络方法(各类双边网络加速软件效果测试)
省心的优化网络方法(各类双边网络加速软件效果测试)
2024-09-27 06:11:39  作者:染上思念  网址:https://m.xinb2b.cn/life/zsd135831.html

双边加速即在服务端和客户端都需要进行安装,对数据包进行处理,区别于单边加速,如BBR,BBR通过算法改善服务端发包行为,只需在服务端安装,而不用在客户端安装。

通过网络搜索,目前比较流行的双边加速软件大概有如下

kcptun:https://github.com/xtaci/kcptunUDPSpeeder:https://github.com/wangyu-/UDPspeederudp2raw:https://github.com/wangyu-/udp2rawkcptun

原理如下图,加速两边通过TCP连接,广域网之间使用KCP协议


kcp

KCP - A Fast and Reliable ARQ Protocol

简单理解KCP是在UDP的基础之上加上拥塞控制和超时重传,模拟TCP的行为,在公网上,本质上还是UDP,KCP是在用户态实现拥塞控制和超时重传,而TCP是在内核TCP协议栈中实现的

KCP是一个快速可靠协议,能以比 TCP 浪费 10%-20% 的带宽的代价,换取平均延迟降低 30%-40%,且最大延迟降低三倍的传输效果。纯算法实现,并不负责底层协议(如UDP)的收发,需要使用者自己定义下层数据包的发送方式,以 callback的方式提供给 KCP。 连时钟都需要外部传递进来,内部不会有任何一次系统调用。

TCP是为流量设计的(每秒内可以传输多少KB的数据),讲究的是充分利用带宽。而 KCP是为流速设计的(单个数据包从一端发送到一端需要多少时间),以10%-20%带宽浪费的代价换取了比 TCP快30%-40%的传输速度。TCP信道是一条流速很慢,但每秒流量很大的大运河,而KCP是水流湍急的小激流。

近年来,网络游戏和各类社交网络都在成几何倍数的增长,不管网络游戏还是各类互动社交网络,交互性和复杂度都在迅速提高,都需要在极短的时间内将数据同时投递给大量用户,因此传输技术自然变为未来制约发展的一个重要因素,而开源界里各种著名的传输协议,如 raknet/enet 之类,一发布都是整套协议栈一起发布,这种形式是不利于多样化的,我的项目只能选择用或者不用你,很难选择 “部分用你”,然而你一套协议栈设计的再好,是非常难以满足不同角度的各种需求的。

因此 KCP 的方式是把协议栈 “拆开”,让大家可以根据项目需求进行灵活的调整和组装,你可以下面加一层 reed solomon 的纠删码做 FEC,上面加一层类 RC4/Salsa20 做流加密,握手处再设计一套非对称密钥交换,底层 UDP 传输层再做一套动态路由系统,同时探测多条路径,选最好路径进行传输。这些不同的 “协议单元” 可以像搭建积木一般根据需要自由组合,保证 “简单性” 和 “可拆分性”,这样才能灵活适配多变的业务需求,哪个模块不好,换了就是。

未来传输方面的解决方案必然是根据使用场景深度定制的,因此给大家一个可以自由组合的 “协议单元” ,方便大家集成在自己的协议栈中。

如果网络永远不卡,那 KCP/TCP 表现类似,但是网络本身就是不可靠的,丢包和抖动无法避免(否则还要各种可靠协议干嘛)。在内网这种几乎理想的环境里直接比较,大家都差不多,但是放到公网上,放到3G/4G网络情况下,或者使用内网丢包模拟,差距就很明显了。公网在高峰期有平均接近10%的丢包,wifi/3g/4g下更糟糕,这些都会让传输变卡。

总的来说, KCP 采用了与 TCP 几乎相同的架构, 在用户态实现了确认、ARQ、流量控制与拥塞控制机制, 但 KCP 一定程度上破坏了公平性, TCP 设计的初衷之一便是在全局角度达到公平, 因此会有慢开始、丢包退让等机制(RFC 5681), 而 KCP 在多处修改了相应的策略, 当网络环境不佳时, KCP 将比 TCP 拥有更好的性能, TCP 经过了这么多年的发展, 本身已经是一个足够完善的协议, 对于拥塞控制也做了大量的工作, 所做的一切就是为了能让全局的平均性能达到最好, 对于 KCP 的争议也有很多, 单一维度无法直接评判 KCP 协议本身, 但可以确定的是当大量客户端都开始采用 KCP 时, 那 KCP 也就失去它的优势了

UDPSpeeder

A Tunnel which Improves your Network Quality on a High-latency Lossy Link by using Forward Error Correction, possible for All Traffics(TCP/UDP/ICMP)

工作模式如下图


主要原理是通过冗余数据来对抗网络的丢包,发送冗余数据的方式支持FEC(Forward Error Correction)和多倍发包,其中FEC算法是Reed-Solomon。


简单理解就是通过发送冗余数据包对抗丢包

udp2raw

A Tunnel which Turns UDP Traffic into Encrypted UDP/FakeTCP/ICMP Traffic by using Raw Socket,helps you Bypass UDP FireWalls(or Unstable UDP Environment)

工作模式


简单理解就是通过rawSocket模拟TCP的包头和行为迷惑NAT设备

测试环境环境准备

三台主机,主机A为被测主机

主机A--洛杉矶(数据中心带宽接入,带宽100Mbps)主机B--中国(家庭带宽接入,带宽100Mbps)主机C--洛杉矶(数据中心带宽接入,带宽50Mbps )

假设A主机公网IP为44.55.66.77

测试内容为

时延测试(ping)下载速度测试(wget)

准备100M和500M的文件,启HTTP Server

dd if=/dev/zero bs=100M count=1 > ~/100Mdd if=/dev/zero bs=500M count=1 > ~/500Mcd ~ && python -m SimpleHTTPServer 8388

下载测试命令,注意写入到/dev/null避免受本地磁盘写入速度影响

wget -O /dev/null http://127.0.0.1:8388/100M​wget -O /dev/null http://127.0.0.1:8388/500M

kcptun、UDPspeeder、udp2raw安装,进入对应github页面,下载二进制可执行文件到/usr/bin/即可裸机测试

首先不安装任何加速,进行时延测试

B到A:丢包率9%,平均时延201ms

300 packets transmitted, 271 received, 9% packet loss, time 299310msrtt min/avg/max/mdev = 174.219/201.209/293.486/36.907 ms

C到A:丢包率0%,平均时延0.79

300 packets transmitted, 300 received, 0% packet loss, time 306006msrtt min/avg/max/mdev = 0.437/0.793/14.616/1.108 ms

下载速度测试

B到A:受丢包和延迟影响,缓慢增长,大概10s到达峰值

100%[=====================>] 104,857,600 5.42MB/s in 17s2022-01-01 21:43:24 (6.01 MB/s) - ‘/dev/null’ saved [104857600/104857600]​​100%[=====================>] 524,288,000 9.53MB/s in 62s2022-01-01 21:44:49 (8.12 MB/s) - ‘/dev/null’ saved [524288000/524288000]​

C到A:无丢包和延迟,速度能立即到达峰值,峰值速度相对的较低,因为C的带宽只有50Mbps

100%[=======================>] 104,857,600 5.68MB/s in 18s​2022-01-01 21:46:24 (5.68 MB/s) - ‘/dev/null’ saved [104857600/104857600]​​100%[=======================>] 524,288,000 5.68MB/s in 88s​2022-01-01 21:48:43 (5.68 MB/s) - ‘/dev/null’ saved [524288000/524288000]​

kcptun

使用默认参数

# server端kcptun_server -t "127.0.0.1:8388" -l ":5201"​# client端kcptun_client -r "44.55.66.77:5201" -l "127.0.0.1:8388"

由于是TCP隧道,无法接入Wireguard,无法测试延迟,只能测试下载速度

下载速度测试

B到A:立即到达峰值,峰值速度有所增加

立即到达峰值,峰值速度有所增加,增加了2MB/s 100%[======================>] 104,857,600 6.05MB/s in 12s​2022-01-01 21:54:16 (8.32 MB/s) - ‘/dev/null’ saved [104857600/104857600]​​立即到达峰值,峰值速度有所增加,增加不大100%[======================>] 524,288,000 5.60MB/s in 59s​2022-01-01 21:56:00 (8.41 MB/s) - ‘/dev/null’ saved [524288000/524288000]​

C到A:立即到达峰值,速度爆炸,突破了C的带宽限制,看样子使用kcptun确实速度有提升

立即到达峰值,速度爆炸,突破了C的带宽限制100%[======================>] 104,857,600 47.5MB/s in 2.1s​2022-01-01 21:57:08 (47.5 MB/s) - ‘/dev/null’ saved [104857600/104857600]​​立即到达峰值,速度爆炸,突破了C的带宽限制100%[=======================>] 524,288,000 49.6MB/s in 10s​2022-01-01 21:58:01 (47.8 MB/s) - ‘/dev/null’ saved [524288000/524288000]

kcptun udp2raw

# udp2raw server端udp2raw -s -l0.0.0.0:5201 -r127.0.0.1:8888 -k "passwd" --raw-mode faketcp --cipher-mode xor -a --fix-gro​# udp2raw client端udp2raw -c -l127.0.0.1:3333 -r44.55.66.77:5201 -k "passwd" --raw-mode faketcp --cipher-mode xor -a --fix-gro​# kcptun server端kcptun_server -t "127.0.0.1:8388" -l "127.0.0.1:8888" ​# kcptun client端kcptun_client -r "127.0.0.1:3333" -l "127.0.0.1:8388"

下载速度测试

B到A:立即到达峰值,峰值速度变化不大

100%[=========================>] 104,857,600 9.45MB/s in 11s​2022-01-01 22:05:24 (9.42 MB/s) - ‘/dev/null’ saved [104857600/104857600]​​100%[==========================>] 524,288,000 9.37MB/s in 65s​2022-01-01 22:09:14 (7.71 MB/s) - ‘/dev/null’ saved [524288000/524288000]​

C到A:立即到达峰值,峰值速度下降约一半

​100%[=======================================>] 104,857,600 23.5MB/s in 4.3s​2022-01-01 22:10:05 (23.3 MB/s) - ‘/dev/null’ saved [104857600/104857600]​​100%[=======================================>] 524,288,000 26.2MB/s in 18s​2022-01-01 22:10:37 (27.1 MB/s) - ‘/dev/null’ saved [524288000/524288000]​

结论:如无明显QoS,可直接使用kcptun,如QoS速度下降甚至端口,可在外套一层udp2raw

UDPspeeder

# 在server端运行speederv2 -s -l0.0.0.0:5201 -r127.0.0.1:8388 -f20:10 -k "passwd" --mode 0​# 在client端运行speederv2 -c -l127.0.0.1:8388 -r44.55.66.77:5201 -f20:10 -k "passwd" --mode 0

由于UDPspeeder监听的是UDP端口,无法直接使用HTTP,因此引入Wireguard,配置如下

# 服务端[Interface]Address = 5.5.5.1/24ListenPort = 8388PrivateKey = aHWomHYVWebT lAPyZcofEfdQYXdFOXpVWRKD91OyXA=​[Peer]PublicKey = 451o6In0DqSTyg1GE4WzrK4Z0BLuFXTrjdqjBJ/RLwc=AllowedIPs = 5.5.5.2/32​# 客户端[Interface]Address = 5.5.5.2/24PrivateKey = oAaT5OjURGvVqs/pbMa2HAsZXpbwNQCEzW0MZBmGJ1Y=​[Peer]PublicKey = 1yrnzlpVNhpQyyBj0oehVqCaL/06RjK/tcd3icMuZ0Q=AllowedIPs = 5.5.5.1/32Endpoint = 127.0.0.1:8388PersistentKeepalive = 15

首先进行时延测试

B到A:丢包率10%,丢包率有所增加

300 packets transmitted, 268 received, 10% packet loss, time 299307msrtt min/avg/max/mdev = 195.482/239.424/319.491/49.255 ms

C到A:本身不丢包,测试无意义

下载速度测试

B到A:速度缓慢增加,20:10似乎发包率不够,速度波动很大

100%[===========================>] 104,857,600 8.89MB/s in 12s​2022-01-01 22:21:26 (8.03 MB/s) - ‘/dev/null’ saved [104857600/104857600]​# 速度波动很大,测试几次才测试完100%[===========================>] 524,288,000 6.31MB/s in 1m 42s2022-01-01 22:29:08 (4.92 MB/s) - ‘/dev/null’ saved [524288000/524288000]

C到A:速度下降严重

100%[=============================>] 104,857,600 2.80MB/s in 30s2022-01-01 22:30:43 (3.32 MB/s) - ‘/dev/null’ saved [104857600/104857600]​​100%[==============================>] 524,288,000 3.43MB/s in 2m 32s2022-01-01 22:33:50 (3.29 MB/s) - ‘/dev/null’ saved [524288000/524288000]

结论:不知道是配置参数不对还是因为引入了Wireguard,总体速度达不到kcptun,甚至达不到裸机测试

UDPspeeder udp2raw

# 在server端运行udp2raw -s -l0.0.0.0:5201 -r127.0.0.1:8888 -k "passwd" --raw-mode faketcp --cipher-mode xor -a --fix-gro​# 在client端运行udp2raw -c -l127.0.0.1:3333 -r44.55.66.77:5201 -k "passwd" --raw-mode faketcp --cipher-mode xor -a --fix-gro​​# 在server端运行speederv2 -s -l0.0.0.0:5201 -r127.0.0.1:8388 -f20:10 -k "passwd" --mode 0​# 在client端运行speederv2 -c -l127.0.0.1:8388 -r44.55.66.77:5201 -f20:10 -k "passwd" --mode 0

由于UDPspeeder监听的是UDP端口,无法直接使用HTTP,因此引入Wireguard,配置如下

# 服务端[Interface]Address = 5.5.5.1/24ListenPort = 8388PrivateKey = aHWomHYVWebT lAPyZcofEfdQYXdFOXpVWRKD91OyXA=​[Peer]PublicKey = 451o6In0DqSTyg1GE4WzrK4Z0BLuFXTrjdqjBJ/RLwc=AllowedIPs = 5.5.5.2/32​# 客户端[Interface]Address = 5.5.5.2/24PrivateKey = oAaT5OjURGvVqs/pbMa2HAsZXpbwNQCEzW0MZBmGJ1Y=​[Peer]PublicKey = 1yrnzlpVNhpQyyBj0oehVqCaL/06RjK/tcd3icMuZ0Q=AllowedIPs = 5.5.5.1/32Endpoint = 127.0.0.1:8388PersistentKeepalive = 15

首先进行时延测试

B到A:同样300个包,丢包率0%,确实有所提升,不清楚是QoS影响还是网络本身波动

300 packets transmitted, 300 received, 0% packet loss, time 299403msrtt min/avg/max/mdev = 200.413/202.806/222.987/2.978 ms

C到A:本身不丢包,测试无意义

下载速度测试

B到A:速度缓慢增加,20:10似乎发包率不够,速度波动很大,达不到裸机

100%[===============================>] 104,857,600 6.70MB/s in 16s2022-01-01 22:51:54 (6.28 MB/s) - ‘/dev/null’ saved [104857600/104857600]​​100%[===============================>] 524,288,000 6.08MB/s in 73s2022-01-01 22:53:34 (6.81 MB/s) - ‘/dev/null’ saved [524288000/524288000]

测试结果时延与丢包:UDPspeeder udp2raw组合对丢包有改善,不知是否QoS影响,需自测

方向

裸机

UDPspeeder

UDPspeeder udp2raw

下载速度套上kcptun速度确实有提升UDPspeeder反而会使速度下降kcptun udp2raw速度下降UDPspeeder udp2raw速度下降

方向

裸机

kcptun

kcptun udp2raw

UDPspeeder

UDPspeeder udp2raw

建议:如无明显QoS,可直接使用kcptun,如QoS速度下降甚至端口,可在外套一层udp2raw

因网络环境复杂,且各种加速工具参数配置组合较多,稍有不慎则会对速度影响大,故以上建议和结论仅供参考

参考https://github.com/xtaci/kcptunhttps://github.com/skywind3000/kcphttps://github.com/wangyu-/UDPspeederhttps://github.com/wangyu-/udp2raw,
  • 创维集团董事长黄宏生(创维创始人黄宏生是要认真造车吗)
  • 2024-09-27创维创始人黄宏生是要认真造车吗记者|程迪编辑|上个月底(4月27日),开沃新能源汽车在北京举办了一场创维汽车品牌见面会,正式宣布“创维造车”,并向外界发布了“创维汽车”品牌一石激起千层浪,包括一个造电视的也能造车了?造车门槛已经变。
  • 男人和女人相处最好的关系是什么(相处男人主动还是女人主动)
  • 2024-09-27相处男人主动还是女人主动男生追女生好像从来都是天经地义的定律,好多人认为,男人吗就应该主动去争取自己喜欢的女人如今社会,好像变了,男生都不主动去追女生了,宁可宅在家里,宁可在家打游戏也不去找女生了,也不知道是那里出了问题随着。
  • 快递包裹检出病毒是谣言么(快递烤鸭包装现破洞)
  • 2024-09-27快递烤鸭包装现破洞柯先生的快递疑似被老鼠啃咬本文图均为受访者供图4月26日,家住广东深圳的柯先生向澎湃新闻(www.thepaper.cn)反映,他从北京寄往家中的快递在接收时发现外包装纸箱破损,箱子里装的一袋北京烤鸭。
  • 深圳商标注册费用一般多少(深圳企业品牌集聚效应凸显)
  • 2024-09-27深圳企业品牌集聚效应凸显见圳客户端•深圳新闻网2021年5月10日讯(深圳特区报记者何泳)华为、中集、万科、招商银行、大族激光、比亚迪、创维……一个个深圳本土品牌,早已名扬中外今天是中国品牌日,记者采访了解到,得益于企业自主。
  • 淅沥怎么读(淅沥的读音和解释)
  • 2024-09-27淅沥的读音和解释淅沥,拼音为xīlì,汉语词语,意思是象声词,形容轻微的风雨声、落叶声等出处:(1)唐·乔知之《定情篇》:“碧荣始芬敷,黄叶已淅沥”(2)唐·李商隐《到秋》诗:“扇风淅沥簟流漓,万里南云滞所思”。
  • 羊村守护者每集介绍(羊村守护者火热开播)
  • 2024-09-27羊村守护者火热开播心心念念的《羊村守护者》开播啦!!!湖南金鹰卡通卫视今晚17:00起,每天都是精彩连播!羊角包下午5点的时候啥都不做了,就是在公司赖着看完了今天首播的4集!此时此刻我只想喊一句:“再来一集!”想必大家。
  • 景色优美句子(赏秋)
  • 2024-09-27赏秋新华社照片,外代,2020年11月27日(外代一线)(2)赏秋11月27日,一名男子走在日本东京的日比谷公园新华社/法新新华社照片,外代,2020年11月27日(外代一线)(3)赏秋11月27日,人们。
  • 新手养兔的方法和注意事项(养兔须知8问题莫要盲目入行)
  • 2024-09-27养兔须知8问题莫要盲目入行养兔相对于其他畜禽养殖项目而言其投资小、周期短,因此有不少农村创业者选择养兔,然而养兔并非一个稳赚不赔的行业,更不是一个赚大钱的行业,故而大家在从事养兔之前一定要明白8个问题才可以!1、养兔不会一夜暴。
  • 为什么梁冠华的狄仁杰这么经典(220斤的胖子梁冠华)
  • 2024-09-27220斤的胖子梁冠华在娱乐圈里想要混得风生水起,要么就有出众的演技,要么就要有良好的身材跟脸蛋,如果两者都不具备,那么明星可能就会沉入大海,除了以上2点之外,还得具备最后一个条件,那就是有特色,长了一张让观众记住你的脸,。
  • 荣耀20官方全部参数(荣耀首款3200万自拍手机)
  • 2024-09-27荣耀首款3200万自拍手机*本文来自花粉俱乐论坛-nn高柏飞今天,荣耀20i在北京发布,这是自荣耀以全新品牌形象推出的第二款手机主打3200万AI美拍的荣耀20i,以其高颜值潮美的设计,不仅受到了年轻人的追捧,想必也会再次定义。
  • 初一语文写作方法(初一语文写作方法看这里)
  • 2024-09-27初一语文写作方法看这里初一语文写作方法看这里:首先明确要写的习作属于下面哪一类;(1)写人习作:A,写父母或老师的B,写自己的C,写同学的习作也要加上题目,常见题目如,一个我最敬佩的人、一个我熟悉的人、这就是我等(2)写事。
  • 唐老鸭真名叫什么
  • 2024-09-27唐老鸭真名叫什么唐老鸭(DonaldDuck),全称:唐纳德·方特罗伊·达克(英文名称:"Don"DonaldFauntleroyDuck)是迪士尼所创的经典卡通明星之一,官方生日是1934年6月9日。