问题描述

公司的网络限速了,峰值在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. ‘pip 安装第三方库速度太慢’的解决办法
  2. VS2005解决方案的目录结构
  3. Maven远程仓库:pom依赖以及jar包下载
  4. java如何调用系统保存框_java使用poi实现excel导出之后如何弹出保存提示框
  5. 单词搜索—leetcode79
  6. Mybatis源码阅读(一):Mybatis初始化1.3 —— 解析sql片段和sql节点
  7. 关于集合类的做法示例 实体类赋值 cnblogs
  8. ospf 环回口的路由条目_华为OSPF基础实验
  9. VSS控制存储过程,及其asp.net的远程调试
  10. Ubuntu 16.04 install Docker 1.12.0
  11. 【滤波器】基于matlab GUI高通+低通+带通+带阻FIR滤波器设计【含Matlab源码 092期】
  12. 表或视图不存在 Hibernate Oracle
  13. python 消息队列 go_Python并发编程-RabbitMq消息队列
  14. 统计学习方法——概述
  15. word公式常用快捷键
  16. mysql实现不同电脑间局域网连接
  17. Sourcemap是什么?Sourcemap的作用及用法概括
  18. 开源项目之开源的2D游戏引擎 HGE
  19. 宝可梦世界无限极服务器密码,宝可梦世界无极限
  20. 关于视觉工业相机的50个问题

热门文章

  1. 计算机二级vb上机操作题库,全国计算机二级VB上机题库(题+答案)word版
  2. html输入公式得到混合运算结果,EXCEL公式与函数教案
  3. Office 2010 文件验证
  4. 像Selenium爬网页一样爬手机App,可见即可爬——appium 教程(一)appium安装windows版
  5. 在安装VC2012上再安装VC2010时连接出错解决
  6. atmega168p与328p_atmega328P 写入 Boot Loader的那点事 之 互相伤害
  7. 服务器wifi模块通讯协议,WiFi模块 TCP/IP协议栈
  8. 三菱q系列c语言模块,【重磅干货】三菱Q系列串口模块QJ71C24的Modbus通信
  9. Gocloud高恪固件CVE-2020-8949漏洞利用打开SSH(poc支持5.2最新版测试通过)
  10. 支付宝小程序生成二维码