前言:通过两个月的暑假准备秋招,9月正式开始投简历,终于在10月初敲定单位,进部门后首先学习的就是mysql的底层协议,然后就把实习的内容做一个笔记方便复习,也算是对成长的记录。

 

 

MySQL协议用于MySQL客户端和服务器直接通信

主要有以下几个实现方式:

1.连接器   

2.MySQL代理

3.主从复制服务器的通信

协议支持以下功能

SSL透明加密

compression透明压缩

连接阶段,能力和认证数据交换

命令阶段的预处理语句、存储过程的一些基础协议

 

1.基本数据类型(协议中的数据类型有些不同于c)

1.1整型

  1.1.1固定长度整型:值(value)被储存在低位第一个字节中

  例如 int<3>=1   :  01 00 00  ,侧面说明使用小端字节传输

  1.1.2长度编码整型  Length-Encoded Integer Type: 由首位数字的值,决定占用1   3   4 或者9位。

1、如果首字节小于251;那么首字节就是它要表示的数值。

2、如果首字节等于251;那么它表示的就是空值。

3、如果首字节等于252;那么首字节后的2个字节用来表示数值大小。

4、如果首字节等于253;那么首字节后的3个字节用来表示数值的大小。

5、如果首字节等于254;那么首字节后的8个字节用来表示数亿的大小。

例子:

fa - 250 
fc fb 00 - 251

1.2字符型

  string<fix>    固定长度的字符串具有已知的硬编码长度。

  string<NUL> 以 [00] 字节结尾的字符串。

     string<var>   字符串的长度由另一个字段决定或在运行时计算

  string<lenenc> 长度编码字符串是以描述字符串长度的长度编码整数作为前缀 的字符串。

  string<EOF> 如果字符串是数据包的最后一个组成部分,则其长度可以通过数据包总长度减去当前位置来计算。

1.3描述性数据包 Describing Packets

定义每个数据包payload并提供 example显示每个发送的数据包来描述每个数据