网络:P2P协议

网络:P2P协议如果你想下一个电影 一般会通过什么方式呢 当然 最简单的方式就是通过 HTTP 协议进行下载 但是通过浏览器下载的时候 只要文件稍微大点 下载的速度就奇慢无比 还有种下载文件的方式 就是通过 FTP 也就是文件传输协议 FTP 采用两个 TCP 连接来传输一个文件 控制连接

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

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网络的任何,都要负责存储这个网络里的资源信息和其他成员的联系信息,想呼吁所有人都一起构成了一个庞大的分布式存储数据库

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

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

(0)
上一篇 2026年3月26日 下午10:19
下一篇 2026年3月26日 下午10:20


相关推荐

  • R-L模型算法的优缺点_模型解题

    R-L模型算法的优缺点_模型解题@[TOC]LR模型相关知识点#1.LR归一化问题,什么情况可以不归一化,什么情况必须归一化,#2.为什么提到LR损失函数要能知道交叉熵,为什么是它,以它为损失函数在优化的是一个什么东西,知道它和KL散度以及相对熵的关系#3.提到LR的求解方法,比如SGD,知道SGD和BGD的区别,知道不同的GD方法有什么区别和联系,二阶优化算法知道什么,对比offlinelearning和onlinelearning的区别#4.提到调参,知道模型不同超参数的含义,以及给定一个特定情况,大概要调整哪些参数,怎么

    2022年10月10日
    6
  • webstorm激活码3月最新在线激活

    webstorm激活码3月最新在线激活,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月14日
    130
  • Java基础大家必看啊

    Java基础大家必看啊写代码:1,明确需求。我要做什么?2,分析思路。我要怎么做?1,2,3。3,确定步骤。每一个思路部分用到哪些语句,方法,和对象。4,代码实现。用具体的java语言代码把思路体现出来。学习新技术的四点:1,该技术是什么?2,该技术有什么特点(使用注意):3,该技术怎么使用。demo4,该技术什么时候用?test。——————-…

    2022年6月20日
    25
  • SAT到底是变难了还是变简单了?

    SAT到底是变难了还是变简单了?

    2021年8月28日
    57
  • href="javascript:void(0);"与#差异

    href="javascript:void(0);"与#差异

    2022年1月9日
    63
  • 手机响应式网站设计_如何做响应式网页设计

    手机响应式网站设计_如何做响应式网页设计##wap页面怎么做?这个问题困扰了我好久,在PC上我们惯用的`px`单位在手机上根本不适用,即使我们写了“防止网页自动缩放也无济于事,因为各手机分辨率大小不同。用百分比布局。宽度自适应做到了但是高

    2022年8月6日
    8

发表回复

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

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