您的位置:首页 > 运维架构

OpenRTMFP/Cumulus性能优化(4) RTMFP协议详解(1)

2013-03-12 17:03 369 查看
一.在握手创建session阶段,接收到的packet包的id都为0,该阶段的主要过程为client端发送hello数据块至server端,然后,server端也会创建rhello数据块响应client端,rhello包含server端创建的cookie以及认证证书certificate,具体流程如下:

二.对接收到的packet进行处理如下:

接收到的packet结构如下,(该图为网友提供):



1.UInt8 marker = packet.read8();//读取Marker

UInt16 time = packet.read16();//读取TimeSent

UInt8 id = packet.read8();//读取TypeID

UInt16 size = packet.read16();//读取Size

说明:(a)在client发送的hello数据块里,读取到的marker的值为marker==0x0b,写成二进制形式为marker==00001011,

最后两位的值确定了该packet的类型,如下:

0:表示禁止值

1:表示发送者标志

2:表示响应者标志

3:创建Session启动类型

所以,由上面的marker可知,该packet类型为创建Session启动类型.

(b).这里读取到的id值为0x30,表示为hello数据块

2.继续读取packet数据,如下:

request.read8(); //跳过Unknown

UInt8 epdLen = request.read8()-1;//读取EPD Length

UInt8 type = request.read8();//读取type

string epd;

request.readRaw(epdLen,epd);//读取EPD

string tag;

request.readRaw(16,tag);//读取tag

response.writeString8(tag);//把tag写入response,协议要求的

其中hello数据块的结构如下:



三.response的处理,如下:

response的结构图如下:



1.如上所述,已经把tag写入response.

2.接着创建cookie并写入response,如下:

Cookie* pCookie = attempt.pCookie;

writer.write8(COOKIE_SIZE);

writer.writeRaw(pCookie->value,COOKIE_SIZE);

3.把认证证书写入response,如下:

memcpy(_certificat,"\x01\x0A\x41\x0E",4);

RandomInputStream().read((char*)&_certificat[4],64);

memcpy(&_certificat[68],"\x02\x15\x02\x02\x15\x05\x02\x15\x0E",9);

response.writeRaw(_certificat,sizeof(_certificat));

4.把TypeID写入response,如下

response.write8(0x70);

5.把Size写入response,如下:

response.write16(response.length()-response.position()-2);

最后发送给client端,第一趟握手结束.

其中rhello数据块的结构图如下:





未完待续~~

转载请注明出处:山水间博客,/article/2317674.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: