问题描述

公司的网络限速了,峰值在600KB/s左右。所以啊,下载个900M的系统镜像……emmmmm……

本文将讨论几种方法来”突破“这种限制,更准确的说法是“绕过”。

方法一、多网卡 + HTTP的断点续传

#1 准备3张无线网卡,连接Wi-Fi,配置默认路由

准备三张无线网卡,连接无线,分配IP地址,配置默认路由。

大概要执行如下这些命令。这里简单描述,不探讨太多的细节,根据你的环境可能会有所差异:

#!/bin/shsystemctl start wpa_supplicant@wlx00e62d0333fc.service wpa_supplicant@wlx00e62d033399.service wpa_supplicant@wlx00e02d0400a6.servicedhclient -v wlx00e62d0333fc
dhclient -v wlx00e62d033399
dhclient -v wlx00e02d0400a6route add default gw 192.168.1.1 dev wlx00e62d0333fc
route add default gw 192.168.1.1 dev wlx00e62d033399
route add default gw 192.168.1.1 dev wlx00e02d0400a6

到此,硬件已经准备好了,第一步已经完成了。

#2 发送HEAD请求,获取文件大小

发送HTTP中的HEAD方法来获取文件的大小,执行如下命令:

#!/bin/shcurl -s --head http://mirror.bit.edu.cn/centos/7/isos/x86_64/CentOS-7-x86_64-Minimal-1804.iso \| $(which grep) -i -E 'Content-Length:' \| awk '{print $2}'

上述命令输出“950009856”,该值是要下载的文件的大小。

我们将文件拆成三部分:“0-316669952”、“316669953-633339904”、“633339905-950009856”。拆成三部分是为了后面的断点续传。

至此,第二步已经完成了。接下来,可以“并行”断点续传了。

#3 执行并行的断点续传

执行如下的三个命令进行断点续传:

    **# curl --interface wlx00e02d0400a6 -o /tmp/p1 --header "Range: bytes=0-316669952" http://mirror.bit.edu.cn/centos/7/isos/x86_64/CentOS-7-x86_64-Minimal-1804.iso**
    **# curl --interface wlx00e62d033399 -o /tmp/p2 --header "Range: bytes=316669953-633339904" http://mirror.bit.edu.cn/centos/7/isos/x86_64/CentOS-7-x86_64-Minimal-1804.iso**
    **# curl --interface wlx00e62d0333fc -o /tmp/p3 --header "Range: bytes=633339905-950009856" http://mirror.bit.edu.cn/centos/7/isos/x86_64/CentOS-7-x86_64-Minimal-1804.iso**

注意,这三个命令要同时执行(使用“&”后台运行,或者开三个终端,随你便),否则就失去“并行”的意义了,和普通下载没有什么区别了。

#4 合并文件

执行如下命令将三个文件合并在一起:

 **# cat /tmp/p{1..3} > CentOS-7-x86_64-Whatever.iso**

至此,任务就完成了。但通常我们会对文件进行校验,以检测损坏。通过检查文件的sha1sum值是否与官网给出的sha1sum值相同。如果sha1sum值不同,则表示存在问题。

#5 更进一步

这里的“更进一步”指的是脚本封装。这里就不再展开了。

三张无线网卡可以连接不同的无线;也可以是有线和无线混用;并且,既然是断点续传,下载连接可以是不同的源;

如果使用了虚拟机的桥接网络,你可以为虚拟机添加任意多张网卡。emmmmm...,KVM桥接网络了解一下?这个我没有测试过,原理上是行的通的。

# 注意事项

存在局限性
(1)服务端的HTTP服务器必须支持HEAD方法。
(2)准备多张网卡。
(3)如果网络的IP分配是由严格限制的,就表示你的网卡无法随意的加入网络,那么这种方法是无效的。

方法二、网络叠加 + 迅雷

