计算机网络p2p协议在第几页_p2p传输协议

计算机网络p2p协议在第几页_p2p传输协议在上篇文章中说过,要写写P2P协议的,嗯,来写写,虽然写的不是太好.P2P是什么?还是要回到这个场景:如果想要下载一个电影,一般都是通过什么方式呢?我希望这次你的答案,除了HTTP方式,还有FTP方式(要不上篇文章岂不是白写了?)但是你发现了嘛,不管是HTTP的方式,还是FTP的方式,都有一个比较大的缺点,就是难以解决单一服务器的带宽压力,因为它们使用的都是传统的…


Jetbrains全系列IDE稳定放心使用

在上篇文章中说过,要写写 P2P 协议的,嗯,来写写,虽然写的不是太好.

P2P 是什么?
还是要回到这个场景:
如果想要下载一个电影,一般都是通过什么方式呢?
我希望这次你的答案,除了 HTTP 方式,还有 FTP 方式(要不上篇文章岂不是白写了?)
但是你发现了嘛,不管是 HTTP 的方式,还是 FTP 的方式,都有一个比较大的缺点,就是难以解决单一服务器的带宽压力,因为它们使用的都是传统的客户端服务器的方式.
这个时候,一种创新的, P2P 协议就开始流行起来. P2P 就是 peer-to-peer .
传统的方式不是把资源都集中地存储在某些设备上了嘛,那我就创新一下,我不让这些资源都集中在某些设备上了,我让这些资源都分散的存储在多台设备上面去.这些设备,为了理解方便,我们称为 ” peer “

那么,当我想要下载一个文件的时候,我只要得到那些已经存在了文件的 peer ,和这些 peer 建立点对点的连接,而不需要到中心服务器上面去,我就可以就近下载文件了.
一旦下载了文件,你也就成为了 peer 中的一员,你旁边的那些机器,也可能会选择从你这里下载文件.
所以当你使用 P2P 软件的时候,往往能够看到,它既有下载的流量,也有上传的流量,也就是说,你自己也加入了这个 P2P 的网络,自己从别人那里下载,同时也提供给其他人下载.
你可以想一下,这种方式,是不是参与的人越多,下载速度就越快,一起简直是完美啊~

种子 (.torrent )文件
这里其实是有一个问题的,当我想要下载一个文件的时候,我怎么知道哪儿些 peer 有这个文件呢?
这就是种子文件,也就是「 torrent」文件.它由两部分组成: announce ( tracker URL )和文件信息.

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

下载时, BT 客户端首先解析 .torrent 文件,得到 tracker 地址,然后连接 tracker 服务器. tracker 服务器回应下载者的请求,将其他下载者(包括发布者)的 IP 提供给下载者.下载者再连接其他下载者,根据 .torrent 文件,两者分别告诉对方自己已经有的数据,然后交换对方没有的数据.这个时候,就不需要其他服务器的参与,就分散了单个线路上的数据流量,从而减轻了服务器的负担.

从上面的过程,我们能够看出, P2P 这种方式特别依赖 tracker . tracker 需要收集下载者信息的服务器,并且将这些信息提供给其他下载者,使得下载者们相互之间能够连接起来,传输数据.虽然说,在整个下载的过程中,是非中心化的,但是加入这个 P2P 网络的时候,都需要借助 tracker 中心服务器,因为 tracker 服务器是用来登记有哪些用户在请求哪些资源.
到这里你可能就会比较清楚了,这种方式的限制就是 tracker 服务器.只要它出现故障或者线路遭到屏蔽, BT 工具就没办法再正常工作了.

去中心化网络( DHT )
在整个下载的过程中,是非中心化的,但是它还是受限制的.那到底能不能做到彻底非中心化呢?
所以就有了 DHT ( Distributed Hash Table )的去中心化网络.每一个加入这个 DHT 网络的人,都要负责存储这个网络中的资源信息和其他成员的联系信息,相当于所有人一起构成了一个庞大的分布式存储数据库.
在这里有一种著名的 DHT 协议,叫 Kademlia 协议.

