MySQL协议分析.pdf

  1. 1、本文档共22页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
MySQL协议分析

MySQL协议分析 @hoterran 议程 协议头 协议类型 网络协议相关函数 NET缓冲 VIO缓冲 MySQL api 协议头 ● 数据变成在网络里传输的数据,需要额外的在头部添加4个 字节的包头. 1. packet length(3字节), 包体的长度 2. packet number(1字节), 从0开始的递增的,到了255又从0开始. ● sql “select 1” 的网络协议是? 协议头 ● packet length 三个字节意味着MySQL packet最大16M 大于16M则被分包(net_write_command, my_net_write) ● packet number 分包从0开始,依次递增. 每一次执行sql, packet_number清零(sql/net_serv.c:net_clear) 协议类型 ● handshake ● auth ● ok|error ● resultset ○ header ○ field ○ eof ○ row ● command packet 连接时的交互 协议说明 ● 协议内字段分三种形式 ○ 固定长度(include/my_global.h) ■ uint*korr 解包 ■ int*store 封包 ○ length coded binary(sql-common/pack.c) ■ net_field_length 解包 ■ net_store_length 封包 ○ null-terminated string ● length coded binary 避免binary unsafe string, 字符串的长度保存在字符串的前面 ■ length251 1 byte ■ length 256^2 3 byte(第一个byte是252) ■ length256^3 4byte(第一个byte是253) ■ else 9byte(第一个byte是254) handshake packet ● 该协议 由服务端发送客户端 ● 括号内为字节数,字节数为n为 是null-terminated string;字节数 为大写的N表示length code binary. ● salt就是scramble.分成两个部 分是为了兼容4.1版本 ● sql_connect.cc:check_connection ● sql_client.c:mysql_real_connect auth packet ● 该协议是从客户端对密码使用 scramble加密后发送到服务端 ● 其中databasename是可选的. salt就是加密后的密码. ● sql_client.c:mysql_real_connect ● sql_connect.c:check_connection ok packet ● ok包,命令和insert,update, delete的返回结果 ● 包体首字节为0. ● insert_id, affect_rows也是 一并发过来. ● src/protocol.cc:net_send_ok error packet ● 错误的命令,非法的sql的返回包 ● 包体首字节为255. ● error code就是CR_***,include/errmsg.h ● sqlstate marker是# ● sqlstate是错误状态,include/sql_state.h

文档评论(0)

dajuhyy + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档