大学视频教程网版电骡下载客户端软件

功能特点

坏文件块处理

电骡采取了大量措施来保证在网络上文件的上传和下载不会出错. 一旦发现问题,电骡会使用先进的错误处理机制,确保将需
要重新下载的数据量减到最小.

文件的Hash值和ICH - (智能坏文件块处理,Intelligent Corruption Handling)

文件Hash值, 文件块Hash值 以及Hashset
对于网络上共享的每一个文件,电骡会使用MD4方式为它生成一个唯一的身份码. 这个数码被叫做文件hash值,在标准的eD2k链接中就包含这个数值,如

ed2k://|file|文件名|12043984|6744FC42EDA527B27F0B2F2538728B3E|/

其中的6744FC42EDA527B27F0B2F2538728B3E 就是文件hash值,是它让这个文件在网络上可以被识别出来.
一个大文件被划分为每块9.28MB的小文件块. 使用MD4方式,电骡给每个小文件块生成一个Hash值.这些Hash值就是文件块Hash值,也叫Hashset. 而整个文件的Hash值就是通过这个文件的所有文件块的Hash值生成出来的. 例如,一个600MB的文件会被划分成65个文件块,每个文件块会生成一个文件块Hash值,最后由这65个文件块的Hash值再生成这个文件的Hash值..
为保证电骡每次都能接收到正确的Hashset,你可以创建一个包含Hashset信息的链接,如这个

ed2k://|file|文件名|12043984|6744FC42EDA527B27F0B2F2538728B3E|p=264E6F6B587985D87EB0157A2A7BAF40:17B9A4D1DCE0E4C2B672DF257145E98A|/

其中 p= 后面的数值就是Hashset值. 每个文件块的 Hash值由":"分隔. 这个文件的大小为12043984 Bytes (=11.49 MB),这意味着这个文件应该有两个文件块组成,其中一个为完整的9.28MB文件块,其它一个剩下的在第二个文件块,因此这个文件有两个文件块Hash值.

ICH 智能坏文件块处理
每一个文件块下载完成后,电骡都会检查一下这个文件块是否吻合它的文件块Hash值.如果无误,这个文件块就开始向其它用户上传,帮助传播这块文件.
如果内容不符合文件块Hash值,那这个文件块就有问题,要重要下载.为了避免重新整块下载这个9.28 MB的文件块, ICH会重新下载这个文件块的开头180 KB数据,然后再检查文件的文件块Hash值. 如果还不对,电骡就开始下载下面的180 KB数据,然后重新检查. 电骡不断重复这样的操作,直到文件Hash值被确认无误. 这样如果运气够好,你可能只需要重新下载180 KB 就可以解决一个文件块错误问题. 但如果不巧,文件块出错的地方刚好在文件块的最后那部分,你还是重新下载了整块文件. 总得来说,ICH可以让你节省50%的坏文件块重新下载量.

AICH - (高级坏文件块处理,Advanced Intelligent Corruption Handling)
标准和ICH虽然也有缺陷,如只对9.28MB的完整文件块有效,但不失为一个高效的功能. 但如果文件块出错的部位多于一处,或有问题的客户端重复地上传错误文件块,又或者根本上连那个文件块的Hash值都是有问题的,ICH就没有办法对付了.
但AICH会料理整个文件数据,让重新下载的数据减少到最小,并且可以重新生成Hash值.

根Hash, 区Hashes 和 AICH Hashset



这次处理的对象是文件中这些9.28 MB 的文件块. 每个文件块再细分成53个以180 KB为单位的区, 电骡再使用SHA1 方式为每个区生成一个Hash值. 这些Hash值叫做区Hash值,是AICH Hashset的最底层元素.
上图显示出的是一个由4个文件块组成的文件的Hash树形结构图.每个文件块包含 53 个区,这个文件共有 212 个区Hash值. 这些区hash值构成另7个层,至到最上面的 根Hash值. 这整个Hash树就叫做AICH Hashset.
图中那些绿点和红点表示从最底层的区Hash到最上面的根Hash的算数独立性. 这意味着一旦我们的根 Hash值无误,这树中的所有分枝都可以用它来校验.
电骡可以生成带有根Hash信息的链接, 如

ed2k://|file|文件名|12043984|6744FC42EDA527B27F0B2F2538728B3E|h=A2NWOTYURUU3P3GCUB6KCNW3FTYYELQB|/

其中h= 后面的就是根 Hash值. 在链接中提供这个数值,可以大大保证文件的防出错能力. 参考 可信的根 Hash值

修复坏文件块
一旦电骡发现文件块不对,它会使用完整的AICH Hash Set随机向一个客户申请一个修复包. 这个修复包里面包含当前文件块中所有53个区的区Hash数据和一个Hash树的校验码. 上面的图片显示一个由4个文件块构成的文件的修复包信息. 校验码的数量是由文件块的数量决定的.(2^x >= '文件块数量', x = 检验码数量).
当接收到修复包之后,电骡用校验码检查根Hash值. 如果无误,电骡开始用修复包中提供的区Hash值检查所有53个区. AICH会重新下载不符合区Hash的区.
如果修复成功,在日志中会显示如下的信息:

09.09.2004 02:43:43: 文件块 6 发现问题 ([file])
09.09.2004 02:43:46: AICH 成功修复[文件]的第6文件块中 8.22 MB的数据

可信根Hash
最保险的做法是从带有根Hash值的链接下载文件.如果文件的链接是可靠的,这个根Hash值就会被接受,然后电骡将它保存到硬盘中.
如果链接中没有提供根 Hash值,电骡就只能接受来源发送过来的根Hash值. 电骡只相信最少10个来源发送过来的,并且一至的根Hash值,并至少92%的来源接受这个数值. 因为这个根Hash值的可靠性不能确定,所以它只在本次连接中有效,电骡也不会将它保存到硬盘,你也不能用它来生成带有根Hash值的链接.
一旦 AICH Hashset生成完成, 如文件下载完成, 电骡就开始向其它客房端传播这个根Hash值.

注意:
新发布的文件或稀有文件可能会没有足够的来源数来产生一个可信的根Hash值. 建议在发布文件时带上这个数值.
如果不存在根Hash值或这个数值是伪造的,电骡会以正常方式下载并完成这个文件.但在这种情况下不能使用AICH功能.
因为AICH Hashset比较大,它不被存在内存里,而被保存到known2.met文件中.只有在发现错误时才读取这个信息.
AICH只对v.44a或以上版本的电骡有效,但它和更早版本的电骡兼容.

适用版本: v.44a+
Update on: 2004-09-11 by Monk
翻译: 大学视频教程网 卯时下雨


12.09.2004 7:58