Kademlia 协议详解
在 Kademlia 协议中,任何一个 BitTorrent 启动之后,它都有两个角色.一个是 peer ,监听一个 TCP 端口,用来上传和下载文件,这个角色就是为了说明,我这里有某个文件.另一个角色 DHT node ,监听一个 UDP 的端口,通过这个角色,这个节点加入了一个 DHT 的网络.
在 DHT 网络中,每一个 DHT node 都有一个 ID .这个 ID 是一个很长的串.每个 DHT node 都有责任掌握一些知识,也就是文件索引,也就是说,它应该知道某些文件是保存在哪些节点上.它只需要知道这些东西就行了,不一定就是保存这个文件的节点.
这样我想要实现去中心化就好实现了.

以上就是想要分享的内容了,感谢您的阅读~

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/179543.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Enterprise Library 4.0

    Enterprise Library 4.0微软发布了支持VisualStudio2008的新版本EnterpriseLibrary4.0,同时也发布了他们的依赖注入容器Unity应用程序块的1.1版本。模式与实践团队的产品经理GrigoriMelnik宣布发布EnterpriseLibrary4.0和Unity1.1更新,详细描述了所有新特性。MSDN开发中心的新闻稿解释了这个版本对开发人员的意义:此次发布…

    2022年10月20日
  • java九九乘法表代码加解释_java九九乘法表编程代码是什么?

    java九九乘法表代码加解释_java九九乘法表编程代码是什么?展开全部packagech02;publicclassTEST{publicstaticvoidmain(String[]args){for(inti=1;i<=9;i++){for(intj=1;j<=i;j++){System.out.print(j+”*”+i+”=”+(i*j)+””);}System.out.println(…

    2022年7月15日
  • python之抛出异常(raise语句)「建议收藏」

    python之抛出异常(raise语句)「建议收藏」用raise能够主动抛出异常,使用【raise异常名】抛出该类异常raiseIndexError也可以单独使用raise再次引发刚发生的异常try:1/0except:print(“错误”)raise同时能够指定抛出异常的描述信息raiseIndexError(“索引错误”)所以这样子就用【raise异常名from异…

    2022年8月31日
  • 无线AP、WiFi、WLAN是什么关系?

    无线AP、WiFi、WLAN是什么关系?最近在看科技论文,有些基础知识不是很清楚,故作了解近年来,无线AP被越来越多的应用于商场、车站、机场等公共场所,已变得与我们的生活息息相关,成为社会发展的一个趋势。但许多人弄不清楚无线AP与WiFi、WLAN之间的关系,以为WiFi就是WLAN,它们之间到底有什么不同?公共WiFi其实是一种无线AP技术今年央视315晚会曝光的公共WiFi安全隐患引起了社会各界的关注,但是有一个细节需要值得注意,那…

    2022年7月11日
  • 重写和重载的区别是什么「建议收藏」

    重写和重载的区别是什么「建议收藏」重写和重载的区别是什么

    2022年9月8日
  • 谈谈数据库编程语言和其他编程语言的区别_数据库编程

    谈谈数据库编程语言和其他编程语言的区别_数据库编程要说清这个目标,先要理解数据库是做什么的。数据库这个软件,名字中有个“库”字,会让人觉得它主要是为了存储的。其实不然,数据库实现的重要功能有两条:计算、事务!也就是我们常说的OLAP和OLTP,数据库的存储都是为这两件事服务的,单纯的存储并不是数据库的目标。我们知道,SQL是目前数据库的主流语言。那么,用SQL做这两件事是不是很方便呢?事务类功能主要解决数据在写入和读出时要保持的一致性,实现这件事的难度并不小,但对于应用程序的接口却非常简单,用于操纵数据库读写的代码也很简单。如果假定目前关系数据库的逻辑存储

    2022年8月31日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号