APP下载

下载 可不是BT那么简单

2022-05-30OverLord

电脑爱好者 2022年4期
关键词:服务端磁力端口

OverLord

网页下载 HTTP的天下

大家上网有时候需要临时下个小容量的文件,多是浏览器直接点击,下载后即可打开。不同于BT下载等等,网页下载使用的协议是HTTP协议。所以要搞清楚它们的下载原理,我们就需要从最基础的HTTP协议看起。

所谓HTTP,全称是HyperText TransferProtocol,即超文本傳输协议。它是网络上使用最为广泛的一种网络协议,当你输入一个网址的时候,所有的起始都必须遵循这个标准—— 也就是客户端和服务端的请求、应答标准。所谓客户端,就是终端用户,也就是在电脑前的你,服务端就是网站本身(图1)。

通过使用例如Chrome、Edge等任意浏览器输入网址时,客户端就会发起一个到服务端(网站)指定端口的请求,这个默认的端口就是80端口。严格意义上,我们将客户端叫做用户代理,而服务器端通过8 0端口接收到来自客户端的应答请求时,会将自身存储的一些资源,比如HTML网页、图片,以及文件(图2)“反馈”给客户端。

当然,这只是一个非常简单的理解。具体点说,当客户端向服务端发送某一个请求的时候,请求的这个信息中包含URL(链接地址)、协议版本(HTTP也是有协议版本的),以及请求的修饰符号、客户端信息等等一并提交给服务端。服务端一一“了解”了客户端的请求信息后才会做出回应。

如果这个过程里某一个步骤出现了错误,那么产生错误的信息会反馈给客户端,然后输出到显示屏幕上。当然,这个过程都是作为用户的你看不到的,你只需要输入网址,或是鼠标点击链接,等待屏幕最终显示信息(图3)就可以了。

但是,在HTTP下载的时候,都是单一线程操作的,它不允许并发多个线程一起完成某一个“请求、反馈”动作,因此,即便可以实现断点续传,它的下载动作只能是单一线程执行,通俗一点说就是单点传输,跑不满带宽。所以,很多时候大一点的文件,比如视频、安装镜像等都不太使用这种“极为简单、直白”的下载方式。

FTP 一个被遗忘的传输手段

在互联网上,最早也是有专门用来传输文件的协议,这便是FTP。它全称是File TransferProtocol,也就是文件传输协议,是一个专门用于在计算机网络上在客户端和服务器之间进行文件传输的应用层协议(图4)。相比于HTTP,FTP具备两种方式进行用户认证,第一种是匿名服务,在这种设置状态下,客户端登录服务器时不需要密码,默认用户名为anonymous,该账号不需要密码验证即可进行协议握手然后下载服务端的文件。而在设置密码的时候,就需要使用对应用户名的密码来进行验证了。

同时,FTP的使用时也拥有两种模式,即主动模式(PORT)和被动模式(PASV)(图5)。所谓主动模式,就是当客户端和服务端在握手时,会在同一时间打开一个监听端口用以创建整个链接过程。在这种情况下,客户端如果安装有防火墙会产生链接错误。所以这就需要被动模式了,被动模式只要求服务器端产生一个监听相应端口的进程,这样就可以绕过客户端安装了防火墙的问题。

具体来说,一个主动模式下的FTP链接过程是这样的,客户端随机打开一个端口,一般来说是1024以后5000以内的任意一个端口号,我们假设为X,同时使用21端口(FTP默认端口)与服务端进行链接(图6)。此时监听端口X向服务端端口21发送命令,告辞服务端,客户端正在监听的端口号,并且客户端已经做好了准备以此端口接收数据。

虽然是专用的传输协议,但是FTP在客户端于服务端的“沟通”上可以用话痨来形容,HTTP只需往复两次即可建立握手,开始交换数据。那么FTP呢?从创建TCP链接开始,客户端等待服务器端发送回执、客户端向服务器端发送用户名并等待响应、 客户端向服务器端发送密码并等待响应、客户端向服务器端发送SYST命令并等待响应、客户端向服务器端发送TYPE I命令并等待响应、如果用户需要在服务器端切换目录,客户端仍然发送命令并等待响应;主动模式下,客户端需要发送命令到服务器端,然后等待响应……怎么样,是不是极为繁琐?这样带来的后果也是让服务端资源占用问题严重,最终的结果必然是被取而代之,被人们遗忘。

