MySQL通信协议阅读笔记()

传输协议会用到的数据类型:

  • 整型
int<fix>: fix-length整型,fix表示固定长度1,2,3,4,6,8个字节固定长度的数据表示的整型数据,可以理解为6种类型的整型,只是他们的长度不一样
int<lenenc>: length-encoded整型,这种类型的长度取决于整型值的大小:
    If the value is < 251, it is stored as a 1-byte integer.
    If the value is ≥ 251 and < (216), it is stored as fc + 2-byte integer.
    If the value is ≥ (216) and < (224), it is stored as fd + 3-byte integer.
    If the value is ≥ (224) and < (264) it is stored as fe + 8-byte integer.
    需要注意0xfe这个字符可能也是EOF_Packet,所以区分它是8字节整型还是EOF的方法是判断数据包的长度。

共7种整型数据类型

  • 字符串
string<fix>: 固定长度字符串,fix表示一个任意整数,数据包的描述中会写明此数字,表示这是一个固定长度为fix的字符串
string<NUL>: 非固定长度的以\0结尾的字符串
string<var>:非固定长度的字符串,它的长度在数据包的另外一个字段属性中
string<lenenc>:非固定长度的字符串,它的长度是以一个int<lenenc>数据存储在字符串前面
string<EOF>:如果一个字符串是数据包的最后一段数据,它的长度就是以数据包总长度减去前面所有字段长度总和剩下的长度

共5种字符串类型

MySQL数据包描述

数据包的长度是有限制的,如果数据包总长度过大,它会按照最大长度2^24-1字节(也就是16Mbytes)拆分为多个数据包
然后每个数据包都有一个包头,前3个字节表示payload部分长度,它是一个int<3>,第4个字节是一个sequence id,它在数据包被拆分发送时表示被拆分的顺序(从0开始递增)
int<3>: payload长度
int<1>: sequence id
string: payload

MySQL数据包的类型

OK包

它是一个从server端发到client端的表示命令执行成功的数据包

ERR包

EOF包

MySQL连接的生命周期

连接阶段

命令阶段

————————

传输协议会用到的数据类型:

  • 整型
int<fix>: fix-length整型,fix表示固定长度1,2,3,4,6,8个字节固定长度的数据表示的整型数据,可以理解为6种类型的整型,只是他们的长度不一样
int<lenenc>: length-encoded整型,这种类型的长度取决于整型值的大小:
    If the value is < 251, it is stored as a 1-byte integer.
    If the value is ≥ 251 and < (216), it is stored as fc + 2-byte integer.
    If the value is ≥ (216) and < (224), it is stored as fd + 3-byte integer.
    If the value is ≥ (224) and < (264) it is stored as fe + 8-byte integer.
    需要注意0xfe这个字符可能也是EOF_Packet,所以区分它是8字节整型还是EOF的方法是判断数据包的长度。

共7种整型数据类型

  • 字符串
string<fix>: 固定长度字符串,fix表示一个任意整数,数据包的描述中会写明此数字,表示这是一个固定长度为fix的字符串
string<NUL>: 非固定长度的以\0结尾的字符串
string<var>:非固定长度的字符串,它的长度在数据包的另外一个字段属性中
string<lenenc>:非固定长度的字符串,它的长度是以一个int<lenenc>数据存储在字符串前面
string<EOF>:如果一个字符串是数据包的最后一段数据,它的长度就是以数据包总长度减去前面所有字段长度总和剩下的长度

共5种字符串类型

MySQL数据包描述

数据包的长度是有限制的,如果数据包总长度过大,它会按照最大长度2^24-1字节(也就是16Mbytes)拆分为多个数据包
然后每个数据包都有一个包头,前3个字节表示payload部分长度,它是一个int<3>,第4个字节是一个sequence id,它在数据包被拆分发送时表示被拆分的顺序(从0开始递增)
int<3>: payload长度
int<1>: sequence id
string: payload

MySQL数据包的类型

OK包

它是一个从server端发到client端的表示命令执行成功的数据包

ERR包

EOF包

MySQL连接的生命周期

连接阶段

命令阶段