深度解析mysql登录原理
作者:网络转载 发布时间:[ 2015/12/7 16:11:48 ] 推荐标签:数据库
使用mysql数据库的第一步必然是建立连接登录,然后在上面执行SQL命令。无论是通过mysql的客户端,还是通过C-API,JDBC标准接口连接数据库,这个过程一定少不了。我们聊一聊mysql登陆具体过程,里面会涉及client与server的交互,并通过tcpdump抓包给大家展现这一过程。
TCP握手协议
远程连接数据库,mysql采用TCP协议通信,第一步是建立连接,即TCP的3次握手。mysql server端有一个监听线程等待client请求, client发起请求后,首先发一个sync包到服务端,服务端发一个ack包作为对客户端sync包的响应,同时发一个sync包到客户端, 后客户端再发一个ack包作为对服务端的响应。通过3次握手,TCP连接才算真正建立起来,这个时候mysql服务端会分配一个连接供 客户端使用。记住,TCP的3次握手都是由TCP的协议栈完成,应用程序并无感知。但是,到目前为止,整个mysql连接过程还只完成了 第一步--建立TCP连接。
下面附上TCP建立连接和断开连接的原理图。
MYSQL握手协议
TCP连接建立成功后,mysql客户端与mysql服务端开始进行通讯,进行mysql认证过程。(1)服务端首先会发一个握手包到客户端,(2)然后客户端向服务端发送认证信息(用户名,密码等),(3)服务端收到认证包后,会检查用户名与密码是否合法,并发送包告知客户端认证信息。如果合法,则登陆成功,否则,登陆失败。连接报错。有时候,我们通过show processlist看到User处于unauthenticated user ,这说明此时连接过程正处于第1步和第2步之间,服务端等待客户端发认证信息的过程中。
15922528 unauthenticated user 10.xx.2.74:53216 NULL Connect NULL Reading from net NULL
15923418 unauthenticated user connecting host NULL Connect NULL login NULL
tcpdump抓包验证
下面我们通过tcpdump抓网络包来验证我们的原理。由于测试在生产环境中进行,为了避免生产网段的IP泄露,对IP作了替换,但不影响分析过程。具体而言, 10.aa.zz.142.10556代表客户端,10.bb.yy.104.3306代表服务器端,3306是服务器的监听端口号。
(1).在客户端上打开tcpdump命令,监听与10.bb.yy.104.3306的通信网络包,命令如下:
tcpdump -S -nn -tttt -i eth0 host 10.bb.yy.104 and port 3306 and tcp -c 100
-S 将tcp的序列号以值形式输出,而不是相对值。
-nn 不进行端口名称的转换。
-tttt 在每一行中输出由date处理的默认格式的时间戳。
-i eth0 指定监听的网络接口
host 10.bb.yy.104 and port 3306 设置监听10.bb.yy.104:3306的网络包
-c 100 表示监听100包结束。
(2).在客户端上,利用mysql命令远程连接服务端10.bb.yy.104,
mysql –h10.bb.yy.104 –P3306 –uxxx –pxxx
登陆成功后,然后直接执行exit,退出
(3)分析tcpdump抓取的网络包,重点分析建立TCP连接,MYSQL认证和TCP断开连接的过程。如下图,图中第1部分是TCP连接建立的过程,第2部分是MYSQL认证的过程,第3部分是登陆成功后,发送基本元数据信息的过程,第4部分是断开连接的过程。通过图中的标示,我们可以清晰的看到TCP建立连接的3次握手,MYSQL认证以及TCP断开连接的4次挥手过程。
建立连接
这个过程主要体现在第一部分,客户端10.aa.zz.142.10556,首先发一个编号为1491894492的SYN包,服务端收到后,发送了1491894492+1的ACK包,并发送了一个2727774925的SYN包,后客户端再发送一个2727774925+1的包进行应答。
相关推荐
更新发布
功能测试和接口测试的区别
2023/3/23 14:23:39如何写好测试用例文档
2023/3/22 16:17:39常用的选择回归测试的方式有哪些?
2022/6/14 16:14:27测试流程中需要重点把关几个过程?
2021/10/18 15:37:44性能测试的七种方法
2021/9/17 15:19:29全链路压测优化思路
2021/9/14 15:42:25性能测试流程浅谈
2021/5/28 17:25:47常见的APP性能测试指标
2021/5/8 17:01:11