当前位置: 首页 > 工具软件 > Gnutella > 使用案例 >

Gnutella协议(1) 介绍

娄嘉石
2023-12-01

1.1 背景
       Gnutella是一个用于分布式搜索和数字资源共享的协议。尽管支持传统的客户机/服务器架构,Gnutella的特色是它的点对点、非中心的模型。
       在这个模型中,任何一个客户端同时也是一个服务器,反之亦然。所以Gnutella中给它们起了一个专门的名字叫做servent。Servent提供客户端接口,用户通过这个接口可以提交查询并查看查询结果,同时,它们也可以接受查询请求,在本地数据中检索,并返回符合条件的结果。因为这种分布式属性,实现Gnutella协议的由servent组成的网络具有高度的容错性,一部分servent掉线并不会中断正在进行的网络操作。-- Philippe Verdy
       本文的目标读者是那些具有相当的网络编程知识的人,但不要求有任何Gnutella的使用经验。另外,其他的对于本协议的实现可能具有非常有价值的信息,但本文将不包含这部分内容。Gnutella程序的列表可以在http://www.gnutelliums.com找到
1.2 术语
Servent  
一个参与Gnutella网的程序叫做一个servent,是从“SERVer”和“cliENT”各取一部分组成的 (意指同时是客户端和服务器—译者)。词语“peer”,“node”,”host”与其具有相似的含义,但主要指网络参与者而不是一个程序。当一个servent具有一个明确的客户端或服务器角色时,也可以用“客户端”或“服务器”。“客户端”有时候也用来指servent,有些文档使用“servant”来代替servent
消息   消息是在网络中传输的信息实体,有时词语“包”也具有同样的含义。有些文档使用词语“描述符”来指代消息。
GUID    全局唯一标识符(Globally Unique Identifier)。这是一个16字节长的随机数,用来标识servent或消息。这种标识不是签名,只是一种标识网络实体的一种方式。
Gnutella 网      Gnutella 网是由互连在一起的实现了Gnutella协议的主机组成的,有时也叫做Gnet
本文中关键字“必须”、“必须不”、“要求”、“应该”、“不应该”、“推荐”、“可以”和“缺省”的含义与RFC 2119 [34]中的定义相同。
1.3 特性
        Gnutella是一个非中心的点对点系统,它允许参与者从自己的系统中共享资源,参与者可以看到、定位和得到其他参与者在网络上共享的资源。
        资源可以是以下任何一项:指向其他资源的映射、密钥、任何形式的文件、关键资源的结构信息等。但是,除平面文件以外,其他资源的定位和处理本文将不涉及。
        每个参与者启动一个Gnutella程序,它寻找其他Gnutella节点并进行连接,这些连接起来的节点承担Gnutella消息的传送任务,这些消息包括:查询、对查询的应答,以及为了发现节点而发送的控制信息。
        用户可以提供一个他们希望共享的资源的列表,可以提交查询并得到查询结果,可以选择结果中的资源:例如,如果这些资源是文件,他可以下载这些文件。可以想象其他类型的资源,一旦提取出来,将带来比他们的内容更大的价值。
        资源之间的数据交换采用标准的HTTP协议。Gnutella网络只是用来定位共享资源的节点。
1.4 扩展协议
        本文是当前Gnutella协议的定义。Servent可以扩展这个协议甚至改变其中的一部分(例如压缩或加密消息)。但是servent必须保证能够与遵守本协议的servent兼容。例如,如果一个servent想压缩Gnutella消息,它首先应该确认连接远端的主机能够解压缩(在握手期间),不然它就不能压缩这些消息。Servent可以选择不接受不满足某些特性的servent的连接请求,但是必须确保Gnutella网络不会因此被分割成互不相通的部分。多个互不相通的网络在某些特殊的场合当然是允许的,但那就已经不是Gnutella网,而是其他的网络了。
        这个协议也允许在很多消息内部扩展。这种扩展可以经过那些不理解这些扩展含义的servent而到达那些理解这些扩展含义的servent。

 
 类似资料: