趣谈网络协议笔记-二(第十七讲)

P2P协议:我下小电影,99%急死你


自勉

  • 逃离舒适区!

正文

一. P2P协议

整个篇章讲的就是这两个协议之间的区别。P2P协议就是迅雷下载数据时所用的协议,
众所周知,如果使用迅雷进行下载的时候,可以直接复制http链接,也可以输入种子,然后”强大“的迅雷就会进行解析之后,将可下载的文件的目录显示出来。用户就可以通过UI界面选择需要的内容进行下载了。
那么种子中到底包含了什么内容呢?为什么迅雷下载会比直接网页上下载更加迅速呢?接下来一个个解开。
现在一般的家庭都基本换上了百兆宽带了吧,这里的百兆指的是带宽,即能每秒能处理100M次的高低频变化,换算成字节就是差不多10M左右的传输速度。但是如果这么大的数据传输,全部通过单台服务器进行,人口基数一大,服务器其实很吃力,往往不能最大限度的满足家庭的下载需要。
那么面对如此严峻的情况,该采取什么样的方法或者说手段才能最大限度地利用带宽呢?只需要将服务器的负担分散就行了,但是我作为下载提供方,总不可能为了全中国人民的幸福着想就无限制地提高服务器的成本,毕竟自己也要吃饭的。
所以P2P协议就是为了解决这个难题而诞生的,通过这个协议可以将每个已经下载了相关数据的客户端变成一台临时的服务器,大家人人为我,我为人人,互惠互利,共同提高下载速度。这也解决了标题中的疑问,为什么99%的时候往往会拖很长的时间,明明之前的下载有如神助。这是因为别人也需要通过你作为渠道来下载他所需的数据。
P2P协议的关键在于种子(车牌),也就是日常生活中所看到的.torrent后缀的文件。.torrent 文件由两部分组成,分别是:announce(tracker URL)和文件信息。announce所对应的服务器中存储着种子中各个文件的位置,因为之前这些位置的主机都通过P2P协议从服务器中获取了对应文件分块的位置,因此有了”备案“,所以迅雷在某些程度上其实知道你都下过什么东西= =,哪天他实在缺钱了,呵呵,把你的相关信息卖掉,你懂的。所以,如果你的种子指向的是某些被禁止的资源,那么他完全可以通过不给你提供这些文件的具体位置的方式来禁止你进行文件的下载。

文件信息里面有这些内容。

  • info 区:这里指定的是该种子有几个文件、文件有多长、目录结构,以及目录和文件的名字。
  • Name 字段:指定顶层目录名字。
  • 每个段的大小:BitTorrent(简称 BT)协议把一个文件分成很多个小段,然后分段下载。
  • 段哈希值:将整个种子中,每个段的 SHA-1 哈希值拼在一起。

所以即使你打算下载某些违禁的资源,你依然可以看到这些资源的目录以及文件大小,因为这些信息时直接包含在种子文件里的。这也可以解释为什么那些种子搜索网站可以提供每个种子中的目录信息,因为他们完全不需要通过种子对相关内容进行下载,直接分析种子就行了。


二. DHT协议

P2P协议虽然很棒,迅雷也正是靠着这个强势地占用网络上绝大多数资源。不知道迅雷资源的审核人员身体状况还好不好= =,毕竟一般谨慎一些的都会有一些备份吧。但是如果announce挂掉跑路了,与之关联的所有种子也就失去了意义,因为所有种子都没有办法通过他来获取到需要文件的位置。
DHT协议作为解决手段就应运而生了,DHT(distributed hash table)的目的就是避免P2P所依赖的位置信息的中心化存储,即所谓的distributed,分布式的思路。
有一种著名的 DHT 协议,叫 Kademlia 协议。这个和区块链的概念一样,很抽象,我来详细讲一下这个协议。

