P2P协议

下载文件有http方式或者ftp的方式,都有一个比较大的缺点,就是难以解决单一服务器的带宽压力,因为它们使用的都是传统的cs方式。

后来,一种创新的、称为p2p的方式流行起来。p2p就是peer-to-peer。资源开始并不集中地存储在某些设备上,而是分散地存储在多台设备上。这些设备我们姑且称为peer。

想要下载一个文件的时候,你只要得到那些已经存在了文件的peer,并和这些peer之间,建立点对点的连接,而不需要到中心服务器上,就可以就近下载文件。一旦下载了文件,你也就成为peer中的一员,你旁边的那些机器,也可能会选择从你这里下载文件,所以当你使用p2p软件的时候,例如BitTorrent,往往能够看到,既有下载流量,也有上传的流量,也即你自己也加入了这个p2p的网络,自己从别人那里下载,同时也提供给其他人下载。可以想象,这种方式,参与的人越多,下载速度越快。

种子(.torrent)文件

但是有一个问题,当你想下载一个文件的时候,怎么知道哪些peer有这个文件呢?

这就用到种子了,也即咱们比较熟悉的.torrent文件。.torrent文件由两部分组成,分别是:announce(tracker URL)和文件信息。

文件信息里面有这些内容

info区:这里指定的是该种子有几个文件,文件有多长、目录结构,以及目录和文件的名字

Name字段:指定顶层目录名字

每个段的大小:BitTorrent(简称BT)协议把一个文件分成很多个小段,然后分段下载

段哈希值:将整个种子中,每个段的SHA-1哈希值拼在一起。

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

下载者每得到一个块,需要算出下载块的Hash验证码,并与.torrent文件中的对比。如果一样,则说明块正确,不一样则需要重新下载这个块。这种规定是为了解决下载内容的准确性问题。

从这个过程也可以看出,这种方式特别依赖tracker。tracker需要收集下载者信息的服务器,并将此信息提供给其他下载者,使下载者们相互连接起来,传输数据。虽然下载的过程是非中心化的,但是加入p2p网络的时候,都需要借助tracker中心服务器,这个服务器是用来登记有哪些用户在请求哪些资源。

所以,这种工作方式有一个弊端,一旦tracker服务器出现故障或者线路遭到屏蔽,BT工具就无法正常工作了。

问题1:没有公网的ip,多个peer间如果交换数据呢?

https://blog.csdn.net/crazycoder8848/article/details/49688335

发布了47 篇原创文章 · 获赞 39 · 访问量 9万+

猜你喜欢

转载自blog.csdn.net/qq_28119741/article/details/104951777
P2P