ECM
ECM
总版主
总版主
  • 社区居民
  • 忠实会员
  • 原创写手
阅读:1028亚博国际平台老虎机官网:0

一步一步编写mysql中间件(学习Cobar和MyCat)----第二篇--了解MySQL协议和分析方式

楼主#
更多 发布于:2015-12-31 15:55


1 ? ? ? ?第二篇

第一篇提到的server模块的第一步已经搞定,接下就要开始第二步了,和mysql客户端建立长连接,并进行交互。
这里不得不研究mysql的协议了。
首先上图看下mysql建立连接的数据包截图(使用工具Wireshark (GTK+)):
这里大概说一下截包分析方式哈。
第一步:用vmware搭建linux并安装mysql服务器,设定好ip,保证和本机能够ping通。这个百度搜一搜
第二步:打开工具Wireshark (GTK+)
添加ip过滤条件,选择本机和虚拟机服务器连接的网卡,然后启动截取。

图片:20141113105940408.jpg


进入界面:

图片:20141113105946617.jpg


然后用cmd客户端进行mysql连接:

图片:20141113105953200.jpg


TCP的包,我们不用太在意,这个是底层socket连接相关的数据包,我们重点关注MySQL的数据包即可。以上就是mysql协议数据包截取的方式。下面具体来分析mysql连接建立的过程,然后转化为代码需要实现的步骤。
Mysql协议连接交互过程:
1、三次tcp握手交互建立底层tcp连接,这个计算机网络里面都说过了。
2、数据包4:
上面三次tcp握手建立连接后,首先由服务器给客户端发握手包(HandshakePacket)
这个包主要是包含服务器的版本信息、编码信息、处理标识等信息。
具体的信息和包截图如下:

图片:20141113110001499.jpg


1、 数据包5
客户端接收到服务端的握手包之后,客户端会发送登录验证包给服务端(AuthPacket),因为连接服务器肯定需要用户名、密码进行校验,这些信息就在该包里面。
截图如下:

图片:20141113110025515.jpg


2、 数据包6:一个过渡的tcp包,不管哩。
3、 数据包7:
服务器接收到客户的登陆验证包之后,需要逻辑进行校验,该登录是否正确,用户名、密码、验证字符串等信息。如果信息都符合,则返回一个OKPacket,表示登录成功。
到此为止,整个mysql的连接就建立成功了。
数据包截图如下:

图片:20141113110031078.jpg


后面还有几个包:
4、 数据包8:
连接成功后,mysql客户端这边会默认查询一下mysql的版本信息的命令包(CommandPacket):
就是执行查询语句:
Select @@version_comment limit 1

图片:20141113110021670.jpg


5、 数据包9:
就是数据包8的查询返回的结果集包(ResultsetPacket),这个包相对来说比较复杂,后面再详细说说。

图片:20141113110044484.jpg




6、 数据包10是tcp包就忽略啦。


接下来就要准备代码实现建立连接啦,主要分成五个部分:
1、 在前端连接(serverconnection)中的regist()用AIO的write将HandshakePacket写给客户端。
2、 然后启动AIO的read,进行客户端包的接收,接收的第一个包是AuthPacket,需要对接收的二进制数据包进行解析,并校验登录信息。
3、 校验成功后返回OkPacket给客户端(AIOwrite)
4、 接收客户端会默认发送的查询命令:Select @@version_comment limit 1,需要编写相应的解析。
5、 对于查询返回结果,需要组成成结果集的包(ResultsetPacket),返回给客户端。


补个时序图:

图片:20141113110035086.jpg


后面一步步实现,工作量不小,具体包的处理方式主要参考Cobar和MyCat,详细的包的构造过程不再详细描述,有问题可以讨论,一个字段一个字段的整,木有那么多时间和篇幅,可以对照截包工具获取的数据包和项目里面的数据包类进行比较研究即可。
第二篇就到这里,从第三篇开始,一步步实现上面说的五个部分(里面涉及到AIO部分的读写不再详细说了,理解下其编程模型先用着)。

?

?

?

?

?

?

?

异常中心网是一家专门收集整理程序员编程过程中遇到的常见异常(exception)以及各种异常问答中心的网站。异常中心网旨在,减少程序员在编码遇到异常,处理各种异常时间和痛苦,让程序员能更愉快的、快速的定位异常并查找对应的异常解决方案。异常中心网诚心打造最完美的编程社区为程序员用户服务,努力成为最好的程序员乐园程序员社区程序异常中心程序bug中心异常问答中心

?

喜欢0 评分0
游客

返回顶部