DHT网络的搜索技术解析
DHT网络介绍
P2P中DHT网络介绍一、P2P及DHT网络简单介绍:P2P在思想上可以说是internet思想/精神/哲学非常集中的体现,共同的参与,透明的开放,平等的分享(让我想起之前学习过的,现在正在疯狂热炒的云计算的“中央集权”制度)。
基于P2P技术的应用有很多,包括文件分享,即时通信,协同处理,流媒体通信等等。
通过这些应用的接触,分析和理解,P2P 其本质是一种新的网络传播技术,这种新的传播技术打破了传统的C/S架构,逐步地去中心化,扁平化,这或许在一定程度上应证了”世界是平的”趋势,呵呵。
P2P文件分享的应用(BTs/eMules等)是P2P技术最集中的体现,我们这里的研究也是以P2P文件分享网络作为入口,P2P文件分享网络的发展大致有以下几个阶段,包含tracker服务器的网络,无任何服务器的纯DHT网络,混合型P2P网络。
DHT网络发展即有“思想/文化”上的“发展”,也有一定的商业上的需求(版权管理)。
DHT全称叫分布式哈希表(Distributed Hash T able),是一种分布式存储方法,一类可由键值来唯一标示的信息按照某种约定/协议被分散地存储在多个节点上,这样也可以有效地避免“中央集权式”的服务器(比如:tracker)的单一故障而带来的整个网络瘫痪。
实现DHT的技术/算法有很多种,常用的有:Chord, Pastry, Kademlia等。
我们这里要研究的是Kademlia算法,因为BT及BT的衍生派(Mainline, Btspilits, Btcomet, uTorrent…),eMule及eMule各类Mods(verycd, easy emules, xtreme…)等P2P文件分享软件都是基于该算法来实现DHT网络的,BT采用Python的Kademlia实现叫作khashmir (科什米尔,印巴冲突地带?),有如下官网。
eMule采用C++的Kademlia实现干脆就叫作Kad,当然它们之间有些差别,但基础都是Kademlia。
dht 爬虫 原理
dht 爬虫原理
DHT(分布式哈希表)是一种用于分布式网络中的数据存储
和查找的算法。
爬虫是一种自动化程序,用于通过网络收集信息。
DHT爬虫是基于DHT原理的一种爬虫程序。
DHT爬虫的原理如下:
1. DHT网络:DHT网络由许多参与者(节点)组成,节点之
间通过分布式哈希表进行数据共享和查找。
每个节点都有一个独特的标识符(ID)和一个存储的键值对数据集。
2. 数据存储:在DHT网络中,数据根据其键的哈希值存储在
相应的节点上。
节点根据一致的哈希函数将键映射到一个节点的ID上。
这样,同样哈希值的键都会被存储在同一个节点上。
3. 数据查找:当需要查找某个键值对时,节点通过哈希函数将要查找的键映射到对应的节点ID。
如果该节点存在,则直接
返回对应的值;如果该节点不存在,则通过DHT网络中的路
由表找到最接近该节点ID的节点,从而实现数据的查找。
4. DHT爬虫:DHT爬虫利用DHT网络的数据共享和查找功能,自动化地在网络上进行信息收集。
它首先加入DHT网络,并注册感兴趣的键,如文件名、主题等。
然后通过DHT网络
的数据查找功能,找到相应的节点,并获取其存储的数据。
最后,爬虫可以根据需要提取相应的数据,并进行进一步的处理和分析。
需要注意的是,DHT爬虫需要遵守网络规则和道德准则,避免对网络资源造成不必要的负担或侵犯他人的合法权益。
DHT路由算法中的Kademlia技术分析
一
『 y
一 ~
的路 由算法 。 2K d l 绍 .a ei a介 K d mi 只 是 一 项 技 术 准 则 , H ae l a D T则 是 该 技 术 的 具 体 实 现 。
K dmi使 节点 间互 相通讯 的配置信 息减 到最 小 , ae l a 配置 信息 随着关键 字 的查 找而 自动传播 ;ae l 通过使 用并行 的异步查 找算法来 避免 K dmi a 那些非 活动节点 所带来 的时间耗费 ; 点有着较高 的灵活性来 选择较 节
科技信息
计算机与网络
D T路由算 法 巾的 K d ml 技术分析 H ae i a
辽 东学院信息技术学院 王 震
[ 摘 要】 通过 对DH 路 由算 法中的 K d m i 术的整体 分析 , 出K dm i技术是 D 路 由算法 中更加具有 效率、 P P系统 中 T l ae l 技 a 提 ae l a HT 在 2 更加具有应 用前景的技术 。本文首先介 绍 了K d m i技术特 点、 ae l a 要素 以及 工作过程 ; 着对 K d m i 术进行详 细地 系统描 述 , 接 ae l 技 a 对 Ky " I e  ̄ 点 D的计算进行具 体的分析 , 探讨 了k b c e刷新的规则 ; 前 面分析 的基 础上 , - u kt 在 进一 步地研 究 了K d m i 术的路 由策 ae l 技 a 略 , K dmi路 由表进行 了计算分析 , 出了最终的结论 。 对 ae l a 得 [ 关键词 ] H K d m i P P D T ae l 2 a
dht原理
dht原理
DHT,也称为分布式哈希表,是一种用于分布式系统的算法。
它的原理是将数据根据其关键字的哈希值分散存储在多个节点上,以实现高效的数据查找和存储。
具体的原理如下:
1. 哈希函数:DHT使用哈希函数将数据的关键字映射为一个
唯一的标识,通常是一个数字或字符串。
这个标识称为哈希值。
2. 节点分布:系统中的每个节点都有一个唯一的标识,通常是一个哈希值。
节点的标识空间形成了一个环,称为哈希环。
哈希环将范围从0到2^k-1映射到不同的节点。
3. 数据存储:当一个节点需要存储数据时,它首先计算数据的哈希值,并根据哈希环找到负责该哈希值区间的下一个节点。
节点将数据存储在其负责的区间内。
4. 数据查找:当一个节点需要查找数据时,它首先计算数据的哈希值,并根据哈希环找到负责该哈希值区间的节点。
节点将请求转发给负责存储该数据的节点,直到数据被找到为止。
5. 节点间通信:DHT使用节点之间的通信来转发请求和获取
存储的数据。
节点之间通过网络连接进行通信,并使用协议来交换信息。
通过以上原理,DHT实现了高效的分布式数据存储和查找。
它可以将大量的数据分散存储在多个节点上,提高了系统的存储容量和性能。
同时,DHT还具有高度的容错性,当节点失
效或新节点加入时,系统可以自动调整数据的分布,保持系统的正常运行。
基于DHT的Chord路由算法改进
由于 P P网络是实时变化 的 , 2 每时每 刻都有 发生
着节点加入或离开 , 而在节 点加入 或离开 后系统 都需 要更新原节点所属 的路 由信息 表 , 以此来 保证 表 中信 息的准确性 。 比如说 以一个 Ⅳ个节点的 C od系统为 hr 例, 某一节点的加入或 离开 , 要通 过 0 1gN)次数据 (o
Ke y wor s Ch r DHT; u i g fn i g d : o d; m tn d n i
O 引 言
当前 ,2 P P网络技 术早已运用于文 件共享 、 即时通
以 C od 为代 表 的结 构 化 分 布式 查 找 算 法 以 及 以 h r K za aa 为代表 的混合式查 找算法 。结 构式分 布网络 中 由于并不存在 服务 器这一 角色 , 因而基 于此 的查 找算
一
对于节点 n的查找表来说 , 中的第 i 其 个表项包括 s= scesrn+2 。 , ≤ i m而且对其中每个都要计 uc so( )1 ≤ 算 m d 用 s来 表 示 节 点 n 的第 i 指 针 , n o2 , 个 即 . f gr i。 i e [] n Co hr d查询过程如下 : () 1 当节点 接 收到查 询请 求 后 , 计算 关键 字 K 先 是否在对应的节点标识 及其后 继 节点 区间 内; 如果 在
信、 流媒体 、 共享存储 和对等计算及协 同处理 等技术领 域, 对于 P P网络技术方 面 的相 关研 究也 已是 国内外 2
学术 界 的一 个 重 点。相 比于 传 统 的 C S服 务 模 式 , / P P网络 的一个 显著 特点 就是 节点 问都 是对 等关 系 。 2 对 等网络理论研究必须解决 的核心 问题无 疑是如何高 效 准确地 实 现 网络 资源 的查找 。所 以在 对 P P网络 2 中资源查 找的研 究就成为如何进一 步更好地 提高 P P 2
bt协议详解DHT篇(上)
bt协议详解DHT篇(上)bt协议详解 DHT篇(上)最近开发了⼀个的⽹站,突然产⽣了仔细了解bt协议的想法,这篇⽂章是bt协议详解系列的第三篇,后续还会写⼀些关于搜索和索引的东西,都是在开发这个⽹站的过程中学习到的技术,敬请期待。
⽂章主要内容来⾃于对的翻译,如果⼤家感兴趣的话,可以阅读⼀下英⽂原版。
为了⼤家阅读的⽅便,把⽂章分成了上下篇,两篇加在⼀起快1w字了,确实看的⽐较累。
1 简介前⾯讲到BT协议像tcp/ip协议⼀样是⼀个协议簇,dht协议在这个协议簇中出现的⽐较晚,但是它所发挥的作⽤却不容⼩视。
dht协议提出的⼀些新的想法让我们能够推翻中的设计,得到⼀个更简单更⾼效的bt服务器和bt客户端。
在dht协议中,bt客户端使⽤“distributed sloppy hash table”(DHT的全称)来存储没有tracker地址的种⼦⽂件所对应的peer节点的信息,在这种情况下,每⼀个peer节点变成了⼀个tracker服务器,dht协议是在udp通信协议的基础上使⽤Kademila(俗称Kad算法)算法实现。
重要:注意这⾥使⽤的术语,⼀个peer节点是⼀个实现了bt协议并且开启了tcp监听端⼝的bt客户端或者服务器。
⼀个node节点是⼀个实现了dht协议并且开启了udp监听端⼝的bt客户端或者服务器,这两者⾮常容易混淆。
dht由很多node节点以及这些node节点保存的peer地址信息组成,⼀个bt客户端包括了⼀个dht node节点,通过这些节点来和dht⽹络中的其它节点通信来获取peer节点的信息,然后再通过bt协议从peer节点下载⽂件。
看到这⾥⼤家应该明⽩了,dht协议并不能取代bt协议,它只是bt协议的⼀个强有⼒的补充,在⼀些禁⽌运⾏bt tracker服务器的国家,通过使⽤dht协议,⽤户照样可以下载想要的内容。
tracker服务器本来也不保存真正的⽂件,只是保存和torren⽂件相关的peer的信息,dht协议通过从附近的node节点获取peer信息,⽽不是从tracker服务器获取peer信息,这就是所谓的trackerless。
BitComet右下角的DHT连接是什么?怎么设置?
BitComet右下角的DHT连接是什么?怎么设置?
分类:电脑/网络 >> 软件
解析:
DHT简单的说是用来起代替Tracker的作用的,和速度没有直接的关系,DHT的作用体现在更快速的获得peer。
不过DHT的实现需要通过UDP连接,而Bitet目前只能自动在防火墙上开TCP端口,因此如果显示没有DHT连接的话,请手动给防火墙开UDP端口。
某些脆弱的网络环境下,大量的UDP数据包会导致速度下降、断网等现象(与同样是UDP的内网互联类似),因此如果使用0.59中出现和之前版本相比异常的情况,可以尝试关掉DHT相关功能。
dht原理
dht原理DHT原理。
DHT,即分布式哈希表,是一种用于分布式系统中查找和存储数据的技术。
它通过将数据分布在网络中的各个节点上,实现了高效的数据查找和存储功能。
在了解DHT原理之前,我们先来了解一下哈希表的基本概念。
哈希表是一种数据结构,它通过将关键字映射到表中的一个位置来实现快速的数据查找。
在传统的哈希表中,数据存储在单个节点上,当需要查找数据时,只需通过计算关键字的哈希值,就可以快速定位到数据所在的位置。
然而,传统的哈希表在分布式系统中并不适用,因为数据存储在单个节点上,一旦节点发生故障,数据就会丢失。
而DHT通过将数据分布在网络中的各个节点上,解决了传统哈希表的单点故障和数据丢失的问题。
它采用了一种分布式的哈希算法,将数据的关键字映射到一个大范围的哈希空间中,然后通过一致性哈希等技术,将数据分布到不同的节点上。
这样,即使网络中的某些节点发生故障,数据仍然可以通过其他节点来进行存取,保证了系统的可靠性和稳定性。
DHT的原理可以简单概括为以下几个步骤:首先,将数据的关键字通过哈希算法映射到一个大范围的哈希空间中,得到一个哈希值。
然后,通过一致性哈希等算法,将数据的哈希值映射到网络中的各个节点上。
接下来,当需要查找数据时,将数据的哈希值通过相同的哈希算法映射到哈希空间中,然后通过一致性哈希等算法,定位到存储数据的节点。
最后,通过网络通信协议,将数据从存储节点传输到请求节点,完成数据的查找和存取操作。
通过以上步骤,DHT实现了分布式系统中高效的数据查找和存储功能。
它具有以下几个特点:首先,DHT具有良好的可扩展性。
由于数据存储在网络中的各个节点上,当系统需要扩展时,只需增加新的节点,数据就可以自动地分布到新的节点上,而无需对整个系统进行重构。
其次,DHT具有良好的容错性。
即使网络中的某些节点发生故障,数据仍然可以通过其他节点来进行存取,保证了系统的可靠性和稳定性。
最后,DHT具有良好的负载均衡性。
dht算法原理描述
dht算法原理描述dht原理dht是P2P⽹络(结构化P2P)核⼼路由算法,主要是利⽤⼀致性hash,把节点和资源都表⽰成⼀个hash值,放⼊到这个⼤的hash环中,每个节点负责路由靠近它的资源。
⼀.重要概念:1.node负责P2P路由信息,P2P⽹络的组⽹就是它来负责2.peer负责管理资源,⽣成种⼦⽂件,发布资源信息3.nodeid节点的唯⼀标识,是⼀个160bit的hash值hash资源的唯⼀标识,也是⼀个160bit的hash值,其和nodeid使⽤同⼀个算法5.距离距离是两个hash值进⾏异或(XOR)操作后的值,值越⼩,距离越近节点和资源的距离: nodeid XOR infohash两个节点之间的距离:nodeid1 xor nodeid26.种⼦⽂件对某个资源的描述⽂件,种⼦⽂件包括了资源的infohash(160bit)、资源所在机器(nodeId IP PORT)、离资源所在机器最近的N个机器(nodeid IP PORT)列表⼆.典型场景描述:1.新节点加⼊⽹络新安装的P2P客户端是⼀个孤⽴的节点,和其他节点都⽆联系,怎么加⼊P2P⽹络呢?需要有⼀个种⼦⽂件,种⼦⽂件中有多个该P2P ⽹络中的node信息,根据种⼦⽂件中的节点列表,连接到P2P⽹络,并获取路由信息,获取最靠近本新节点的节点列表2.发布资源a.⽣成资源的Infohashb.查找和infohash距离最近的N个Node,向这N个node⼴播新资源信息,告诉这些节点,我有某某资源----- 节点⽣成了资源,不过其路由信息不在这个节点上(也不在离这个节点的最近的M节点上),⽽是在和资源infohash最近的N个node 上3.查找某个资源并下载a.找到最靠近资源的N个node(使⽤nodeid xor infohash来计算距离远近)b.向这些node发送资源查询信息,如果有这个资源的详细信息,就返回给客户端,否则返回离资源更近的node列表给客户端c.直到查询到资源提供者信息,如果没查到信息,且没有更近的node了,那就说明这个资源没有提供者d.找到node信息(nodeid,ip,port)后,向这个node请求资源。
hits指标
hits算法
HITS(Hyperlink-Induced Topic Search)算法是一种网络分析算法,用于评估网页的重要性。
它通过分析网页之间的链接关系来计算每个网页的权威值(Authority)和枢纽值(Hub)。
权威值是指一个网页被其他网页引用的次数,而枢纽值是指一个网页指向其他网页的链接数。
HITS算法认为,一个网页的权威值越高,说明它越重要,因为它被很多其他网页所引用;同样地,一个网页的枢纽值越高,也说明它越重要,因为它指向很多其他网页。
在实际应用中,HITS算法可以通过根集合和基本集合的概念来找到与查询主题相关的网页。
根集合是指与查询主题直接相关的网页集合,而基本集合则是指根集合中所有网页的邻居集合。
然后,HITS算法会计算每个网页的权威值和枢纽值,从而确定每个网页的重要性。
HITS算法的优点是简单易用,可以快速找到与查询主题相关的网页。
但是,它也有一些局限性,例如可能会受到网络中的噪声和垃圾链接的影响,导致结果不够准确。
因此,在实际应用中,需要结合其他算法和评价指标来综合评估网页的重要性。
对等网络中DHT搜索算法综述
收稿日期:2007-06-01;修回日期:2007-08-21 基金项目:国家自然科学基金资助项目(60573161);西北工业大学研究生创业种子基金资助项目(Z200759)作者简介:李士宁(1967-),男,陕西西安人,教授,主要研究方向为无线传感器网络;夏贻勇(1983-),男,硕士,主要研究方向为对等网络(nwpu _xyy @qq .co m );杜艳丽(1979-),女,硕士,主要研究方向为分布式计算.对等网络中D HT 搜索算法综述*李士宁,夏贻勇,杜艳丽(西北工业大学计算机学院,西安710072)摘 要:在P2P 网路中如何快速准确地对资源进行定位是衡量其性能的一个关键。
现在的分布式P2P 系统普遍采取的是D HT (d i stri buted hash tab l e ,分布式哈希表)搜索方法。
基于D HT 的P2P 网络搜索算法的研究已经是P2P 研究的一个热点。
从P2P 定义出发,介绍了P2P 网络按照拓扑结构的分类发展;然后深入介绍了目前对等网络几种分布式哈希查找算法Chord 、CAN 、Sk i pNet 和Cycloi d 等,并对这些算法从拓扑结构、路由复杂度、路由表大小、容错性、扩展性、负载平衡性等方面进行了评估比较;最后分析了这些算法的优缺点及今后研究的重点。
关键词:对等网络;搜索;分布式哈希表;C hor d ;CAN;关键字中图分类号:TP393 文献标志码:A 文章编号:1001-3695(2008)06-1611-05Survey of DHT search a l gorit hm i n peer -to -peer networkL I Sh-i n i ng,X IA Y -i yong ,DU Y an -li(School of C o mpu t er Sc i ence &E ng i n ee ring,N orthw estern P ol ytec hn ic a l Un i v e rsit y,X i an 710072,China )Abstract :In t he P2P net w ork on how qu i ckl y and accurately positi on i ng of resources is a m easure of the perfor m ance of akey ,now distri buted P2P syste m generall y i s DHT search m ethod ,DHT-based P2P net work search algorit h m of P2P is a hot re -search .B ased on P2P defi n iti on ,t h is paper i n troduced the P2P net w ork topol ogy i n accordance w it h the cl assifi cati on ,and deep l y i n troduced several net works such as distributed has h t yp i cal search al gorith m Chord ,CAN,Sk i p N et and Cycloi d ,eva -luated those algorith m s from the topol ogy ,routi ng co m plexit y ,routi ng table s i ze ,fau l-t tolerance ,scal ability ,load bal ance and so on seven aspects of t he assess m en.t F i nall y ,analyzed t he advan tages and d isadvan tages of these al gorith m s and t he focus of fut ure research .Key words :P2P(peer -to -peer)net w orks ;search ;d istri buted hash tab l e ;Chord ;CAN;key P2P 是一种分布式网络,网络的参与者共享他们所拥有的一部分硬件资源(处理能力、存储能力、网络连接能力、打印机等)。
dht查找的例子
dht查找的例子
DHT查找的例子:
用户搜索的时候,用同样的算法计算出每个关键字的hash,再根据hash知道该关键字对应信息的储存位置,从而能够迅速定位资源的位置。
例如某份文件名为“雪狼湖.mp3“。
当用户共享此文件时,客户端把“雪狼湖.mp3“这个字符串进行分词,结果可能是"雪"、"狼"、"湖"、"mp3"四个词。
假设上面几个词的hash结果分别为15,26,37,48。
DHT一般规定系统中第一个id号比hash值大的用户(记作newid=success(hash),下同),负责保存这些关键字所对应的信息。
假设此时系统中有id号分别为1、9、11、19、21、29、31、39、41几个用户,那么其中id=19的用户应当储存“雪”字对应的信息(可能包括文件hash,用户id等等)。
同样id=29的用户储存“狼”字对应的信息,如此类推。
验证指南中关于dht和cht的要求
验证指南中关于dht和cht的要求验证指南中关于DHT和CHT的要求DHT是一种分布式数据存储结构,它允许将数据存储在网络中的多个节点上,以实现数据的高可用性和负载均衡。
在DHT中,每个节点都被赋予一个唯一的标识符,通常是一个哈希值。
当需要存储数据时,根据数据的标识符计算出对应的节点,并将数据存储在该节点上。
当需要查找数据时,同样根据数据的标识符计算出对应的节点,并从该节点上获取数据。
DHT的核心思想是将数据分散存储在网络中的各个节点上,以提高数据的可用性和查询效率。
CHT是一种用于解决负载均衡问题的技术,它通过将数据和节点映射到一个固定范围的哈希空间中,以实现数据的均匀分布。
在CHT 中,每个节点和数据都被映射到哈希空间中的一个点上。
当需要存储数据时,首先根据数据的哈希值找到它在哈希空间中对应的点,然后在该点附近找到最近的节点,并将数据存储在该节点上。
当需要查找数据时,同样根据数据的哈希值找到它在哈希空间中对应的点,然后在该点附近找到最近的节点,并从该节点上获取数据。
CHT 的核心思想是将节点和数据在哈希空间中均匀分布,以实现负载均衡和高效的数据查找。
在验证DHT和CHT的要求时,首先需要验证DHT的要求。
DHT的要求包括:节点之间的通信必须是无状态的,节点必须能够自动加入和离开网络,节点之间的通信必须是可靠的,节点之间的通信必须是安全的。
为了验证这些要求,可以通过在实验环境中搭建一个DHT网络,并进行节点的加入和离开、通信的测试。
测试结果应该能够证明节点之间的通信是无状态、可靠和安全的。
接下来是验证CHT的要求。
CHT的要求包括:节点和数据的映射必须是一致的,节点之间的负载必须是均衡的,节点之间的通信必须是高效的。
为了验证这些要求,可以通过在实验环境中搭建一个CHT网络,并进行节点和数据的映射、负载均衡和通信的测试。
测试结果应该能够证明节点和数据的映射是一致的,节点之间的负载是均衡的,节点之间的通信是高效的。
继续接着上一篇写:使用C#实现DHT磁力搜索的BT种子后端管理程序+数据库设计(开源)[搜片神器]
继续接着上⼀篇写:使⽤C#实现DHT磁⼒搜索的BT种⼦后端管理程序+数据库设计(开源)[搜⽚神器]继续接着上⼀篇写:昨天由于开源的时候没有注意运⾏环境,直接没有考虑下载BT种⼦⽂件时⽣成⼦⽂件夹,可能导致有的朋友运⾏没有结果,在此表⽰对⽀持开源的朋友道谦.另外也对源程序增加了⼀些说明,已经提交.程序下载:个⼈电脑编译环境是WIN7+VS2005,如果程序运⾏出错,请⾃⾏下载代码进⾏编译.先说下运⾏⽅法:1)有固定IP的朋友可以试试H31DHT.exe数据抓取程序,会获取⼀些数据,如果>2⼩时还没有数据返回,直接说明不是固定IP的返回数据很少;存储到数据库中,如果将此⽹站的200多万数据(个⼈估计的)全部下载成功,那也可以搜索很多内容了.3)新程序界⾯如下:需要的⾃⼰下载源代码进⾏编译(VS2005),不提供EXE下载,希望⼤家感兴趣的⼀起开源下;[增加了复制磁链接和下载选中项⽬的代码,之前只能查看,不能显⽰.]--------------------先来点⼤家感兴趣的东西-------------------------------------⼤家可能问⽬前的程序采⽤什么⽅法下载BT种⼦的⽐较关⼼,下⾯就⾃⼰的体会给⼤家说说:DHT磁⼒种⼦其实就是20字节的HASH值,这个值可以直接从很多⽹站下载种⼦,举例⼦说明:⽐如说上⼀篇⽂件中有那么多HASH值的字符串,怎么利⽤呢,⽐如有个HASH值13ce77b3b934b12dc77fded6646426a6db5c3428,有40位,因为在内存⾥⾯占⽤20位,显⽰为16进制所以显⽰为40位了;有这个HASH值,我们可以加上磁头magnet:?xt=urn:btih: 两个合在⼀起就可以下载BT种⼦了,当然需要使⽤BT⼯具,(magnet:?xt=urn:btih:13ce77b3b934b12dc77fded6646426a6db5c3428)复制试下.但我们的程序没有使⽤BT协议去下载,⽽是通过别⼈的⽹站下载.会提⽰找不到这个种⼦,那就说明这个⽹站没有收集到最新的BT种⼦.可以从其它⽹站下载,⼤家可以去看下源程序⾥⾯的组合⽅法.-------------------------下⾯介绍⼀些从⽹上收集的资料信息----------------------------------------------DHT⽹络爬⾍基于DHT⽹络构建了⼀个P2P资源搜索引擎。
[搜片神器]直接从DHT网络下载BT种子的方法
[搜⽚神器]直接从DHT⽹络下载BT种⼦的⽅法DHT系列⽂章:1.2.3.--------------------------------------------------------------------------------------------------------------------看懂此⽂章需要提前看明⽩上⾯的系列⽂章,还需要你有TCP⽹络编程和bencode编码⽅法基础上,如果都看不明⽩,可以到娱乐区去看看,休息下...在介绍了这么多期⽂章后,最后介绍BT⽹络⾥⾯⼀个⽐较重要种⼦下载协议,⽅便⼤家知道如何从DHT⽹络直接下载种⼦的问题.先说下我们⽬前下载电影等⽂件是如何下载的,⽐如我们有个BT种⼦,就可以去下载对应的⽂件,但如果我们只有个⽂件名字,如何去找BT种⼦呢?⽬前我们下载BT种⼦有两种⽅式:1. 通过HTTP直接从WEB服务器上下载,这种直接⽅便,⽐如从迅雷服务器上下载种⼦,2. 再就是通过BT软件从⽹络⾥⾯去获取BT⽹络⾥⾯专门有个下载种⼦的协议⽂件,只能下载种⼦,然后种⼦下载好后就可以交给BT软件来下载数据了.如何从DHT⽹络下载种⼦,必须先看两个协议⽂章:这⾥⾯有介绍,但还是需要说明⼀下如何操作的流程⽅便⼤家更好的理解.需要我们在此之上操作后续流程.之前的DHT有SEARCH的相关代码来搜索这个HASH对应的哪些IP在提供下载./* This is how you trigger a search for a torrent hash. If port (the second argument) is non-zero, it also performs an announce.Since peers expire announced data after 30 minutes, it's a good idea to reannounce every 28 minutes or so. */if(searching) {//m_dht.dht_random_bytes((void*)hashList[2],20);if(m_soListen >= 0)m_dht.dht_search(hashList[2], 0, AF_INET, DHT_callback, this);if(s6 >= 0)m_dht.dht_search(hashList[2], 0, AF_INET6, DHT_callback, this);searching = 0;}搜索到对⽅返回的IP信息和端⼝号后,⼤家可以分析dht.c⾥⾯的函数代码dht_periodic(const void *buf, size_t buflen,const struct sockaddr *fromAddr, int fromlen,time_t*tosleep,dht_callback *callback, void *closure)函数⾥⾯的ANNOUNCE_PEER返回请求⾥⾯带有对⽅表明⾃⼰此BT种⼦对应的认证码peerid.dht_periodic(const void *buf, size_t buflen,const struct sockaddr *fromAddr, int fromlen,time_t *tosleep,dht_callback *callback, void *closure)函数⾥⾯的ANNOUNCE_PEERcase ANNOUNCE_PEER:_dout("Announce peer!From IP:%s:%d\n",inet_ntoa(tempip->sin_addr),tempip->sin_port);new_node(id, fromAddr, fromlen, 1);if(id_cmp(info_hash, zeroes) == 0){_dout("Announce_peer with no info_hash.\n");send_error(fromAddr, fromlen, tid, tid_len,203, "Announce_peer with no info_hash");break;}if(!token_match(token, token_len, fromAddr)) {_dout("Incorrect token for announce_peer.\n");send_error(fromAddr, fromlen, tid, tid_len,203, "Announce_peer with wrong token");break;}if(port == 0) {_dout("Announce_peer with forbidden port %d.\n", port);send_error(fromAddr, fromlen, tid, tid_len,203, "Announce_peer with forbidden port number");break;}if(callback){(*callback)(closure, DHT_EVENT_ANNOUNCE_PEER_VALUES, info_hash,(void *)fromAddr, port,id);//此ID就是peerid,}知道了对应的IP,端⼝号,还有种⼦ID号,就可以向对⽅发送请求了.获取HASH是通过UDP⽹络,但下载BT种⼦是通过TCP来处理,相当于别⼈是TCP服务器,我们连接过去,直接下载对应PEERID的种⼦就⾏了.BT种⼦在DHT⽹络下载流程此包构造⽐较简单,按照格式进⾏组装就⾏了,然后发送出去,对⽅就会回应⾃⼰是什么客户端的软件提供种⼦下载.void CH31BTMgr::Encode_handshake(){//a byte with value 19 (the length of the string that follows);//the UTF-8 string "BitTorrent protocol" (which is the same as in ASCII);//eight reserved bytes used to mark extensions;//the 20 bytes of the torrent info hash;//the 20 bytes of the peer ID.char btname[256];memset(btname,0,sizeof(btname));sprintf(btname,"BitTorrent protocol");char msg[1280];memset(msg,0,sizeof(msg));msg[0]=19;memcpy(&msg[1],btname,19);char ext[8];memset(ext,0,sizeof(ext));ext[5]=0x10;memcpy(&msg[20],ext,8);memcpy(&msg[28],m_hash,20);memcpy(&msg[48],m_peer_id,20);int res1=Write(msg, 68);//TCP发送消息}extension headerThe metadata extension uses the extension protocol (specified in BEP 0010 ) to advertize its existence. It adds the "ut_metadata" entry to the "m" dictionary in the extension header hand-shake message. This identifies the message code used Example extension handshake message:{'m': {'ut_metadata', 3}, 'metadata_size': 31235}extension messageThe extension messages are bencoded. There are 3 different kinds of messages:1 request2 data3 rejectThe bencoded messages have a key "msg_type" which value is an integer corresponding to the type of message. They also have a key "piece", which indicates which part of the metadata this message refers to.In order to support future extensability, an unrecognized message ID MUST be ignored.这就需要会bencode的相关代码,这个⼤家可以⽹上搜索进⾏编译,如果实现搞不定,可以留下邮箱我将此类代码发送给你,其实也是⽹上收集整理的.void CH31BTMgr::Encode_Ext_handshake(){entry m;m["ut_metadata"] = 0;entry e;e["m"]=m;char msg[200];char* header = msg;char* p = &msg[6];int len = bencode(p, e);int total_size = 2 + len;namespace io = detail;io::write_uint32(total_size, header);io::write_uint8(20, header);io::write_uint8(0, header);int res1=Write(msg, len + 6);}如果别⼈回应的是3,那就直接退出吧,说明别⼈拒绝了你.如果回应是2,则返回的是数据区,每块是16K⼤⼩,最后⼀包不是.dataThe data message adds another entry to the dictionary, "total_size". This key has the same semantics as the "metadata_size" in the extension header. This is an integer.The metadata piece is appended to the bencoded dictionary, it is not a part of the dictionary, but it is a part of the message (the length prefix MUST include it).If the piece is the last piece of the metadata, it may be less than 16kiB. If it is not the last piece of the metadata, it MUST be 16kiB.Example:{'msg_type': 1, 'piece': 0, 'total_size': 3425}d8:msg_typei1e5:piecei0e10:total_sizei34256eexxxxxxxx...The x represents binary data (the metadata).下⾯给出如何进⾏提交我需要第⼏包的数据代码:void CH31BTMgr::write_metadata_packet(int type, int piece){ASSERT(type >= 0 && type <= 2);ASSERT(piece >= 0);entry e;e["msg_type"] = type;e["piece"] = piece;char const* metadata = 0;int metadata_piece_size = 0;if (type == 1){e["total_size"] = 14132;int offset = piece * 16 * 1024;//metadata = m_tp.metadata().begin + offset;metadata_piece_size = (std::min)(int(14132 - offset), 16 * 1024);}char msg[200];char* header = msg;char* p = &msg[6];int len = bencode(p, e);int total_size = 2 + len + metadata_piece_size;namespace io = detail;io::write_uint32(total_size, header);io::write_uint8(20, header);io::write_uint8(m_message_index, header);int res1=Write(msg, len + 6);}在接收到⼀包请求后我们才可以继续下⼀包的请求,下⾯给了我们如何解析这⼀包的问题代码:// 处理⼀个完整的包数据bool CH31BTMgr::DeCodeFrameData(char * buffer,int buflen){char * p = (char *)mhFindstr(buffer, buflen, "ut_metadatai", 12);if(p){m_message_index=atoi(&p[12]);if(m_message_index==2){return false;}write_metadata_packet(0,0);char filename[256];memset(filename,0,sizeof(filename));sprintf(filename,"%s\\torrent.txt",m_workPath);DelFile(filename);}p = (char *)mhFindstr(buffer, buflen, "metadata_sizei", 14);if(p){m_metadata_size=atoi(&p[14]);m_fileCnt=(int)(m_metadata_size/16384)+1;}p = (char *)mhFindstr(buffer, buflen, "msg_typei", 9);if(p){int type1=atoi(&p[9]);if(type1==1){p = (char *)mhFindstr(buffer, buflen, "piecei", 6);if(p){int piece=atoi(&p[6]);p = (char *)mhFindstr(buffer, buflen, "total_sizei", 11);if(p){int total_size=atoi(&p[11]);p = (char *)mhFindstr(buffer, buflen, "ee", 2);if(p){//保存数据FILE* pfile=NULL;char filename[256];memset(filename,0,sizeof(filename));sprintf(filename,"%s\\torrent.txt",m_workPath);char openmethod[5]="a";if(piece==0)sprintf(openmethod,"w");if((pfile=fopen(filename,openmethod))!=NULL){if((piece+1)*16*1024<total_size){fseek(pfile,(piece)*16*1024,SEEK_SET);fwrite(&p[2],1,16*1024,pfile);write_metadata_packet(0,piece+1);fclose(pfile);}else{fwrite(&p[2],1,total_size-(piece)*16*1024,pfile);fclose(pfile);ManageTorrentFileToRealFile(filename);}}}}}}else if(type1==2){return false;}}return true;}void * mhFindstr(const void *haystack, size_t haystacklen,const void *needle, size_t needlelen){const char *h =(const char *) haystack;const char *n =(const char *) needle;size_t i;/* size_t is unsigned */if(needlelen > haystacklen)return NULL;for(i = 0; i <= haystacklen - needlelen; i++) {if(memcmp(h + i, n, needlelen) == 0)return (void*)(h + i);}return NULL;}接下来说下如何进⾏快速调试的问题: 第⼀次调试也很天真的等着DHT⽹络上的数据过来,需要等很久,⽽且调试总是发现别⼈不回应,要么就是拒绝,经过⼀段时间后,问朋友总是不对问题,结果是协议没有构造对.下⾯就需要注意的地⽅总结下:1.⼀定要接收到别的⼈PEERID后才能够与别⼈交流,不然别⼈肯定不理你;2.构造协议调试不能够在外⽹络上调试,最好⼤家将mono-monotorrent源代码下载回来,调试分析下,本地开启服务器;3.通过本地与mono-monotorrent进⾏调试,你就可以分析出是哪⾥不对的问题,是不是协议哪些封装得不对的问题.4.通过DHT⽹络下载回来的种⼦肯定是最新的,WEB下载的可能还没有呢..5.通过协议下载回来的种⼦好像没有announce-list,不知道为什么不提供⼀些内容,可能还有些什么关键地⽅没有下载,分析mono-monotorrent代码⾥⾯就是不提供下载,希望⾼⼿指点.6.TCPClient接收数据区需要开到16K以上,这样⽅便处理,当然如果会前后拼接包就更好.7.如果需要bencode相关的编码C++代码,可以在此留⾔或者给h31h31#发邮件.如果此⽂章看不太明⽩,请先看看之前的⽂章,分析调试下代码,再来学习此⽂章可能就⽐较懂⼀些.希望有了解的朋友更好的交流和进步.在此留⾔学习讨论.。
关于磁链的技术介绍和应用教程[图文教程]
一、关于磁链技术的介绍DHT是一种分布式存储方法。
DHT的作用是找到那些与本机正在下载(上传)相同文件的对端主机(Peer),当然,实现这一过程并不依赖Tracker 服务器。
在DHT网络中的每个客户端负责一个小范围的路由,并负责存储一小部分数据,从而实现整个DHT网络的寻址和存储。
这种信息获取方式保证了整个网络没有单个的中心,即使一个节点下线,依然可以通过其他节点来获取文件,因此也就不需要Tracker服务器来告诉你,其他节点在什么地方。
PEX:是Peer Exchange的简写,我们可以将其理解为“节点信息交换”。
虽然DHT解决了去中心化的问题,但要在没有“中心协调员”(Tracker)的情况下实现高效寻址,就要借助PEX。
PEX所提供的功能有点类似于以前的Tracker 服务器,但工作方式却非常不同。
Magnet links:有网友将其称为磁链。
DHT+PEX解决了BT“寻址”的问题,但是如何告诉BT客户端找(寻)什么又是另外一个问题。
在.torrent文件中包含的内容就是用户真正要下载的文件的特征信息,或称为“电子指纹”,BT客户端知道了要找什么,也知道如何去找,于是P2P方式的下载、上传就实现了。
以前BT客户端通过.torrent文件得知“要找什么”,现在,文件的“电子指纹”不再存放于.torrent中,而被放在了Magnet links中。
1、你是如何使用BT下载?传统的BT下载过程是这样的,用户通过网络下载到相应资源的Torrent 种子文件,使用BT下载客户端软件打开这个文件。
BT下载客户端软件就会根据Torrent文件中的网址,自动连接BT Tracker服务器,从BT Tracker服务器接收到其他正在下载该文件的用户网址节点列表。
然后BT下载客户端软件会与其他网址节点建立连接,从而获取所需文件资源的片段,直到整个下载完成。
从整个下载过程可以看到,在传统的BT下载中,BT Tracker服务器是BT 下载必不可少的中心灵魂。
DHT(Distributed Hash Table) 分布式哈希表
DHT的全称是Distributed Hash Table,即分布式哈希表技术,是一种分布式存储方法。
这种网络不需要中心节点服务器,而是每个客户端负责一个小范围的路由,并负责存储一小部分数据,从而实现整个DHT网络的寻址和存储。
和中心节点服务器不同,DHT网络中的各节点并不需要维护整个网络的信息,而是只在节点中存储其临近的后继节点信息,大幅减少了带宽的占用和资源的消耗。
DHT网络还在与关键字最接近的节点上复制备份冗余信息,避免了单一节点失效问题。
形象地,我们可以把整个DHT网络想象成一个大城市,那么每个客户端,就好比城市里各个角落的地图,上面绘制了附近区域的地形情况,把这些地图一汇总,城市的全貌就出来了。
而DHT所采用的算法中最出名的是Kademlia,eMule早在一年多前就开始采用,Bitcomet、Azureus和BitTorrent只是步其后尘,同样使用Kademlia算法的DHT。
不过它们各自的实现协议不尽相同,因此不能相互兼容(BitComet与BitTorrent兼容,Azureus更像eMule,但与其它都不兼容)。
在不需要服务器的情况下,每个客户端负责一个小范围的路由,并负责存储一小部分数据,从而实现整个DHT网络的寻址和存储。
新版BitComet允许同行连接DHT网络和Tracker,也就是说在完全不连上[Tracker服务器的情况下,也可以很好的下载,因为它可以在DHT网络中寻找下载同一文件的其他用户。
BitComet的DHT网络协议和BitTorrent今年5月测试版的协议完全兼容,也就是说可以连入一个同DHT网络分享数据Kademlia技术,通常又被称为第三代p2p技术,是一种P2P通用协议,适用于所有的分布式点对点计算机网络。
Kademlia定义了网络的结构,规划了节点之间的通讯以及具体的信息交互过程。
在Kademlia中,网络节点之间使用UDP进行通信,通过一种分布式哈希表来存储数据,每个节点都会有一个自己的ID,在用来标识节点本身的同时,也用以协助实现Kademlia算法和流程。
dmi和dht超级混动技术原理
dmi和dht超级混动技术原理
DMI(Direct Memory Interface,直接内存接口)和DHT (Distributed Hash Table,分布式哈希表)都是计算机领域的
技术。
DMI技术的原理是通过直接将计算机的内存映射到外部设备,实现设备可以直接访问内存而不需要经过CPU的介入。
具体
实现方式是使用专用的接口和协议,将设备与计算机主板上的DMI控制器相连接。
DMI控制器负责管理设备的访问权限以
及处理与设备的通信。
DHT技术的原理是将数据根据其关键字进行哈希处理,并将
哈希值与数据存储在分布式的节点上。
每个节点都维护着一个哈希表,其中记录了数据的位置信息。
当需要访问数据时,根据数据的关键字通过哈希函数计算出相应的哈希值,然后根据哈希值找到存储该数据的节点,并从该节点获取数据。
超级混动技术结合了DMI和DHT两种技术,实现了分布式存储和计算的高效协同。
具体原理是通过DMI技术将计算节点
的内存映射到分布式存储节点,使得计算节点可以直接访问分布式存储节点上的数据。
同时,通过DHT技术实现了数据的
分布式存储和访问,保证了数据的高效传输和计算节点的负载平衡。
总结来说,DMI和DHT超级混动技术通过直接内存接口和分
布式哈希表的原理,实现了分布式存储和计算的高效协同,提高了数据访问和处理的效率。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
N56
N51
N1 N8 N8
K10 N14
N51 N48 N48
N14
N21
N42 N42
K38 N38 N38
N21
K24
N32 N32
K30
m=6 m=6
Chord:指针表
N1 N8 K10 N51 N14 N48 N21 N42 K38 N38 N32 K30 K24
DHT原理(2)
内容索引
提取 内容 内容关键字key 内容存储位置等信息 value K=Hash(key)
kv
内容索引 电影 夜宴 电影、夜宴
/ yeyan.avi
Hash表
K=hash(电影, 夜宴) V = /
yeyan.avi
指针表
N8+1 N14 N14 N14 N21 N32 N42 N8+2 N8+4 N8+8 N8+16 N8+32
4.Chord:概述
Berkeley和MIT共同提出 采用环形拓扑(Chord环) 应用程序接口
Insert(K, V)
将<K, V>对存放到节点ID为Successor(K)上
Lookup(K)
根据K查询相应的V
Update(K, new_V)
根据K更新相应的V
DHT原理(3)
kv
规则?
N1
K V
K V
K V
N32
K V
Chord、CAN、 Tapestry、Pastry
N8 N48
K V
N16 a. Hash表 b. 分布式Hash表
在许多情况下,节点ID为节点IP地址的Hash摘要
DHT原理(4)
索引发布和内容定位
(K1,V1)
K V K V K V K V K V K V
Hash函数
MD5:消息摘要长度固定为128比特 SHA-1:消息摘要长度固定为160比特
Hash函数应用于P2P的特性
唯一性:不同的输入明文,对应着不同的 输出摘要
将节点IP地址的摘要作为节点ID,保证了节点ID 在P2P环境下的唯一性
SHA-1(“202.38.64.1”) =24b92cb1d2b81a47472a93d06af3d85a42e463ea SHA-1(“202.38.64.2”) =e1d9b25dee874b0c51db4c4ba7c9ae2b766fbf27
DHT网络的搜索技术
哈尔滨理工大学网络信息中心
姚 亮
主要内容
P2P网络的分类
Hash函数概述
DHT原理 几种典型的DHT网络 总结
1.P2P网络分类
非结构化P2P
网络拓扑是任意的 内容的存储位置与网络拓扑无关
结构化P2P
网络拓扑结构是有规律的
每个节点都随机生成一个标识(ID)
内容的存储位置与网络拓扑相关
内容的存储位置与节点标识之间存在着映射关系
P2P网络分类
在结构化P2P网络中,内容一般使用内容索引 来表示,内容索引包括key和value两部分,其中 key是内容的关键字,value是存放内容的实际 位置,因此内容索引也表示为<key, value>对
内容索引<夜宴, /yeyan.avi> 表示电影夜宴可以从 /yeyan.avi处获得
C
K V
K1=Hash(xyz.mp3) V1=128.1.2.3
K V
A 128.1.2.3
插入 (K1,V1)
K V
K V
查询(K1)
ห้องสมุดไป่ตู้
K V
B
DHT原理(5)
定位(Locating)
节点ID和其存放的<K, V>对中的K存在着映射关系,因此 可以由K获得存放该<K, V>对的节点ID
路由(Routing)
Join(NID)
节点加入
Leave()
节点主动退出
Chord:Hash表分布规则
Hash算法SHA-1 Hash节点IP地址->m位 节点ID(表示为NID) Hash内容关键字->m位 K(表示为KID) 节点按ID从小到大顺序排 列在一个逻辑环上 <K, V>存储在后继节点上 Successor (K):从K开 始顺时针方向距离K最 近的节点
3.DHT原理(1)
将内容索引抽象为<K, V>对
K是内容关键字的Hash摘要
K = Hash(key)
V是存放内容的实际位置,例如节点IP地址等
所有的<K, V>对组成一张大的Hash表,因此该表存储了 所有内容的信息 每个节点都随机生成一个标识(ID),把Hash表分割成许多 小块,按特定规则(即K和节点ID之间的映射关系)分布到 网络中去,节点按这个规则在应用层上形成一个结构化的 重叠网络 给定查询内容的K值,可以根据K和节点ID之间的映射关 系在重叠网络上找到相应的V值,从而获得存储文件的节 点IP地址
2.Hash函数概述
Hash函数可以根据给定的一段任意长的消息计算出一个 固定长度的比特串,通常称为消息摘要(MD:Message Digest),一般用于消息的完整性检验。 Hash函数有以下特性:
给定 P,易于计算出 MD(P) 只给出 MD(P),几乎无法找出 P 无法找到两条具有同样消息摘要的不同消息
在重叠网上根据节点ID进行路由,将查询消息最终发送 到目的节点。每个节点需要有到其邻近节点的路由信息, 包括节点ID、IP等
网络拓扑
拓扑结构由节点ID和其存放的<K, V>对中的K之间的映射 关系决定 拓扑动态变化,需要处理节点加入/退出/失效的情况
在重叠网上节点始终由节点ID标识,并且根据ID进行路由
K=hash (key)=54 N56
N51 N1 N1
ID=hash (IP)=14
N8 N8 K10 N14
N51
N48 N48
N14
N21 N42 N42 K38 N38
N21
K24
N38
N32
N32
K30
m=6
m=6
Chord:简单查询过程
每个节点仅维护其后继节 点ID、IP地址等信息 查询消息通过后继节点指 针在圆环上传递 直到查询消息中包含的K 落在某节点ID和它的后继 节点ID之间 速度太慢 O(N),N为网 络中节点数