我正在尝试调试无法连接到某些服务器的RTMP客户端。我正在使用Wireshark捕获数据包,并将它们与成功连接的客户端(在本例中为ffmpeg)进行比较。
查看捕获的数据包是否成功连接,我注意到,在TCP级别查看时,有效负载中有一个额外的字节(请参见下图)。多余的字节的值为0xc3,并位于有效负载的字节0xc3处。
我尽我所能地搜索了TCP负载中额外字节的信息,但没有找到类似的信息。我尝试查看TCP规范,但也没有运气。在哪里可以找到有关此信息?
TCP级别视图
RTMP级别的视图
答案 0 :(得分:2)
之所以会这样,是因为消息长度大于最大块大小(根据RTMP规范,默认最大块大小为128)。因此,如果(在您的情况下)在Set Chunk Size
之前没有发送任何connect
控制消息,并且connect
消息大于128字节,则客户端会将消息分为多个块。>
0xC3是下一个块的标头,查看0xC3的位,我们将得到11 000011
。最高的2位指定格式(在这种情况下,fmt = 3,这意味着下一个块是规范中的类型3块)。其余6位指定块流ID(在这种情况下为3)。因此,您看到的多余字节是新块的标头。然后,客户端/服务器将不得不组装这些块以形成完整的消息。