一次计算机网络课的作业,有几个包不是很好抓,在网上搜了很多,最后勉强抓到,所以记录一下,留个参考。 (ps:计网学的不好,分析的都很简略,可能有误~~
要求
使用Ethereal或相关协议分析工具,进行HTTP(包括头部典型方法与字段)、DNS、TLS、SMTP、ARP、RTP、RTMP(Real Time Messaging Protocol)协议的分析。要求:对每个应用层协议从上到下(Ethernet帧),写出协议执行过程及协议单元封装的过程和主要字段值的意义(例如HTTP协议请求、响应过程,DNS对某个具体域名的查找过程,TCP连接建立、数据传输、释放连接过程,等等)。
实验工具:
- wireshark
- chrome浏览器
- Foxmail客户端
- VLC media player
- VoIP 通话线路
- MicroSIP
分析过程:
以访问一个网页为例。
启动wireshark,在浏览器输入www.xiaomi.com ,访问小米的官网。(ps:网址会自动跳转到www.mi.com ,这是因为小米官网做了域名重定向。)
![在这里插入图片描述](https://img-blog.csdnimg.cn/af138474f5d445ed9906f36226049b30.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAMTkwMF8=,size_19,color_FFFFFF,t_70,g_se,x_16)
整个访问小米官网的过程,可以大致划分为以下几个步骤:
- 浏览器输入网址,回车
- DNS域名解析
- 建立TCP连接
- 发起http请求
- 服务器响应http请求,返回网页
- 浏览器解析网页,并渲染
所以,当我们访问这个网址的的时候,首先要做的就是域名解析。域名解析就是要得到域名对应的ip地址,浏览器首先会搜索自身DNS缓存和操作系统DNS缓存,找不到就读取系统hosts文件,若还找不到,那就想DNS服务器发起DNS请求。DNS服务器一般由运营商提供,它会查找自身缓存,若仍然找不到,它会代替我们的浏览器发起迭代DNS查询请求。
分析DNS协议
DNS是一个应用层协议,基于TCP/IP传输,一般的DNS报文传输层是UDP报文。查询的时候一般请求DNS服务器的53端口号。
查询请求的数据包如下:(ps:221.11.1.67 是西安联通提供的DNS服务器)
![在这里插入图片描述](https://img-blog.csdnimg.cn/e06ad23e2f97402aab8ed6f731de5f52.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAMTkwMF8=,size_20,color_FFFFFF,t_70,g_se,x_16)
响应报文如下:
![在这里插入图片描述](https://img-blog.csdnimg.cn/ae02b23de91541c3b2b43fb9f51d3476.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAMTkwMF8=,size_20,color_FFFFFF,t_70,g_se,x_16)
可以看到,经过DNS查询,得到了IP地址123.125.103.192 和111.202.1.201
接下来建立TCP连接,如图是TCP三次握手的报文。
![在这里插入图片描述](https://img-blog.csdnimg.cn/6f73b08b17c34b7fa6e54a4790e83eab.png)
分析TCP握手过程
- 第一次握手:客户端向服务器发送连接请求包,标志位SYN置为1,序号为
Seq = X (由报文可以看出X=0 )
![在这里插入图片描述](https://img-blog.csdnimg.cn/26d660c7ca6e4f26a3f885f8a8cc009d.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAMTkwMF8=,size_20,color_FFFFFF,t_70,g_se,x_16)
- 第二次握手:服务器收到客户端发过来报文,由SYN=1知道客户端要求建立联机。向客户端发送一个SYN和ACK都置为1的TCP报文,设置初始序号Seq=Y(由报文可得Y=0),将确认序号ACK设置为客户的序列号Seq+1,即
X+1 = 0+1=1 ,
![在这里插入图片描述](https://img-blog.csdnimg.cn/c2284827fa354a2c8dda7912453a6a83.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAMTkwMF8=,size_20,color_FFFFFF,t_70,g_se,x_16)
- 第三次握手:客户端收到服务器发来的包后检查ACK是否正确。以及标志位ACK是否为1。若正确,客户端再次发送确认包,ACK标志位为1,SYN标志位为0。确认序号ACK=Y+1=0+1=1,发送序号为X+1=1。服务器收到后确认序号值与ACK=1则连接建立成功,可以传送数据了
![在这里插入图片描述](https://img-blog.csdnimg.cn/27ee3c3a44b242a79bb380d0b67a4dbb.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAMTkwMF8=,size_20,color_FFFFFF,t_70,g_se,x_16)
TCP建立完成后,就可以进行数据传输了。客户端会向服务器发送HTTP请求报文。
分析HTTP报文
HTTP报文由三部分组成,开始行、首部行和实体主体,如下图。在请求报文中,开始行就是请求行。
![在这里插入图片描述](https://img-blog.csdnimg.cn/f153124ec0294481a8679424cbc87bf0.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAMTkwMF8=,size_20,color_FFFFFF,t_70,g_se,x_16)
下图是抓取的请求报文。可以看到,请求方法为GET ,协议版本是HTTP/1.1 ,主机名www.xiaomi.com ,User-Agent 是生成请求的浏览器类型,Accept 是客户端可识别的响应内容类型列表。Accept-Language : 客户端可接受的自然语言。Accept-Encoding : 客户端可接受的编码压缩格式。connection :连接方式。
![在这里插入图片描述](https://img-blog.csdnimg.cn/282929584b18410d9527a7591951519f.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAMTkwMF8=,size_20,color_FFFFFF,t_70,g_se,x_16)
下图是响应报文,可以看到我们的请求被重定向到了www.mi.com 。
![在这里插入图片描述](https://img-blog.csdnimg.cn/8176ceda2235429da08eef2a10d5fcf0.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAMTkwMF8=,size_20,color_FFFFFF,t_70,g_se,x_16)
收到响应报文后,发现我们的请求被重定向到了www.mi.com
所以,我们要去访问www.mi.com ,所以再来一遍DNS查询,TCP连接。抓包结果如下:
![在这里插入图片描述](https://img-blog.csdnimg.cn/04cea7bae3234295a0cf58ccea63d6a8.png)
那么与www.mi.com 建立了连接之后呢,就可以开始传输数据了吗?并不是。
在数据传输之前,我们要建立加密安全数据通道,这就要用到TLS协议。
分析TLS报文
客户端会先向服务端发送Client Hello 消息,其中包括了随机数、密码套件以及密钥交换算法参数。服务端收到后会给确认,发送给客户端Server Hello 数据包,服务端会根据Client Hello 提供的协议版本列表,选择版本。
下图是TLS协议Client Hello 。
![在这里插入图片描述](https://img-blog.csdnimg.cn/c5da111771ee45d9bf38f7ccaf4781e4.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAMTkwMF8=,size_20,color_FFFFFF,t_70,g_se,x_16)
下图是服务端发出的Server Hello
![在这里插入图片描述](https://img-blog.csdnimg.cn/2516de6e9c08443591f85c0285632a23.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAMTkwMF8=,size_20,color_FFFFFF,t_70,g_se,x_16)
到此,TLS的握手过程就结束了,后面可以加密传输消息了。
分析ARP协议
实验环境:两台电脑同处于一个局域网下,我的电脑IP地址是10.102.38.182 ,另外一台点脑ip地址是10.102.40.125
用我的电脑ping 另外一台电脑,使用wireshark 抓包
请求报文如下:
![在这里插入图片描述](https://img-blog.csdnimg.cn/11a62b580ec34563838fab175d5422cb.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAMTkwMF8=,size_20,color_FFFFFF,t_70,g_se,x_16)
响应报文如下:
![在这里插入图片描述](https://img-blog.csdnimg.cn/91008b03994245618a74d247f4e0a21c.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAMTkwMF8=,size_20,color_FFFFFF,t_70,g_se,x_16)
SMTP抓包测试
注意:抓取SMTP数据包需要关闭邮件客户端的SSL加密选项,否则无法抓到。
发送一封测试邮件,观察wireshark抓包结果。
可以看到,首先向211.11.1.67 DNS服务器发送了DNS查询。
![在这里插入图片描述](https://img-blog.csdnimg.cn/ab3bafe7535f47b3b9885df1e78d2339.png)
报文如下:我用的是QQ邮箱,所以查询的是QQ的邮件服务器。
![在这里插入图片描述](https://img-blog.csdnimg.cn/c3a714d55d014675ac781c6649c4fa8b.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAMTkwMF8=,size_20,color_FFFFFF,t_70,g_se,x_16)
DNS查询结束后,需要进行TCP握手,建立TCP连接,然后才开始smtp报文。
我直接筛选smtp报文来分析。如图,是筛选结果。因为在smtp报文之前就已经建立了tcp连接,所以第一条smtp报文就是服务器端发给客户端的。
![在这里插入图片描述](https://img-blog.csdnimg.cn/b35c3b25fc314bf49aa17b8a4b9edee8.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAMTkwMF8=,size_20,color_FFFFFF,t_70,g_se,x_16)
可以逐条分析一下:
第98帧,服务器发给客户端,响应代码220表示连接建立成功
![在这里插入图片描述](https://img-blog.csdnimg.cn/075f75a2aa5e4423a8b54746466eb136.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAMTkwMF8=,size_20,color_FFFFFF,t_70,g_se,x_16)
第99帧,客户端收到220代码后,继续发送请求,首先是发送EHLO命令。一般来说客户端和SMTP服务端建立连接之后就需要发送EHLO或者是HELO命令,后面附带的参数是domain ,即相当于客户端的主机域名或者是主机名,这一步的主要作用是声明身份,EHLO/HELO命令相当于是HELLO命令,两者之间的主要区别是EHLO带身份验证而HELO不带身份验证,因此EHLO要更加安全
![在这里插入图片描述](https://img-blog.csdnimg.cn/232b46ca9c0a4be7aa8a4618788ac088.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAMTkwMF8=,size_20,color_FFFFFF,t_70,g_se,x_16)
第101帧,服务端接收到客户端的EHLO请求之后,返回了一个250代码并且附带了支持的身份验证方式
![在这里插入图片描述](https://img-blog.csdnimg.cn/316c8c27d81e4ade92d6e0fbcad52d8f.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAMTkwMF8=,size_20,color_FFFFFF,t_70,g_se,x_16)
第102帧,客户端使用AUTH命令进行身份验证
![在这里插入图片描述](https://img-blog.csdnimg.cn/bf3360e2040b46e69df5b67770536391.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAMTkwMF8=,size_20,color_FFFFFF,t_70,g_se,x_16)
第104帧,身份验证成功,返回235的成功代码。
![在这里插入图片描述](https://img-blog.csdnimg.cn/24d51a07d01c478dbbe7b21382c13858.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAMTkwMF8=,size_20,color_FFFFFF,t_70,g_se,x_16)
到这里就完成了和SMTP服务器建立连接和身份验证的步骤。
第105帧,客户端发送MAIL FROM 命令,声明邮件的发件人
![在这里插入图片描述](https://img-blog.csdnimg.cn/830dcede128846a3bb89c6691b090619.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAMTkwMF8=,size_20,color_FFFFFF,t_70,g_se,x_16)
第108帧,服务器返回250代码确定操作成功
![在这里插入图片描述](https://img-blog.csdnimg.cn/e47c918a5ba24650b625eccd794caad2.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAMTkwMF8=,size_20,color_FFFFFF,t_70,g_se,x_16)
第109帧,然后客户端发送RCPT TO 命令声明邮件的收件人
![在这里插入图片描述](https://img-blog.csdnimg.cn/af4c839ea4894975bff7e61f04696337.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAMTkwMF8=,size_20,color_FFFFFF,t_70,g_se,x_16)
第113帧,服务器返回250代码确定操作成功
![在这里插入图片描述](https://img-blog.csdnimg.cn/882b482a7b324adfb7013640bfc628ac.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAMTkwMF8=,size_20,color_FFFFFF,t_70,g_se,x_16)
第114帧,客户端使用DATA命令,告知服务器要开始传输邮件的正文内容。
![在这里插入图片描述](https://img-blog.csdnimg.cn/37249e1a0a024f3ebf1fd44a05145d5d.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAMTkwMF8=,size_20,color_FFFFFF,t_70,g_se,x_16)
第118帧,服务端返回354代码,告知邮件的内容结束以<CR><LF>.<CR><LF> 为标记
![在这里插入图片描述](https://img-blog.csdnimg.cn/698821468b3946218c4a787725dab33f.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAMTkwMF8=,size_20,color_FFFFFF,t_70,g_se,x_16)
第119帧,客户端接收到354代码后,会给服务端法案送一个确认数据包,开始传输邮件内容
![在这里插入图片描述](https://img-blog.csdnimg.cn/651e1dee0b184926a9c4b5d9d32f9380.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAMTkwMF8=,size_20,color_FFFFFF,t_70,g_se,x_16)
第121帧,邮件正文。我们可以看到在上面的数据包中包含了SMTP和IMF两个部分,因为抓包发送的邮件内容都是文本,所以直接使用IMF协议就可以传输,而SMTP协议中的报文内容则是DATA命令的终止标志
![在这里插入图片描述](https://img-blog.csdnimg.cn/b51b1368185c499199ca0ee26c0fe655.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAMTkwMF8=,size_20,color_FFFFFF,t_70,g_se,x_16)
因为我们为了抓包方便,所以没有加密。所以其实我们可以在这里面直接提取到邮件内容。看下图,此报文中有编码格式以及编码。
![在这里插入图片描述](https://img-blog.csdnimg.cn/348a166a17da45199f377aef1a6517e3.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAMTkwMF8=,size_20,color_FFFFFF,t_70,g_se,x_16)
我们将编码解码为GB2312即可看到邮件内容。如图,确实是我们发送的内容。(解码网站为https://base64.us/ )
![在这里插入图片描述](https://img-blog.csdnimg.cn/098d209cdec547cf92d89eb193896157.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAMTkwMF8=,size_20,color_FFFFFF,t_70,g_se,x_16)
第127帧,在客户端发送完邮件内容之后,还会接着发送一个QUIT命令来表示结束这次的SMTP传输
![在这里插入图片描述](https://img-blog.csdnimg.cn/4228bcf6603a422dab1cd61c1f8eb306.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAMTkwMF8=,size_20,color_FFFFFF,t_70,g_se,x_16)
服务器在接受到数据之后会返回250代码表示接受成功并且再返回221代码表示结束本次SMTP传输。分别在第126帧和第131帧.
![在这里插入图片描述](https://img-blog.csdnimg.cn/7d4233deebf348ff858a63f1f366e39f.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAMTkwMF8=,size_20,color_FFFFFF,t_70,g_se,x_16)
![在这里插入图片描述](https://img-blog.csdnimg.cn/ed12c643119b41e78caca73d9b4ddcde.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAMTkwMF8=,size_20,color_FFFFFF,t_70,g_se,x_16)
至此,整个邮件传输过程结束。
我这里筛选了smtp报文,并逐帧分析了整个会话流程。其实还有另一种方式,我们可以右键选择追踪tcp流 来追踪整个会话过程。如下图,这个会话流程可以清晰的看到客户端和服务器的信息交互,我们可以直接分析服务器和客户端的会话过程。
![在这里插入图片描述](https://img-blog.csdnimg.cn/61320ea3f3134883939e3f59841a1497.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAMTkwMF8=,size_20,color_FFFFFF,t_70,g_se,x_16)
追踪tcp流,我们也可以看到,确实是先经过了TCP三次握手,才进行smtp握手。
![在这里插入图片描述](https://img-blog.csdnimg.cn/311acd7446e94f89867ef87ef60b890a.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAMTkwMF8=,size_20,color_FFFFFF,t_70,g_se,x_16)
RTP抓包分析
RTP协议用于实时传输数据。RTP协议是一种基于UDP的传输协议,一般视频监控,视频会议,语音电话(VOIP)之类的,都会使用RTP协议。
但是我找了下,没有找到能抓到RTP包的网站。然后考虑他的应用场景,手边刚好有海康威视的摄像头,我尝试了一下,连接电脑,打开监控视频,然后下载了一段监控视频,并没有抓到RTP包(连UDP都没抓到,我也不太懂怎么回事)。
随后又想到RTP还应用于语音电话上面,巧了,刚好我这里有一台IP电话交换机,通话使用的就是sip协议,就抓了下这个。
配置好交换机,在两台电脑上分别使用MicroSIP 软件配置好通话账号,然后,拨打电话,抓包分析。
![在这里插入图片描述](https://img-blog.csdnimg.cn/351da93df71547ad96e030158b127536.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAMTkwMF8=,size_18,color_FFFFFF,t_70,g_se,x_16)
抓包结果如下:
![在这里插入图片描述](https://img-blog.csdnimg.cn/4f7b16cf5a44445785ac6eec5bedd149.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAMTkwMF8=,size_20,color_FFFFFF,t_70,g_se,x_16)
RTP报文如下:
![在这里插入图片描述](https://img-blog.csdnimg.cn/e0cb65c40d3141e399069d5eaf75e59d.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAMTkwMF8=,size_20,color_FFFFFF,t_70,g_se,x_16)
RTMP抓包分析
RTMP是流媒体传输协议。我使用软件VLC,播放rtmp网络流地址。
测试直播地址为rtmp://media3.scctv.net/live/scctv_800 (是美国的一个电视台)
![在这里插入图片描述](https://img-blog.csdnimg.cn/0de7aadcf7a84865a90fd10abdb758ec.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAMTkwMF8=,size_20,color_FFFFFF,t_70,g_se,x_16)
抓包结果如下:可以看到,dns查询完了之后,先tcp三次握手建立连接,然后才开始rtmp。
![在这里插入图片描述](https://img-blog.csdnimg.cn/7c000207e3dd41089cbf5d78a6c1e963.png)
首先,客户端端发送C0+C1块,确认版本。
(本来客户端向服务器发送C0块,表示要和服务器握手,C0中包含版本号。服务器收到C0后,检查C0中的版本是否支持,如果支持发送S0作为响应,否则应该终止连接。客户端和服务器都分别等待C1和S1,等待版本确认。客户端收到S1后发送C2,服务器收到C1后发送S2(确认),握手完成。)
但是实际上客户端直接发了C0+C1,不等服务端了,自己给自己确认。
![在这里插入图片描述](https://img-blog.csdnimg.cn/8a76ae5fedf749c0b77206477aca7d34.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAMTkwMF8=,size_20,color_FFFFFF,t_70,g_se,x_16)
服务器应该回复确认包(发送S0+S1+S2)。但是我没抓到,只抓到了两个Unknown 的包,我也不知道啥意思,可能是网络的问题。
![在这里插入图片描述](https://img-blog.csdnimg.cn/f4d160aacb684e5899bf0324f9ce6630.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAMTkwMF8=,size_20,color_FFFFFF,t_70,g_se,x_16)
不过不重要,反正他本来客户端也不让服务器确认版本号,自己给自己确认了。
直接看下一个,客户端发送C2,握手完成。
![在这里插入图片描述](https://img-blog.csdnimg.cn/fd36e1727d7b4ad2a2ace525dd3ef9b5.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAMTkwMF8=,size_19,color_FFFFFF,t_70,g_se,x_16)
客户端发送connect,报文如下
![在这里插入图片描述](https://img-blog.csdnimg.cn/8fc39d97624641cdbf99b4fb73ec05ad.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAMTkwMF8=,size_20,color_FFFFFF,t_70,g_se,x_16)
服务器给客户端发送如下报文,主要是告诉客户端确认窗口大小,设置节点带宽。
![在这里插入图片描述](https://img-blog.csdnimg.cn/c77b277c11dd4018ac4efe131d2a3d82.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAMTkwMF8=,size_20,color_FFFFFF,t_70,g_se,x_16)
客户端向服务器发送确认窗口大小,并请求创建流(createStream)。
![在这里插入图片描述](https://img-blog.csdnimg.cn/7db21b1a38e145a09e3cca482c1b965b.png)
服务器端给出响应。
![在这里插入图片描述](https://img-blog.csdnimg.cn/a9beaf3d8bc64dfc9d0a254337ce434f.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAMTkwMF8=,size_20,color_FFFFFF,t_70,g_se,x_16)
客户端向服务器发送播放命令,请求播放stream,并设置Buffer Length 1,3000ms。(展开整个报文太长了)
![在这里插入图片描述](https://img-blog.csdnimg.cn/47052bc1d9f347948633e32e4ea1f45c.png)
服务端给出响应结果
![在这里插入图片描述](https://img-blog.csdnimg.cn/c020b16bf78d456b8ccd78f7d05f963e.png)
服务器向客户端发送推流通知,并附带元数据信息(分辨率、帧率、音频采样率、音频码率等等)和视频、音频数据。
此时客户端就可以开始正常播放rtmp流了。 ![在这里插入图片描述](https://img-blog.csdnimg.cn/b61205358a814dfcb6dde267c8694f65.png)
|