p2p系统设计
- 格式:doc
- 大小:915.50 KB
- 文档页数:9
P2P协议概述协议名称:P2P协议概述概述:P2P(Peer-to-Peer)协议是一种点对点通信协议,它允许直接从一个节点到另一个节点进行通信,而无需通过中央服务器的中转。
P2P协议的目标是实现高效、安全和可扩展的分布式通信。
本文将详细介绍P2P协议的基本原理、功能特点和设计要求。
一、基本原理:P2P协议基于分布式网络架构,其中的节点既可以是服务提供者,也可以是服务请求者。
节点之间通过直接连接进行通信,每个节点既是服务的提供者,也是服务的请求者。
P2P网络不依赖于中央服务器,而是通过协议规定的方式进行节点之间的发现、连接和数据传输。
二、功能特点:1. 去中心化:P2P协议不依赖于中央服务器,节点之间通过直接连接进行通信,提高了系统的可靠性和可扩展性。
2. 自动发现:P2P网络中的节点能够自动发现其他节点,并建立连接,实现动态的节点加入和离开。
3. 数据传输:P2P协议支持节点之间的数据传输,可以实现文件共享、实时通信等功能。
4. 路由和转发:P2P网络中的节点能够根据协议规定的路由算法进行数据的转发,实现节点之间的可达性。
5. 安全性:P2P协议可以通过加密和身份验证等机制来确保通信的安全性。
三、设计要求:1. 协议规范:P2P协议应明确规定节点之间的通信规范,包括消息格式、数据结构、协议头等,确保节点之间能够正确解析和处理收到的数据。
2. 可扩展性:P2P协议应支持节点的动态加入和离开,能够自适应网络拓扑的变化,实现系统的可扩展性。
3. 高效性:P2P协议应优化数据传输的效率,减少节点之间的通信延迟和带宽消耗,提高系统的性能。
4. 安全性:P2P协议应提供安全机制,包括身份验证、加密传输、防止拒绝服务攻击等,确保通信的机密性和完整性。
5. 可靠性:P2P协议应具备容错和恢复机制,能够处理节点故障和网络异常情况,确保系统的可靠性和稳定性。
四、总结:P2P协议是一种点对点通信协议,通过直接连接实现节点之间的通信,具备去中心化、自动发现、数据传输、路由和转发、安全性等功能特点。
ZJVOD系统设计 该工程主要包括4个子系统:Capture、Super Peer、Tracker和Client。这里就这4个子系统的主要结构以及接口进行概括性地分析和描述。
1. Capture子系统 CS(Capture Server)是ZJVOD系统的一个相对独立的子系统。主要功能是采集mms、rtsp流,并向sp(superpeer)提供视频点播数据。现阶段主要要完成的功能就是把采集的mms、rtsp流用sp所支持的协议传输到sp。未来扩展的功能可能要支持:本地采集并编码音视频流,把本地文件虚拟成直播流等音视频流传输到sp。本文档只讨论采集mms、rtsp流的处理和转发。数据流程图如下:
Mms/Rtsp流采集模块Sp协议处理模块Mms、Rtsp数据Mms、Rtsp流SP协议数据SuperPeer
上图中红色的部分就是capture子系统需要完成的功能模块。其中mms、rtsp流采集模块是用了一个开源项目叫dget的代码。Sp协议处理模块是按照capture跟superpeer通讯协议进行处理的,此协议定义在protocol.h文件中的csandsp协议部分。 1.1 系统结构 capture子系统从整体上来看,主要有三个功能模块组成:流采集模块、与sp通讯模块、用户交互接口模块。系统结构图如下:
CaptureUI
Mms/Rtsp流采集Sp协议处理模块
上图中的双箭头表示数据流,也表示状态信息和控制流。 1.2子模块内部设计 在CS的3个子模块中,UI部分就不再介绍,它用的是简单的MFC界面设计。下面着重介绍mms、rtsp流采集模块和SP协议处理模块。 mms、rtsp流采集模块:此模块的代码是从开源项目dget中经过很小的修改而成的。此模块从功能的上看主要有两部分组成:mms和rtsp,它们分别实现对mms流和rtsp流的接收处理功能。 mms流处理是通过类:TMmsCliEx实现。在文件mmscliex.h中定义。rtsp流处理是通过类:TRtspCliEx实现。在文件rtspcliex.h中定义。 SP协议处理模块负责处理CS与SP之间的协议,该协议定义在Protocol.h中。CS与SP之间的连接是基于TCP的,包括以下几类信息: (1) CS2SP_REGISTER,由CS注册到SP; (2) CS2SP_UPDATE,由CS发送更新到SP; (3)CS2SP_BLOCK,由CS发送媒体数据块到SP; (4)CS2SP_MEDIA_TYPE,由CS发送媒体类型到SP; (5)SP2CS_WELCOME,由SP通知CS从某个媒体数据块开始传送; (6)SP2CS_MSG,由SP通知CS错误消息。
2.Super Peer子系统 SP是服务器端的一个重要组成部分,它的功能是接受CP上传的视频数据,并向NP提供视频数据的下载。 2.1系统结构 SP在启动时需要向Tracker注册,并且同Tracker交互信息,该部分的功能由TrackerUDPClient类完成。 SP接收CS的上传请求,该部分的功能由CSTCPServer类完成。 SP与NP、SP的交互分为两部分。一部分是SP接受NP、SP的接受请求,该部分的功能由P2PTCPServer类完成,其协议定义在enumSPandSP中;另一部分是SP作为一个中间缓冲节点,在接收到NP的请求后,向目标SP发送请求连接,该部分的功能由P2PTCPClient类实现。 SP对视频数据的管理功能由ChannelMgr类实现,它提供了大量的方法实现SP对视频数据的添加、获取、查询等操作。 2.2类关系图 SP子系统的UML静态结构如下图所示: 3. Tracker子系统 TS(Tracker Server)也是服务器端的一个重要组成部分,它的功能是接收SP提供注册的频道信息,接受NP(Normal Peer)的注册信息,以及提供NP相关的信息查询。TS动态地维护了SP、NP的状态和注册信息。 3.1系统结构 下图示意了与TS通信的实体模块。TS要处理SP与TS、NP与TS间的通信。TS的设计就是围绕处理这两类通信行进的。
TS
SPNP 3.2程序框架 由于TS需要与两个不同的实体进行通信,因此它的设计成为了两个实体提供不同的通信链路。由于需要大规模的并发链接,这里选择UDP协议进行网络通信,以减轻系统的负载。 TS作为服务端,提供被动的服务,分别处理由SP、NP主动提交的信息,不需要主动向这些实体发送数据。为了方便地进行处理,TS设计了两个模块分别处理不同实体提交的协议数据,包括接收、发送以及协议处理,每个模块都有自己的处理线程,保证处理的及时性和并发性。此外,TS还维护了两个全局表,分别是SP信息对应的chnl_map_和NP信息对应的NPNode_map_。TS两个模块的处理过程分别如下。 (1)SP处理模块接收到SP发来的协议数据,将相应信息创建成channelNode,并把ChannelNode插入、更新到chnl_map_中。 (2)NP处理模块接收到NP发来的协议数据,将相应信息插入、更新到NPNode_map_对于NP的请求信息,NP处理模块根据请求在两个全局表中查询相应的信息。 NP与Tracker的协议通信如图所示
NPTrackerNP2TS_LOGINTS2NP_WELCOMENP2TS_REQ_RES
TS2NP_PEERSNP2TS_REPORT
TS2NP_PEERSNP2TS_NEED_PEERS
NP2TS_RES_INTERVALTS2NP_RES_INTERVALNP2TS_LOGOUT
SP与Tracker的协议通信如图所示 SPTrackerSP2TS_REGISTERTS2SP_WELCOMESP2TS_STATUSSP2TS_RES_LISTSP2TS_LOGOUT
3.3类关系图 Tracker的UML静态结构如图所示
+init() : int+fini() : int+handle_timeout() : int
Tracker
ChannelMgr
ChannelNode+add_connection() : int+del_connection() : int+get_connection_count() : int+check_connection() : void
ConnectionMgr
+timeout() : intSPService
+read_by_type() : int+write_by_type() : int+read_data() : int+write_data() : int
MessageBlock
+push() : void+pop() : MessageBlock
MessageBlockPool
+Value()ConfigFile+file_not_found_ : bool+string_not_found_ : bool
UCPConnection+open() : void+timeout() : int+try_destroy() : int
Connection
+timeout() : intNPServiceNPNodeMgrNPNode-结束31
-结束4*
-结束51-结束61-结束71-结束81-结束131-结束141-结束151-结束161 4.Client子系统 客户端由GUI界面和Layer1.dll组成,GUI界面采用跨平台的wxWidgets库编写,主要包括数据播放和播放器控制部分.Layer1可分为两部分:1.负责处理网络数据部分2.本地httpserver:负责向GUI发送播放数据。基本结构图如下:
Lay1.dllGUI界面(播放器)
本地HTTPSERVER
网络处理部分 4.1功能描述 Layer1.dll在ZJVOD系统中承担的作用包括以下两个方面。 (1)向上与GUI界面交互,从GUI获取指令,为GUI提供播放的数据。 (2)向下与Tracker交互,登记和报告自己的状态,得到初始的Peer列表;与Peers交互,交换媒体数据和Peers列表。 4.2模块划分 Layer1.dll的静态结构如图所示 Layer1.dll主要的功能描述如表所示 类名 功能定义
Layer1 对外的接口,可以看成是对Communicator的线程安全包装,Layer1运行在调用者所在的线程,通过Communicator::resEvent,Communicator::resAckEvent,Communicator::needControl三个变量实现和主线程的同步
Communicator 控制类,LiveResource 、CSCClient、TryClient、P2PMgr的容器。提供启动、停止服务的接口。对其它所有对象的访问都通过这个类 CSCClient 负责和Tracker通信 P2PClient 负责和Peer通信 TryClient 负责发起和Peer的连接 LiveResource 继承自BaseResource,存放流媒体数据的pool, 保存流媒体的metadata
P2PMgr 主线程所在的类,RunManager是主线程方法,一个for(;;) select 死循环。继承自CGenericServer)
CHTTPServer 负责将从网络获取的数据发送给GUI界面,进行播放
Layer1.dll辅助类的功能描述如表所示 类名 功能定义
BufferMgr 一个内存池 BlockInterval/IntervalArray 用区间来描述一组blockID的序列,可以视作一种简单压缩。