任何一个 BitTorrent 启动之后,它都有两个角色。一个是peer,监听一个 TCP 端口,用来上传和下载文件,这个角色表明,我这里有某个文件。另一个角色 DHT node,监听一个 UDP 的端口,通过这个角色,这个节点加入了一个 DHT 的网络。

DHT个人感觉是基于P2P的衍生,从多个数据源分别获取数据的思路这点还是不会变的,变得是如何获取数据源。
记得互联网中有一个六度分隔理论,即地球上的任何两个人在互联网上都能通过六层关系进行连接。所以下次你去面试任何一家公司的时候,你直接和面试官说,我不仅仅是你的远房亲戚,更是你老板的远房亲戚!
DHT获取数据源的方式就和这个思路差不多,当你获取一个种子的时候,你就会获取到和你关系从近到远的一层层联系人,这一层层的联系人就是你找到特定某个人的钥匙!

Kademlia 算法中,每个节点只有 4 个指令。

  • PING:测试一个节点是否在线,还活着没,相当于打个电话,看还能打通不。
  • STORE:要求一个节点存储一份数据,既然加入了组织,有义务保存一份数据。
  • FIND_NODE:根据节点 ID 查找一个节点,就是给一个 160 位的 ID,通过上面朋友圈的方式找到那个节点。
  • FIND_VALUE:根据 KEY 查找一个数据,实则上跟 FIND_NODE 非常类似。KEY 就是文件对应的 160 位的 ID,就是要找到保存了文件的节点。

从图中可以看到,每个DHT节点id所表示的是其对于一个特定文件的关系。在DHT中替代announce的是一个DHT的列表,DHT规定了与文件hash值相近的N个DHT节点就包含了指向文件存储位置的信息,所以只需要按列表进行id异或操作,比较结果<=N,则尝试从其获取文件存储节点信息。如果最近有某个id符合<=N的条件的节点通过上述四个指令之一和当前节点进行联系,如果该节点就存在于当前DHT列表中,就直接将其移至列表最前端,如果不存在,那么就找到复合<=N的最末端节点,尝试ping测试其是否在线,如果在线,就把末端节点放置到列表最前端,舍弃新节点,毕竟同样是活跃的,老节点稳定性一般更好。这里的思路和LRU算法的思想差不多。


后记

本来今天想偷偷懒的,但是还是写一篇吧,适当鞭策一下自己,很多时候不是什么坏事!
说好的今天要完成三篇的呢= =

