P2P 设计经验谈

29
P2P 设设设设设 设设 ([email protected]) 2008-06-08

description

P2P 设计经验谈. 余 锋 ([email protected]) 2008-06-08. 常 见类型. 对等的和中心节点方式 迅雷 BT 电驴( KAD) Skype. 对等网络. Peer 都是平等的 互相 协作. 判断网 络类型. Stun 协议 可以由公网的 peer 参与 实际连接进行判断. 传输通道. UDP 命令 可靠 udp 数据运行 丢 开 销很小 TCP tcp 公平分享 带宽的特性 最好开 7 个 链接 多点下 载 需要握手 开 销大. 心跳 检查. Peer 定期心跳来宣布自己的存在 频率不可过高. - PowerPoint PPT Presentation

Transcript of P2P 设计经验谈

P2P 设计经验谈

余锋 ([email protected])2008-06-08

常见类型

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

对等网络

• Peer 都是平等的• 互相协作

判断网络类型

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

传输通道

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

• TCPo 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