大家好,又见面了,我是你们的朋友全栈君。
> 网络中的应用,存在两种主流的体系结构。一种是C-S体系,另一种是P2P(对等网)体系。
# C-S体系
C-S体系是应用很广泛的应用程序体系,如Web应用。在C-S体系中,服务器承担着巨大的责任,需要处理大量的客户端请求,如文件下载请求,这种体系之间**客户端不能直接通信**,而是通过服务器传达。
# P2P体系
P2P,即peer-to-peer,意思是对等网络。P2P区分于C-S的就是这种体系下**客户端可以直接通信**,而通信的双方称为对等方。而对等方之间可以共享资源,如文件。这样客户端不仅是Bit的消费者,也是Bit的生产者,大大减轻了服务器的负担。应用如:迅雷、BT。
# P2P和C-S文件分发的比较
为什么文件分发适用于P2P体系呢?看一个例子。
![](https://leanote.com/api/file/getImage?fileId=60f67cb7ab64410d9600105b)
对于C-S体系其模型图如上,在这种模型之下。若服务器要向客户端发送一个大文件,长度为L,比如视频文件。服务器需要将文件发送给每个客户端端,服务器的负担是**N*L**。服务器承受了极大的负担,并且消耗了巨大的带宽。
![](https://leanote.com/api/file/getImage?fileId=60f67cb7ab64410d9600105c)
对于P2P体系,其模型图如上。在P2P体系下,若服务器要向客户端发送一个大文件,服务器先将文件分片,再向网络中的客户端分发文件片段,而该客户端接收文件的同时,同样也可以将文件的任何部分发送到另一个客户。之后就是这些存在文件片段的客户端相互通信,这样就减轻了服务器的发送负担。甚至服务器理想情况下负担为**L**。
而在科学计算下得到,C-S体系文件的分发时间和客户端数量N成正比。而P2P体系文件的分发时间是客户端数量N的N^1/2函数。
![](https://leanote.com/api/file/getImage?fileId=60f67cb7ab64410d9600105a)
**总之,在P2P体系中,对等方能够协助服务器分发文件,使客户端不仅是Bit的消费者,也是Bit的生产者。**
# P2P应用-BitTorrent
P2P应用最广泛的应用就是文件分发,而文件分发最著名的就是BitTorrent协议,俗称BT。BT的基本原理就如上面所形容,对等方间共享资源,在接收文件的同时也发送文件,充分利用客户端的上载带宽。
## 1. 相关概念
* 洪流:参与一个文件分发的所有对等方的集合,即洪流中的客户端都在下载文件块,并且上传文件块。
* tracker:一旦一个客户端加入洪流,就需要向tracker注册自己,并周期性的通知tracker它是否仍在洪流中。(就是服务器)
* 种子(.torrent文件):包含文件分块信息,例如一个500M的文件分为500份,文件就存储了500份片段文件的信息。还有tracker地址,就是真正服务器的地址。以及原始文件名或文件夹名。
##2. 工作过程
* A:客户端从网站或者其他地方获取到.torrent文件。
* B:读取文件内容,载入内存。
* C:读取到文件中的tracker地址,与tracker建立连接并发送需要下载的文件的标识。tracker接收到后将该客户端加入洪流,就是将IP加入列表中。并返回洪流中其他客户端的IP,假如返回有100个。(tracker要保存洪流中的对等体信息,因此下载的客户端每过一段实现需要向tracker通知一次,告诉tracker自己是否仍然在洪流中)
* D: 客户端接收到100个IP后,开始一个个尝试去建立TCP连接。若连接上了,就询问对方拥有那些分块,需要哪个分块,然后相互传输。
总之,BT的工作方式就是一句话:人人为我,我为人人。
>参考:
《计算机网络-自顶向下方法》 Jams F.Kurose Keith W.Ross
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/160293.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...