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