BitTorrent 我是下载之王!

BT是简称,全称是B i tTorrent协议,它是一个对等网络中的文件下载协议。不同于HTTP、FTP的点对点(point-to-point)的协议,BitTorrent属于用户群对用户群(peer-topeer),下载同一个文件的用户人数越多,这个文件的下载速度越快,并且通过用户的上行带宽进行上传,维持分享状态(图7),成为其用户端节点(图8)下载的种子文件(.torrent),同时上传及下载。

普通的HT TP/FTP下载使用TCP/IP协议,BitTorrent协议是架构于TCP/IP协议之上的一个P2P文件传输通信协议,处于TCP/IP结构的应用层。当一个被需要下载的文件要进行分享的时候,文件发布者会根据该文件生成*.torrent后缀名的文件,即种子文件,也简称为“种子”(图9)。这个种子本质上是一个文本文件,它包含了两部分信息,一方面是Tracker信息另一方面是文件自身的信息。

Tracker信息主要是BitTorrent下载中需要用到的Tracker服务器的地址和针对Tracker服务器的设置,文件信息是根据对目标文件的计算生成的,计算结果根据BitTorrent协议内的Bencode规则进行编码。它的主要原理是需要把提供下载的文件虚拟分成大小相等的块,块大小必须为2k的整数次方(由于是虚拟分块,硬盘上并不产生各个块文件),并把每个块的索引信息和Hash验证码写入种子文件中。可以说,种子文件就是被下载文件的“索引”。

接下来,需要下载这个文件的用户,就需要下载一个客户端,并得到相对应的种子文件。运行客户端,其首先解析种子文件中保存的Tracker信息地址,接着连接到Tracker服务器。当网络通畅的时候,Tracker服务器便会回应下载者的请求,提供下载者其他下载者(包括发布者)的IP。下载的用户再连接其他下载者,根据种子文件,分别告知对方自己已经有的文件数据块,然后交换对方所没有的数据。此时不再需要其他服务器参与了,因为分散了单个线路上的数据流量,因此减轻了服务器负担。

不过,用户A和用户B分别下载了这个文件的部分文件块,那么他们又是如何保证文件的准确性呢?下载文件的用户每得到一个数据块,就需要计算该数据块的Hash值,并与种子文件中的Hash值进行对比,如果一样则说明正确,不一样则需要重新下载(图10)。

相比之下,使用HTTP或者FTP分享文件时,发布文件只能保存在一个或者几个服务器上,点对点进行传输(图11),下载用户(线程)一多,服务器就会变得不堪重负,带宽也被占满,因此常常要对线程、速度进行限制(图12)。而BitTorrent协议的下载就不一样了,服务器只负责分发信息和对种子“负责”,而人越多带来的带宽也更大,下载也就越快。

但是,种子也要保存到某个服务器上,一旦遇到无Tracker的情况又该如何?于是,一种新的网络技术应运而生,这就是DHT网络技术。Distributed Hash Table,即分布式哈希表,这是一种分布式存储方法。在没有服务器的情况下,每一个用户客户端负责一个小范围内的“路由”,并保存一小部分数据,从而实现DHT整个网络的寻址和存储。这个技术的应用让BitTorrent下载可以免除连接Tracker服务器就能下载——DHT网络技术会赋予用户与用户之间“通讯”,互通有无,可以说进一步完善了BitTorrent下载协议。

当然,Bi tTorrent也不是无懈可击的,即便有DHT网络技术加持,但是如果一个文件在一段时间之后不再有用户分享上传,比如一些冷门资源,用户即便拥有这个文件的种子也无法下载——这也是BitTorrent只适合在短时间内下载热门资源使用的根本原因。

ED2K 我是共享第一击!

对比专为下载而生的BitTorrent协议,ED2K(准确的说应该被称作eDonkey2000 network)更被視作最友好的分享网络协议(图13)。与BitTorrent协议相同的地方在于,它也是基于分布式的(图14),文件基于用户群对用户群(peer-to-peer)的保存、分享,而不是存储于一个中枢服务器上。

