mule服务器列表(Emule mule工作原理分析)
一.概述
Emule是一款基于p2p技术的文件共享软件。它与传统文件共享的区别在于:
共享文件分散在所有参与者的硬盘上,而不是在集中式服务器上等待客户端下载。所有参与者形成一个虚拟网络,每个客户端可以从这个虚拟网络中的任何客户端的机器下载文件。同时,每个客户可以与任何其他客户共享他的文件。Emule系统中有一些服务器,但是这些服务器不再存储文件,而是存储这些共享文件的目录或地址。每个客户端从服务器获取或搜索共享文件的地址,然后自动从其他客户端下载。参与的客户端越多,下载速度越快。Emule建立在多点文件传输协议之上。Emule网络由两部分组成:服务器和客户端。服务器是客户端连接的桥梁,可以下载用户进行搜索和查找。服务器的排列方式就像一本电话簿,客户端可以通过浏览得到自己需要的文件所有者的客户端信息。在真实的文件下载过程中,没有下载的文件通过服务器端。其架构如下图所示:
图1 Emule架构
搜索:每个客户端连接到一个服务器作为其主服务器。当连接时,客户端告诉主服务器他共享了哪些文件,以及其他信息,如IP地址。所以每台服务器都会记录其服务器上记录的所有上述信息。该服务器在搜索时,会通过匹配上面记录的已知信息,将搜索结果反馈给搜索客户端。当客户从搜索列表中选择所需文件并开始下载时,Emule会根据文件内容记录文件大小、文件名和另一个特殊值哈希。Emule获得这些信息后,会向所有添加的服务器发送一个请求,请求具有相同哈希值的文件。并且服务器返回持有该文件的用户的信息。
下载:当客户端选择下载一个文件时,它首先收集拥有该文档的客户端列表。它将首先查询主服务器的所有登录用户是否拥有该文件。然后连接并检查其他服务器的登录用户拥有的文件的客户端列表。一旦找到拥有该文件的其他客户端,它将请求每个客户端发送该文件的不同部分。直到最后的文件被这个不同的片段组装成一个完整的文件。找到下载源(其他客户端)后,下载就是客户端和客户端通过P2P直接对话。没有数据流通过服务器。emule客户端可以使用许多tcp连接来连接其他客户端,以便相互上传或下载数据。当下载一个文件时,客户端可能同时连接到许多不同的客户端,并从它们那里获得文件的不同片段。即使一个客户端没有下载完一个文件,同时也可以在client.emule中把下载的片段上传到其他服务器上,内置的数据库用来存储客户端的信息和自己的文件。它不存储要下载或上传的文件,而是作为客户端拥有的许多文件的中央索引。
二。客户端/服务器TCP通信
2.1连接建立
在Emule架构中,一个客户端只能与一个服务器建立连接。建立后,服务器给客户端一个客户端id,用来唯一标识这个客户端。在整个客户端会话期间,客户端/服务器的tcp连接始终存在。客户端id分为高id和低id。当客户端无法接受外部连接时,它会被赋予一个低id。一种可能是客户端位于NAT或代理服务器之后。如果一台机器可以允许其他客户机自由地连接到它自己的tcp端口(缺省值是4662),它就会被赋予一个高的id。
计算高id的公式:
假设ip是x.y.z.w,
Id=x+2^8*y+2^16*z+2^24*w
而低id总是小于16777216(0x1000000)。
下面分别描述高id和低id客户端与服务器的连接过程:
高id连接流程:
客户端与服务器建立tcp连接并发送登录消息。在过去,服务器使用第二个tcp连接与客户端握手,目的是检查客户端是否有能力接受其他客户端发起的连接。客户端到客户端握手完成后,服务器关闭第二个连接,然后发送客户端和id更改消息以完成客户端-服务器握手。该过程如下图所示:
图2高id登录序列
●连接过程:客户端也与服务器建立连接,但是当服务器与客户端建立连接时会失败,通常会向客户端发回一条消息,类似于“Waring you have a lowered。请检查您的网络配置”。最后,服务器仍然发送id更改消息,如下图所示:
图3低id登录序列
注意,Emule中的服务器配置有两个限制:硬限制和软限制;
其中硬限制> =软限制。当连接到服务器的客户端数量达到软限制时,服务器停止接受低id客户端的连接;当达到硬限制时,服务器停止连接到任何客户端。此时的连接过程如下图所示:
图4拒绝会话序列
2.2连接启动消息交换:
cs连接成功建立后,客户端和服务器交换一些setup消息。客户机向服务器提供一个列表,记录它的共享文件,然后请求更新服务器列表。所以服务器发回它的状态和版本信息。以及自己维护的知名服务器列表。最后,客户端会要求下载一些文件。此时,服务器将找出哪些其他客户端具有该请求的文件,然后将这些客户端的列表发送回请求客户端。下图显示了:
图3连接启动顺序
回调机制:
设计这种机制的目的是为了克服低id客户端无法接受外部连接的缺点。实现原理很简单:假设A和B连接到同一个服务器,A需要一个文件,这个文件存储在B中,但是B的id很低。于是A向服务器发送回调请求,要求服务器通知B主动连接A,然后服务器向B发送回调请求,向其提供A的ip和端口,然后B就可以不需要服务器的介入而与A建立连接。
图4回调序列
客户端/服务器UDP通信
3.1服务器保持活动和状态信息
客户端定期检查其服务器列表中服务器的状态。这是通过发送UDP服务器状态请求消息和UDP服务器描述请求消息来完成的,其中服务器状态请求包括随机数。.这个数字反映在服务器的回复中。如果反映的值与原始值不一致,则丢弃服务器回复中的信息。客户端维护一个计数器,该计数器在每次发送状态请求时递增,并且从服务器接收的任何消息都重置该计数器。当此计数器的值达到预先配置的上限时,服务器被视为不可用,并且。服务器状态请求从客户端的服务器列表中删除,包括当前用户数量、服务器中索引的文件以及服务器的软/硬。
极限。服务器描述回复包括服务器名称和一个简短的描述性字符串。整个过程如下图所示:
.
图5 UDP保持活动序列
3.2增强的文件搜索
Emule的客户端可以使用UDP服务来增强其文件搜索功能。当客户端尝试下载文件,但它获得的源的数量小于可配置的值(默认值为100)时,它将定期向其服务器列表中的所有服务器发送UDP get sources数据包,以尝试找到更多具有该文件的源。
客户端到客户端TCP通信
客户端成功与服务器建立连接,并从服务器获得所需文件的来源信息后,clinet需要与来源列表中的其他客户端进行交互,即与这些来源中的每一个建立tcp连接。当某个连接的套接字在一定时间内(默认为40秒)没有事件(没有读写)或者任何客户端关闭了该连接,tcp连接将无效。
4.1初次握手
这种握手是对称的:两端向对方发送相同的信息。该信息包括标识、版本和功能信息。发送的信息有两种,一种是hello消息,其实是eDonkey协议的一部分,另一种是Emule info消息,是Emule协议本身特有的。握手过程如图所示:
图6 eMule客户端初始握手
4.2信用体系
信用系统旨在鼓励用户彼此分享更多的文件。当客户端为其对等端上传文件时,下载对等端根据接收的数据量更新信用值。这种信用不是全球性的。特定的传输过程对应于特定的信用值,该信用值由下载客户端保存。仅当为该客户端提供上传的对等体请求从该客户端下载文件时,该信用才起作用。
信用取下列值中的最小值:
1.上传总数* 2/下载总数
当downloaded_total为0时,整个表达式设置为10。
2.sqrt(上传总数+2):
当uploaded_total< 1 MB时,该表达式设置为1。
注意,credit的取值范围:1
以上就是由优质生活领域创作者 嘉文社百科网小编 整理编辑的,如果觉得有帮助欢迎收藏转发~
本文地址:https://www.jwshe.com/678828.html,转载请说明来源于:嘉文社百科网
声明:本站部分文章来自网络,如无特殊说明或标注,均为本站原创发布。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。分享目的仅供大家学习与参考,不代表本站立场。