RTMP資料抓包的資料報文解讀
本文主要記錄一下RTMP資料在tcpdump抓包後的資料分析解讀
一、開啟Tcpdump抓資料
[email protected]:/home/hu# tcpdump -i ens33 -S -c 100 -x port 1935
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on ens33, link-type EN10MB (Ethernet), capture size 262144 bytes
命令: tcpdump -i ens33 -S -c 100 -x port 1935 ,這裡是抓取埠為1935的RTMP資料流
二、使用VLC拉流後,就已抓取了資料
這裡是一段VLC發給SRS流媒體的資料,一看資料長度是1537,是不是很眼熟呢。這就是c0資料段
c0c1 = new char[1537];
if ((err = io->read_fully(c0c1, 1537, &nsize)) != srs_success)
但是我們來看下面的資料0x0620 + 9 = 1577,這裡為什麼是1577呢
<pre>11:18:13.586142 IP 192.168.1.9.50578 > hu-virtual-machine.1935: Flags [P.], seq 173544423:173545960, ack 68475888, win 4380, length 1537 0x0000: 4500 0629 69d3 4000 8006 0782 c0a8 0109 0x0010: c0a8 0120 c592 078f 0a58 13e7 0414 dbf0 0x0020: 5018 111c 8995 0000 0300 0000 0009 007c 0x0030: 02f7 7855 1ece ab8e 1e36 2f07 c586 8a70 ...... 0x05d0: 05af 5283 0bd2 11a5 4888 94cc 0b05 2255 0x05e0: 0487 11cd 1985 10a9 e943 bf8b 8391 9845 0x05f0: 5fbd 4107 3005 d303 990b 88d9 b636 56d4 0x0600: 3cfe c8ed 8374 8f4b 0f0f c512 0216 794b 0x0610: 22a0 54e5 bc58 abd8 c410 9607 0884 3934 0x0620: 53ce 5096 94af beab e0
因為這裡抓取的是網絡卡上最原始的資料,是由 IP頭資訊+TCP資訊+RTMP資料組成。20+20+1537 = 1577,正好。
1-20位元組分析(IP頭):
0x0000: 4500 0629 69d3 4000 8006 0782 c0a8 0109
0x0010: c0a8 0120
//IP頭部,總長度20位元組版本 首部長度 + ... +源IP地址 +目的IP地址 ,簡單看看最後4個位元組。
c0a8 0109 = 192 168 1 9 //VLC客戶端ip,就是0xc0=192 0xa8=168 0x01=1 0x09=9
c0a8 0120 = 192 168 1 32 //SRS 伺服器ip
21-40位元組分析(TCP頭):
c592 078f 0a58 13e7 0414 dbf0
0x0020: 5018 111c 8995 0000
源埠號: c592 = 50578
目標端號: 078f = 1935
seq號: 0a58 13ef =173544423
ack號: 0414 dbf0 =68475888
0x50 = 0101 0000 資料包忽略
111c = 4380 //winsize
8995 //校驗和
41-1577位元組(RTMP資料):
0300 0000 0009 007c
0x0030: 02f7 7855 1ece ab8e 1e36 2f07 c586 8a70
......
03 : RTMP包的版本號 In C0, this field identifies the RTMP version requested by the client
說明這是RTMP包的開始,後面就是RTMP包的 handshake_with_client 部分的互動資料C0了。