OpenRTMFP/Cumulus性能优化(5) RTMFP协议详解(2)

        前一篇文字http://blog.csdn.net/linyanwen99/article/details/8664626叙述了rtmfp协议第一趟的握手流程,

本篇文字继续叙述第二趟握手流程,如下:

一.接收packet的处理,如下图:

1.读取该request的数据,如下:

    (1)UInt8 marker = packet.read8();其中marker==0x0b,表示session启动过程.

    (2)UInt16 time = packet.read16();

    (3)UInt8 id = packet.read8();

    (4)UInt16 size = packet.read16();

    说明:这里读取到的id值为id==0x38,表示Initiator Initial Keying chunk,简称IIKeying数据块.

    (5)(UInt32&)farId = request.read32();//读取farId

    (6)if(request.read7BitLongValue()!=COOKIE_SIZE)//比较cookie是否匹配

    (7)std::map<const UInt8*,Cookie*,CompareCookies>::iterator itCookie = _cookies.find(request.current());//查找cookie,该cookie就是在第一趟握手阶段创建的

    (8)读取剩下的signaturepublic key,如下:

    request.next(COOKIE_SIZE);

    size_t farSignatureLen = (size_t)request.read7BitLongValue();EVP_Digest(request.current(),farSignatureLen,(UInt8*)   peer.id,NULL,EVP_sha256(),NULL);

    std::vector<UInt8> publicKey(request.read7BitValue()-2);

    request.next(2); // unknown

    request.readRaw(&publicKey[0],publicKey.size());

    size_t farCertificateLen = request.read7BitValue();//证书长度

转载请注明出处:山水间博客,http://blog.csdn.net/linyanwen99/article/details/8667459

二.Response packet的处理,如下:

1.根据上面的加密,解密数据,farid,以及一些与client相关的数据,创建session,如下:

    Sessionsession = _gateway.createSession(farId,peer,pDecryptKey,pEncryptKey,cookie);

    (UInt32&)cookie.id = session.id//serial number

2.写入signaturepublic key,如下:

    _writer.write32(id);

    _writer.write7BitLongValue(_nonce.size());

    _writer.writeRaw(&_nonce[0],_nonce.size());

    _writer.write8(0x58);//unknown

3.写入typeIdSize,如下:

    response.write8(0x78);

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

说明1:计算加密解密,如下:

    UInt8 decryptKey[AES_KEY_SIZE];

    UInt8* pDecryptKey=&decryptKey[0];

    UInt8 encryptKey[AES_KEY_SIZE];

    UInt8* pEncryptKey=&encryptKey[0];

    RTMFP::ComputeDiffieHellmanSecret(_pDH,initiatorKey,initKeySize,sharedSecret);

    RTMFP::ComputeAsymetricKeys(sharedSecret,initiatorNonce,initNonceSize,&_nonce[0],_nonce.size(),decryptKey,encryptKey);

 这些函数最底层都是调用了openssl函数的接口,欲知这些函数接口的功能以及如何使用,请关注本系列文字的更新,后续会讲到.

说明2:这里讲的都是正常的握手情况,不考虑异常情况的处理,欲知异常情况的处理,请关注本系列文字的更新,后续会讲到.

至此,第二趟握手也已经结束

 

未完待续~~

 

转载请注明出处:山水间博客,http://blog.csdn.net/linyanwen99/article/details/8667459

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
您好,以下是Cumulus交换机配置V-STP的步骤: 1. 首先,确认您的交换机支持V-STP功能,并且已经启用了STP协议。 2. 进入交换机的配置模式。 3. 输入以下命令启用V-STP功能: ``` switch(config)# spanning-tree protocol-version rstp-mst switch(config)# spanning-tree vlan 1-4094 mode mstp ``` 其中,vlan 1-4094表示启用所有VLAN的MSTP模式。 4. 配置V-STP实例。您可以为每个VLAN配置一个实例,或者将多个VLAN分配到同一个实例中。 ``` switch(config)# spanning-tree mst configuration switch(config-mst)# name instance1 switch(config-mst)# revision 1 switch(config-mst)# instance 1 vlan 10-20 switch(config-mst)# instance 2 vlan 30-40 ``` 其中,instance1表示实例名称,revision 1表示版本号,vlan 10-20和vlan 30-40表示将这些VLAN分配到实例1和实例2中。 5. 配置V-STP端口。将每个端口配置为所属的VLAN和实例。 ``` switch(config)# interface swp1 switch(config-if)# switchport switch(config-if)# switchport mode trunk switch(config-if)# switchport trunk allowed vlan 10-20 switch(config-if)# spanning-tree mst instance 1 vlan 10-20 ``` 其中,swp1表示端口名称,switchport mode trunk表示将端口配置为trunk模式,switchport trunk allowed vlan 10-20表示允许VLAN 10-20通过该端口,spanning-tree mst instance 1 vlan 10-20表示将该端口配置为实例1中的VLAN 10-20。 6. 最后,保存并应用配置。 ``` switch# save switch# exit ``` 以上就是在Cumulus交换机上配置V-STP的步骤,希望能对您有所帮助。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值