前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用tcpdump抓取数据包,初步分析MySQL 通信协议

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

作者头像
SEian.G
发布2021-03-03 10:06:29
1.9K0
发布2021-03-03 10:06:29
举报
文章被收录于专栏:SEian.G学习记录

看了就要关注我,喵呜~

今天准备写一篇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了链接。

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


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

抓包分析

客户端A:

代码语言:javascript
复制
[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:

代码语言:javascript
复制
[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)

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

代码语言:javascript
复制
[root@VM_54_118_centos ~]# mysql -h 10.66.161.135 -u root -pXXXXX
输入正确的密码,连接成功,执行如下的相关操作
代码语言:javascript
复制
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

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

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

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

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

服务器端状态

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

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

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行的请求。

访问mysql的相关操作

use wjq; select * from test2 limit 5; exit; 28行,MySQL协议,SQL操作请求(use wjq)

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

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

TCP挥手

参考连接

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

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-04-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DBA的辛酸事儿 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 问题场景
  • 抓包分析
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档