PPTPV0.1通讯协议定义开始:2003-7-19初稿:2003-7-27修改:2003-9-162003-9-20、24、251、前言及范围本规范为P2P项目中所用到的通讯协议,简称为PPTP,现在的版本是草拟的1.0版。本规范描述了在本项目中客户(Peer)和服务器(Serv11er)以及客户与客户(PeertoPeer)之间的相关消息的类型和定义。本规范解释权属于本作者,有不合实际情况之处将及时更改。本规范包括两方面的内容:(1)客户与登录服务器之间的接口协议;(2)客户与客户进行点到点传输的接口协议;本规范应有一定通用性,便于扩展和增加新的功能,如语音和视频传输等;2、缩略语英文缩写英文全称说明信息P2PPeertoPeer点到点传输技术PPTPTheprotocolofPeertoPeer实现P2P技术的自定义协议PPTPPPeer端,既可为服务器又可为客户端SServer登录服务器3.网络结构图1P2P协议逻辑网络结构如图1所示,服务器为各Peer的登录实体,所有的注册、信任、认证信息均必须从服务器发出(客户端一般可以缓存在线客户的信息);各Peer的地址,所提供的资源清单均必须反馈到服务器;客户与客户之间可进行点到点传输,传输内容包括:文本信息、语音(暂未处理)、视频(暂未处理)、文件(包括小于1M的文件和大文件);点到点传输的连接建立成功后,不需要服务器的参与。4、PPTP功能概述如前言所述,PPTP主要实现两方面的业务操作:(1)客户与服务器之间(ClientServer):111)Peer向Server发出连接请求(并在程序运行期间保持该连接,并测试连接是否Alive);2)Server向Peer回发连接响应,即建立有效连接(1)和(2)可用于测试连接是否Alive;3)Peer向Server发出终止连接请求;4)Server向Peer回发终止连接的响应;5)Peer向Server提交注册请求;6)Server向Peer回发注册响应,成功则Server记载必要信息并返回唯一的用户ID号7)Peer向Server查询在线好友列表信息;8)Server向Peer返回在线好友列表;9)Peer向Server提交更改注册信息请求;10)Server向Peer回发更改注册信息响应,成功则更新服务器上的用户信息并返回;11)Peer向Server提交登录请求;12)Server向Peer回发登录成功信息;PEERASERVERPEERB13)Peer向Server提交查询用户详细信息请求;14)Server向Peer回发该用户详细信息并返回其上线IP地址及共享列表;15)Peer向Server查询特定用户是否在线信息;16)Server向Peer返回该用户是否在线;17)Peer向Server提交共享文件列表(每次改变都要提交一次);18)Server向Peer回发接收共享文件响应信息,如共享文件的基本信息等;19)Peer向Server搜索特定文件位置;20)Server向Peer返回搜索结果;21)Peer对Server提交接收到搜索结果的响应22)PeerA添加好友PeerB23)添加好友回复z24)PeeA删除好友PeerB25)删除好友回复(2)客户与客户之间(PeerPeer):1)PeerA向PeerB发出连接请求(并在程序运行期间保持该连接,并测试连接是否Alive);2)PeerB向PeerA回发连接响应,即建立有效连接(1)和(2)可用于测试连接是否Alive;3)PeerA向PeerB发出终止连接请求(一般是由于终止一方下线、退出等原因);4)PeerB向PeerA回发终止连接的响应;5)PeerA向PeerB提交搜索对方所有文件的请求(UDP);6)PeerB向PeerA回发所有共享的文件列表(UDP);7)PeerA向peerB提交发送文本消息的请求(UDP/TCP);无回应8)PeerA向PeerB提交下载特定文件的请求(TCP);9)PeerB向PeerA下发文件内容(UDP/TCP)暂未处理断点续传;10)PeerB向PeerA发一个文件内容包(文件负载不大于1K)11)PeerA向PeerB发送一个接收OK的空包。采用应答式处理,PeerB只有接收到OK标志才继续Send。保证文件的完整性12)传输结束,发送FileSendEnd包停止文件传输13)收到传输回发的FliesendendOk信号14)接收到Upload后给予的回复信息5.收到文件结束标志协议栈CMP接收到Upload后给予的回复信息P协议以TCP/IP/UDP作为底层通信承载,具体结构如下图4所示:PEERAPEERB图4PPTP协议栈6.通信方式传输的协议包括TCP和UDP。用UDP传递视频、语音等实时性的数据,用TCP的长连接和短连接传递文本消息、命令帧、文件等数据。(视频、语音暂不处理)客户与服务器之间、客户之间进行信息交互时,可以采用长连接方式,也可以采用短连接方式。所谓长连接,指在一个TCP连接上可以连续发送多个数据包,在TCP连接保持期间,如果没有数据包发送,需要双方发链路检测包以维持此连接。短连接是指通信双方有数据交互时,就建立一个TCP连接,数据发送完成后,则断开此TCP连接,即每次TCP连接只完成一对PPTP消息的发送。对于客户之间发送的数据如音频、视频、文件、消息,也可以采用基于UDP的数据报协议,短消息、小文件、实时音频、实时视频可以采用短连接,大文件可以采用长连接进行传递。6.1长连接通信双方以客户-服务器方式建立TCP连接,用于双方信息的相互提交。当信道上没有数据传输时,通信双方应每隔时间C发送链路检测包以维持此连接,当链路检测包发出超过时间T后未收到响应,应立即再发送链路检测包,再连续发送N-1次后仍未得到响应则断开此连接。参数C、T、N原则上应可配置,现阶段建议取值为:C=3分钟,T=60秒,N=3。网关与SP之间、网关之间的消息发送后等待T秒后未收到响应,应立即重发,再连续发送N-1次后仍未得到响应则停发。现阶段建议取值为:T=60秒,N=3。消息采用并发方式发送,加以滑动窗口流量控制,窗口大小参数W可配置,现阶段建议为16,即接收方在应答前一次收到的消息最多不超过16条。长连接的操作流程举例如图5所示:PPTPTCP/UDPIP底层承载ServerPPTPTCP/UDPIP底层承载PPTPTCP/UDPIP底层承载PPTPTCP/UDPIP底层承载PeerBPeerAPeerC图5长连接一次操作流程6.2短连接通信双方以客户-服务器方式建立TCP连接,应答与请求在同一个连接中完成。系统采......建立TCP连接滑动窗口不大于WWPPTP消息1客户端服务器端PPTP消息2对PPTP消息1的响应对PPTP消息2的响应链路检测包链路检测包响应建立TCP连接链路检测包链路检测包响应拆除TCP连接......建立TCP连接用客户/服务器模式,操作以客户端驱动方式发起连接请求,完成一次操作后关闭此连接。客户与服务器之间、客户之间的消息发送后等待T秒后未收到响应,应立即重发,再连续发送N-1次后仍未得到响应则停发。现阶段建议取值为:T=60秒,N=3。短连接的操作流程举例如下图所示:图6短连接的操作流程6.3本协议中涉及的端口号端口号应用8580登录服务器的长连接端口号(客户服务器)8581登录服务器的短连接端口号(客户服务器)8480客户端的长连接端口号(客户客户)8481客户端的短连接端口号(客户客户)8680客户端之间进行UDP传输的端口号(客户客户)6.4交互过程中的应答方式在客户与服务器、客户与客户之间的交互过程中均采用同步方式,即阻塞方式的套接字对PPTP消息1的响应PPTP消息1建立TCP连接拆除TCP连接PPTP消息2对PPTP消息2的响应建立TCP连接拆除TCP连接......建立TCP连接客户端/服务器端服务器/客户端通讯。这是因为易于编程实现多线程通信、便于提高安全性,便于移植(Linux、UNIX中的TCP通讯均为Blocking方式),即任一个网元在发出请求时,只有收到响应消息时才会返回,而任一个网元收到请求消息后应立即回送响应消息。举例如图7所示:d图7通信方式示意图7.消息定义7.1基本数据类型UnsignedInteger无符号整数(简注为Unsigned)Integer整数,可为正整数、负整数或零OctetString定长字符串,位数不足时,如果左补0则补ASCII表示的零,如果右补0则补二进制的零7.2消息结构项目说明MessageHeader消息头(所有消息公共包头)MessageBody消息体7.3消息头格式(MessageHeader)字段名字节数类型描述PeerAPeerBSERVERPeerCPPTP请求消息PPTP响应消息PPTP请求消息PPTP响应消息PPTP请求消息PPTP响应消息Version4Unsigned协议的版本号.0P_Type4Integer0:PPTP协议(Client-Server)或1:PTP协议(Client-Client)Total_Length4Unsigned消息总长度(含消息头及消息体)Command_Id4Unsigned命令或响应类型(每个帧的代码各不相同,标识了该帧的功能)Sequence_Id4Unsigned消息流水号,顺序累加,步长为1,循环使用(一对请求和应答消息的流水号必须相同z)7.4客户与服务器之间(ClientServer)间的消息定义1)PPTP_Connect:Peer向Server发出连接请求(并在程序运行期间保持该连接,并测试连接是否Alive);2)PPTP_Connect_REP:Server向Peer回发连接响应,即建立有效连接(1)和(2)可用于测试连接是否Alive;3)PPTP_Terminate:Peer向Server发出终止连接请求;4)PPTP_Terminate_REP:Server向Peer回发终止连接的响应;5)PPTP_Register:Peer向Server提交注册请求;6)PPTP_Register_REP:Server向Peer回发注册响应,成功则Server记载必要信息并返回唯一的用户ID号7)PPTP_QueryOnline:Peer向Server查询在线好友列表信息;8)PPTP_QueryOnline_REP:Server向Peer返回在线好友列表;9)PPTP_Update:Peer向Server提交更改注册信息请求;10)PPTP_Update_REP:Server向Peer回发更改注册信息响应,成功则更新服务器上的用户信息并返回;11)PPTP_Login:Peer向Server提交登录请求;12)PPTP_Login_REP:Server向Peer回发登录成功信息;13)PPTP_QueryDetail:Peer向Server提交查询用户详细信息请求;14)PPTP_QueryDetail_REP:Server向Peer回发该用户详细信息并返回其上线IP地址及共享列表;15)PPTP_QueryOnline2:Peer向Server查询特定用户是否在线信息;16)PPTP_QueryOnline2_REP:Server向Peer返回该用户是否在线;17)PPTP_Share:Peer向Server提交共享文件列表(每次改变都要提交一次);18)PPTP_Share_REP:Server向Peer回发接收共享文件响应信息,如共享文件的基本信息等;19)PPTP_Search:Peer向Server搜索特定文件位置;20)PPTP_Search_REP:Server向Peer返回搜索结果;21)PPTP_ReceiveOK:Peer对Server提交接收到搜索结果的响应22)PPTP_FriendAddPeerA添加好友PeerB23)PPTP_FriendADD_REP添加好友回复24)PPT