目的和范围
电骡是基于电驴协议的流行的文件共享程序。本报告描述电骡的网络行为,并解释需要理解协议的基本技术。本报告提供一个完整电骡网络协议规范,包含一个附录,其中提供信息格式。本文档中的信息是基于开源的电骡客户端。下面介绍的目介绍通用的背景,方便读者理解本文档,在 [3] 中可以找到其他的电骡信息源。
概述
电骡网络是由几百个电骡服务器和上百万的电骡客户端 [1] 组成。客户端应该连接到服务器而获得网络服务,只要客户端在系统中,服务器连接一直打开。服务器执行集中式的索引服务(和在 Napster 的一样),它不会和其他服务器通讯。
每个电骡客户端预配置一个服务器链表和本地文件系统中的共享文件列表。客户端登录到网络是使用单一 TCP 连接到电骡服务器,从服务器得到所要的文件和在线的客户端。同时电骡客户端和其他客户端之间有几百个 TCP 连接来上传和下载文件。每个电骡客户端维护一个上载的共享队列。正在下载的客户端首先加入到队列的底部,逐渐的向前,直到到达队列的定部才开始下载该文件。客户端可以从几个其他的电骡客户端下载同一个文件,从每个客户端取不同的分片。客户端也可以上传没有完全下载的文件块;最后,电骡扩展了电驴的能力,允许客户端交换服务器、其他客户端和文件的信息。注意客户和服务器通讯都是基于 TCP 的。
服务器使用一个内部数据库,数据库中存储客户端和文件的信息。一个电骡服务器并不存储任何文件,它仅仅扮演文件位置信息的集中索引;另一个功能是作为穿过防火墙的客户端连接以及不能接受输入连接的客户端之间桥梁。桥梁的功能明显增加了服务器的负载。电骡使用 UDP 来增强客户端不依赖服务器和客户端的能力。客户端发送和接收 UDP 消息的行为对于客户端日常操作来说不是强制的,并且在防火墙阻止其放松和接受 UDP 消息时有点问题。
1、客户端到服务器的连接
客户端启动的时候使用 TCP 连接到某个电骡服务器,服务器提供一个客户端 ID 给该客户端( 1.3 节),这个 ID 仅仅在客户端和服务器连接的生命周期内有效(注意,在客户端有高 ID 是,直到他 IP 地址改变的时候,它才会从所有的服务器受到相同的 ID )。在客户端连接建立之后其发送共享的文件给服务器,服务器存储这些信息到内部数据库中,数据库中通常包含几万个可用文件或活动的客户端。电骡的客户端也将其他想下载的文件列表发送给服务器。第 2 节提供详细的电骡客户端和服务器之间 TCP 报文交互的描述。
在连接建立之后,电骡服务器将包含当前客户端需要下载的文件信息的其他客户端拥有的文件发送给当前客户端(这些客户端叫做源);从这时开始,电骡客户端将和其他客户端之间建立连接。
2、介绍
注意, TCP 连接的 C/S 在所有客户端会话过程中事情打开,在大部分由用户活动触发的起初握手事务之后,有时客户端发送文件查询请求,其以搜索结果响应,一个搜索事务后面通常是一个到源指定文件的查询,这个查询通常返回源( IP 地址和端口)的列表,请求者可以从他们那里下载请求的文件。
UDP 用来和当前客户端连接的服务器之外的服务器通讯。 UDP 报文的目的是增强文件查找、源搜索增强和保活(保证电骡服务器列表中的所有服务器是有效的)。更多的客户端和服务器之间的报文交互在第 3 章介绍。
客户端到客户端的连接
电骡的客户端连接其他客户端的目的是下载文件;一个文件被分割成小块。客户端可以从几个不同的客户端下载同一个文件,当然从每一个得到的分片是不一样的。
两个客户端连接好之后,他们交换性能信息,并且协商一个下载(上传)开始。每个客户端都有一个下载队列,这里面保存了正在等待下载文件的客户端列表。当电骡客户端的下载队列是空的时候,一个下载请求可能立即导致一个下载的开始(除非,例如,请求者是被禁止的)。当下载队列不是空的,一个下载请求的结果是在客户端请求队列中添加一个新的记录;没有尝试过在一个给定时间内为每个客户端提供最小 2.4KB/s 的最小带宽而同时服务多个客户端。一个下载客户端可能被在等待队列先于他前面的客户端占先,在下载会话开始的 15 分钟内,电骡客户端下载队列排行被增加来阻止击溃( thrashing )。 [1] [2] 下一页 |