MyCat-架构剖析-MySQL 协议简介 | 学习笔记

本文涉及的产品
RDS MySQL DuckDB 分析主实例,基础系列 4核8GB
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
RDS AI 助手,专业版
简介: 快速学习 MyCat-架构剖析-MySQL 协议简介

开发者学堂课程【全面讲解开源数据库中间件MyCat使用及原理(三):MyCat-架构剖析-MySQL 协议简介】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/757/detail/13295


MyCat-架构剖析-MySQL 协议简介

Mycat 伪装自己是 MySQL,要想伪装自己,就需要模拟 MySQL 的协议。接下来应用程序在去连接 Mycat 的时候和连接 MySQL 的时候是一样的。这节就来讲解Mycat 如何实现 MySQL 协议。

 

MySQL 协议简介

1.概述

MySQL 协议处于应用层之下、TCP/IP 之上,在 MySQL 客户端和服务端之间使用。包含了链接器、MySQL 代理、主从复制服务器之间通信,并支持 ssL 加密、传输数据的压缩、连接和身份验证及数据交互等。其中,握手认证阶段和命令执行阶段是 MVSOL 协议中的两个重要阶段。

握手认证阶段指的是 MYSQL 的客户端和 MYSQL 的服务端进行交互。握手认证的过程就是建立连接,然后去校验用户名密码的有效性。

命令执行阶段指的是发送一条 SQL 语句给 MySQL 的服务端,MySQL 服务端执行完之后再返回的这个过程就是命令执行。接下来从两个层面:握手认证阶段和命令执行阶段,来给大家分 MySQL 协议都包含了哪些东西。

2.握手认证阶段

image.png

A

握手认证阶段是客户端连接服务器的必经之路,客户端与服务端完成 TCP 的三次握手以后,服务端会向客户端发送一个初始化握手包,握手包中包含了协议版本,MvSQLServer 版本,线程 ID,服务器的权能标识和字符集等信息。

B

客户端在接收到服务端的初始化握手包之后,会发送身份验证包给服务端(AuthPacket),该包中包含用户名、密码等信息。

C

服务端接收到客户端的登录验证包之后,需要进行逻辑校验,校验该登录信息是否正确。如果信息都符合,则返回一个 OKPacket,表示登录成功,否则返回ERR_Packet,表示拒绝。

握手认证阶段细分为三个部分,有三个数据包。这里需要通过抓包工具来抓取MySQL 客户端连接服务端的时候交互的过程,抓包工具叫做 wireshark。

image.png

在 wireshark 当中并没有检测到对应的网卡,这个时候就需要开启 windows 上的抓包服务,以管理员身份运行,后续步骤如下:

image.png

image.png

NPF 服务启动起来了之后,需要重新打开 wireshark。这个时候它就将本地的几块网卡已经下载出来了:

image.png

而这几块网卡实际上和下图所示的本地的网卡是一致的:

image.png

image.png

在抓取的时候就可以选择要抓取的是哪一块网卡上的包。

要抓取的是 MySQL,那么在这一块抓取的时候,应该怎么操作呢?

众所周知,在我们的服务器上,这一块有 157,158,159,160。

image.png

这四个服务器都安装有 MySQL,现在只需要从 windows 上来连。

C:\Windows\system32>mysq1 -h 192.168.192.157 -u root -p

这个时候我们要连的就是 157。

当前 WINDOWS 系统要连接虚拟机服务,由于当前虚拟机在这一块采用的是 NAP模式,所以它所使用的网卡实际上就是 vmNAP8,也就是以太网 4。所以要抓取的则是以太网 4 这一块网卡的信息。双击以太网 4:

image.png

双击进来之后这里所展示的就是以太网4当中的数据包。因为数据量太多了,所以要连接的时候可以先过滤一下:

image.png

过滤条件:image.png

过滤条件是只过滤端口是 3306 的,不管原始端口还是目标端口只要是 3306,都要进行过滤。先把数据清空:

image.png

接下来输入密码 IDCARD:

C:\Windows\system32>mysq1 -h 192.168192.157 -u root -p Enter password:******

Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 204

Server version: 5.6.22-1og MySOL Commnity Server(GPL)

Copyright(c)2000,2014, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners.

Type'help:’or’\h’for help. Type’lc’to clear the current input statement.

mysql>

这样就登录到了 MySQL 中。在这个过程当中,可以看到有很多的数

image.png

据包:

红色线框中,对于当前的 Windows 系统来说,它就是源,就是 192.1,他的IP地址:

image.png

以太网 4 本地的地址是 192.1:

image.png

源是 192.1,目标是 192.157:

第一个是 1 到 157 的,接下来是 157 到 1 的,又是 1 到 157 的。这就是三次握手请求的数据。

在三次握手以后,服务端会向客户端发送一个初始化的握手包,注意是服务端向客户端发送的初始化握手包,服务端是 157,客户端就是 1:image.png