网络叠加,可以将一个40M的宽带和50M的宽带进行叠加,得到一个90M的宽带。关于网络叠加的内容可以参考:

   * [[http://bbs.51cto.com/thread-1479284-1-1.html|有个关于宽带的带宽叠加的问题]]* [[https://jingyan.baidu.com/article/1974b289a238d6f4b1f7743c.html|双路由器实现宽带叠加]]* [[https://jingyan.baidu.com/article/d45ad148a38dba69552b8088.html|win10 双网 叠加 速度 翻倍]]* [[https://blog.csdn.net/ieayoio/article/details/79442899|有线与无线网络叠加提升网速]]

这里就不展开详细介绍了。之所以不进行详细介绍是因为网络叠加的局限性,看如下的一段话:

    It’s just not possible to do that, because routing the packets of one connection to more than one link would break the tcp connection. The receiver would see IP packets with different source IP addresses, and it would drop the packets.

引自「Load balancing using iptables with connmark」。回到我们的问题,使用HTTP协议进行下载时,依旧是TCP/IP网络。如果使用了多链路来路由,只能导致对端丢弃数据包,更本达不到目的。

所以要配合迅雷,迅雷在内部有其自己的协议或和其他方式,或者定位资源后使用其他协议来传输数据(当然这些都是猜测),以此来使用多链路。但它肯定不能违背网络原理。

所以具体的情况还要看网络协议,因此「网络叠加 + 迅雷」并不是一个好的办法。

多说依据:我不知道网络叠加的具体原理,但是很可能是iptables的数据包标记功能实现的负载均衡。

方法三、下载加速器

确实有这种东西,比如axel(1)。但是没有体会到它的效果。我也不是很明白这其中的原理。网络参数自动调优?

12/19/2018 体会到这东西的用处了。在下载FoxitReader的时候,速度只有50KB/s,显然没有达到带宽。使用这东西,创建10个下载连接,最后他会合并下载文件,估计用的也是断点续传吧……

待办事项

# 创建虚拟网卡

-「Make some virtual MAC address」

#!/bin/ship link add link eth0 address 00:11:11:11:11:11 eth0.1 type macvlan
ifconfig eth0.1 up
dhclient -v eth0.1

参考文献

HTTP文件断点续传的原理
Load balancing using iptables with connmark
【经验】带宽叠加的5种方法,原理优缺点PK

「Linux」- 如何突破网络下载限速? @20210216相关推荐

  1. 「Linux」作怪的网络

    从Linux的安装,基本命令的使用,常规 Linux 的安全策略到 Linux 常见的目录结构,今天我们看看Linux的网络 "秀才不出门,便知天下事",你是秀才你试试. 没有网络 ...

  2. steam 32位 linux 下载地址,「Linux」- 安装 Steam 客户端

    「Linux」- 安装 Steam 客户端 更新日期:2020年09月30日 问题描述 虽然不经常玩游戏(有玩的冲动,但是打开游戏之后又不想玩了),但是还是会安装 Steam 客户端 该笔记将记录:在 ...

  3. 有道 linux 安装路径,「Linux」- 安装有道词典

    「Linux」- 安装有道词典 更新日期:2019年07月10日 @IGNORECHANGE 系统环境 系统环境:Debian 安装依赖 #!/bin/bash apt-get install pyt ...

  4. 「Linux」- 运行任天堂红白机游戏(“小霸王”) @20210308

    问题描述 # 02/16/2021 今天,闲来无事(其实也有事,就是累了,想休息一下),想再玩一玩这些小游戏,重温经典,所以就有了这篇文章,来记录这一过程.当我们不会去买一个红白机,虽然有卖的.我们想 ...

  5. 「Linux」- 禁用 IPv6 协议栈 @20210403

    问题描述 为什么禁用 IPv6 协议栈?因为很多配套的基础设置还未到位,因此使用 IPv6 会遇到很多问题,比如 a 5-second delay 问题. 该笔记将记录:在 Linux 中,如何禁用 ...

  6. linux网卡限速tc,Linux使用tc对网络进行限速

    Linux使用tc对网络进行限速.md 一.限制向特定IP端的出流量outgoing tc qdisc del dev eth0 root 2>/dev/null tc qdisc add de ...

  7. docker运行linux桌面,「Linux」- 在 Docker 中,运行桌面应用(以向日葵远程客户端为例)...

    「Linux」- 在 Docker 中,运行桌面应用(以向日葵远程客户端为例) 更新日期:2021年01月15日 @IGNORECHANGE @WIP 问题描述 我们使用 Debian 发行版,但是某 ...

  8. 「Linux」这些结构目录休想唬我

    才开始接触虚拟机的时候,确实很奇怪的,不过又觉得蛮新奇的,相信通过前面两篇文章,你应该装好了自己的虚拟机,也可以尝试做做实验,敲命令了.如果还没有装或者还没有熟悉命令,赶快去试试,听话 在Linux中 ...

  9. 「米聊」突然复活 | 附下载地址!

    ‍ 来自:脚本之家(ID:jb51net) 是的,你没看错! 前段时间停服的米聊,又复活了 !!这..哭笑不得  前几天,还和大家聊过[米聊关停]事件,没想到这么快[米聊]又杀回来了. 对于小米这款运 ...

  10. linux mysql软件_「Linux」 - 常用软件安装-MySql

    一.TIPS 1.5.6版本使用mysql_install_db安装:5.7版本中被废弃,使用--initialize,进行初始化安装 2.初始化时,使用--initialize-insecure生成 ...

最新文章

  1. 数据交互极速体验-KETTLE的上手指南
  2. java开启线程的方法_Java有几种方法开启线程?怎么实现带有返回值的线程?
  3. [OSG]OSG的相关扩展
  4. ustc小道消息20220102
  5. vba定义全局变量并赋值_利用VBA代码如何打开任意程序
  6. Jquery validate验证表单时多个name相同的元素只验证第一个的问题
  7. 使用mockjs模拟数据
  8. 安装Oracle数据库操作步骤
  9. 解决mac下ssh空闲一段时间自动断开的问题
  10. 一篇文章助你深入理解zookeeper
  11. 《强化学习》中的第15章:神经科学
  12. Flink 的应用场景和架构模型
  13. 感悟:决定一个系统走势是多因素构成,而非单一因素决定
  14. Agilent函数发生器编程(Agilent IO Suite使用)
  15. 系统架构设计师考试总结
  16. 内网服务器设置proxy权限联通外网
  17. 新硬盘装机出现Disk Read Error解决方案
  18. 新产品内测!来体验超低延时的 H5 实时直播
  19. 【阶段1】【定理证明】二项式定理证明
  20. Gym - 101853E E. Maximum Sum (状压DP)

热门文章

  1. 通达信c语言接口,通达信数据接口及日线数据格式
  2. android 音效下载地址,V4A+Dolby Atmos安卓全局音效
  3. linux内核剖析之traps.c
  4. 【关于我】一个专注于嵌入式物联网架构设计的攻城狮
  5. IDEA中使用SVN IDEA配置SVN步骤(git也是)
  6. 4.6 Data符号调制——16QAM
  7. html调用影音先锋,在网页里嵌入影音先锋web万能播放控件
  8. MATLAB随机信号分析与处理
  9. vscode插件版本的选择与安装
  10. 自动生成光纤测试资料的软件,光缆测试模板生成工具官方版