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
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- (源码)基于Python Tkinter GUI库的随机选择器.zip
- (源码)基于 PHP 的宝塔服务器状态监控系统.zip
- (源码)基于Arduino的BeeBot机器人控制系统.zip
- (源码)基于Atmel8266MCU的闹钟系统.zip
- 一个flask+jQuery的项目,实现文本相似度查询.作为Python必修课和Python选修课大作业
- (源码)基于Nodered和Arduino的气象站监测系统.zip
- (源码)基于Python和Flutter的智能家居自动化管理系统.zip
- (源码)基于Python的微信聊天机器人.zip
- 北上广成沈五城市PM2.5分析 中国农业大学大数据(二学位)Python程序设计课程作业
- 北京大学暑期学校:Python语言基础及应用(Python Programming and Application)小组作业
- 大三上,编译原理大作业,函数绘图语言解释器,Function Mapping Language Interpreter,Python实现
- Confluence实战指南:提升团队协作效能
- 南开大学《数据库原理》课程大作业,基于mysql和python实现的选课系统
- 多媒体大作业,一个基于 Electron-vue + Python 的图像转动画应用
- Python大作业,KTV点歌系统,支持歌曲增删改查,歌词显示
- 数据库的大作业 因为c++太麻烦了 所以使用Python实现



- 1
- 2
- 3
- 4
- 5
- 6
前往页