• 欢迎访问DBA的辛酸事儿,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站
  • 欢迎大家关注博主公众号:DBA的辛酸事儿
  • 博文中若有错误的地方,请大家指正,大家的指正是我前进的动力

使用tcpdump抓取数据包,初步分析MySQL 通信协议

Linux SEian.G 5年前 (2019-04-06) 4425次浏览 已收录 0个评论

今天准备写一篇tcpdump抓包分析方面相关的问题,之所以写这篇文章,主要有两个原因:

1、面试中经常会被问到如下相关的问题

Q:为什么要用数据库连接池?

A:因为新建一个和数据库的连接的开销很大。

Q:那为什么连接的开销很大呢?或者是说,新建数据库连接的开销主要在那些方面呢?

A:emmm…….书上这么说(我去去去去去。。。。。完全没想到过这个问题啊。。。)

Q:你可以从内存,系统调用,socket连接考虑

A:(Orz……当时只想到了系统调用的开销)

2、之间接到客户反馈的问题:客户通过的IDC机房与腾讯云上VPC通过ipsec vpn建立连接,从IDC机房能通过内网能成功连上腾讯云服务器上自建的mysql,但是连接云数据库MYSQL非常的慢,直接就是卡死的状态;

最后这个问题解决是通过抓包分析,最后找到原因:抓包分析到有由于报文超过了ipsec隧道的MTU值,IPSEC 1500 导致长度1464可以进入隧道,但是隧道加了头之后会超过1500 ;如果分片IPSEC头就会破坏,所以通过IPSEC strongswan的 解决方案 减少TCP MSS问题得到解决)

问题场景

通过抓取的数据包分析,云数据库连续重传后 FIN/RESET了链接。

使用tcpdump抓取数据包,初步分析MySQL 通信协议

使用tcpdump抓取数据包,初步分析MySQL 通信协议

使用tcpdump抓取数据包,初步分析MySQL 通信协议

以上就是通过抓包分析出现的问题原因,最终完美解决!(不明觉厉!!!)


好,出于上述的两个原因,所以下面我们通过转包简单的分析一下mysql通信协议;

抓包分析

客户端A:

[root@VM_54_118_centos ~]# tcpdump -i eth0 -s0 host 10.66.161.135 -w /tmp/cvm_conn_cdb.pcap
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes

客户端B:

[root@VM_54_118_centos ~]# mysql -h 10.66.161.135 -u root -XXXXX
mysql: [Warning] Using a password on the command line interface can be insecure.
ERROR 1045 (28000): Access denied for user 'root'@'10.105.54.118' (using password: YES)

注意:上面输出的是错误的密码,所以连接失败

[root@VM_54_118_centos ~]# mysql -h 10.66.161.135 -u root -pXXXXX
输入正确的密码,连接成功,执行如下的相关操作
root@10.105.54.118 [(none)]>use wjq;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed

root@10.105.54.118 [wjq]>select * from test2 limit 5;
+----+-----------+-------+------+
| id | name      | count | age  |
+----+-----------+-------+------+
|  1 | 魏XXXX    |   300 | NULL |
|  2 | 张三      |   500 | NULL |
|  3 | 李四      |   700 | NULL |
+----+-----------+-------+------+
3 rows in set (0.00 sec)

root@10.105.54.118 [wjq]>exit
Bye

首先,查看一下上面输入错误的密码:

使用tcpdump抓取数据包,初步分析MySQL 通信协议

下面是输入正确的密码连接成功后,分析一下相关的数据包

使用tcpdump抓取数据包,初步分析MySQL 通信协议

先看12,13,14三行,TCP的三次握手,没什么可说的。

15行,MySQL协议:Server Greeting,告诉客户端协议号和版本号。

使用tcpdump抓取数据包,初步分析MySQL 通信协议

服务器端状态

使用tcpdump抓取数据包,初步分析MySQL 通信协议

16行,TCP协议:客户端的ACK响应,表示收到了15分节的响应。

17行,MySQL协议:Login Request,客户端登录请求,并给出了登录用户名。

使用tcpdump抓取数据包,初步分析MySQL 通信协议

18行,TCP协议:服务器的ACK响应,表示收到了17行的登录请求。

19行,MySQL协议:Response OK,服务器对登录请求(Login Request)的回复,经过验证,账号密码均正确,可以登录OK。

20行,MySQL协议:Request Query,客户端执行sql语句。

21行,MySQL协议:Response OK,服务器对客户端执行sql语句(Request Query)的回复,执行成功OK。

24行,TCP协议:客户端的ACK响应,表示收到了上述20-23行的请求。

使用tcpdump抓取数据包,初步分析MySQL 通信协议

访问mysql的相关操作

use wjq;

select * from test2 limit 5;

exit;

28行,MySQL协议,SQL操作请求(use wjq)

使用tcpdump抓取数据包,初步分析MySQL 通信协议

1509行,MySQL协议,SQL操作请求(select * from test2 limit 5;)

使用tcpdump抓取数据包,初步分析MySQL 通信协议

1510行,MySQL协议,返回给SQL操作的请求

使用tcpdump抓取数据包,初步分析MySQL 通信协议

TCP挥手使用tcpdump抓取数据包,初步分析MySQL 通信协议

参考连接

https://www.cnblogs.com/ImBit/p/5513401.html

http://www.seanyxie.com/a/jisuanjijichu/wangluo/2019/0319/8.html

使用tcpdump抓取数据包,初步分析MySQL 通信协议


如果您觉得本站对你有帮助,那么可以收藏和推荐本站,帮助本站更好地发展,在此谢过各位网友的支持。
转载请注明原文链接:使用tcpdump抓取数据包,初步分析MySQL 通信协议
喜欢 (9)
SEian.G
关于作者:
用心去记录工作,用心去感受生活,用心去学着成长;座右铭:苦练七十二变,笑对八十一难
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址