网络:P2P协议

如果你想下一个电影,一般会通过什么方式呢?

HTTP

当然,最简单的方式就是通过HTTP协议进行下载,但是通过浏览器下载的时候,只要文件稍微大点,下载的速度就奇慢无比。

FTP的两种工作模式

还有种下载文件的方式,就是通过FTP,也就是文件传输协议。FTP采用两个TCP连接来传输一个文件:

  • 控制连接:服务器以被动的方式,打开众所周知的用于FTP的端口21,客户端则主动发起连接。该连接将命令从客户端传给服务器,并传回服务器的应答。常用的命令有:list------获取文件目录;reter------取一个文件;store------存一个文件
  • 数据连接:每当一个文件在客户端和服务器之间传输时,就创建一个数据连接

每传输一个文件,都要建立一个全新的数据连接。FTP有两种工作模式,分别是主动模式(PORT)和被动模式(PASV),这些都是站在FTP服务器的角度来说的。

  • 主动模式下,客户端随机打开一个大于1024的端口N,向服务器的命令端口21发起连接,同时开放N+1端口监听,并向服务器发出“port N+1”命令,由服务器从自己的数据端口20,主动连接到客户端指定的数据端口N+1
  • 被动模式下,当开启一个FTP连接时,客户端打开两个任意的本地端口N(大于1024)和N+1。第一个端口连接服务器的21端口,提交PASV命令。然后,服务器会开启一个任意的端口P(大于1024),返回“227 entering passive mode”消息,里面有FTP服务器开放的用来进行数据传输的端口,客户端接收消息取得端口号之后,会通过N+1号端口连接服务器的端口P,然后在两个端口之间进行数据传输

P2P是什么?

但无论是HTTP的方式,还是FTP的方式,都有一个比较大的缺点,就是难以解决单一服务器的带宽压力,因为它们使用的都是传统的客户端服务器的方式。

后来,P2P(peer to peer)解决了这个问题。资源开始并不集中的存储在某些设备上,而是分散的存储在多台设备上,这些设备也可以叫做peer

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

种子文件(.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网络的时候,都需要借助tracher中心服务器,这个服务器是用来等级有哪些用户在请求哪些资源。

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

去中心化网络(DHT)

后来就出现了一种加载DHT(Distributed Hash Table)的去中心化网络。每个加入这个DHT网络的任何,都要负责存储这个网络里的资源信息和其他成员的联系信息,想呼吁所有人都一起构成了一个庞大的分布式存储数据库

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值