不同于BitTorrent的是,它并不需要一个专门的文件存储信息,只是使用ED2K格式的超链接即可(格式为ed2k://),这也是为什么笔者将eDonkey2000 network简称为ED2K的原因。所有的浏览器都可以识别ED2K连接,并将其连接到下载软件上进行文件传输共享。一个典型的ED2K 连接包含的信息为三个部分,分别是文件名、文件的大小、文件的ED2K Hash值。大致完整的格式是这样的:ed2k://|file|<文件名>|<文件大小>|<文件Hash>|/,例如ed2k://|file|eMule0.49c.zip|2868871|0F88EEFA9D8AD3F43DABAC9982D2450C|/(图15)。这样对比之下,它免除了像BitTorrent那样还需要额外下载一个文件的繁琐,拥有链接即可。

当这样一个连接被粘贴到支持ED2K下载的软件中时,eDonkey的客户端程序就会连接到该网络来共享文件。而eDonkey服务器作为一个通讯中心,会让用户在ED2K网络内查找文件。当然,每一个用户在使用ED2K下载客户端的时候,都必须指定一个共享目录,为的就是可以分享文件,而不是单纯的下载。另外比较智能的地方在于,ED2K分享文件的时候使用混合MD4摘要算法来检查识别文件,也就是说,即便是不同文件的文件名,只要混合MD4摘要算法识别文件一致,也可以将其纳入分享。

ED2K的另一大好处在于,它可以比BitTorrent更长期保持分享文件内容,因为ED2K没有中心节点,它将所有参与的用户视为分享者,只要用户文件没有删除,并且作为资源分享就可以一直上传数据文件,让文件长期保持在网络共享之中。

磁力链接 我是最后的胜利者!

磁力链接是现在最为流行的下载方式,甚至是没有之一了吧?磁力链接全称为MagnetUniform Resource Identifier,是一种是对等网络中进行信息检索和下载文档的链接协议。和基于URL网络地址的区别在于,磁力链接是基于元数据(metadata)文件内容,属于统一资源名称(图16)。

磁力链接本身不是基于文档的IP地址或者定位符,而是在分布式的数据库中通过HashFunction(散列函数值)识别、搜索,然后提供下载服务的一种方式。也就是说,它不依赖任何一个中心的服务器。而且,它不需要Tracker服务器,不需要*.torrent 文件,仅需要一连串字符就可以进行文件下载,当然这一切都是基于DHT技术和PEX技术才得以实现的。

磁力链接另一个优势是跨平台和开放性,磁力链接可以在几乎所有的平台,包括手机上的应用程序中下载——BitTorrent在这方面是无能为力的。因为磁力链接采用的是极为简洁的纯文本格式,所以用户很方便的可以将其复制在任何拥有下载软件的设备中(图17)。

磁力链接的格式究竟什么样子呢?举例来说,magnet:?xt=urn:btih:CB434C9025A5255ED17454C97C089399,这样一组串列复制到下载软件中就可以了。其中,“magnet:”是协议名称,“xt:”则是exacttopic的缩写,其为包含文件哈希值(Hash)的统一资源名称,“urn:”即Uniform ResourceName,表示资源名,“btih:”则是BitTorrent info hash的简写,实际是种子散列函数,最后的一串文字就是具体的文件名称了。

磁力链接的优势不止于此,传统的Bi tTorrent下载还需要Tracker 服务器,而磁力则会根据下载文件的哈希值生成一个独有的文本格式“指纹”(图18),然后根据这个“指纹”匹配识别文件并下载。而且最棒的地方在于,任何用戶都可以生成这样一个文件“指纹”,因此磁力链接不需要任何中心服务器就能下载,极为方便。

优质下载软件是这些!

前面笔者给大家详细介绍了各种下载协议的优劣区别,那么重点来了,究竟什么用什么软件来下载呢?

Free Download Manager

之所以推荐Free Download Manager,无外乎Internet Download Manager属于收费软件,固然后者功能更强大,但毕竟秉持着免费够用就好的原则,笔者还是更推荐Free Download Manager一些。Free DownloadManager拥有非常多的功能,比如智能限速、断点续传、计划任务、网页抓取等等,而且,它还可以实现下载部分音频、视频文件的时候同时预览播放的功能。而且,它在支持的下载方式上,包含了BitTorrent、FTP、HTTP下载,同时还支持磁力链接。如果说最大的遗憾,莫过于它无法支持EK2K链接下载了。

官网地址:https://www.freedownloadmanager.org/zh/

EagleGet

EagleGet是近几年开始流行的下载软件。界面清爽是EagleGet的一大特色,而且如果你不喜欢还可以自行更换皮肤。当然了,诸如监控剪贴板、浏览器集成插件、音视频的嗅探下载,批量下载以及队列这些功能样样具备。不过,它的缺点在于,它不能够支持BitTorrent和磁力链接。对笔者而言,它更像是一个补充,尤其是搭配FreeDownload Manager使用比较合适——总有一个软件能够帮助到你。

官网地址:

https://eagleget.en.softonic.com/

Motrix

没有广告、几乎全兼容,体积又小巧,这就是Motrix的重要特色。这款异军突起的下载软件非常受欢迎,而且它还是一款开源免费的产品。Motrix可以支持包括HTTP、FTP、BitTorrent、磁力链接在内的下载方式,而且它甚至支持百度网盘及迅雷专有协议的下载,这着实令人意外。需要注意的是,Motrix百度网盘的下载功能需要遵从百度网盘本身的下行速度。更重要的是,它对平台的支持非常友善,Windows和macOS下都可以使用,有兴趣的朋友不妨下载试用一番。

官网地址:https://motrix.app/zh-CN/

官网地址:https://www.qbittorrent.org/

qBittTorrent

也许你会认为μTo rrent很好用,但是这款qBittTorrent直接在官网声称自己的目标就是一款能够替代μTorrent的开源软件。qBittTorrent支持中文,并且全面无广告设计,还集成有搜索引擎,能够直接在软件内指定进行分类搜索,并且支持DHT网络,支持磁力链接等等,作为一款下载软件,qBittTorrent不可谓想得不周全,非常了得。

相对于EagleGet的双平台使用,qBit tTorrent的跨平台支持度更进一步,它可以支持包括Windows在内,macOS、Linux、FreeBSD在内的多个桌面操作系统。不仅如此,它在扩展功能上也极具创意,包括Web页面管理、UPnP支持、PEX对等交换、LSD本地发现功能、IPV6的支持,甚至还有很多第三方插件。可以说,qBi ttTorrent绝对是最值得选择的下载软件之一。

Transmission

Transmission作为一款老牌下载软件,是笔者推荐的主要原因之一。其次,就是它的功能十分强大。它可以支持Windows、macOS、Linux系统,还支持encryption、Web界面、远程控制(这个功能比较独特)、磁力链接、DHT网络、uTP、UPnP、NATPMP等等功能,还能够实现目录監控、全局或者单一下载的速度限制,简直无所不能。如果你选择一款功能全面而且下载性能出色的软件,Transmission是不可错过的选择。

官网地址:https://transmissionbt.com/

迅雷

论下载,无论如何也必须要提到的就是迅雷了。作为国内的王牌下载软件,迅雷的强大有目共睹。非会员模式下,支持几乎所有的下载方式,什么FTP、HTTP下载,BitTorrent、ED2K、磁力链接,它都可以实现。而在会员功能部分,它还能够提供离线下载、会员加速等服务,当然这些需要有“钞能力”,迅雷也对应的提供了加速、离线下载的服务器支撑,这才让迅雷的会员具有较高的价值。

但是需要注意,迅雷强大的功能对内存、处理器的性能还是有一定的要求的,如果你的电脑配置跟不上时代,很可能会出现下载时处理器占用过高的问题。

猜你喜欢

服务端磁力端口
磁力珠
磁力不怕水
云存储中基于相似性的客户-服务端双端数据去重方法
新时期《移动Web服务端开发》课程教学改革的研究
端口阻塞与优先级
在Windows Server 2008上创建应用
初识电脑端口
8端口IO-Link参考设计套件加快开发速度
摸清黑客套路防范木马侵入