我们已经准备好了,你呢?

2024我们与您携手共赢,为您的企业形象保驾护航!

今天准备写一篇关于抓包分析的文章,写这篇文章主要有两个原因:

1.面试时经常会问到以下问题:

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

答:因为创建与数据库的新连接非常昂贵。

问:为什么连接开销这么高?或者说,创建新的数据库连接的开销主要体现在哪些方面?

A:emmm....书上是这么说的(我去去去去...我完全没想过这个问题...)

Q:可以从内存、系统调用、连接的角度考虑。

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

2、我们接到客户反馈:客户通过IPSec VPN建立了IDC机房与腾讯云上VPC之间的连接,客户从IDC机房通过内网可以成功连接到腾讯云服务器上自建的MySQL,但是连接云数据库MYSQL非常慢,直接卡住;

最后通过抓包分析解决了这个问题,并找到了原因:抓包分析显示,该报文超出了IPSEC隧道的MTU值(IPSEC 1500导致长度1464才能进入隧道,但是加上隧道头之后就会超过1500;如果IPSEC头分片的话就会被破坏,所以通过IPSEC方案降低TCP MSS解决了该问题)

问题场景

通过分析抓取的数据包发现,云数据库在不断重传后FIN/RESET了链接。

以上就是通过抓包分析问题原因,最终完美解决!(不知道为什么!!!)

好了,基于以上两个原因,我们来简单分析一下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

首先,检查上面输入的错误密码:

以下是输入正确密码并连接成功后的相关数据包的分析。

首先看第12,13,14行,这是TCP的三次握手,没什么好说的。

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

服务器状态

mysql通信协议_mysql通信协议_mysql通信协议

第16行,TCP协议:客户端的ACK应答表示已经收到15段的响应。

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

mysql通信协议_mysql通信协议_mysql通信协议

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

第19行,MySQL协议:OK,服务器响应登录请求(Login),验证账号和密码正确,即可登录OK。

第20行,MySQL协议:查询,客户端执行SQL语句。

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

第24行,TCP协议:客户端的ACK响应表示上面第20-23行的请求已经被收到。

访问mysql相关操作

使用wjq;

* 来自 test2 限制 5;

出口;

第28行,MySQL协议,SQL操作请求(使用wjq)

mysql通信协议_mysql通信协议_mysql通信协议

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

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

TCP 挥动

参考链接

二维码
扫一扫在手机端查看

本文链接:https://by928.com/5569.html     转载请注明出处和本文链接!请遵守 《网站协议》
我们凭借多年的网站建设经验,坚持以“帮助中小企业实现网络营销化”为宗旨,累计为4000多家客户提供品质建站服务,得到了客户的一致好评。如果您有网站建设、网站改版、域名注册、主机空间、手机网站建设、网站备案等方面的需求,请立即点击咨询我们或拨打咨询热线: 13761152229,我们会详细为你一一解答你心中的疑难。

项目经理在线

我们已经准备好了,你呢?

2020我们与您携手共赢,为您的企业形象保驾护航!

在线客服
联系方式

热线电话

13761152229

上班时间

周一到周五

公司电话

二维码
微信
线