P2P 设计经验谈



 余锋 (mryufeng@gmail.com)
 2008-06-08
常见类型

• 对等的和中心节点方式
• 迅雷
• BT
• 电驴( KAD)
• Skype
对等网络

• Peer 都是平等的
• 互相协作
判断网络类型

• Stun 协议
• 可以由公网的 peer 参与实际连接进行判断
传输通道

• UDP
  o   命令 可靠 udp 数据运行丢
  o   开销很小

• TCP
  o   tcp 公平分享带宽的特性 最好开 7 个链接
  o   多点下载
  o   需要握手 开销大
心跳检查

• Peer 定期心跳来宣布自己的存在
• 频率不可过高
结对互助

• Buddy 关系
• 充分利用公网机器的资源
提高连通率

• Upnp
• 防火墙
• Nat
• http 隧道
• Udp 打洞
• 中间服务器中转
通道的质量测量

• 需要持续统计
• 主通道有可能失效 必须有备用通道
对抗运营商恶意丢包

• 运营商会对特定类型的包进行限制
• 加密处理
局域网优先

• 广播找 peer
• 资源优先在局域网请求
抗攻击和恶意篡改

• Dos 攻击
• 篡改协议
• 修改程序
协议加密和压缩

• xxtea rc4
• zlib
• Aes
• Rsa
大容量服务器

• Edonkey 服务器
• 减少中间链的个数 提高稳定性
• 方便扩展
错误容忍

• 错误必须可恢复
• 错误原因收集
• 有诊断代码
对抗数据损坏

• Hash
• 可检测小块数据损坏的算法
成熟的语言与库

• ACE
• Python
• Lua
• Erlang
• Udt
• libevent
低资源占用率

• 执行 profile 代码 降低 cpu 使用率
• 减少内存使用量
bootstrap

• 引导系统进入网络
• 多管道 预防失效
• 标准 http 请求
通讯原语

• 名称查找
• 死亡通知
• RPC
公平公正原则

• 收获必须付出
• 不能滥用用户资源
• 小心恶意用户
平台移植

• 协议
• Api
• 代码实现考虑
测试

• P2P 环境的模拟
• 丢包 限速
• Nat 受限
协议兼容性

• 最少保持 3 个版本
• 向前兼容
• 保留字段
部署升级

• 自动升级
• 版本可回滚
• 分批升级
避免触动警报器

• 不要发起的大量的操作,触动网络报警
• 小范围更新
担心网吧和硬盘恢复卡

• 网吧大量用户共享一个 IP
• 硬盘数据写后被恢复
• Clone 的客服端 引起混淆
工具箱

• Netpeeker
• Wireshark
• Intel vtune
• Rational Purify Quantity
Q&A
Upcoming SlideShare
Loading in …5
×

P2P 设计经验谈

2,144 views

Published on

Published in: Technology
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
2,144
On SlideShare
0
From Embeds
0
Number of Embeds
15
Actions
Shares
0
Downloads
55
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

P2P 设计经验谈

  1. 1. P2P 设计经验谈 余锋 (mryufeng@gmail.com) 2008-06-08
  2. 2. 常见类型 • 对等的和中心节点方式 • 迅雷 • BT • 电驴( KAD) • Skype
  3. 3. 对等网络 • Peer 都是平等的 • 互相协作
  4. 4. 判断网络类型 • Stun 协议 • 可以由公网的 peer 参与实际连接进行判断
  5. 5. 传输通道 • UDP o 命令 可靠 udp 数据运行丢 o 开销很小 • TCP o tcp 公平分享带宽的特性 最好开 7 个链接 o 多点下载 o 需要握手 开销大
  6. 6. 心跳检查 • Peer 定期心跳来宣布自己的存在 • 频率不可过高
  7. 7. 结对互助 • Buddy 关系 • 充分利用公网机器的资源
  8. 8. 提高连通率 • Upnp • 防火墙 • Nat • http 隧道 • Udp 打洞 • 中间服务器中转
  9. 9. 通道的质量测量 • 需要持续统计 • 主通道有可能失效 必须有备用通道
  10. 10. 对抗运营商恶意丢包 • 运营商会对特定类型的包进行限制 • 加密处理
  11. 11. 局域网优先 • 广播找 peer • 资源优先在局域网请求
  12. 12. 抗攻击和恶意篡改 • Dos 攻击 • 篡改协议 • 修改程序
  13. 13. 协议加密和压缩 • xxtea rc4 • zlib • Aes • Rsa
  14. 14. 大容量服务器 • Edonkey 服务器 • 减少中间链的个数 提高稳定性 • 方便扩展
  15. 15. 错误容忍 • 错误必须可恢复 • 错误原因收集 • 有诊断代码
  16. 16. 对抗数据损坏 • Hash • 可检测小块数据损坏的算法
  17. 17. 成熟的语言与库 • ACE • Python • Lua • Erlang • Udt • libevent
  18. 18. 低资源占用率 • 执行 profile 代码 降低 cpu 使用率 • 减少内存使用量
  19. 19. bootstrap • 引导系统进入网络 • 多管道 预防失效 • 标准 http 请求
  20. 20. 通讯原语 • 名称查找 • 死亡通知 • RPC
  21. 21. 公平公正原则 • 收获必须付出 • 不能滥用用户资源 • 小心恶意用户
  22. 22. 平台移植 • 协议 • Api • 代码实现考虑
  23. 23. 测试 • P2P 环境的模拟 • 丢包 限速 • Nat 受限
  24. 24. 协议兼容性 • 最少保持 3 个版本 • 向前兼容 • 保留字段
  25. 25. 部署升级 • 自动升级 • 版本可回滚 • 分批升级
  26. 26. 避免触动警报器 • 不要发起的大量的操作,触动网络报警 • 小范围更新
  27. 27. 担心网吧和硬盘恢复卡 • 网吧大量用户共享一个 IP • 硬盘数据写后被恢复 • Clone 的客服端 引起混淆
  28. 28. 工具箱 • Netpeeker • Wireshark • Intel vtune • Rational Purify Quantity
  29. 29. Q&A

×