rtmp信令交互过程分析二-握手(Handshake)

rtmp信令第一步是握手(Handshake),握手有Simple Handshake和Complex Handshake,Simple Handshake为简单握手,不需要使用加密算法校验,Complex Handshake为复杂握手,需要使用openssl的算法校验。

一、Simple Handshake

概述

1) C0 1 byte,表示客户端RTMP的版本号。

2) C1 1536 bytes (4-time + 4-zero + 1528-random)

  • 时间:4 bytes。时间戳。
  • 零:4 bytes。本字段必须是全零。
  • 随机数据:1528 bytes。随即数据用于区分身份,应充分的随机性。

3) C2 1536 bytes (4-time + 4-time2 + 1528-echo),是对S1的回复

  • 时间:4 bytes。S1的时间。
  • 时间 2:4 bytes。C1的时间。
  • 随机回复:1528 bytes。S1的随机数据。

4) S0 1 byte 表示服务端RTMP的版本号,格式同C0

5) S1 1536 bytes (4-time + 4-zero + 1528-random),格式同C1

6) S2 1536 bytes (4-time + 4-zero + 1528-echo),是对C1的回复,格式同C2

举例

以下为使用wireshark抓包的部分内容:

C->S

Handshake C0+C1

Protocol version: 03
Handshake data: 5a49100000000000e16a3d0c750c0f46f8b4b87b61d8084f...
S->C

Handshake S0+S1+S2

Protocol version: 03
Handshake data: 5a49100000000000e16a3d0c750c0f46f8b4b87b61d8084f...
Handshake data: 5a49100000000000e16a3d0c750c0f46f8b4b87b61d8084f...
C->S

Handshake C2

Handshake data: 5a4910005a491000e16a3d0c750c0f46f8b4b87b61d8084f...

二、Complex Handshake

概述

1) C0 1 byte,表示客户端RTMP的版本号。

2) C1 1536 bytes (4-time + 4-version + 764-key + 764-digest)

764 bytes key:

  • random-data:(offset)bytes
  • key-data:128bytes
  • random-data:(764-offset-128-4)bytes
  • offset:4bytes

764 bytes digest:

  • offset:4bytes
  • random-data:(offset)bytes
  • digest-data:32bytes
  • random-data:(764-4-offset-32)bytes

3) C2 1536 bytes (4-time + 4-version + 764-key + 764-digest),是对S1的回复

4) S0 1 byte 表示服务端RTMP的版本号,格式同C0

5) S1 1536 bytes (4-time + 4-version + 764-key + 764-digest),格式同C1

6) S2 1536 bytes (4-time + 4-version + 764-key + 764-digest),是对C1的回复,格式同C2

举例

C->S

Handshake C0+C1

Protocol version: 03
Handshake data: 0000000009007c02f778551eceab8e1e362f07c5868a70b2...
S->C

Handshake S0+S1+S2

Protocol version: 03
Handshake data: 38a29c830d0e0a0db2cf54ce67b9f0d74acb2a8e231ce5f9...
Handshake data: 63c00fbe06cb65b72238eafa4a5c4822b34aa75c413fb365...
C->S

Handshake C2

Handshake data: e25c15c22caf72d0986fbd3eda0d7151973e19083e0abbef...