我们前面已经了解了两种获取文件的方式:FTP 和 SMB,下面我们将学习第三种应用软件协议。现在,通过 Internet 共享文件已经很流行。通过基于 Gnutella 协议的 P2P 应用程序,人们可以将自己硬盘中的文件共享给其他人下载。通过与 Gnutella 协议兼容的客户端软件,用户可以在 Internet 上连接 Gnutella 服务,然后定位并访问由其它 Gnutella 对等设备共享的资源。

很多 P2P 应用程序并不使用中央数据库记录各个对等设备上的所有可用文件,而是让网络内的各个设备相互查询可用文件,并通过 Gnutella 协议和服务定位资源。请参阅图示。
 

 
当用户连接了 Gnutella 服务时,客户端应用程序将检索可连接的其它 Gnutella 节点。这些节点将查询资源位置并回复请求。此外,它们还管理控制信息,以便服务查找其它节点。实际的文件传输过程往往基于 HTTP 服务。
 
Gnutella 协议中定义了五种不同类型的数据包:
  • ping — 用于查找设备
  • pong — 用于回复 ping
  • query — 用于定位文件
  • query hit — 用于回复 query
  • push — 用作请求下载