p2p文件服务器,P2P文件传输

p2p文件服务器,P2P文件传输>网络中的应用,存在两种主流的体系结构。一种是C-S体系,另一种是P2P(对等网)体系。#C-S体系C-S体系是应用很广泛的应用程序体系,如Web应用。在C-S体系中,服务器承担着巨大的责任,需要处理大量的客户端请求,如文件下载请求,这种体系之间**客户端不能直接通信**,而是通过服务器传达。#P2P体系P2P,即peer-to-peer,意思是对等网络。P2P区分于C-S的就是这种体…

大家好,又见面了,我是你们的朋友全栈君。

> 网络中的应用,存在两种主流的体系结构。一种是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

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

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

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


相关推荐

  • navicat12数据库同步

    navicat12数据库同步开发过程中一般会分开发环境,测试环境,生成环境,下面介绍一种方式同步测试环境数据到本地。@[toc]同步表结构打开navicat选择结构同步选择源数据库和目标数据库点击比对查看数据库差异选择要同步的差异信息,默认全选点击部署会展示部署脚本点击运行,会执行脚本,同步数据库可以点击重新比对,查询是否同步成功同步表数据打开navicat选择数据同步选择源数…

    2022年10月15日
  • win10多合一原版系统_win10简体中文64位16299.15多合一版本

    win10多合一原版系统_win10简体中文64位16299.15多合一版本镜像有点大估计压缩后也会超过4G,所以不会上传多合一版本介绍:包含以下版本windows10homewindows10homesinglelanguagewindows10homechinawindows10prowindows10educationwindows10enterprisewindows10s注意全部是64位的哈!!微云:http://url.cn/…

    2022年6月17日
  • python之turtle海龟绘图篇[通俗易懂]

    python之turtle海龟绘图篇[通俗易懂]海龟绘图,想什么,画什么:七段数码管、谢尔帕斯基三角形、玫瑰花和小猪佩奇都不是问题

    2022年6月28日
  • BigDecimal 保留小数位/保留两位小数「建议收藏」

    BigDecimal 保留小数位/保留两位小数「建议收藏」BigDecimaldecimal=newBigDecimal(“1.98764432”);System.out.println(decimal);BigDecimalsetScale=decimal.setScale(4,BigDecimal.ROUND_HALF_DOWN);System.out.println(setScale);BigDecimalsetScale1=decimal.setScale(4,BigDecimal.ROUND_HALF_UP.

    2022年9月15日
  • Kotlin入门(20)几种常见的对话框

    Kotlin入门(20)几种常见的对话框提醒对话框手机上的App极大地方便了人们的生活,很多业务只需用户拇指一点即可轻松办理,然而这也带来了一定的风险,因为有时候用户并非真的想这么做,只是不小心点了一下而已,如果App不做任何提示的话,继续吭哧吭哧兀自办完业务,比如转错钱了、误删资料了,往往令用户追悔莫及。所以对于部分关键业务,App为了避免用户的误操作,很有必要弹出消息对话框,提醒用户是否真的要进行此项操作。这个提醒对话框便是Ap…

    2022年6月22日
  • Ehcache 入门详解 (转)[通俗易懂]

    Ehcache 入门详解 (转)[通俗易懂]一:目录EhCache简介HelloWorld示例Spring整合二:简介2.1、基本介绍EhCache是一个纯Java的进程内缓存框架,具有快速、精干等特点,是Hiberna

    2022年7月1日

发表回复

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

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