趣谈网络协议笔记-二(第十七讲)相关推荐

  1. 趣谈网络协议笔记-二(第十九讲)

    趣谈网络协议笔记-二(第十九讲) HttpDNS:网络世界的地址簿也会指错路 自勉 勿谓言之不预也 -- 向为祖国牺牲的先烈致敬! 引用 dns缓存刷新时间是多久?dns本地缓存时间介绍 - 东大网管 ...

  2. 趣谈网络协议笔记-二(第十八讲)

    趣谈网络协议笔记-二(第十八讲) DNS协议:网络世界的地址簿 自勉 勿谓言之不预也 -- 向为祖国牺牲的先烈致敬! 正文 DNS用于域名解析,但也不仅仅是用于域名解析,不仅仅是将域名转换成IP. 在 ...

  3. 趣谈网络协议笔记-二(第十六讲上)

    趣谈网络协议笔记-二(第十六讲上) 流媒体协议:如何在直播里看到美女帅哥? 自勉 给岁月以文明,而不是给文明以岁月!--<三体> 在触不到的獠牙上点火--就像不必仰望那星星就能够解决--就 ...

  4. 趣谈网络协议笔记-二(第十三讲)

    趣谈网络协议笔记-二(第十三讲) 套接字Socket:Talk is cheap, show me the code 前言 这只是笔记,是为了整理刘超大神的极客时间专栏的只是而存在的! 经常会在网络上 ...

  5. 趣谈网络协议笔记-二(第十二讲)

    趣谈网络协议笔记-二(第十二讲) TCP协议(下):西行必定多妖孽,恒心智慧消磨难 前言 哈哈哈,越当我看刘超的通俗讲解,我就越感觉自己的无能.每次当我看了讲解之后,每次当我感觉到这个东西原来是这么简 ...

  6. 趣谈网络协议笔记-二(第十一讲)

    趣谈网络协议笔记-二(第十一讲) TCP协议(上):因性恶而复杂,先恶后善反轻松 自勉 我似乎天性不擅长争斗,但是有些时候,我也必须砥砺前行. 强大是和平的前提,而善良不是. 前言 今天回到家里已经是 ...

  7. 趣谈网络协议笔记-二(第十讲)

    趣谈网络协议笔记-二(第十讲) UDP协议:因性善而简单,难免碰到"城会玩" 自勉 如果手上没有剑,我就无法保护你.如果我一直握着剑,我就无法抱紧你.--<Bleach> ...

  8. 趣谈网络协议笔记-二(第七,八,九讲)

    趣谈网络协议笔记-二(第七,八,九讲) 勉励 人生而自由,却无往不在枷锁(牢笼)之中. ------卢梭@<社会契约论> 为那些有形的牢笼感到庆幸吧. 为自己出生于这个时代感到庆幸吧,因为 ...

  9. 趣谈网络协议笔记-二(第六讲)

    趣谈网络协议笔记-二(第六讲) 交换机记忆的到底是端口,还是方向,如果是方向那么何来方向,下图中的感觉更像是网桥? 局域网中的数据是不是必定先经过交换机(网桥,hub)? 为什么广播时mac地址为25 ...

最新文章

  1. Android Dialog 弹出的时候标题栏闪烁一下的处理方法
  2. 【讲人话】Angular如何通过@ViewChildren获取实时渲染的动态DOM节点元素(@ViewChild只能获取静态的固定DOM节点)
  3. 图片轮播html实现原理,纯CSS实现图片轮播
  4. 个人博客多说评论系统的使用
  5. 【Python】强烈建议你学这 3 个 Python AutoEDA 工具包!
  6. java八种排序算法---直接插入排序
  7. python基础之删除文件及删除目录的方法
  8. SQL数据库误删除表数据恢复 SQL数据库truncate表数据恢复
  9. rdd分片 spark_分布式数据集SparkRDD的依赖与缓存
  10. SoPlus回顾 | 行业大咖论道AI,探讨未来行业发展趋势
  11. Solr进阶之Solr综合文本相似度的多因素权重排序实现
  12. selenium下载文件
  13. 写在今年(2022)清明节前
  14. 2022年湖南省中医执业医师考试第三单元医学针灸学模拟题
  15. Java项目:springboot超市进销存管理系统
  16. 学校网页设计成品 基于HTML+CSS+JavaScript仿山东财经大学官网 学校班级网页制作模板 校园网页设计成品
  17. 天地图 android 接口,天地图嵌入到Android手机中
  18. Busybox实践2:分析busybox文件链接原理并编程模拟实现自己的busybox文件
  19. FS116B FS 0.55A电流输出单通道玩具直流马达驱动器
  20. win10 系统更新服务器出错怎么办,win10系统更新出错的两种解决方法

热门文章

  1. SpringBoot配置Mybatis在控制台打印sql
  2. queueing 优化_网站加载性能
  3. java堆算法,Java 基本功04-JVM-Java堆详解和GC算法
  4. jlink烧写Nor Flash时出错正确解决方法汇总:PC of target system has unexpected value after programming (2011
  5. 小结 frambuffer 原理及流程 (五)
  6. 指定在此oracle主目录中配置,oracle11g卸载
  7. python文件读写r+_python文件读写操作(r/r+/rb/w/w+/wb/a/a+/ab)
  8. 外部导入方式添加背景图_在PS中如何添加灯光效果
  9. java读取properties文件,深度集成!
  10. 【Java Web前端开发】TomcatServlet基础