下载工具分析.docx
《下载工具分析.docx》由会员分享,可在线阅读,更多相关《下载工具分析.docx(47页珍藏版)》请在冰豆网上搜索。
下载工具分析
摘要
随着计算机与网络信息技术的飞速发展,下载工具的效率直接影响着因特网信息资源开发利用的效率。
作为一款下载工具软件,下载速度自然是首要考虑点,是否支持现在流行的下载应用,下载管理是否便捷也是用户悬着下载工具的重要考虑点。
本文阐述了下载工具的历史和现状,通过网络协议说明了下载工具的原理,并且就目前主流的下载软件迅雷、电驴作了详细研究。
通过连接的建立、文件下载、文字上传、信息的搜索等详细分析了该软件的工作过程。
第一章下载简介
下载(DownLoad)就是通过网络进行文件的传输,把互联网或其他电子计算机上的信息保存到本地电脑上的一种网络活动。
广义上说,凡是在屏幕上看到的不属于本地计算机上的内容,皆是通过“下载”得来。
狭义上人们只认为那些自定义了下载文件的本地磁盘存储位置的操作才是“下载”。
“下载可以显式或隐式地进行,只要是获得本地电脑上所没有的信息的活动,都可以认为是下载,如在线观看等。
1.1常用的下载方式
1.1.1PUB方式
说白了就是网络上的免费FTP,这种下载方式的优点是空间资源丰富,利用专用工具能找到很多,几乎可以说没有空间限制,使用简单方便,简单学习就能上手,没什么技巧性可言(我这里说的是下片人,发片人还是需要很多技术的)这可能也是他一直使用着的原因之一。
缺点也是明显的,档案时效性差,空间安全性差。
传片麻烦。
发片人找空间也是很让人头疼的一件事情。
片源也不够丰富。
有的空间的速度非常慢,还有的空间还限制连接人数。
1.1.2电驴方式
一种非常好的P2P软件。
优点是片源极为丰富,基本上不存在档案时效性的问题,从原理上说只要有耐心你就能下到你想要的片子,当然,电驴是不好驾驭的,很多人抱怨驴子速度慢,这里的主要原因还是用驴子的方法问题,其实对于用驴子的老手来说,除了高速FTP和HTTP下载,还没有任何一种下载的速度能和驴子相比,当然这里说的是绝对速度,就一部影片来说,驴子的下载速度不能说快,但是十几个甚至几十个一起下载速度就非常快了。
当然,资源占用过高也是驴子的一个缺点。
只可惜用好电驴对很多新人来说确实比较困难,这里就不能不提一下一个新兴的P2P势力BT,就BT和驴子相比,也有它的一些特点,首先,BT的片源的针对性更强,除非发片人恶作剧,否则不会象驴子一样常常下到假档和不好的片子,在驴子上很多看封面非常好看的片子下载下来内容却惨不忍睹,而BT的片源都是发片人经过精心的挑选推荐给大家的。
不论你口味怎样,片子的品质总会有保证。
1.1.3BT方式
就使用上来说,BT的使用可以说极为简单,甚至比PUB下载还要简单的多。
BT的使用没那么多技巧,你只要安装好客户端,下载好种子就能马上开始下载了。
当然这就导致其安全性存在重大问题,只要能够找到BT种子,就能够下载该文件,也可以说通过BT下载方式,可以下载任何提供种子的文件。
这样以来,一些不法分子可能会有机可乘,同时限制也是非常困难的。
而能过WEB方式下载的文件,都是通过服务器端进行下载,这样只要对服务器进行管理,就可以有力的打击不合法文件的传播,文件的可控性有了很大的提高。
迅雷最原始的下载资源也是来自服务器端的,这样只要有效的对服务器端进行监管,从而就可以有效的避免少数用户利用P2P软件散播非法内容。
1.2下载方式的比较
每一种下载方式都有每一种方式的有点,当然,也有其缺点,我们应根据不同的需要选择适合我们的下载方式,下面主要就现在BT方式、电驴PUB方式进行比较和分析。
1.2.1下载速度
就单一文件下载速度而言,BT具有很大的优势,如果下载的人够多,能轻轻松松的到达50K以上甚至100k,200K或者更高。
和PUB比起来最本质的就是BT是下载的人越多越快(这是所有P2P软件的本质),PUB是下载的人越多越慢,设想一部非常经典的大片同时在BT和PUB上上演,同时有很多人下载,结果如何不言而喻了。
BT是一个文件分发协议,它通过URL识别内容并且和网络无缝结合。
它对比HTTP/FTP协议,MMS/RTSP流媒体协议等下载方式的优势在于,一个文件的下载者们下载的同时也在不断互相上传数据,使文件源(可以是服务器源也可以是个人源,一般特指第一个做种者或种子的第一发布者)可以在增加很有限的负载之情况下支持大量下载者同时下载,所以BT等P2P传输方式也有“下载的人越多,下载的速度越快”这种说法。
WEB方式下载,虽然可以借助FlashGet等工具软件实现多线程下载,但由于其下载资源来自单一服务器,这样下载的人数一多,其下载速度就会变的非常慢,甚至能够让服务器死机。
所以WEB方式限制了文件的下载速度,不过当前下载的主流还是以WEB方式为主,而BT下载则不然,下载的人数越多,其下载速度就会越快,从而让我们实现飞速下载,但美中不足的是,当下载人数减少时,特别是现在有好多人下载完成后,就不想再做种子为他人服务,这时下载速度就会急剧下降。
而迅雷则不然,他通过独特的多媒体搜索引擎技术,把整个服务器端的文件整合到一起,实现同时从多个服务器端下载文件,而不像WEB方式那样只是从一个服务器端多线程下载,这样就能用有效的使用其它服务器,为能够提供稳定高速下载提供了保障。
通常使用的宽带网络,比如联通(以前的网通)有1M、3M、8M等带宽,但是实际上稳定的下载速度只能维持在128KB/S、384KB/S、1024KB/S左右,即带宽/8,而不是带宽是多少,下载速度就能达到多少的。
但是,在进行某项下载任务的初期,在资源好的情况下下载速度还是可以飙升到1MB/S-2MB/S的。
下载速度的快慢与下载资源也有很大的关系,三种下载模式其下载资源哪一个更丰富一些呢?
由于下载原理的不同,决定着WEB下载方式是通过下载服务器进行下载,同时下载资源须由专人上传到服务器后,方可进行下载,受到下载服务器的限制,其资源是有限的。
而BT下载是通过种子的方式进行传播,如果有人想把文件提供下载,只要通过软件把文件制作成种子而且发布到页面上就可以了,同时种子体积非常小,便于发布。
种子发布后,只要有一个人提供共享,那么其它人就可以通过BT软件进行下载。
迅雷可以把所有的P2P共享资源与各下载服务器进行整合,所以其下载资源远远大于WEB方式,同时迅雷采用的多媒体搜索引擎技术还可以把服务器端的同一个文件的各个镜像同时找到,能够实现各个服务器同时下载,这样下载资源可以说是非常丰富。
1.2.2安全性比较
比如节点之间通迅和查找分工没有适当安全认证机制,存在很多安全隐患
当前下载软件的发展趋势就是集成各种协议,打通各种协议的下载(BT、ED2K(eMule)、HTTP、FTP、MMS、RTSP协议),脱兔,迅雷已经做了一部分这样的工作,但是实际效果并不好。
的境界是一个资源下载工具,用户不用关心是什么协议在网络上发布的,拥有相应的权限都可以下载,所有协议之间的隔阂被打通。
下载工具成为向互连网获取资源同事也是向互联网提供资源的平台。
版权问题和安全问题等等都将成为非常重要的问题,P2P技术本身没有对错之分,p2p技术在下载领域已经显示了它巨的威力,这种回归互联网本质的技术在未来必将获得更的发展,关键是使用技术的人和机构。
1.2.3协议的宏观比较和分析
emule从技术层面上说是比BT好很多的,可是由于各种各样的原因,似乎在互联网上emule并不是很流行。
1.传统连接方式:
BT使用统一的torrent文件先作一个原下载文件的信息记录,然后客户下载后通过torrent的信息与服务器连接并下载,emule仅有一个文件ID,客户自行与服务器连接再下载;eMule的资源发布更便捷,同时资源更丰富,BT中不同种子之间的用户是分隔的,即使种子中包含的文件是相同的,BT用户之间也无法互通连接。
2.底层传输协议比较:
BT只使用TCP协议进行下载,协议简单有效,但是功能比较单一,有的功能不完整,emule使用TCP和UDP两种协议进行通信,更加有效的利用了网络资源,功能完整强,但这也同时使主机的负荷加;
3.文件组织方式和数据验证方式:
BT会在开始前对文件进行一次完全的HASH,就是将文件首尾相联然后按固定块取SHA值,这些值最终被放入torrent文件编码中,客户从网上一次下载完全,高效简单,一般情况下BT软件会在每小块下载完成后就对其进行HASH测试,检查其正确性。
emule在链接字符串中只存放了整体文件的HASH值,通过将这个HASH到服务器上取出文件的相关信息,实际的操作中,会将文件分解成9.28M小的块并进行HASH用于对块的完整性测试.新版的emul会用一种叫AICH的技术,就是说将文件分成80K小的块然后HASH再将HASH值进行二进迭代式(具体的看emule协议)的HASH最终组成一个HASH二叉树。
好处:
可以在链接中只加入根结节的HASH值而不用加入叶子节点,减小了链接字符串小,如果在最终文件下载完毕后,测试出的根节点HASH与得到的根节点的HASH值不同,则可以通过协议与网络上的其它主机的树进行比较快速得出错误的块.
4.流量控制方式:
BT采用针锋相对的方式处理上传下载平衡的控制,这种方式会记录短期内与客户连接的所有节点的上传下载流量,通过在固定时间内对下载流量的比较,得出允许上传的客户;为防止新客户长时间得不到其它客户的认同,BT会在一断时间停止他的上传作为对他的警告;对于已经下载完毕的客户,BT会简单的使上传流量最的客户得到更多的时间完成上传;为了防止在文件的最后阶段下载速度下降,BT会在最后时向所有连接的客户发送请求迅速完成下载;下载过程中,BT会对文件块在整个网络中的存在复本的多少进行跟踪,比较少的复本总是会得到优先的下载权,以使整个网络的文件冗余度提高.简单的说BT使用的是针对文件的流量控制方式
Emule采用的是客户积分的方式,就是对所有用户的上传和下载量进行一个运算,从而得出一个客户的积分值,那些积分比较高的用户总是可以得到优先的下载权,甚至可以不进行排队直接下载,结果就是:
在一个比较长的时间内对一个用户对其它用户的整体贡献有了一个估.简单的说emule采用的是针对用户的流量控制方式
5.功能与性能:
emule具有查找功能,而这在BT只能通过网站来实现.BT的方式更注重于简单高效的快速传输,而emule更注重于整个网络状态的变化及用户体验.单从下载效率上说BT占优,而从网络状态及完整强的协议支持上说,emule作了更多的事情.从性能上考虑,在相同网络状态下,BT下载单文件的能力比较强,emule比较适合于长时间的多文件下载,对机器的使用和影响比较小,这源于两者对网络均衡及p2p模式的不同理解.
第二章下载工具原理
2.1下载工具的技术原理
下载工具是一种可以快速的从网上下载东西的软件。
它们采用了“多点连接(分段下载)”技和“断点续传”技术,充分利用了网络上的多余带宽,从而加快下载的速度,而且随时继续上次中止部位的下载,有效避免了重复劳,大大节省了使用者的连线下载时间。
2.1.1多余带宽
多余带宽可以分为网站服务器的多余带宽和上网者的多余带宽。
假设一个网站的站点服务器可以允许100个人同时连线浏览,每个连接者的最高下载速率为50KBps,那么网站的带宽就是100×50=5000KBps。
又假设当前在线浏览的只有30个人,那么它只达到了网站带宽的30%,另外的70%就属于网站的多余带宽。
假设一个上网者的上网速率是64KBps(通常所说的512Kbps),那么他的网络带宽就是64KBps。
假设此用户当前时间以25KBps的速度正在从某一网站下载一个文件,又以大约7KBps的速度不断打开不同网页进行浏览,这时他只使用了全部带宽其中的32KBps,大约是全部带宽的50%,那么我们说剩余的32KBps(50%)就是他作为上网者的多余带宽。
2.1.2多点连接
“多点连接”也叫分段下载,指的是充分利用网络多余带宽,把一个文件分成多个部分同时下载。
当网站的多余带宽和上网者的多余带宽同时存在时,上网者就可以利用下载工具向网站服务器提交多于1个的连接请求,其中每个连接被称作一个线程,每个线程负责要下载的文件的一部分。
下载工具发出的线程数和下载总速度成正比。
一般的下载工具都支持发出多达10个线程,这可能意味着下载速度提高到10倍之多。
有些破解版的下载工具(如“网际快车”)甚至可以发出多达9999个线程去下载一个文件,但经验证明:
单线程的速度就已经很快的网站(假设为200KBps),一般开5个线程就足够,比起用IE下载时的单线程速度,已经是相当可观;而即使速度慢的网站(假设为2KBps),也不要轻易开超过50个线程。
开的线程过多会在数秒内使你的机器进入半死机状态,这时候你最想干的事恐怕就是把你的电脑砸个稀八烂。
)见好就收是使用下载工具时的必备心态。
2.1.3使用断点续传工具
断点续传工具,就是专门为从Internet上下载文件而设计的。
特别是当浏览器没有断点续传功能时,如果不使用这类工具,下载文件总是让人提心吊胆。
即便浏览器已具备断点续传功能,专门的断点续传工具软件仍然是你硬盘中应保留的工具。
因为与浏览器下载文件相比,无论哪款断点续传工具具有的以下优点均是浏览器所没有的。
(一)能自动记录下载文件的URL内容。
因此,无论任何时候出现了下载中断,用户都可以随时启动这类工具,继续将上次没有下载完的文件从断点处开始下载。
(二)具有定时自动连接网络连续下载的功能,即用户通过设定一个下载时间,到这个设定时间,这类工具无需用户干涉,就自动启动拨号程序接通服务器并开始下传。
这使用户可以安排在网络线路不忙的时间下载文件,通过缩短文件下载时间来相对节约费用。
(三)这类工具软件所消耗的系统资源与线路资源比浏览器要少得多,一般情况下它比用浏览器下载软件的速度快些。
至于能快多少,倒是很难说清楚,毕竟影响文件下传速度的因素太多。
这里所谓“快”,只是因为用断点续传工具下载文件时不像用浏览器那样需要打开Web页中的图像、声音等,而占用大量传输。
2.2下载原理解析
WEB下载方式分为HTTP与FTP两种类型,它们分别是HyperTextTransportationProtocol(超文本传输协议)与FileTransportationProtocol(文件传输协议)的缩写,它们是计算机之间交换数据的方式,也是两种最经典的下载方式,该下载方式原理非常简单,就是用户两种规则(协议)和提供文件的服务器取得联系并将文件搬到自己的计算机中来,从而实现下载的功能。
BT下载实际上就是P2P下载,该种下载方式与WEB方式正好相反,该种模式不需要服务器,而是在用户机与用户机之间进行传播,也可以说每台用户机都是服务器,讲究"人人平等"的下载模式,每台用户机在自己下载其它用户机上文件的同时,还提供被其它用户机下载的作用,所以使用该种下载方式的用户越多,其下载速度就会越快。
P2SP下载方式实际上是对P2P技术的进一步延伸,它不但支持P2P技术,同时还通过多媒体检索数据库这个桥梁把原本孤立的服务器资源和P2P资源整合到了一起,这样下载速度更快,同时下载资源更丰富,下载稳定性更强。
第三章下载工具的通讯协议
3.1常用协议
3.1.1TCP协议
TCP:
TransmissionControlProtocol传输控制协议TCP是一种面向连接(连接导向)的、可靠的、基于字节流的运输层(Transportlayer)通信协议,由IETF的RFC793说明(specified)。
在简化的计算机网络OSI模型中,它完成第四层传输层所指定的功能。
在因特网协议族(Internetprotocolsuite)中,TCP层是位于IP层之上,应用层之下的运输层。
不同主机的应用层之间经常需要可靠的、像管道一样的连接,但是IP层不提供这样的流机制,而是提供不可靠的包交换。
应用层向TCP层发送用于网间传输的、用8位字节表示的数据流,然后TCP把数据流分割成适当长度的报文段(通常受该计算机连接的网络的数据链路层的最大传送单元(MTU)的限制)。
之后TCP把结果包传给IP层,由它来通过网络将包传送给接收端实体的TCP层。
TCP为了保证不发生丢包,就给每个字节一个序号,同时序号也保证了传送到接收端实体的包的按序接收。
然后接收端实体对已成功收到的字节发回一个相应的确认(ACK);如果发送端实体在合理的往返时延(RTT)内未收到确认,那么对应的数据(假设丢失了)将会被重传。
TCP用一个校验和函数来检验数据是否有错误;在发送和接收时都要计算校验和。
下图为TCP报头:
图3-2
每个TCP数据包也是由包头和实际数据组成,包头包含如下主要内容:
l源端口(2字节)
发送端的端口号
l目的端口(2字节)
接收端的端口号
TCP包头中只包含双方的端口号,双方的IP地址在IP包的包头,所以在TCP数据包的包头中没有IP地址。
l顺序号(4字节)
数据的顺序号,表示当前数据包中的数据起始顺序号,比如前一个数据包的SEQ为十六进制的:
dfd5aa3d,数据包的实际数据长度为16字节,那么下一个数据包的SEQ就要在前一个数据包的SEQ基础上加上16,为:
dfd5aa4d
l确认号(4字节)
接收到对方的某个数据包后的回应顺序号。
如果接收到了对方主动发送来的某个数据包,必须要返回对方一个ACK回应数据包,数据包的头部的Acknowledgementnumber部分根据对方发送数据的SEQ和实际数据长度,返回SEQ+实际数据长度,表示已经接收到这个数据包。
对方收到这个回应,根据数值计算后知道这个数据包已经被对方接收。
如果接收不到ACK的回应,就意味着这个数据包已经在网上被丢失,需要重新发送此数据包。
l头长(1字节)
表示TCP数据包的包头长度,整个TCP数据包的长度减包头长度就能得到TCP数据包的实际传送的数据长度。
lFlags(1字节)
标志字节,每一位都是一个标志,以下是几个主要标志:
ACK–表示数据包是个ACK回应数据包,表示接收到了对方的某个数据包,具体哪个包由包头的Acknowledgementnumber部分指示。
PSH–表示这是个有实际数据的包。
SYN–表示这是个建立连接的数据包,通讯双方要通讯,总是由客户端先发送SYN数据包到服务端以建立TCP的连接。
FIN–表示通讯结束,拆除连接的数据包。
3.1.2UDP协议
UDP是UserDatagramProtocol的简称,中文名是用户数据包协议,是OSI参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务。
它是IETFRFC768是UDP的正式规范。
UDP在网络中它与TCP协议一样用于处理UDP数据包。
在OSI模型中,在第四层——传输层,处于IP协议的上一层。
UDP有不提供数据报分组、组装和不能对数据包的排序的缺点,也就是说,当报文发送之后,是无法得知其是否安全完整到达的。
UDP用来支持那些需要在计算机之间传输数据的网络应用。
包括网络视频会议系统在内的众多的客户/服务器模式的网络应用都需要使用UDP协议。
UDP协议从问世至今已经被使用了很多年,虽然其最初的光彩已经被一些类似协议所掩盖,但是即使是在今天,UDP仍然不失为一项非常实用和可行的网络传输层协议。
与所熟知的TCP(传输控制协议)协议一样,UDP协议直接位于IP(网际协议)协议的顶层。
根据OSI(开放系统互连)参考模型,UDP和TCP都属于传输层协议。
UDP协议的主要作用是将网络数据流量压缩成数据报的形式。
一个典型的数据报就是一个二进制数据的传输单位。
每一个数据报的前8个字节用来包含报头信息,剩余字节则用来包含具体的传输数据。
在选择使用协议的时候,选择UDP必须要谨慎。
在网络质量令人不十分满意的环境下,UDP协议数据包丢失会比较严重。
但是由于UDP的特性:
它不属于连接型协议,因而具有资源消耗小,处理速度快的优点,所以通常音频、视频和普通数据在传送时使用UDP较多,因为它们即使偶尔丢失一两个数据包,也不会对接收结果产生太大影响。
比如我们聊天用的ICQ和OICQ就是使用的UDP协议。
第四章连接的建立
4.1客户端到服务器的连接
图一电骡网络图
客户端一启动就会用TCP连接到一个电骡服务器。
服务器给客户端提供一个客户端ID,这个ID仅在客户端服务器连接的生命周期内有效(注意如果客户端是高ID,那么他在所有的服务器得到的ID都是一样的,直到他的IP地址变化为止)。
连接建立后,客户端把它共享的文件列表发送给服务器。
服务器把这个列表保存在它的内部数据库内,这个数据库通常包括了数十万可用文件和活动客户端。
电骡客户端也会发送它的下载列表,包含了他想要下载的文件。
后面将给出电骡客户端和服务器间的TCP信息交换格式细节。
连接建立以后,电骡服务器给客户端发送一个列表,这个列表包括了那些有客户端需要的文件的客户端(这些客户端叫做源)。
然后,客户端就去跟那些有所需文件的客户端建立连接。
注意客户端服务器的TCP连接在整个客户端会话过程中都会保持。
初始化握手之后,事务主要是由用户活动触发的:
有时客户端发送一个文件查找请求给服务器,服务器会返回一个查找结果,一个查找事务之后通常是一个对指定文件的源查询,这个查询的结果是一个可以提供该文件下载的源的列表。
电骡客户端用UDP来跟登录服务器以外的服务器进行通信。
UDP信息的用途是增加文件搜索能力,源搜索能力,保持连接。
4.2客户端到客户端之间的连接
电骡客户端一般是为了下载某个文件才会连接到其他的客户端(也就是源)的。
一个文件会被分为很多块。
客户端会从多个客户端(源)那里下载同一个文件,从不同的源下载文件的不同部分(这样不同的部分就可以同时被下载,如果源多,下载的效率就会极高)。
当两个客户端连接后,他们会交换容量信息,然后协商开始下载(或者说是上传,这取决于视角)的时间。
每个客户端有一个下载队列,用来保存正在等待下载的客户端的列表。
当电骡客户端的下载对列为空的时候,下载请求会被马上接受(除非这个请求者已经被屏蔽)。
如果下载对列不为空,那么新的下载请求就会放在队列之中。
不会努力服务更多的客户端,对每个下载客户端至少保持不少于2.k字节/每秒。
一个正在下载的客户端的下载地位可能被一个对列等级(queueranking)比他高的等待客户端抢占,在下载进程中的前15分钟正在下载的客户端的队列等级会增长用来避免产生颠簸(这里说的颠簸就是说,一个客户端频繁的从下载地位切换到等待状态,然后再切换回去。
这种频繁的切换叫做颠簸,这对资源是种浪费,所以要避免。
)。
当正在下载的客户端到达了下载队列的顶部,提供上传的客户端初始化一个连接用于把它需要的文件片断传送给它。
一个电骡客户端可能会在多个源客户端的等待队列中,在每个客户端上注册要求同一个文件片断。
当这个等待客户端实际上完成了这个文件片断的下载,他不会通知那些源客户端删除它的请求,而仅仅是在它在那些源客户端的队列中排到顶端的时候拒绝上传请求而已。
电骡使用一个声望系统来鼓励上传,为了防止假冒,电骡用RSA公钥加密技术来保护声望系统。
客户端连接中会使用很多电驴协议(eDonkeyprotocol)没有定义的消息,这些消息叫做扩展协议。
扩展协议用来实现信用系统,用来进行信息交换(例如,服务器列表的更新和源的更新),通过对文件块进行压缩提升发送和接收的效率。
电骡客户端连接中有限地使用UDP去周期其他客户端的状态。
4.3客户端到客户端的UDP连接
eMule客户端周期性地用UDP协议发送消息。
在eMule0.30e中,使用的UDP消息只是询问客户端在对方下载队列中的位置。
这个简单的请求-应答方案是随着重复要求文件消息(6.6.1节)而开始的。
对于这个