dht原理

dht是P2P网络(结构化P2P)核心路由算法,主要是利用一致性hash,把节点和资源都表示成一个hash值,放入到这个大的hash环中,每个节点负责路由靠近它的资源。

一.重要概念:
    1.node
       负责P2P路由信息,P2P网络的组网就是它来负责
    2.peer
       负责管理资源,生成种子文件,发布资源信息
    3.nodeid
       节点的唯一标识,是一个160bit的hash值
    4.infohash
       资源的唯一标识,也是一个160bit的hash值,其和nodeid使用同一个算法
    5.距离
       距离是两个hash值进行异或(XOR)操作后的值,值越小,距离越近
       节点和资源的距离: nodeid XOR infohash
       两个节点之间的距离:nodeid1 xor nodeid2
    6.种子文件
       对某个资源的描述文件,种子文件包括了资源的infohash(160bit)、资源所在机器(nodeId IP PORT)、离资源所在机器最近的N个机器(nodeid IP PORT)列表

二.典型场景描述:

1.新节点加入网络
        新安装的P2P客户端是一个孤立的节点,和其他节点都无联系,怎么加入P2P网络呢?需要有一个种子文件,种子文件中有多个该P2P网络中的node信息,
        根据种子文件中的节点列表,连接到P2P网络,并获取路由信息,获取最靠近本新节点的节点列表

2.发布资源
        a.生成资源的Infohash
        b.查找和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请求资源

dht算法原理描述的更多相关文章

  1. SIFT算法原理(3)-确定关键点的主方位,构建关键点描述符

    介绍官网:https://docs.opencv.org/3.0-beta/doc/py_tutorials/py_feature2d/py_sift_intro/py_sift_intro.html ...

  2. MySQL索引背后的数据结构及算法原理【转】

    本文来自:张洋的MySQL索引背后的数据结构及算法原理 摘要 本文以MySQL数据库为研究对象,讨论与数据库索引相关的一些话题.特别需要说明的是,MySQL支持诸多存储引擎,而各种存储引擎对索引的支持 ...

  3. GBDT算法原理深入解析

    GBDT算法原理深入解析 标签: 机器学习 集成学习 GBM GBDT XGBoost 梯度提升(Gradient boosting)是一种用于回归.分类和排序任务的机器学习技术,属于Boosting ...

  4. 【数据压缩】LZ77算法原理及实现

    1. 引言 LZ77算法是采用字典做数据压缩的算法,由以色列的两位大神Jacob Ziv与Abraham Lempel在1977年发表的论文<A Universal Algorithm for ...

  5. Kmeans聚类算法原理与实现

    Kmeans聚类算法 1 Kmeans聚类算法的基本原理 K-means算法是最为经典的基于划分的聚类方法,是十大经典数据挖掘算法之一.K-means算法的基本思想是:以空间中k个点为中心进行聚类,对 ...

  6. MySQL 索引背后的数据结构及算法原理

    本文转载自http://blog.jobbole.com/24006/ 摘要本文以MySQL数据库为研究对象,讨论与数据库索引相关的一些话题.特别需要说明的是,MySQL支持诸多存储引擎,而各种存储引 ...

  7. kmeans算法原理以及实践操作(多种k值确定以及如何选取初始点方法)

    kmeans一般在数据分析前期使用,选取适当的k,将数据聚类后,然后研究不同聚类下数据的特点. 算法原理: (1) 随机选取k个中心点: (2) 在第j次迭代中,对于每个样本点,选取最近的中心点,归为 ...

  8. OpenCV: Canny边缘检测算法原理及其VC实现详解(转载)

    原文地址:http://blog.csdn.net/likezhaobin/article/details/6892176 原文地址:http://blog.csdn.net/likezhaobin/ ...

  9. OpenCV学习笔记(27)KAZE 算法原理与源码分析(一)非线性扩散滤波

    http://blog.csdn.net/chenyusiyuan/article/details/8710462 OpenCV学习笔记(27)KAZE 算法原理与源码分析(一)非线性扩散滤波 201 ...

随机推荐

  1. Day 19:Properties配置文件类、打印流(printStream) 、 编码与解码

    Properties(配置文件类): 主要用于生产配置文件与读取配置文件的信息. Properties要注意的细节:  1. 如果配置文件的信息一旦使用了中文,那么在使用store方法生成配置文件的时 ...

  2. vue-router 二级路由(父子路由)

    使用二级路由 会显示父路由下面的子路由  且父子路由同时显示 因为父子同时显示  路由地址在同一级别/ 路由的显示模式有两种(都是为了减少数据库后台请求次数) #hash模式(#是特殊字符,很多场合不 ...

  3. 心形java和C语言2019/10/17

    在网上无意中看到这个代码,学习了一下心形函数的知识:http://mathworld.wolfram.com/HeartCurve.html package dada; /** * 了解Heart C ...

  4. 编程入门-Java开发工具介绍及Eclipse安装

    编程入门-Java开发工具介绍及Eclipse安装 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Java开发工具介绍 "源代码"一般是文字,所以可以使用记 ...

  5. MySQL8.0安装caching_sha2_password问题

    MySQL安装之后无法用工具连接上本地数据库 详情原因可见: https://mysqlserverteam.com/mysql-8-0-4-new-default-authentication-pl ...

  6. java向量 vector

    Vector 向量 是java.util 包里的一个类,该类继承AbstractList,实现了类似动态数组的功能. 向量和数组相似,都可以保存一组数据,但数组的大小(长度)是固定的,而Vector ...

  7. jvm 优化

    1.jvm 运行参数 1.1 jvm 参数类型 1.1.1 标准参数 -help -version 1.1.2 -X参数(非标准参数) -Xint -Xcomp 1.1.3-XX参数(使用率高) -X ...

  8. Python安装和虚拟环境创建以及外部库的安装

    Python.虚拟环境.外部库的安装 一 安装Python 1 Windows 到官网下载对应的版本 下载地址 我选择的是Python3.6.8 下载完成后双击运行 !!!勾选Add Python 3 ...

  9. 四、CI框架之通过URL路径访问C中的函数

    一.在C中写一个test001函数 二.在路径http://127.0.0.1/CodeIgniter-3.1.10/index.php/welcome/test001中访问 不忘初心,如果您认为这篇 ...

  10. iOS延迟执行方法

    swift 4.0中dispatch_async,dispatch_after的使用 2018年03月28日 16:15:44 xiao_yuly 阅读数:3576 版权声明:本文为博主原创文章,未经 ...