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