eMule内网穿透原理

测试开始以来,效果不错,Low2Low成功率颇高。

关注了一下大家的反馈,有人担心内网穿透会增加HighID负担,这个理解得有所偏差,关于内网穿透的原理,比较成熟的帖子有: http://dev.csdn.net/article/79/79799.shtm

不过这个说的比较复杂,用我自己的浅薄理解,简单说来就是:

内网计算机(也就是LowID),都通过至少一层网关连接互联网,没有自己的独立IP和端口(别人看到的你的IP是网关的),所以别人无法主动与你建立连接,两个内网用户自然也就无法连通,更无法实现传输。

但是内网计算机可以主动连接其他有独立IP的外网计算机,再通过udp协议通讯的时候,因为udp是非持续连接的,所以网关那边会给你开一个临时端口,让你能够接受外网计算机返回给你的udp包,如果一段时间内没有传输,临时端口便会取消。

这个步骤就可有空子钻,比如A和B 两台内网计算机,都同时连接外网计算机C进行udp协议的传输,A和B分别用到了临时端口Ap和Bp,这个时候通过Ap就可以主动连接到A,Bp就可以主动连接到B,所以C所要做的,就是把Ap告诉B,把Bp告诉A。AB通过从C那里知道的Ap和Bp,即可实现UDP直连。只要连接不断,临时端口就一直有效,传输期间,C什么都不需要参与,这个过程,俗称打洞,C帮AB打好洞,AB就可以自己玩了。

当然我这个是最简单的讲法,根据不同的网关设备,还是有很多不同情况需要解决。

有人怕Low2Low会耗HighID资源,这个多虑了,不是说不耗,而是耗的根小,C只不过初期接受一下AB发来的UDP请求,并向双方返回一次数据,打洞成功之后就再也没事了。本身UDP传输就耗的资源很少,这一两次UDP传输相对于连接频繁的eMule,可以忽略不计了。

更要说明的一点就是,我们目前测试用的内网穿透eMule,都是连接的我们自己的一台服务器用来做“C”,帮LowID打洞,没有依赖任何其他HighID,而我们那台破PIII服务器,目前同时处理着几百个low2low的连接,也几乎没占多少服务器资源。

当然将来最好的方案,是可以让eMule的Low2Low基于Kad来进行,这样可以不依赖任何第三方的服务器,独立的发展下去。基本原理是LowID利用自己的buddy来做帮助打洞,每个HightID只会帮1个LowID做buddy,所以不会增加HighID的负担。这方面我们也作了研究,不日也准备进行测试。

内网穿透目前是一套成熟的方案,QQ,BC等都早已开始大规模使用。为什么eMule到现在为止才开始由我们开始测试内网穿透呢?主要是因为eMule的开发长期以来都由老外们主导,国外大都由公网IP,Low2Low对他们来说,太不重要。而我们自己也走了很多的弯路,去年尝试通过内置VNN来解决问题,但VNN相对eMule,是一套太大的解决方案,需要注册和安装虚拟网卡才能使用。虽然我们后来的版本自动完成了这2步,但是VNN的服务器还是无法拖起eMule这巨大的用户群进行这样复杂的应用。

所以这次痛定思痛,自己从头开始开发,主要就是让使用tcp协议传输数据的eMule可以利用到UDP直连,并且解决各种各样的细节问题(因为eMule之前都没考虑到low2low问题)。
国外也有个neo版本的eMule,尝试利用kad解决Low2Low的问题,但实际使用效果不好。我们在开发过程中也想参考,不过基本没参考成,代码太复杂太乱。最后还是根据自己的思路自己写的,会比neo的思路更清晰些。

这次的内网测试版本,是我们VeryCD软件开发组近几个月努力得来的一点小成绩,希望能够早日正式发布。我虽不是软件开发,但有幸参与这个过程。所以把自己所理解的东西向大家解释一下。虽然会有纰漏,但不熟悉相关技术的同志,应该更容易理解。

最后补充,eMule既然是开源软件,这项技术成熟之后,必然可以共用,对所有eMule用户,都能有所帮助。
 
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
随着计算机和网络的普及,单独工作、不需要和其他用户交互的软件越来越少,作为一项新兴的网络技术,P2P以其无与伦比的可伸缩性和对资源的利用率吸引着大众的注意。传统C/S或B/S结构,服务器极易成为网络中的瓶颈,当客户端达到一定数量后,系统会无法提供服务。而基于P2P的网络中,每个节点既可以为其它节点提供服务,也可以享受其它节点提供的服务,服务器瓶颈被消除,整个系统的性能得到较大程度的改善。 在这样的背景下,本文设计开发了eMule网络文件系统。系统采用P2P网络模型,在整个文件上传与下载过程中客户端不需要任何服务器的支持,并可同时从当前在线的其他多个客户端中下载所需的不同文件数据块,实现了多点上传与下载并行,极大提高了速度。 系统分三个模块:本地共享文件信息收集模块,远程数据库操作模块,文件上传下载模块。客户端提供的功能主要包括:文件上传与下载、共享文件模糊查询、文件指纹识别、错误数据恢复、断点续传、流量监控、自动穿透内网、IP和端口探测、单点错误处理等功能。 本系统使用了文件指纹识别技术,能有效地监控下载过程中发生的数据错误,并能够检测错误数据恢复是否成功。在进行共享文件查找时,利用文件指纹可以精确的查找到所需的文件,避免文件同名而内容不同的情况。在上传下载过程中,系统使用了自动穿透内网、自动申请端口和磁盘空间、动态调整文件传输包大小、多线程上传下载文件、文件分块、利用内存作下载数据缓存等多种技术。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值