网络协议mysql协议数据包分析
Posted sysu_lluozh
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了网络协议mysql协议数据包分析相关的知识,希望对你有一定的参考价值。
使用tcpdump抓取应用层mysql协议的数据包,然后使用wireshark工具对mysql协议数据包进行分析
一、tcpdump数据包
可以通过端口规则或mysql规则抓取对应的mysql数据包,接下来通过端口规则限定抓取mysql的数据包
1.1 查看mysql的端口
jdbc:mysql://swqa.lluozh.com:3487/lluozh?characterEncoding=UTF-8
即显然当前数据库的端口为3487
1.2 tcpdump数据包
根据端口信息抓取对应的数据包
tcpdump -i any port 3487 -w ceph.pcapng
二、mysql协议查看
抓取数据包后使用wireshark进行查看
2.1 打开数据包
使用wireshark打开抓取到的数据包
发现显示的是TCP请求,并未看到对应的MySQL协议信息,需要针对wireshark进行配置识别MySQL协议信息
2.2 协议查看配置
Wireshark -> Preferences(mac直接command+,) -> Protocols -> MySQL调出配置页面
MySQL TCP默认的端口是3306,业务中实际的MySQL的端口为3487,故需要将端口修改成3487,保存配置信息
2.3 MySQL协议查看
保存后自动刷新页面,可以自动识别MySQL协议的数据包
三、mysql协议信息
从抓取的mysql数据包中可以看出,具体传输的数据包有Request Query、Response、Response OK
3.1 Request Query
客户端执行sql语句
3.2 Response
服务器对客户端执行查询sql语句(Request Query)的回复
3.3 Response OK
服务器对客户端执行更新sql语句(Request Query)的回复
四、数据分析统计
由于抓取到的mysql请求数据包量很大,比如上面抓取的数据包约14800个,这样需要统计具体数据包请求的时间分布,用来分析具体的mysql处理的时间
4.1 Round Trip Time
RTT即往返时延,表示从发送端发送数据开始,到发送端收到来自接收端的确认(接收端收到数据后便立即发送确认),总共经历的时延
- 筛选MySQL请求响应包
由于数据包中有TCP的ACK包,故首先需要筛选MySQL请求响应包,便于接下来的响应时间曲线
- RTT分析曲线
根据路径Statistics -> TCP Stream Graphs -> Round Trip Time打开RTT分析曲线图
可以使用Switch Direction切换源和目标的地址
- 时间曲线验证
抽样验证一下RTT提供的时间是否正确
真实的数据包的响应时间是4.23ms ( = 19:55:57.530520 - 19:55:57.530097)
与RTT提供的数据严重不符
- RTT By Sequence Number
勾选RTT By Sequence Number选项再次比对生成数据
真实的数据包的响应时间是36.358ms ( = 19:55:58.316878 - 19:55:58.280520),与曲线中数据基本吻合
查看响应时间曲线分析可以使用Round Trip Time的方式,但是要注意配置信息的勾选
4.2 time_delta
time_delta统计的是当前帧与上一帧的时间间隔
从语义解释上其实并不是数据包响应时间的统计数据,但在实践过程配置了该项数据,且目前从抽样数据包中并未证实该数据曲线是错误的,故Mark一下
根据路径Statistics -> I/O Graph打开页面
- Display Filter
即筛选条件,设置为mysql.response_code,可以搜索mysql协议mysql执行的服务端响应包
- Y Axis
设置AVG(Y Field),获取平均值
以上是关于网络协议mysql协议数据包分析的主要内容,如果未能解决你的问题,请参考以下文章