192.157 这个服务端往 192.1 也就是当前 windows 这个客户端发送了一个初始化的数据包,注意它的协议就是 MySQL 协议。

初始化的握手包要做什么事呢?握手信息里面有很多的信息,点击:

image.png

也就是 MySQL 协议。点击:

MySQL Protocol

Packet Length:78

Packet Number: 0

server Greeting

Protocol:10

Version:5.6.22-1og

Thread ID:204

Salt:&^&C]-C.

Server Capabilities:&xf7ff

Server Language: latini COLLATE latin1_swedish_ci(8)

Server status: 0x0002

>Extended Server Capabilities: 0x807f

Authentication Rlugin Length: 21

Unused:0000000000000000000

Salt:WPi?@`Clv/#`

Authentication Plugin: mysql_native_password

综上,wireshark 抓包如下:

image.png

报文分析如下:

1).初始化握手包

通过抓包工具 wireshark 抓取到的握手包信息如下,握手包格式:

image.png

说明:

Packet Length : 包的长度;

Packet Number : 包的序号;

Server Greeting: 消息体,包含了协议版本、MvsOLServer 版本、线程 ID 和字符集等信息。

以上就是所提到的第一个数据包:初始化握手包。

2).登录认证包

客户端在接收到服务端发来的初始握手包之后,向服务端发出认证请求,该请求包含以下信息(由 Wireshark 抓获):

当客户端接收到这个数据包之后,它就会给服务端再发送一个数据包,叫做身份认证信息的数据库。那么身份证信息的数据包在哪?

上面是服务端发送给客户端,接下来客户端又发给服务端一个:

image.png

打开客户端发送给服务端的 MySQL 协议:

image.png

刚才的 packet number 是 0,现在变为 1,因为这是第二个数据包。

Login Request 是登录请求的意思,也就是登录认证包。

登录认证包中主要包含了什么信息呢?最重要的信息:user

登录的时候曾经填写了一个:

image.png

下面还有对应的密码,只不过这个密码是加密之后的。还有字符挤压等信息,这就是第二个数据包,握手认证包。在这个里面就是由我们认证的相关信息。

握手认证包发送给服务端之后,服务端就需要去校验用户名密码。如果校验成功,会返回一个成功的信息:OK packet。如果校验失败,它会返回一个失败的信息ERR packet。

接下来就是握手认证阶段的第三个数据包, OK 包或 ERR 包。

3).OK 包或 ERROR 包

服务端接收到客户端的登录认证包之后,如果通过认证,则返回一个 OKPacket,如果未通过认证,则返回一个 ERROR 包。

因为登录成功之后要返回回去,版本这些信息都是需要反馈过来的。

以上是 ok 的内容,清空掉。

接下来再次登录,打开 cmd,输入:

C:\Users\Administrator>mysq1 -h 192.168.192.157 -u root -p

image.png

看上面的数据大家会发现,虽然还没有进行登录但是还是会有很多的这个数据包。原因是这块网卡当中还有一些其他的信息,比如 157 和 158 之间的交互,158 和 157 之间的交互都是要通过它来进行的。

下面再把它清空掉。进行登录操作:

打开 cmd,随便输入一个错误的密码

C:\Users\Administrator>mysq1 -h 192.168.192.157 -u root -p Enter password: ***

ERROR 1045(28000): Access denied for user ’root’@’192.168.192.1’(using password: YES)

C:\Users\Administrator>

综上,ERROR 报文如下:

image.png 

以上就是握手认证阶段的内容,分为三个过程:

服务端需要给客户端初始化握手包

客户端需要发送身份证信息给服务端

身份证信息校验,在客户端进行校验,然后会给客户端返回成功或者是错误的一个数据包给客户端

3.命令执行阶段

登录成功之后就可以执行一系列的命令。首先看一下数据库,输入show databases:

image.png

大家会发现里面是有数据库的,这个阶段有对应的数据包,也可以通过抓包工具来进行抓取。

清空,选择不保存:

image.png

当执行 show databases 时,当前 Windows 给服务器 157,在这发送的指令来执行查询操作,查询所有的数据。

这个时候大家要来抓数据包:

image.png

192.1 到 192.157 这一块的数据包。看一下这个数据包当中的信息:

image.png

头信息不用看,然后是 command 查询。 show databases 指令,circle 语句:show databases。

这就是当前客户端发送给服务端的数据包。那服务端返回给客户端的结果又是怎么样呢?

192.157 到 192.1 这个数据的数据包里有很多信息

在握手认证阶段通过并完成以后,客户端可以向服务端发送各种命令来请求数据,此阶段的流程是:命令请求->返回结果集

wireshark 捕获的数据包如下:  

96 90.388877 192 168.1921 19119157M 89 Request Query——>命令请求

97 90.404622 192168.192.157192168.192.1Myo 287 Response——> 返回结果集

