2.4P2P协议
用AI改了一下,感觉更合理就用AI写的了
一、非结构化P2P网络
资源定位基于松散规则(如泛洪、目录查询),无严格拓扑结构。
1. 集中式目录模型(Centralized Index)
口语化表述:
每个用户集中向一个服务器注册,提供在线和具有的资源信息,然后用户需要下载资源时就向服务器请求信息,然后根据这个信息来找其他人获得资源
- 协议代表:Napster(音乐共享)
- 核心机制:
- 中央服务器存储所有节点的IP地址和共享文件索引。
- 用户查询时向服务器发起请求,获取目标节点IP后直接建立连接下载。
- 优点:查询速度快,实现简单。
- 缺点:
- 单点故障:服务器宕机导致全网瘫痪(Napster因诉讼关闭)。
- 法律风险:中心化架构易被追踪追责。
- 应用场景:早期小规模文件共享。
2. 完全分布式模型(纯P2P)
口语化表述:
当一个用户需要一个资源时,向所有的的其他用户发出查询,其他的用户如果没有资源,则向其他人继续发送查询,一传十,十传百。
- 协议代表:Gnutella(早期文件共享)
- 核心机制:
- 泛洪查询(Flooding):节点将查询请求广播给所有邻居节点,直到TTL(Time-To-Live)耗尽。
- 反向路径响应:资源持有者沿查询路径逆向返回响应。
- 优化策略:
- TTL限制:默认TTL=7,限制泛洪范围。
- 分层泛洪:Gnutella2引入超级节点减少广播流量。
- 优点:完全去中心化,抗审查。
- 缺点:
- 带宽消耗大,扩展性差(N节点产生O(N²)流量)。
- 查询延迟高,资源定位成功率依赖TTL。
3. 混合式模型(Hybrid P2P)
口语化表述:
在用户中选中一些组长,并分配组员。
如果一个人要查询资源,先查询组内是否有,如果没有,则由组长向其他组长查询
- 协议代表:KaZaA(影视资源共享)
- 核心机制:
- 超级节点(Super Node):选择高性能节点作为组长,维护组内资源索引。
- 分层查询:
- 用户优先查询本组超级节点;
- 若未命中,超级节点向其他超级节点转发请求。
- 优点:
- 平衡效率与去中心化,减少泛洪流量。
- 动态选举超级节点,提高容错性。
- 缺点:
- 超级节点可能成为性能瓶颈(带宽/计算压力)。
- 组间查询仍依赖泛洪。
二、结构化P2P网络
资源通过分布式哈希表(DHT)精准定位,逻辑拓扑严格(如环形、树形)。
核心协议:DHT(分布式哈希表)
- 代表实现:
- Chord:环形拓扑,节点ID与资源Key通过一致性哈希映射。
- Kademlia:二叉树拓扑,节点通过异或距离计算邻居(BitTorrent的DHT基于此)。
- 机制:
- 资源定位:文件Key哈希化后,由特定节点负责存储其索引。
- 路由跳数:O(log N)跳完成查询(N为节点总数)。
- 优点:
- 高效定位资源,扩展性强。
- 无中心节点,抗单点故障。
- 缺点:
- 维护逻辑拓扑复杂(节点加入/退出需更新路由表)。
- 仅支持精确查询,不支持模糊搜索。
三、文件分发协议(BitTorrent)
口语化表述:
把文件按照256KB分成一个一个小块来传递。
当一个用户来请求一个资源时,会先随机向一些人请求4个块,之后再向洪流中请求洪流中最稀缺的块。
之后就是才用对等策略,如果这个用户向洪流提供的资源多,那洪流也会安排更多的资源给这个用户,反之亦然
协议代表:BitTorrent
核心机制:
- 文件分块:将文件分割为256KB的块,支持并行下载。
- 资源协调:
- Tracker服务器:记录参与同一文件共享的节点(Swarm),协调节点连接。
- DHT替代Tracker:部分实现使用Kademlia DHT去中心化协调(如Mainline DHT)。
- 下载策略:
- 最稀缺优先(Rarest First):优先下载Swarm中最稀有的块,加速全局分发。
- 随机初始选择:避免多个节点同时请求相同块。
- 对等策略(Tit-for-Tat):
- 优先为上传速率高的对等体提供数据。
- 优化算法:乐观解封(Optimistic Unchoking)随机选择低速节点,避免资源垄断。
分类修正:
BitTorrent本质属于非结构化P2P(若使用Tracker)或混合型(若使用DHT),其创新在于应用层的文件分发策略,而非结构化资源定位。
本文来自博客园,作者:漫宿骄盛,转载请注明原文链接:https://www.cnblogs.com/msjs/p/18896633
都是顺手发的,写的时候可能有错误,如果发现了,望各位指出。

浙公网安备 33010602011771号