复杂握手一般步骤
复杂握手是 RTMP 协议中用于建立连接的更安全的握手过程,通常涉及到 C0、C1、S0、S1、S2、C2 和 C3 七个握手消息。以下是复杂握手的一般步骤:
-
客户端发送 C0 和 C1 到服务器:
- C0:客户端发送一个包含协议版本号的 8 位字节,通常为 0x03(表示 RTMP 协议版本 3)。
- C1:客户端发送一个 1536 字节的数据块,其中包括时间戳、客户端随机数据和一些其他信息。C1 的前 4 个字节通常包含与时间戳相同的值。
-
服务器接收 C0 和 C1,生成 S0、S1、S2:
- S0:服务器生成一个包含协议版本号的 8 位字节,通常为 0x03(与 C0 相同)。
- S1:服务器生成一个 1536 字节的数据块,其中包括时间戳、服务器随机数据和一些其他信息。S1 的前 4 个字节通常包含与时间戳相同的值。
- S2:服务器生成一个 1536 字节的数据块,与 S1 对应,包含时间戳和随机数据。
-
服务器发送 S0、S1、S2 到客户端:
- 服务器将 S0 和 S1 发送给客户端。
-
客户端接收 S0、S1,验证 S1 的有效性,生成 C2:
- 客户端验证 S1 的时间戳和随机数据的有效性,确保它们与 C1 中的值一致。
- 客户端生成 C2,一个 1536 字节的数据块,与 C1 对应,包含时间戳和随机数据。
-
客户端发送 C2 到服务器:
- 客户端将 C2 发送给服务器。
-
服务器接收 C2,验证 C2 的有效性,生成 S2:
- 服务器验证 C2 的时间戳和随机数据的有效性,确保它们与 S1 中的值一致。
- 服务器生成 S2,一个 1536 字节的数据块,与 S1 对应,包含时间戳和随机数据。
-
服务器发送 S2 到客户端:
- 服务器将 S2 发送给客户端。
-
握手成功:
- 如果 S2 和 C2 的验证通过,握手成功,双方可以开始正常的 RTMP 通信。
Tip
ffmpeg 抓包rtmp
协议中,没有生成s3逻辑