rtmp协议(2)-握手过程

来源:互联网 发布:如何抢特价机票 知乎 编辑:程序博客网 时间:2024/06/17 12:34

rmtp连接的第一个协议是握手协议。名字叫handshake.


handshake的作用只有一个同步版本号和timestamp。和tcp握手的作用基本差不多。


rtmp的握手协议双方一共要发留个包,各自发三个。分别如下

c0 s0


只有8个字节,双方通过这个命令来同步版本号,现在版本是03.

c2 s2



这个命令主要是双方各自发出自己这段的time,做为后续包的时间戳的起点。

c2 s2



这个命令有点复杂。首先他是有发送顺序的,必须是s2首先发出,然后c2才可以发出。其次。在这个包里,出现的两个time顺序也是有规律的。第一个time必须是对端的time,第二个是自己的time。


下面抓包看

第一个包c0+c1,可以看到,客户端把前两个包一起发出了


版本号就是03,客户端的时间为20 4f 04 52

然后服务器开始回包


服务器把s0 s1 s2包都一起发出了。这里有点奇怪

服务器的s1包,前四个自己是自己的时间 57 c3 d9 04,接着是客户端的时间20 4f 04 52,

s2包,开头四个字节是 20 4f 04 52,而接着四个字节是00 00 00 00 

只是部分遵守了规定。


在看客户端发出去的最后一个包c2


两个时间戳分别为 57 c3 d9 04 和20 4f 04 52


我发现,在核对时间簇的过程。这样可以更好的理解。双方都发出里本地时间戳+四个字节的空位+1528个字节的随机数据,需要对方拿到这个数据后,在四个字节的空位上填上对方的时间戳在法会来。其他不变。就像一个相互交表的过程。


2016.10.11 修改:

我理解错误了。在三对包中,带1字下标的包实际上是一个校验包,发给对方以后,要求对方完全拷贝成2字下标的数据回来

以上是一个simple handshake的过程。网上还有一种叫complex handshake的握手过程。对后面1528个数据做了限制,不在是随机的数据。这种情况我还没有碰到过。

0 0