title: 高级互联网编程-第14讲-对等网络 source: 北京大学软件与微电子学院 author: 李苏克 size: 11.59 MB pages: 107 date: 2026-09-30 method: PDF文本提取 status: done original_path: /田浩然上传的资料/0C103AdvancedInternetProgramming/lectures/lecture14/lecture14.pdf
高级互联网编程 - 第14讲:对等网络(P2P)
课程概述
这是北京大学李苏克老师讲授的”高级互联网编程”课程第14讲,主题为Peer-to-Peer网络。讲义参考了北京大学信息安全研究室提供的P2P相关资料。
主要内容
一、P2P网络基础概念
定义:
- P2P网络(Peer-to-Peer,对等网络)是一种完全分布的、合作式的且自组织的系统
- 没有中心化的控制
- 每个节点既可以作为服务器,也可以作为客户端
应用领域:
- 通信:OICQ、ICQ、MSN、AOL Instant Messenger
- 远程协作和网络多媒体:共享编辑系统、视频会议系统
- 分布式计算
- 文件共享:Maze、Emule、Gnutella、Freenet、KazaA、Morpheus
二、P2P网络发展史
1998年:肖恩·范宁(18岁)设计第一个P2P软件Napster
- 主要目的是检索和共享互联网上的音乐
- 短短一年时间用户达8000万
- 1999年成立Napster公司,后因版权问题被起诉
三、P2P网络架构分层
-
网络通信层(Network Communications Layer)
- 描述无线或有线方式连接的各种终端之间的网络特性
-
(覆盖)网络节点管理层(Overlay Nodes Management Layer)
- 描述对网络中节点的管理策略,如节点发现和路由机制等
-
特征管理层(Feature Management Layer)
- 处理相关的安全、可靠性、失效容忍、资源融合等问题
-
服务相关层(Services Specific Layer)
- 通过并行调度等技术来支持底层的P2P基础设施以及应用相关的组件
-
应用层(Application-level Layer)
- 关注底层P2P网络基础设施之上的特定的工具、应用程序以及服务等
四、P2P网络分类
1. 结构化P2P网络
- 拓扑结构被严格控制
- 内容不是被放置在随机的节点,而是放置在算法指定的节点上
- 大大提高查询效率
- **DHT(分布式哈希表)**是常用的底层结构
- 每个节点维护了一个较小的路由表
代表协议:
- Chord
- CAN
- Tapestry
- Pastry
- Kademlia
- Viceroy
2. 非结构化P2P网络
- 对查询和下载都采用分布式的方式
- 节点通过松散的方式组织起来
- 网络通过泛洪的方式来发送报文以进行路由查找
- 对查询热门资源有效,对稀有资源效率较低
- 负载平衡较困难
代表系统:
- Gnutella
- Freenet
- BitTorrent
3. 混合式P2P网络
- 结合结构化与非结构化网络
- 代表:KaZaA
五、Chord协议详解
核心思想:
- 使用长度为160位的散列函数SHA1
- 每个节点的ID是对节点IP地址进行散列得到的
- 关键词的ID是对关键词文本进行散列得到的
- 关键词key分配给对应的节点,该节点的ID必须在ID环上等于或者紧随key
关键概念:
- 后继节点(successor):successor(key)是顺时针最紧邻key的那个节点
- finger table:路由表,每个节点维护邻居节点的ID和IP地址
- stabilization协议:周期性更新后继节点信息和路由项
应用:
- 合作式文件系统(CFS)
- 基于Chord的DNS系统
六、Gnutella协议
特点:
- 扁平的节点拓扑
- 无中心的查找协议
- 查询报文泛洪到一定网络半径内的所有邻居
消息类型:
- 组成员消息:PING/PONG
- 查询消息:QUERY/QUERY_RESPONSE
- 文件传输消息:GET/PUSH
最新改进:
- 引入超级节点(super peers/ultra peers)
- 动态查询:逐渐扩大查询报文的TTL
七、BitTorrent协议
特点:
- 中心化的P2P系统
- 使用tracker系统管理下载
- tit-for-tat激励方式
核心机制:
- 文件切分为固定大小的分片(256KB)
- SHA1算法校验分片
- choking算法保证下载率稳定
八、KaZaA协议
架构:
- 由超级节点(super peer)构成的结构化体系
- 普通节点传输元数据给超级节点
- 超级节点维护索引信息加速查找
特点:
- 支持元数据搜索
- 自动升级机制
- 使用不加密的HTTP方式传输
九、NAT穿透技术
1. Relaying(中继转发)
- 最古老的方法
- 通过服务器中转通信
- 优点:可靠稳定
- 缺点:低效,依赖服务器性能
2. Connection Reversal(连接反转)
- 需要一方在NAT后面,另一方不在
- 使用有限制
3. UDP Hole Punching(UDP打孔)
- 适用于不同NAT后面的节点
- 也适用于同一NAT后面的节点
- 适用于多个NAT后面的节点
UDP打孔原理:
- A和B分别向S发送消息
- S relay消息给对方
- A和B同时向对方的public地址发送UDP消息
- NAT建立会话绑定
- A和B可以直接通信
4. TCP Hole Punching(TCP打孔)
- 比UDP更复杂
- 需要SO_REUSEADDR或SO_REUSEPORT
- 需要处理操作系统协议栈的差异
十、P2P面临的问题
- 版权保护问题
- 安全问题:病毒扩散通道
- 信息检索问题:第三代搜索引擎?
- 路由和路径发现
- 可扩展性问题:世界范围、上亿台主机
- 网络异构性:不同操作系统、硬件和拓扑结构
- 服务质量保障
- Free rider问题:只使用不提供服务
关键概念总结
| 概念 | 说明 |
|---|---|
| DHT | 分布式哈希表,结构化P2P的底层结构 |
| Chord | 结构化P2P的代表性研究成果 |
| Gnutella | 非结构化P2P的代表系统 |
| BitTorrent | 中心化管理的P2P系统 |
| KaZaA | 混合式P2P系统 |
| NAT穿透 | UDP/TCP Hole Punching |
与其他知识的关联
行动点
- 深入理解Chord协议的实现细节
- 研究BitTorrent的tit-for-tat机制
- 实践NAT穿透技术
- 分析主流P2P系统的设计权衡