emule架构分析
更新时间:2023-03-17 07:18:01 阅读量: 教育文库 文档下载
- eMule怎么用推荐度:
- 相关推荐
eMule是一个典型的MFC程序,它的图形界面等,已经和MFC紧紧融合到了一起。因此通常情况下它只能在windows平台下运行。有一些其它的工程,如aMule等,把它进行了移植,因此跨平台的功能要强些。
其实还有另外一个叫做xMule的工程,不过现在已经人气快不行了。在aMule的主页上可以看到eMule移植到linux平台下的一些历史,最早是有个叫做lMule的工程,他使用wxwidgets来进行eMule的跨平台的移植,这个工程2003年就不再更新了,后来转变成为xMule工程,它一度是linux平台下eMule的事实上的替代品。但是他们的程序员之间由于理念不同,发生了内讧,导致aMule分裂出来,他们后来矛盾严重的时候曾经一度从理念问题上升到互相对对方进行人身攻击,并且曾经对对方的网站发动过DDos。后来aMule和xMule就是两个完全不同的工程,xMule现在只有HopeSeekr一个人在维护,基本上也没有什么更新了。这一点不仅让人感慨。今年寒假的时候我曾经和HopeSeekr进行过一些交流,感觉他非常自信,经常拿着aMule的一部分代码来给我看,说你看看他们的代码这么这么写,这简直就是一陀xx嘛,这种代码在某些情况下肯定会Crash掉嘛,相反,你看看我们xMule的代码,这里是这样这样,肯定就不会有这种问题了。
eMule从0.42版开始支持Kad技术,这是一个非常重要的里程碑。Kad是一种DHT的协议,它可以使节点之间互相保留一些其它节点的联系信息,并且利用这样一个“关系网”寻找到整个网络中的任何一个节点以及上面的资源,整个过程不需要任何中心服务器。因此向当年搞napster那样直接端掉中心服务器就搞跨napster网络一样来对付eMule的Kad网就毫无作用了。0.42版是2004年2月27日放出的,比eDonkey2000的OverNet晚了将近一年,但是它的Kad网络的规模却在迅速扩大。Overnet和eMule中的Kad使用的都是Kademlia结构,但是具体的消息报文的格式有区别,因此两个DHT网络并不能互相兼容。OverNet直到现在,用户也仍然维持在十万左右,这是比较近的一篇文章写的。但是eMule的Kad网的规模有多大,目前却没有一个很准确的说法。由此也可以看出开源软件的力量。目前aMule的Kad网和eMule的Kad网是兼容的,xMule中还没有Kad的支持
Emule框架
Emule的概述
(1) emule_p2p:主要处理两个客户端之间的交互。
(2) emule_data_manage:主要处理数据输入输出,数据验证,数据纠错,数据保存。 (3) emule_hub:主要处理与迅雷服务器(hub、tracker)的交互。
(4) emule_cs:主要处理与ed2k服务器的交互。
(5) emule_kad:主要处理DHT协议,在DHT网络中寻源。
(6) emule_nat_traverse:用于与veryCD emule版本进行内网穿透。
emule_p2p
每个文件的下载需构造一个task,提供该文件的源是称为resource,与该resource的每个连接是一个pipe,对于同一个pipe实现了两个逻辑——上传和下载。Emule目前的resource上只开启一个连接。因此task、resource和pipe的关系为:
emule_download_pipe/emule_upload_pipe Task Resource A Pipe Resource B …… Resource N
任务的组成:
Pipe …… Pipe emule_download_pipe/emule_upload_pipe …… emule_download_pipe/emule_upload_pipe emule_download_taskemule_download_logicemule_source_listemule_tracker_logicdispatcher_bridgeemule_data_manager
任务主要有以下元素组成:
(1) emule_download_logic: 该类对任务中的一些关键事件进行监听,并对这些事件
进行处理。任务中的关键事件包括文件创建、文件完成、服务器连接成功、服务器连接失败、连接握手成功、数据管理器出现异常等事件。
(2) emule_data_manager: 该类对数据进行管理,自动处理数据的输入输出,数据纠
错,状态保存等。任务通过其监听接口对该类进行管理。
(3) emule_source_list: 备份当前的所有下载资源。
(4) dispatcher_bridge: 每一个新到达的下载资源都会加入到该类中,该类对所有的
下载资源进行操作,包括建立连接、重连、断开连接等。
(5) emule_tracker_logic: 处理与后台服务器打交道的逻辑。包括tracker查源,向hub
报告下载完成信息,向hub查询文件信息等。
每个任务有一个调度器,调度器通过获取resource的信息来决定创建pipe的个数,对于emule,每个resource从头至尾只创建一个pipe,通过pipe的信息和当前文件的信息,调度每个pipe的下载范围。每个resource有一个实现读写数据的对象emule_p2p_tcp_handler。该对象对socket进行封装,实现异步的读写。
Emule_peer类结构如下:
emule_source_listresource0..ndata_pipechoke_pipeemule_peeremule_download_pipeemule_upload_pipeasyn_socket_deviceemule_p2p_tcp_handleremule_p2p_listeneremule_socket_wrapperverycd_connectionasyn_socket_device_imp
任务接口实现详看IEmule.doc
emule_data_manage
数据管理器主要功能为数据写磁盘emule_data_output和数据读磁盘emule_data_input,读写磁盘操作有文件io系统xl_file_io_system实现。在写磁盘过程中对数据进行验证emule_part_check,验证失败将对数据进行纠错处理。纠错分aich和ich修复。 确认正确的数据或是纠错成功的数据,将计算它们的bcid,提供给迅雷p2p使用。
emule_data_manageremule_io_transferemule_cfg_info_manageremule_file_manageremule_data_input_impemule_verify_manageremule_data_output_impemule_cfg_infoemule_part_checkxl_file_io_systememule_cfg_fileemule_aich_recoveryemule_ich_recoveryemule_id_calculator
纠错实现:
数据管理器通过监听接口向emule_download_logic报告当前出错的块,调度器通过error_correct_interface获取错误块的信息,从新下载该块,并避免从错误的源获取。error_correct_interface接口为:
struct correct_process_info { };
range_queue complete_range_queue; std::string resource_id;
virtual void error_ranges( std::vector
virtual bool can_correct( const range& r, IDataPipe* pipe_ptr ) =0; // 判断该块是否能从制定pipe
上下到非错误的数据。
virtual void get_correct_process_info( const range& r, std::vector
emule_hub
迅雷的hub服务器主要管理已经完成下载的资源,tracker服务器提供正在下载过程中的资源。Emule在启动前要分别到hub和tracker上查询迅雷服务器保存的该文件的emule资源。
emule_cs
emule有提供源信息的服务器,称为ed2k服务器,该服务器不是迅雷公司维护,主要为国外的服务器。
emule_kad
emule实现的DHT网络,用于分布式寻源,以实现无服务器情况下依然能找到源。
emule_nat_traverse
VeryCD emule版本的emule自己设计了一套内网穿透的协议,主要用于veryCD版本的emule之间,为了实现与其穿透连接,thunder也根据其协议实现与其穿透的功能。
正在阅读:
emule架构分析03-17
格列夫游记读书笔记12-11
2012年以往各省市联考公务员申论真题及答案(精心整体收集的)06-10
关于钢筋混凝土顶管施工要求与技术05-16
2013单片机实验指导书(含程序代码)04-21
福利费税前扣除问题处理分寸和风险点分析01-18
家长与孩子如何进行阅读05-28
2011年河南省示范性高中五校联谊模拟考试 数学文10-02
教你水果要怎么洗才干净12-21
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- 架构
- 分析
- emule
- 国际私法案例分析题学生用
- 2019高考英语二轮复习知识技巧梳理专题4:状语从句
- 三年高考(2016-2017-2018年)英语试题分类汇编分项版解析-专题21 语法填空
- 基于单片机的超声倒车报警系统 - 图文
- 就近就远原则练习题
- 计量经济学教案
- 中国红薯干行业市场前景分析预测报告(目录) - 图文
- 机电一体化毕业设计(论文)-单级蜗轮蜗杆减速器
- 奈曼旗民族职业中专教学教研工作计划(含月工作安排)2017.3
- Excel在财务与股票分析中的简单应用
- “思想道德修养与法律基础”课考试
- 2012.8.15克山一中防火疏散演练预案
- 流体力学简答题总结
- 05.2015年会计职称考试《中级会计实务》冲刺试卷(二)
- 2015-2016学年七年级下学期期末考试数学试题带答案
- 福师18春《高级英语(三)》在线作业二
- 华师大政治与政府平时作业(含答案)
- 尉犁县第六小学教学常规管理工作自查自评报告
- 小学语文课堂小组合作学习有效性探究结题报告11
- 关于开展迎国庆歌咏比赛活动的通知