狠狠撸

狠狠撸Share a Scribd company logo
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

More Related Content

P2P 设计经验谈