作家
登录

关于MySQL的网络协议分析

作者: 来源: 2017-12-01 15:40:19 阅读 我要评论

上表就是全部Handshake packet的┞封个包构造,属性的含义以及规范都有响应的解释,下面是我本机解析的某次连接数据库的Handshake packet包,仅供参考:

  1. {protocolVersion=10, serverVersion='5.7.13', threadId=4055, scramble=[49, 97, 80, 3, 35, 118, 45, 15, 5, 118, 9, 11, 124, 93, 93, 5, 31, 47, 111, 109, 0, 0, 0, 0, 0], serverCapabilities=65535, serverLanguage=33, serverStatus=2} 

Auth packet

Auth packet是由Client向Server发送的认证包,用于验证数据库账户登录,响应内容的格局:

相对包内容的地位 长度(字节) 名称 描述 0 4 协定协商 用于与办事端协商筒?方法 4 4 消息最长长度 客户端可以发送或接收的最长长度,0表示不做任何限制 8 1 字符编码 客服端字符编码方法 9 23 保存字节 将来可能会用到,预留字节,用0代替
  1. 32 |不定| 认证字符串 | 重要有三部分内容<br> <li>用户名:NullTerminatedString格局编码</li><li>加密后的暗码:LengthEncodedString格局编码</li><li>数据库名称(可选):NullTerminatedString格局编码</li> 

顾名思义Error 包就是当出现缺点的时刻返回的信息,比如账户验证不经由过程,萌芽敕令不合法,非空字段未指定值等相干操作,Server端都邑向Client端发送Error 包。

这部分内容是由客户端本身生成,所以说如不雅我们如不雅要写一个法度榜样连接数据库,那么这个包就得按照这个格局,不然办事端将会无法辨认。

敕令履行阶段

Integer(整型)

在我们精确连接数据库后,我们就要履行响应的敕令了,比如切换数据库,履行CRUD操作等,这个阶段重要分为两步,Client发送敕令(上文已经给出,下面不再评论辩论),Server端接收敕令履行响应的操作,我们重要关怀Server端向我们发送数据包,可分为4类和一个最基本的报文构造Data Field:

  • Data Field:包数据的一个基本构造;
  • OK包(包含PREPARE_OK):Server端发送精确处理信息的包,包头标识为0x00;
  • Error包: Server端发送缺点信息的包,包头标识为0xFF;
  • EOF包:用于Server向Client发送停止包,包头标识为0xFE;
  • Result Set包:用于Server向Client发送的萌芽结不雅包; 

Data Field

Data Field是Server回应包里的一个核心,主如果数据的一种编码构造,跟我之前讲的LengthEncodedInteger和LengthEncodedString很类似,也重要分为三个部分

最小数据长度(包含) 最大年夜数据长度(不包含) 数据长度 格局 1 251 1个字节 1字节 + 具体数据 251 2^16 2个字节 0xFC + 2个字节数据长度 + 具体数据 2^16 2^24 4个字节 0xFD + 4个字节数据长度 + 具体数据 2^24 2^64 8个字节 0xFE + 8个字节数据长度 + 具体数据 NULL NULL 0个字节 0xFB

要留意的一点是如不雅出现0xFB(251)开首解释这个数据对应的是MySQL中的NULL。

OK 包

通俗的OK包(PREPARE_OK包后面会讲到)会在以下几种情况下产生,由Server发送给响应的接收方:

  • COM_PING: 连接或者测试数据库
  • COM_QUERY: 不须要萌芽结不雅集的操作,比如INSERT, UPDATE, or ALTER TABLE
  • COM_REFRESH: 数据刷新
  • COM_REGISTER_SLAVE: 注册大年夜办事器 

OK 包的重要构造:

相对包内容的地位 长度(字节) 名称 描述 0 1 包头标识 0x00 代表这是一个OK 包 1 rows_len 影响行数 响应操作影响的行数,比如一个Update操作的记录是5条,那么这个值就为5 1 + rows_len id_len 自增id 插入一笔记录时,如不蚜?鲈增id的话,返回的id值 1 + rows_len + id_len 2 办事器状况 用于表示办事器状况,比如是否是事务模式或者主动提交模式 3 + rows_len + id_len 2 警告数 前次敕令引起的警告数 5 + rows_len + id_len msg_len 额外信息 此次操作的一些额外信息

下面是我本机解析的某次精确连接数据库后的OK packet包,仅供参考:

  1. OK{affectedRows=0, insertId=0, serverStatus=2, message=

      推荐阅读

      CentOS 7中安装Mysql 5.7的注意事项

    CTO练习营 | 12月3-5日,深圳,是时刻成为优良的技巧治理者了alter user user() identified by 'admin'; 这几天因为做项目须要,要应用MySQL数据库,应用的是MySQL Community Server 5.7.>>>详细阅读


    本文标题:关于MySQL的网络协议分析

    地址:http://www.17bianji.com/lsqh/39379.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)