前阵子我把一台退役的迷你主机改成了家里的下载机顺便把下载方式从“浏览器单线程硬拉”换成了 Aria2 这类支持全协议的开源下载引擎。折腾完以后从本地千兆局域网的文件服务器拉一个 4GB 的测试文件速度稳定在 110MB/s 左右从公网镜像站拉系统镜像速度也能跑到几十甚至上百兆字节每秒。标题里的数字听着夸张但只要链路达标、参数合理它确实可以被复现不是玄学。更让我满意的是这套方案同时覆盖了我日常会遇到的几种下载场景HTTP/HTTPS 直链、BT 种子、磁力链接全部用一个引擎统一管理跨平台还能后台跑。这篇文章会把我的思路、配置步骤、踩过的坑全部拆开讲一遍。如果你也经常要在不同下载器之间来回切换或者想在 NAS、Linux 服务器上搭一个自己说了算的下载环境这篇应该能帮你省不少事。1. 项目思路从“下载器来回切换”到“一个引擎通吃”1.1 为什么需要 HTTP、BT、磁力同时支持很多人会把下载工具分成两类一类用来下 HTTP 直链比如浏览器或者迅雷另一类用来下 BT 种子和磁力链接比如各种小众客户端。这么做临时用还行时间长了就有明显问题一个资源可能同时提供 HTTP 镜像和 BT 种子你为了稳定会先开 HTTP 下载器结果发现某个分包挂了又得转 BT或者反过来下到一半想换通道文件校验逻辑还不一样。真正省心的方案是底层引擎同时支持 HTTP、HTTPS、FTP、SFTP、BitTorrent、磁力链接。你不需要关心资源是哪种协议把链接丢进去就行。HTTP 直链能满速下载BT 种子和磁力链接也能走同一个调度系统配合统一的下载目录、断点续传、磁盘缓存效率高很多。选择全协议还有一个好处就是能针对不同资源做组合操作。比如一些开源软件的发布页同时给了 BT 种子和直链下载地址如果 BT 做种人数不多直链反而是更稳定的来源。只要有一个统一的下载引擎你可以分别下然后对比校验值也可以先借助 HTTP 把文件主体拿下来。当然这类操作的前提是资源本身允许这样用后面我会再细说。1.2 多款工具横评为什么我选了 Aria2 而不是现成 GUI我的需求比较明确既能装在 Linux 服务器上当一个无头下载服务也能临时在 Windows、macOS 上跑资源占用不能太高协议覆盖要全最好还能通过 Web 页面管理下载任务。当时对比了几套方案工具协议覆盖图形界面后台服务能力适合谁Aria2 WebUIHTTP/HTTPS/BT/磁力依赖前端很强RPC 管理愿意折腾、需要长期挂机的人Motrix同上有界面现代一般想要开箱即用的人qBittorrentBT/磁力为主有WebUI很强重度玩 PT/BT对 HTTP 要求不高的人TransmissionBT/磁力为主有很强追求极简与稳定的人最后胜出的是 Aria2。它的优势在于非常轻量一个二进制文件就能跑协议覆盖面广HTTP、HTTPS、FTP、SFTP、BT、磁力都能处理启动后通过 RPC 接口管理可以随时被其他程序调用就算不想用命令行也能套一层 AriaNg 之类的纯静态前端页面。可能有人会说Motrix 和 qBittorrent 不也有现成界面吗为什么绕一圈用 Aria2我的理由是图形客户端往往替你封装了很多配置看起来省心但遇到速度问题时你能调的东西很少。Aria2 把连接数、分段大小、缓存、DHT 开关等参数全暴露出来一旦某次下载速度不对我可以逐个排查而不是只能对着界面干瞪眼。对于追求“跑满带宽”的人来说这种可调性太重要了。2. 先把 110MB/s 背后的物理和协议逻辑算清楚2.1 单位换算110MB/s 对链路意味着什么先说一个很多人容易忽略的点文件下载速度里的 B 是大写指的是 Byte字节运营商宣传的百兆、千兆带宽单位是 bit比特通常用小写 b。1 Byte 8 bit所以 110MB/s 换算到带宽是 110 × 8 880Mbps。普通千兆以太网的理论极限是 1000Mbps也就是 125MB/s去掉协议头和实际损耗后能跑到 110MB/s 已经非常接近网卡上限。如果你的网卡、路由器、网线、光猫端口实际协商速率只有 100Mbps那理论极速只有 12.5MB/s连 20MB/s 都别想更不用说 110MB/s 了。所以想复现标题里的速度第一件事不是调软件而是确认物理链路。我的测试环境里下载机和服务器的网卡都协商在 1000Mbps中间交换机也支持千兆测试文件放在本地 HTTP 服务上没有跨公网这才跑出了 110MB/s。如果你用公网资源测速能达到多少还取决于对方服务器的出口带宽、链路拥堵程度、你和服务器之间的往返延迟软件只能把它能利用的那部分带宽榨干不能凭空变出带宽。注意110MB/s 是接近千兆链路的极限值。如果你的宽带是几百兆或者百兆不要用这个数字作为验收标准先把链路这一层检查清楚。2.2 HTTP 多线程下载为什么快以及为什么不能无脑堆线程很多人不理解“多线程下载”为什么能比单线程快。我们可以打个比方一条传输管道单线程相当于只有一个搬运工来回跑。搬运工的效率受到两个因素制约一是每次能搬多少东西二是往返一趟要多久。网络里的“往返要多久”就是 RTTRound-Trip Time。当链路带宽足够高但单次搬运窗口不够大时单线程很难把整个管道占满。HTTP 协议本身支持 Range 请求客户端可以告诉服务器“我要这个文件的第 0 到第 10MB 段。”于是 Aria2 会把一个大文件拆成多个分段同时开多个连接分别请求文件的不同部分下载完以后再拼成一个完整文件。这就是多线程分段下载的原理。只要服务器允许 Range 请求多个连接可以各拉各的互不干扰最终把整个链路的带宽用起来。但是多线程并不是越多越好。连接数太高会带来额外的 TCP 开销和内存消耗也容易触发服务器端的并发限制。很多镜像站会对单个 IP 的最大连接数做出限制你开了 64 个连接实际服务端只允许 4 个剩下 60 个都在排队效果反而更差。更合理的做法是先按 8 到 16 个连接来设置再根据实际速度微调。Aria2 里有两个参数经常一起出现split和max-connection-per-server。前者决定一个文件最大分成多少段后者决定每个服务器最多建立多少连接。两者配合起来才是真正有效的多线程下载。3. 实操记录从安装到把下载参数压榨到极限3.1 跨平台安装步骤Windows / Linux / macOS / NASAria2 在不同平台上都能跑安装方式不算复杂。因为它是命令行工具最核心的安装其实是把可执行文件放到系统里并配置好 PATH 环境变量。Linux 系的 Debian/Ubuntu 安装很直接sudo apt update sudo apt install -y aria2macOS 上如果装了 Homebrew也可以用brew install aria2Windows 用户可以去 Aria2 的官方发布页下载对应版本解压出来可以直接运行aria2c.exe。为了方便我会把 exe 所在目录加到系统 PATH 里然后在任意终端执行aria2c --version都能看到版本号。如果你不习惯命令行也可以用 Motrix 作为前端底层同样是 Aria2。NAS 设备会更偏爱 Aria2因为很多 NAS 系统都支持 Docker。启动一个 Aria2 容器把下载目录挂载出来再映射 RPC 端口和 BT 监听端口就能在 NAS 上获得一个常驻下载服务。命令大致是docker run -d --name aria2 \ -p 6800:6800 \ -p 6881:6881 \ -p 6881:6881/udp \ -v /path/to/download:/downloads \ -v /path/to/config:/config \ your-aria2-image不同架构的 NAS 需要选择不同镜像具体情况根据自己的设备来。装好之后我一般会在浏览器里打开一个 AriaNg 前端页面它是一个纯静态页面通过 Aria2 的 RPC 接口来管理任务。界面上可以新建 HTTP 下载也可以粘贴磁力链接和平时用的图形下载器体验差别不大。3.2 HTTP 下载核心配置跑满镜像站的关键语句Aria2 的所有行为都可以通过参数控制。为了长期使用我建议把常用参数写进aria2.conf避免每次启动敲一长串命令。下面这份配置是我跑 HTTP 下载时的常用底稿# 基础设置 continuetrue max-concurrent-downloads5 split16 max-connection-per-server16 min-split-size1M # 不限速 max-overall-download-limit0 max-download-limit0 # 磁盘与缓存 file-allocationfalloc disk-cache64M # RPC 支持 enable-rpctrue rpc-listen-allfalse rpc-listen-port6800 rpc-secretchange-me # BT / 磁力 enable-dhttrue dht-listen-port6881-6999 listen-port6881-6999 bt-max-peers500逐项说明一下continuetrue表示支持断点续传下载中途断网或重启再次启动后会从断点继续。split16和max-connection-per-server16是 HTTP 下载跑满速的关键意思是最多把文件分成 16 段并且对同一个服务器最多建立 16 个连接。min-split-size1M表示小于 1MB 的文件不会强行拆分避免无谓的碎片化。file-allocationfalloc会在 Linux 支持的环境下一开始就为文件分配好空间减少下载过程中磁盘碎片的产生。如果文件系统不支持该参数可以改成none或trunc。disk-cache64M是给下载数据开一块内存缓存降低频繁写入磁盘带来的 IO 压力。内存大的机器可以调到 256M不要盲目设太高。enable-rpctrue和后面的 RPC 端口、密钥是为了让 AriaNg 等前端能连接上来通过网页管理任务。临时下载单个文件时我习惯直接命令行覆盖关键参数aria2c -c \ -x 16 \ -s 16 \ -k 1M \ -d /data/downloads \ http://192.168.1.10/linux-distro.iso其中-x对应max-connection-per-server-s对应split-k对应min-split-size。当文件托管在支持 Range 请求的服务器上时配置正确后速度可以很快达到链路上限。如果测试对象不支持 RangeAria2 会退回单连接这时候怎么调线程数都没用。3.3 BT 与磁力优化让 P2P 任务不再“百KB级”BT 和磁力走的是 P2P 网络不像 HTTP 那样有一个明确的服务器“给你拉文件”。你的下载速度取决于全局有多少 peer 在线、做种者多不多、你们之间能不能建立连接、连接质量如何。所以 BT 调优的思路和 HTTP 很不一样。首先要确保 Aria2 的监听端口能被外部连接进来。很多 BT 没速度的问题不是没找到资源而是别人找到了你但连接不上。配置里我给listen-port和dht-listen-port都设置了 6881-6999 段。你需要在系统防火墙里放行这些端口并且在路由器上把端口转发到下载机。如果你的路由器支持 UPnPAria2 也能尝试自动映射不过手动设置更可控。其次是 DHT。磁力链接不是完整的种子文件它只包含一个文件的哈希值。下载磁力链接时Aria2 首先要通过 DHT 网络和 tracker 服务器找到那些持有完整种子元数据的 peer把元数据拿下来然后才能知道文件列表并开始正式下载。没有 DHT单纯靠 tracker冷门资源的可连接性会差很多所以enable-dhttrue必须开着。然后要调整合理的 peer 数。bt-max-peers500意味着一个种子任务最多同时连接 500 个 peer。peer 数越多越有可能从不同的人拼出完整数据块。但连接数太多也会消耗内存和 CPU对于轻量下载机来说 300 到 500 是一个合理区间。如果某个种子的做种者本身就只有两三个人那 peer 数设再多也改变不了上限只能靠长期挂机慢慢磨。还可以考虑手动维护一份 tracker 列表。有些资源主要靠 tracker 通知节点DHT 只是兜底方案。public tracker 列表可以从社区维护的地址列表中获取放进配置文件的bt-tracker字段多个 tracker 用英文逗号分隔。需要注意的是冷门资源即使有 tracker帮助也有限所以别指望加了列表之后所有资源都能跑满速。4. 我踩过的坑下载异常排查与速度问题速查4.1 速度上不去时按这个顺序从头查一遍我见过太多人一遇到下载速度低就条件反射地调大连接数结果越调越慢。按照我的习惯速度不对的时候应该从前到后按顺序排查。第一层是硬件链路。先看网卡有没有成功协商到千兆再看网线是不是老化或者质量太差。可以跑一个内网 HTTP 测试用一个自己架设的文件服务器传输大文件如果内网都跑不到 90MB/s 以上就不要指望公网能跑满。之前我遇到过一次速度只有 40MB/s排查了很久最后发现是网线某一段铜芯氧化换了根六类线立刻恢复。第二层是源站能力。用curl -I看服务器响应头里有没有Accept-Ranges: bytes没有的话基本上说明服务器不支持 Range分段下载无从谈起只能单线程慢慢拉。另外当你把连接数调到 16 甚至更高仍没变化时可能是服务器限制了单 IP 并发数。此时可以试试把-x降到 4 或 8如果速度反而更稳说明限制确实存在。第三层是本地配置。检查max-concurrent-downloads是不是设置得太高。并行任务太多会争抢磁盘 IO 和带宽尤其是机械硬盘多个大文件同时写入时磁头来回摆动速度会很难看。此时应该降低并发数或者把磁盘缓存调大让写入缓冲得更平滑。最后一层再考虑资源本身。HTTP 下载的公共镜像站通常带宽充足但某些小站点或网盘文件会针对非会员限速。这种时候调 Aria2 参数没有意义因为瓶颈在对方策略不在你的链路。4.2 BT / 磁力任务没速度、卡在 99% 怎么办BT/磁力类问题比 HTTP 更复杂我整理成一张速查表实践时可以直接对照现象可能原因处理思路磁力链接一直 0%没有文件信息元数据还没拿回来等待一段时间确认 DHT 已启用或补充可用的 trackerBT 任务连接数为 0端口未被放行或对方连不上你检查防火墙、路由器端口转发、UPnP 状态下载速度极慢做种者太少或连接质量差调整 peer 上限挂机等待不要频繁暂停速度一开始很快慢慢掉到 0磁盘写入拖后腿或缓存不足调大disk-cache检查磁盘剩余空间下载到 99% 卡住最后一块数据很难从其他 peer 拼齐暂停后重新开始任务或临时加做种者多的 tracker很多初次折腾 BT 的人会忽略一个点磁力链接的任务在刚添加时下载速度是 0并不代表出问题了。因为 Aria2 先得去网络上找持有种子元数据的节点这个阶段可能持续几十秒甚至几分钟。如果任务列表里能看到文件名说明元数据已经就位后续才会显示实际下载进度。卡在 99% 是一种很熬人的情况。P2P 下载的后期你手里可能已经拥有了 99% 的数据块但最后一块数据只有少数几个 peer 持有而它们又因为各种原因没和你建立稳定连接。此时重启任务会让 Aria2 重新发起 peer 连接往往能突破僵局。如果始终不行也可以暂时不管等网络里做种者增加后再继续。提示BT 下载完成后如果任务没有显式做种最好保留一段时间而不是立刻删掉。P2P 网络的基本逻辑就是“人人为我我为人人”只下载不分享会降低整个网络的健康度。不过要注意分享内容必须是你有权分享的合法资源。5. 这套全协议下载方案适合做什么以及一些个人建议5.1 我日常的主要用法配置好之后我很少再打开浏览器去等下载完成。主要用在几类场景下载开源操作系统的 ISO 安装镜像