介绍
这次抓包实践的目的是搞清楚腾讯视频Windows客户端在点播视频的时分,视频数据是怎么传输来到客户端的。
终究剖析得出结论,腾讯视频Windows客户端(具体版本见正文)点播视频时,运用了资源重定向、智能DNS等协助客户端挑选稳定的服务器;视频流采取了“两级分段”进行传输。
视频点播抓包进程
准备阶段
检查网络衔接状况,保证网络相对稳定;关闭除腾讯视频以外的其它联网软件和不相关的后台联网程序,减少搅扰方便筛查。
试验软硬件设备与环境状况:
称号 | 值 |
---|---|
操作系统 | Windows 11 家庭中文版22H2 64位 |
内存 | 16GB |
CPU | Intel(R) Core(TM) i7-8750H CPU @ 2.20GHz 2.20 GHz |
抓包软件 | Wireshark Version 3.6.3 |
被测渠道 | 腾讯视频64位Windows客户端 2022 11.44 (11.44.7076.0) |
正式抓取
- 打开腾讯视频并登录,然后打开Wireshark,挑选上网卡,点击录制;接着在腾讯视频精选栏目->今日热点内点开一个短视频进行播映,视频清晰度默认为720P且不会再改变。
- 等待视频缓冲和播映完结后,在Wireshark停止录制活动。下图为抓取完结后的Wireshark界面截图。
成果开端计算、整理与剖析
基本计算
协议分级计算
首要在Wireshark的计算菜单中检查协议分级计算,能够看到在物理层和数据链路层,全部都是以太网数据帧,这毋庸置疑。 而在网络层,按照分组百分比,99.9%的包是依据IPv4的,,只要0.1%的包是依据IPv6的。这说明在抓取期间的只要极少的IPv6通讯。 在会话层,首要是依据IP的UDP、TCP、ICMP协议,其间依据IPv4的TCP协议的数据包在分组百分比和字节百分比占上均非常杰出,这说明IPv4的TCP包不仅数量多,而且总的数据载荷(以字节数衡量)也多。而咱们在抓取期间首要进行的活动(点播短视频),自然地认为应当有很多视频数据传入本机。结合计算数据,咱们开端剖析认为,视频数据经过很多的TCP包从网络传输到本机,这也意味着一个完好的视频被拆分开来进行传输。 在依据IPv的TCP协议下,能够看到分组百分比和字节数百分比占比较大的是HTTP协议,其次是TLS协议。而在HTTP协议下,值得令人注意的是,咱们看到了ISO/IEC 13818-1规范,该规范是一种描绘多个视频,音频和数据基本码流组成传输码流和节目码流的办法,隶属于MPEG-2规范。结合数据占比,几乎能够说明本次腾讯视频的短视频点播,便是在ISO/IEC 13818-1规范的根底上对音视频进行编码传输的。 下面将上图中的协议分组计算中的字节一列独自提出,制作柱状图如下:
会话计算
在Wireshark的计算菜单中检查会话计算,能够看到本机与网络主机之间的会话状况。首要检查IPv4下的计算状况,按照传入本机的传输字节总巨细,从大到小进行排序,能够看到本机与之进行通讯网络主机。
其间,传输数据量最大的网络主机(120.240.53.147,记为A)和次大的网络主机(120.239.31.119,记为B),其Rel Start(会话开端时刻)数字的背面制作了并表明了其会话的开端和持续时刻,也便是会话时刻段,能够看到A与B的会话时刻段是交错开的,本机一开端先与B进行很多数据传输,短暂时刻后再转而与A进行很多数据传输直到完毕。这很有或许是由于传输进程中恳求的视频数据来历中途被切换到了不同的网络主机,具体是不是下面再仔细剖析。其它主机与本机的会话则没有这种现象。
接着再在TCP层面检查会话计算,依旧是按照传入本机的传输字节总巨细,从大到小进行排序。再次看到熟悉的主机A(120.240.53.147)和主机B(120.239.31.119)。但咱们注意到,两台主机均运用49155端口,但传入本机时,本机运用了多个不同的端口进行接收。 将会话的两边作为节点并树立边,两边传送字节数作为边的权重,制作网络联系图。
数据过滤挑选剖析
头部根底剖析
依据协议分级计算,咱们知道了视频的传输与HTTP协议和MEPG-2规范相关。下面输入条件mpeg进行挑选,得到四个承载MEPG协议的包。后三个Source咋一看主机名竟然是localhost!这或许是Wireshark的解析bug,由于数据包里没有写主机名是localhost。 但打开仔细看就知道了,这三个“localhost”都是一个IP(120.240.53.147)。巧了,这四个包正好都是上面计算中说到的,向本机发送了很多数据的主机A和主机B(也有或许是两个经过NAT的私网公有IP,但这儿暂时称为两台主机)!这验证了咱们上面关于哪些主机或许给本机的腾讯视频客户端提供视频数据的猜想。 再调查四个包的以太网数据帧,四个包是同一个以太网出口端口,由于四个包的太网(Ethernet)头中的Source的MAC都是相同的(00:08:e3:ff:fd:a8),这是由于本机经过WLAN接入校园网,数据包传进来后Source被修改为了校园网内的一台网络设备的某个端口的MAC,与传来的视频服务器无关。
TCP传输根底剖析
对榜首个包检查时发现,其TCP载荷是由多个帧的载荷片段组成的数据,共1513个TCP片段的载荷,每个数据载荷地点的帧现已由Wireshark列举出来(红框中蓝色字),点击能够跳转检查对应帧。 这能够说明,序号为10235的榜首个TCP包承载的内容较大,所以被拆开来了再进行传送,最终在本机拼装成为完好的一个回复。查阅材料能够知道,这种办法叫做TCP数据分段传输。当TCP帧的承载数据巨细超过了MSS(Max Segment Size),为了防止IP帧分片(超过MTU),就得将承载数据拆分并封装到多个TCP帧中进行传输。
TCP分段、IP分片和MSS、MTU www.jianshu.com/p/01cde9f9b…
TCP数据传输和MSS超出分段 zhuanlan.zhihu.com/p/228800988
TCP流剖析
依据上小节的TCP传输剖析,咱们得知了TCP数据分段传输的办法。下面咱们测验追寻这一进程。右键榜首个MPEG包,挑选追寻TCP流。
如下图,Wireshark主动帮咱们挑选出该包地点的TCP流,此时显现的是【查材料看看TCP流是什么】。 简单剖析发现,该TCP流包含了与方针树立TCP衔接、发送HTTP恳求、TCP分段传输、得到HTTP回复(便是这个HTTP回复是分段传过来的)以及断开TCP衔接的进程。
将数据区字节省导出后作为视频播映,发现少了3段缓冲,一共应当有至少7段缓冲视频,而经过mpeg挑选出的只要4段。所以下面转而挑选http协议。 挑选后发现,在与服务器A和B恳求视频之前,是在与其他一台服务器在进行恳求通讯,以下称其为C(183.240.185.49)。但本机发给C的恳求好像没有看到携带视频数据的HTTP回应,所以对上图中榜首个发送给C的恳求进行TCP流追寻。如下图,显现出本机发送的恳求(朱赤色字体)是得到了C的回应的(蓝紫色字体),而且也带有视频数据(红框部分及以下)。经过相同的办法,咱们找到了“消失”的3段缓冲视频。其间第1、2段来自C,第4段来自B。 为什么这三段视频的HTTP Response会在Wireshark的mpeg挑选条件下“消失”呢?对榜首段视频的传输追寻TCP流后咱们发现,传输进程中间及最终存在很多传输问题,如下图是榜首段视频(index=0)传输的最终阶段,最右侧导航栏能够看到全进程存储很多黑色部分。这些部分首要是丢包、重复、乱序等问题,说明服务器C与本机的网络不晓畅,呈现拥塞。 因此在榜首段视频传输完结今后本机向C发送HTTP恳求,希望获取第二段视频(index=1)时,C没有回来视频数据,而是帮本机找到了其他一个合适的服务器,也便是B,并经过一个一般的HTTP Response告知本机,其状况码为302 Found,表明资源存在,但暂时改变了方位。下图蓝色框内容为重定向后的URL。重定向完结后本机便与C完毕了本次TCP衔接。
HTTP 302 Found状况码 developer.mozilla.org/zh-CN/docs/…
运用追寻TCP流的办法,对重定向后向B建议的恳求进行追寻,公然找到了第二段视频。点击恣意一个分段TCP后,其TCP帧最下方提示在7310帧进行了拼装。找到序号为7310的包,里边的的数据载荷彻底便是视频数据,没有HTTP头,导出后能够播映,确实是第二段视频。 第四段视频(index=3)依然是向C恳求,但恳求被重定向到了A。
相同对恳求进行追寻,找到了第四段视频。相同没有HTTP头,只要载荷(视频字节省)。 至此,所有缓冲的视频片段的来龙去脉以及内容都现现已过TCP流追寻等办法找到。
树立衔接和恳求视频数据
树立完衔接,本机立刻向方针发送HTTP GET恳求,恳求视频数据。完好恳求URI如下: omts.tc.qq.com/AjDP1wzypfh… URI中能够看到途径被加密了,但文件名和恳求参数依旧是明文。文件名经过后缀能够知道是一个ts视频文件;参数首要为恳求视频的参数和恳求的合法性校验等。具体解析放在下一节解析进行,本小节首要描绘TCP流。
传送视频数据 在本机发送完恳求后,方针主机收到恳求,回来一个Ack=1(赤色框)表明收到接着就开端用TCP分段传输(蓝色框及下面的内容)的办法回来HTTP Response。其间服务器发给本机的榜首个分段TCP数据包的TCP头部中,ACK和PUSH标志位一起为1,表明该帧为开端。后边的分段TCP帧头部则只要ACK标志位为1。
能够看到传输进程中,不是服务器发一个TCP,本机就进行一次应对表明收到,那样功率太低。而是本机收到多个TCP包后才进行一次应对表明收到并等待下一个帧。【这种办法课上有讲过,能够弥补进去】
传输完毕并拼装TCP载荷
TCP分段地将HTTP Response传输完毕,本机发送完最终一个应对后,服务器收到应对,回来一个空载荷的TCP帧(Wireshark中序号为10235,上图红框标示),但该帧的TCP头的标志位中,PUSH和ACK再次一起为1,标志着本次TCP数据分段传输的完毕。本机主动将之前分段接收到的TCP帧的数据载荷进行拼装,作为10235号TCP帧的载荷。【这块有或许是重点内容,请查阅材料弥补:客户端怎么知道要拼装哪些帧?有没有其他值得注意的细节?】然后Wireshark就解分出来这个载荷是一个HTTP的载荷,该HTTP载荷作为本机一开端发送的HTTP恳求的Response。 拼装出来的HTTP Response相同也有载荷,被Wireshark识别为MPEG TS。关于HTTP Response的数据载荷的具体剖析依然放入下一节进行。
断开衔接 本来应该是四次挥手断开TCP衔接,这次的抓取比较特别,少了从本机发往服务器的FIN=1。【弥补一下为什么少了,为什么能够少】
具体成果剖析
点播全流程剖析
在成果的开端剖析中,咱们经过挑选MEPEG协议成功找到了四段缓冲视频,也经过TCP流追寻追查到这四段视频的传输进程。但剖析这四个视频的HTTP恳求发现,其视频index(下标从0开端)分别为2、4、5和6,一起转存HTTP载荷为视频并播映后验证,四个视频确实分别为缓冲视频的第3,5,6,和7段,其间第7段为最终一段。这意味着经过mpeg挑选的成果少了index为0、1和3的三段视频。由于抓包时确实播映完结了,所以这三段视频肯定是接收到了的,只是呈现了其他问题。所以下面转而挑选HTTP协议。 挑选后发现,本机在与服务器A和B恳求视频之前,是在与其他一台服务器在进行恳求通讯,以下称其为C(183.240.185.49)。但本机发给C的恳求好像没有看到携带视频数据的HTTP回应,所以对上图中榜首个发送给C的恳求进行TCP流追寻。如下图,显现出本机发送的恳求(朱赤色字体)是得到了C的回应的(蓝紫色字体),而且也带有视频数据(红框部分及以下)。经过相同的办法,咱们找到了“消失”的3段缓冲视频。其间第1、2段来自C,第4段来自B。 至于为什么这三段视频的HTTP Response会在Wireshark的MPEG挑选条件下“消失”,在对榜首段视频的传输追寻TCP流后咱们发现,传输进程中间及最终存在很多传输问题,如下图是榜首段视频(index=0)传输的最终阶段,最右侧导航栏能够看到全进程存在很多黑色部分。这些部分首要是丢包、重复、乱序等问题,说明服务器C与本机的网络不晓畅,呈现拥塞。 因此在榜首段视频传输完结今后本机向C发送HTTP恳求,希望获取第二段视频(index=1)时,C没有回来视频数据,而是帮本机找到了其他一个合适的服务器,也便是B,并经过一个一般的HTTP Response告知本机,其状况码为302 Found,表明资源存在,但暂时改变了方位。下图蓝色框内容为重定向后的URL。重定向完结后本机便与C完毕了本次TCP衔接。 运用追寻TCP流的办法,对重定向后向B建议的恳求进行追寻,公然找到了第二段视频。点击恣意一个分段TCP后,其TCP帧最下方提示在7310帧进行了拼装。找到序号为7310的包,里边的的数据载荷彻底便是视频数据,没有HTTP头,导出后能够播映,确实是第二段视频。 第四段视频(index=3)依然是向C恳求,但恳求被重定向到了A。
相同对恳求进行追寻,找到了第四段视频。相同没有HTTP头,只要载荷(视频字节省)。 至此,所有缓冲的视频片段的来龙去脉以及内容都现现已过TCP流追寻等办法找到,期间触及3台服务器,本机共获取了7段缓冲视频片段。下面对此进程进行总结整理。本次抓包时播映的视频长度为1分18秒,分为7段进行缓冲和播映。
表x 本机恳求视频缓冲片段在应用层的http会话状况
视频缓冲片段index | 恳求服务器 | 终究视频来历服务器 | 补白 |
---|---|---|---|
0 | 183.240.185.49(C) | 183.240.185.49(C) | 成功传输,但较为拥塞 |
1 | 183.240.185.49(C) | 120.239.31.119(B) | 302 Found重定向,自C至B |
2 | 183.240.185.49(C) | 120.239.31.119(B) | 302 Found重定向,自C至B |
3 | 183.240.185.49(C) | 120.240.53.147(A) | 302 Found重定向,自C至A |
4 | 183.240.185.49(C) | 120.240.53.147(A) | 302 Found重定向,自C至A |
5 | 183.240.185.49(C) | 120.240.53.147(A) | 302 Found重定向,自C至A |
6 | 183.240.185.49(C) | 120.240.53.147(A) | 302 Found重定向,自C至A |
点播恳求头
恳求地址: omts.tc.qq.com/AjDP1wzypfh… **办法:**HTTP GET
注意,其间: 蓝色部分是加密过的途径,在恳求同一个视频的多段时是不会改变的。 紫色部分是点播m3u8结构的一个地址,可是加上了token、cost和客户端网络方位信息等选项 绿色部分和客户端网络方位信息等相关,很有或许用于智能DNS,经过归纳客户端的IP、地点省份和互联网服务提供商等信息,为客户端解析合适的服务器IP以提供优质的视频点播服务。
表x GET恳求的参数信息表
参数 | 释义 | 功用、效果 |
---|---|---|
index | 视频片段索引 | 操控传输内容 |
start | 视频开始时刻(ms) | 操控传输内容 |
end | 视频完毕时刻(ms) | 操控传输内容 |
brs | 视频开始帧数 | 操控传输内容 |
pre | 视频完毕帧数 | 操控传输内容 |
token | 用户令牌 | 恳求合法性校验 |
cost | 传输开支 | 操控传输内容 |
cip | Client IP,客户端IP | 智能DNS |
cpro | CLient Province,客户端地点省份 | 智能DNS |
cisp | Client Information Service Provider,客户端的ISP | 智能DNS |
点播型m3u8,能够往这方面多看看 blog.csdn.net/hejjunlin/a…
start和end是恳求的视频片段的时刻起止,单位为毫秒(ms),能够直接修改end为大于视频长度的时刻,回来的为完好的视频。 brs和pre是恳求的视频片段的帧数起止,相同能够直接修改pre为大于视频帧长度的数量,回来的为完好的视频。
智能DNS cip(Client IP):客户端的IP cpro(CLient Province):客户端地点的省份 cisp(Client Information Service Provider):客户端网络的ISP
为了检验该GET恳求是否能够脱离腾讯视频客户端成功恳求和得到回来视频,下面用Postman软件来进行测验。将上面点播视频的恳求地址放到Postman里,其主动解分出GET恳求参数,点击send后,回来200 OK,回来的Body显现是乱码,但其实是视频的字节省,点击Save Response后能够正常播映。
token存活时刻长度检测试验
经过客户端播映视频抓包获取一个token,记录下获取时刻和token值,以及GET恳求地址。然后用postman软件运用该token发送GET恳求,若成功回来的视频则token标记为可用状况,若提示403 Forbiden则认为token失效。
试验1
token获取时刻:May 11, 2022 23:27:24.882626000 我国规范时刻 token值:d1cff9e262acfef8fe0e5ac94a136c41
测验序号 | 时刻 | token状况 |
---|---|---|
1 | Wed, 11 May 2022 15:53:55 GMT | 可用 |
2 | Thu, 12 May 2022 00:18:37 GMT | 失效 |
试验2
token获取时刻:May 12, 2022 08:21:41.813782000 我国规范时刻 token值:49fec6af5a10daf74f5174e70f6baca2
测验序号 | 时刻 | token状况 |
---|---|---|
1 | Thu, 12 May 2022 00:24:07 GMT | 可用 |
2 | Thu, 12 May 2022 01:59:21 GMT | 可用 |
3 | Thu, 12 May 2022 06:32:12 GMT | 失效 |
可见token存活时刻不超过6小时。
点播恳求回复
前一节的抓包进程解释了点播恳求的HTTP Response是怎么传输到本机的。如下图,
将HTTP Response中的HTTP数据载荷(File Data)导出为字节省后,是一个TS视频文件,能够正常播映。
该视频只要10秒,能够很简单想到这是由于腾讯视频点播视频时,每次只会缓冲视频的一段。如下图,红框内的赤色圆圈为当时视频帧所处方位,而浅灰色段表明现已缓冲的视频段,浅灰色段后边则还未缓冲。
文章首发:ranlychan.top/archives/48…