更新时间:2022-08-25 17:43
Gnutella(发音为/nʊˈtɛlə/,单词中的g不发音,或者发音为/gnʊˈtɛlə/)是一种文件共享网络。2005年6月,gnutella约有181万台用户(计算机),而2006年1月增加到超过300万个节点。截至2007年底,它是互联网上最流行的文件共享网络,估计市场份额超过40%。
Gnutella网络的第一个客户端由Nullsoft公司的贾斯汀·法兰科(Justin Frankel)与汤姆·帕勃(Tom Pepper)于2000年早期最先开发。同年3月14日,该程序被放在Nullsoft的服务器上并允许公众下载。该程序的源代码原计划稍后在GNU通用公共许可证下被发布。
与半集中式网络如FastTrack(KaZaA)以及Napster不同,Gnutella网络是完全分布式的。其最初的流行是源于2001年早期Napster由于法律纠纷而被关闭的威胁。不断增长的用户也使得该协议的最初版本暴露了不少缺陷。2001年早期,各种不同版本的协议(最初以专有闭源
这些发展使得Gnutella网络进一步吸引了更多用户。2001年晚期,一种Gnutella客户端软件LimeWire成为免费开源软件。2002年2月,Morpheus,一个商业文件共享开发群,放弃了原先的基于FastTrack的端到端软件,并发行了新的基于免费开源Gnutella客户端软件Gnucleus的新客户端软件。
Gnutella这个名字是GNU与Nutella的混成词:人们普遍认定法兰科与帕勃在开发Gnutella项目的时候吃了许多的Nutella,并且希望在GNU通用公共许可证下完成项目。Gnutella并未与任何GNU项目相关联;关于Gnutella在GNU中的相关项目,可以参见GNUnet。
要了解Gnutella网络是怎样工作的,先设想一个大的由用户(称为“节点”)组成的环,每个节点都有Gnutella客户端软件运行。当初始启动时,客户端软件必须进行自举(Bootstrapping)并找到至少一个其它节点,有多种不同的方法可以达到这一功能,包括软件内置的一组正在工作的已经存在的地址栏表,Web缓存的已知节点更新(称为GWebCaches), UDP服务器缓存以及IRC。一旦连接上,客户端就会请求一张活动地址栏表。
当用户想要进行搜索时,客户向每一个活动联接节点发送请求。在历史上(协议0.4版本),一个客户的活动联接节点数十分小(大约是5),所以每一个收到请求的联接节点都会再向其自身的所有联接节点转发该条请求,如此继续下去,直到该请求数据包在网络中被转发的“跳数”超过一个预先设定的数值(最大为7)。
到了0.6版之后,Gnutella网络中的节点被划分为叶节点(leaf nodes)与超节点(ultra nodes或ultrapeers)。每个叶节点仅与少数(一般为3)超节点连接,而每一个超节点与多于32个的其它超节点相连。在这种更高的出度(outdegree)下,先前提到的一条查询在网络中能达到的最大“跳数”被降低到4。
叶节点与超节点利用查询路由协议(Query Routing Protocol)来交换查询路由表(Query Routing Table (QRT))。叶节点将它的QRT发送到每一个与之连接的超节点,超节点随后将每一个与之相连接的叶节点传来的QRT以及其本身的QRT合并,并且将其与自身的邻居节点交换。
在实际中,这种在Gnutella网络中的搜索模式是十分不可靠的。由于每一个节点都是一台普通的计算机用户,他们经常连接或者断开网络,所以整个Gnutella网络结构永远都不是完全稳定的。Gnutella网络搜索的带宽消耗也是随着连接用户的增加而指数递增的[1],经常饱和的连接会导致较慢的节点失去作用。因此,搜索请求在网络中会被经常丢弃,与整个网络相比,大多数的查询只会到达其中的很少一部分节点。
Gnutella曾经是一种纯粹的基于洪泛式请求(query flooding)协议。早期的Gnutella 0.4版使用5种不同的数据包种类,即是:
以上不同消息包的定义主要是为了处理Gnutella网络中的搜索功能。文件传输功能是由HTTP协议实现的。
Gnutella协议的开发由GDF(Gnutella开发者论坛)所领导。许多扩展协议已经或正在由不同的软件商以及GDF的自由开发人员开发。这些扩展包括智能查询路由(intelligent query routing)、SHA-1校验码、query hit transmission viaUDP、基于UDP的查询(querying via UDP)、基于TCP的动态查询(dynamic queries via TCP)、基于UDP的文件传输(file transfers via UDP)、XML
在Gnutella开发网站上有试图在Gnutella 0.6版中将这些协议扩展规范完成的相关努力。由于所有的协议扩展还只是作为提议而存在于规范中,因此尽管已经过时,Gnutella 0.4版的标准至今仍是最新的完整技术规范。实际上,GDF的开发人员指出在Gnutella网络中使用0.4版的消息握手机制已经十分困难,或者根本不可能,开发人员应该遵循正在编写中的技术规范来进行开发工作。
主条目:Gnutella2