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网络架构分层

  1. 网络通信层(Network Communications Layer)

    • 描述无线或有线方式连接的各种终端之间的网络特性
  2. (覆盖)网络节点管理层(Overlay Nodes Management Layer)

    • 描述对网络中节点的管理策略,如节点发现和路由机制等
  3. 特征管理层(Feature Management Layer)

    • 处理相关的安全、可靠性、失效容忍、资源融合等问题
  4. 服务相关层(Services Specific Layer)

    • 通过并行调度等技术来支持底层的P2P基础设施以及应用相关的组件
  5. 应用层(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协议

特点:

  • 扁平的节点拓扑
  • 无中心的查找协议
  • 查询报文泛洪到一定网络半径内的所有邻居

消息类型:

  1. 组成员消息:PING/PONG
  2. 查询消息:QUERY/QUERY_RESPONSE
  3. 文件传输消息: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打孔原理:

  1. A和B分别向S发送消息
  2. S relay消息给对方
  3. A和B同时向对方的public地址发送UDP消息
  4. NAT建立会话绑定
  5. A和B可以直接通信

4. TCP Hole Punching(TCP打孔)

  • 比UDP更复杂
  • 需要SO_REUSEADDR或SO_REUSEPORT
  • 需要处理操作系统协议栈的差异

十、P2P面临的问题

  1. 版权保护问题
  2. 安全问题:病毒扩散通道
  3. 信息检索问题:第三代搜索引擎?
  4. 路由和路径发现
  5. 可扩展性问题:世界范围、上亿台主机
  6. 网络异构性:不同操作系统、硬件和拓扑结构
  7. 服务质量保障
  8. Free rider问题:只使用不提供服务

关键概念总结

概念说明
DHT分布式哈希表,结构化P2P的底层结构
Chord结构化P2P的代表性研究成果
Gnutella非结构化P2P的代表系统
BitTorrent中心化管理的P2P系统
KaZaA混合式P2P系统
NAT穿透UDP/TCP Hole Punching

与其他知识的关联

行动点

  1. 深入理解Chord协议的实现细节
  2. 研究BitTorrent的tit-for-tat机制
  3. 实践NAT穿透技术
  4. 分析主流P2P系统的设计权衡