相关实践学习
自建数据库迁移到云数据库
本场景将引导您将网站的自建数据库平滑迁移至云数据库RDS。通过使用RDS,您可以获得稳定、可靠和安全的企业级数据库服务,可以更加专注于发展核心业务,无需过多担心数据库的管理和维护。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
11月前
|
人工智能 JavaScript 开发工具
MCP详解:背景、架构与应用
模型上下文协议(MCP)是由Anthropic提出的开源标准,旨在解决大语言模型与外部数据源和工具集成的难题。作为AI领域的“USB-C接口”,MCP通过标准化、双向通信通道连接模型与外部服务,支持资源访问、工具调用及提示模板交互。其架构基于客户端-服务器模型,提供Python、TypeScript等多语言SDK,方便开发者快速构建服务。MCP已广泛应用于文件系统、数据库、网页浏览等领域,并被阿里云百炼平台引入,助力快速搭建智能助手。未来,MCP有望成为连接大模型与现实世界的通用标准,推动AI生态繁荣发展。
9550 66
|
11月前
|
人工智能 自然语言处理 API
MCP与A2A协议比较:人工智能系统互联与协作的技术基础架构
本文深入解析了人工智能领域的两项关键基础设施协议:模型上下文协议(MCP)与代理对代理协议(A2A)。MCP由Anthropic开发,专注于标准化AI模型与外部工具和数据源的连接,降低系统集成复杂度;A2A由Google发布,旨在实现不同AI代理间的跨平台协作。两者虽有相似之处,但在设计目标与应用场景上互为补充。文章通过具体示例分析了两种协议的技术差异及适用场景,并探讨了其在企业工作流自动化、医疗信息系统和软件工程中的应用。最后,文章强调了整合MCP与A2A构建协同AI系统架构的重要性,为未来AI技术生态系统的演进提供了方向。
1644 62
|
数据可视化 关系型数据库 MySQL
嵌入式C++、STM32、MySQL、GPS、InfluxDB和MQTT协议数据可视化
通过本文的介绍,我们详细讲解了如何结合嵌入式C++、STM32、MySQL、GPS、InfluxDB和MQTT协议,实现数据的采集、传输、存储和可视化。这种架构在物联网项目中非常常见,可以有效地处理和展示实时数据。希望本文能帮助您更好地理解和应用这些技术,构建高效、可靠的数据处理和可视化系统。
763 82
|
10月前
|
存储 SQL 关系型数据库
MySQL存储引擎简介
在选择相应的存储引擎时,需要充分考虑实际业务场景、性能需求和数据一致性要求,从而为数据管理提供最佳支持。
492 17
|
自然语言处理 JavaScript Java
《鸿蒙HarmonyOS应用开发从入门到精通(第2版)》学习笔记——HarmonyOS架构介绍
HarmonyOS采用分层架构设计,从下至上分为内核层、系统服务层、框架层和应用层。内核层支持多内核设计与硬件驱动;系统服务层提供核心能力和服务;框架层支持多语言开发;应用层包括系统及第三方应用,支持跨设备调度,确保一致的用户体验。
1265 81
|
9月前
|
关系型数据库 MySQL 网络安全
MySQL 深潜 - X-plugin的传输协议
文章详细解析了X protocol的认证方式(如PLAIN、MYSQL41等)、协议格式及连接建立过程,包括服务端初始化、任务调度、请求处理等关键步骤,并结合代码示例说明认证流程。
|
人工智能 前端开发 Java
DDD四层架构和MVC三层架构的个人理解和学习笔记
领域驱动设计(DDD)是一种以业务为核心的设计方法,与传统MVC架构不同,DDD将业务逻辑拆分为应用层和领域层,更关注业务领域而非数据库设计。其四层架构包括:Interface(接口层)、Application(应用层)、Domain(领域层)和Infrastructure(基础层)。各层职责分明,避免跨层调用,确保业务逻辑清晰。代码实现中,通过DTO、Entity、DO等对象的转换,结合ProtoBuf协议,完成请求与响应的处理流程。为提高复用性,实际项目中可增加Common层存放公共依赖。DDD强调从业务出发设计软件,适应复杂业务场景,是微服务架构的重要设计思想。
|
SQL 关系型数据库 MySQL
数据库数据恢复——MySQL简介和数据恢复案例
MySQL数据库数据恢复环境&故障: 本地服务器,安装的windows server操作系统。 操作系统上部署MySQL单实例,引擎类型为innodb,表空间类型为独立表空间。该MySQL数据库没有备份,未开启binlog。 人为误操作,在用Delete命令删除数据时未添加where子句进行筛选导致全表数据被删除,删除后未对该表进行任何操作。
|
自然语言处理 Java 关系型数据库
Java mysql根据很长的富文本如何自动获取简介
通过使用Jsoup解析富文本并提取纯文本,然后根据需要生成简介,可以有效地处理和展示长文本内容。该方法简单高效,适用于各种应用场景。希望本文对您在Java中处理富文本并生成简介的需求提供实用的指导和帮助。
273 9

热门文章

最新文章

推荐镜像

更多