RTMFP协议分析文档
### RTMFP协议分析 #### 一、RTMFP协议简介 RTMFP(Real Time Messaging Flash Protocol)是一种由Adobe Systems开发的专用于Flash Player之间的实时通信协议。它利用P2P技术,允许两个或多个Flash Player实例之间进行直接的数据交换,而无需通过服务器转发,从而减少了延迟并提高了效率。 #### 二、RTMFP协议的连接建立过程 ##### 1. Handshake Stage 1 (握手阶段1) **[Request]** - **Marker**: 0x0b - 一个固定的标记值。 - **TypeID**: 0x30 (ASCII ‘0’) - 表示此握手是第一阶段的握手。 - **Type**: 0x0a (Handshake, P2P Handshake is 0x0f) - 描述握手类型。 - **EPDLength**: 0x38 (实际上为EPD长度加1) - EPD部分的实际长度加上1。 - **EPD**: rtmfp://localhost/2b7bdd317c88ad61b198ddc2-52e69eeaaa0c - 这里包含了RTMFP协议的基本信息及本地主机标识符等数据。 **[Response]** - **Marker**: 0x0b (symmetric) - 与请求中的Marker一致。 - **TypeID**: 0x70 - 响应握手类型。 - **TagLength**: 0x10 - Tag部分的长度。 - **CookieLength**: 0x40 - Cookie部分的长度。 ##### 2. Handshake Stage 2 (握手阶段2) **[Request]** - **Marker**: 0x0b - 与前一阶段相同。 - **TypeID**: 0x38 (ASCII ‘8’) - 描述此握手为第二阶段握手。 - **FarId**: 0x02000000 - 远端标识符。 - **CookieLength**: 0x40 - Cookie长度。 - **FarSignature**: 0x810x020x1D0x02 - 签名部分。 - **FarPubKeyPart**: 128bytes - 公钥的一部分。 - **FarCertificate**: - 证书信息。 **[Response]** - **Marker**: 0x0b - 与前一阶段相同。 - **TypeID**: 0x38 - 描述此握手为第二阶段握手。 - **FarId**: 0x02000000 - 远端标识符。 - **CookieLength**: 0x40 - Cookie长度。 - **FarSignature**: 0x810x020x1D0x02 - 签名部分。 - **FarPubKeyPart**: 128bytes - 公钥的一部分。 - **FarCertificate**: - 证书信息。 ##### 3. “connect” Request 在完成两个阶段的握手后,客户端会发送一个“connect”请求,以告知对端准备建立连接。 ##### 4. Acknowledgement 对端收到“connect”请求后,会发送一个确认响应,表示已经准备好建立连接。 ##### 5. “setPeerInfo” Request 客户端还会发送一个“setPeerInfo”请求,用于设置对端的信息。 ##### 6. Acknowledgement 同样地,对端也会发送一个确认响应,表明已经接收到了客户端发送的“setPeerInfo”请求。 ##### 7. Ping 在连接建立成功后,为了保持连接的有效性,双方会定期发送Ping消息来检测连接状态。 #### 三、数据包格式详解 **Handshake1 请求数据包格式** - **Marker**: 固定值0x0b,用于标记握手数据包。 - **TypeID**: 握手类型,0x30表示第一次握手。 - **Type**: 握手的具体类型,0x0a表示握手。 - **EPDLength**: 实际长度加1,这里为0x38。 - **EPD**: 包含了RTMFP协议的版本信息以及本地主机标识符等。 - **Tag**: 16字节字符串,具体含义根据上下文决定。 - **Padding**: 用于填充,确保数据包大小符合要求。 **Handshake1 响应数据包格式** - **Marker**: 0x0b,与请求中的Marker一致。 - **TypeID**: 0x70,表示握手响应。 - **TagLength**: 0x10,Tag部分的长度。 - **Tag**: 16字节字符串。 - **CookieLength**: 0x40,Cookie部分的长度。 - **Cookie**: 64字节。 - **Certificate**: 77字节证书信息。 **Handshake2 请求数据包格式** - **Marker**: 0x0b,与前一阶段相同。 - **TypeID**: 0x38 (ASCII ‘8’),表示第二次握手。 - **FarId**: 0x02000000,远端标识符。 - **CookieLength**: 0x40,Cookie长度。 - **FarSignature**: 0x810x020x1D0x02,签名部分。 - **FarPubKeyPart**: 128字节,公钥的一部分。 - **FarCertificate**: 证书信息。 #### 四、总结 RTMFP协议的连接建立过程包括两个阶段的握手、连接请求和确认、设置对端信息和确认,以及周期性的Ping消息。其中,握手过程是建立连接的基础,通过交换必要的认证信息来确保通信的安全性和可靠性。数据包格式定义了握手过程中所需的各种字段及其含义,对于理解RTMFP协议的工作原理至关重要。
剩余8页未读,继续阅读
- 粉丝: 14
- 资源: 19
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
- 1
- 2
- 3
- 4
- 5
- 6
前往页