前言:事实上leech/leecher这个词最早出现在p2p世界的时候并不是特指吸血的,而是相当于今日的download,即正在下载的客户端(相对于下载已经完毕正在进行上传的客户端)。leecher是何时被用来指代用各种手段使得数据不公平交换的技术和客户端,已经不可考,但是无疑的,emule世界出现的anti-leecher相关技术是最为明确的标志。
这篇文章将不再考证anti-leecher出现的历史和背景,而是主要着眼于emule世界中leecher的性质和行为。
下文中所说的emule网络,指代所有使用eD2K协议进行数据交换的p2p网络(为了避免使用电驴网络这个目前在中国指代意义混乱的名词)。
一、leech与leecher
关于吸血的定义,我在另一篇文章什么是吸血,如何定义吸血行为,如何对抗吸血行为 [1]已经讨论过了。这里要重新强调的一点是,必须从行为的本质上分析吸血行为,而不是单纯地从上传或者不上传来判断是否属于吸血。
首先我将展开论述这一点。
如上所述,emule是建立在p2p(=peer-to-peer ,peer这个词自身就含有地位平等的意义)上的网络,因此它是建立在平等的数据交换这个基本前提上的。这里的平等,与公平有本质上的不同,它强调的是客户端之间的地位是对等的(即不是服务器端到客户端的数据传输方式),因此每个客户端的(获取数据的)权利和(上传数据的)义务是平等的。emule的公平是由平等的数据交换而产生的公平,不是一般意义上的我给你多少你就给我多少的公平。emule并不要求获取了1G的数据量就必须上传1G的数据量(也就是公平),而是要求将所获取到的数据在其他客户端发出需求的时候回馈至网络中。在这个层面上,emule的信用系统(credit system)的作用是巨大的,它保证了上传数据较多的客户端会取得较高的数据获取优先权,从而实现了数据传输的良性循环。同时通过一些策略保证了新加入网络的客户端也能够较为优先的获取数据(因为新加入的客户端必然没有很大的上传积累量,即没有很高的因上传而带来的信用“积分”),以利于网络能够不断拓展。而emule的文件优先级的设计,使得信用系统(即俗称的积分)成为程序确定上传哪个文件、上传多少给某个特定的客户端的唯一依据,这也是保证数据传输的良性循环非常重要的一环。(因此使用者可以控制自己的哪些文件用于上传,但是不能控制将某个文件上传给特定或确定的客户端,通常所说的emule的公平的意义正在于此。)
吸血行为恰好相反。吸血行为的本质,就是通过控制上传(的具体内容和数据量),来欺骗性的获得数据获取优先权,以便能够最大化地进行下载。leecher并非不上传,因为在emule的credit system的作用之下,不上传数据而想获得下载,必须依靠信用系统给予新客户端的“优惠”,但是这个“优惠”具有时效性不能长期使用,在下载较大的文件时必然会产生一段时间之后几乎无法获取数据的情况。(相应的,有一种吸血行为是每次启动都变换userhash来伪装成新手,这是很不便的,因为并不是所有的客户端程序都可以随时关掉重开的)。
二、leecher的上传与正规客户端的上传的差异
上面已经论述了leecher必须上传的原因,下面将要讲到的部分,就是leecher的上传如何体现了leecher的本质。
在我们所熟知的http下载中,并不存在吸血这样的事物。leecher是伴随着p2p出现的新鲜事物,它的基本特征就是为了最大化数据的获取,即使破坏数据传输的良性循环也在所不惜。因此我们通常说,吸血是“一切上传仅为了下载”。它不考虑整个网络的数据循环和发展,而只注重最大化下载。如果是在http下载中这无可指摘,但是放到依靠平等的客户端互相传输数据的p2p网络中就变成了严重的问题。
下面的这个部分,并不涉及community boost所形成的私有网络。
leecher向正规客户端上传数据是具有选择性的。它不向自己没有数据需求的客户端上传数据,甚至采用failed upload这样的技术手段骗取上传积分,以提高在正规客户端的上传队列中的排名,更早更多地获得下载。因此,它上传的数据,不是为了回应其他客户端的请求以将数据在网络中传播出去形成数据的循环,而是满足自身下载需求。换言之,它的“给”,从头到尾都是为了“拿“。
leecher不考虑与其他客户端之间的数据交换,只是一味的通过各种技术手段尽多尽快的获取数据,因此会造成在宏观上的数据单向流动,从而会破坏数据的良性循环,影响emule网络的正常传输,严重时就会直接毁掉依赖对等传输的emule网络。
三、community boost(社区吸血)
社区吸血是当前非常典型的、也是较为主流的leecher类型。社区吸血的主要特征就是一个小团体内部进行数据交换,但是极少反馈给作为数据来源的全球emule网络,通常把这个小团体称为”私有网络“(private network)。
社区吸血的标志性技术手段,是通过特定的用户名(或用户名的部分)及/或userhash及/或mod string来对特定的客户端进行加分,以给予其相对较高的数据获取优先权。非常明显,这个信用系统是特别改造过的,且这种信用系统与对上传者高回报的信用系统(常见的非官方信用系统)是完全不同的。私有网络的内部数据交换,可以是不完全”公平“的,但是因为其小范围的特性,私有网络的成员仍然享有相对于公共网络成员而言完全不可想象的数据获取优先权。另外,由于社区吸血的私有网络内部,使用的多是一些leecher mod或者有吸血行为/技术手段的客户端,本身就对emule网络有一定的破坏性,使得社区吸血几乎就相当于一个毒瘤。
必须指出的一点是,社区吸血并不是通常想象的那种一个自给自足偶尔跟外界交换的”小水塘“,它的每一个节点都在不断的从公共网络中获取数据,但是获取到的数据在这个私有网络内部的交换的数据量远远大于回馈至公共网络的数据量。因此不管是从微观上看还是从宏观上看,社区吸血都造成了数据交换中事实上的大范围不平等。