2.3.1 C/S通信协议
MySQL客户端与服务器的通信协议(Client/Server Protocol)是一套基于TCP/IP的自定义二进制协议,它定义了请求与响应的数据格式、交互顺序和安全规则。它就像一个严格的语法体系,规定了从连接建立到每一条SQL指令执行的全过程。
📦 数据包 (Packet) 结构
所有的通信都由一个个数据包(Packet)构成,其基本结构如下:
| 组成部分 | 长度 (字节) | 描述 |
|---|---|---|
| 消息头 (Header) | 4 | 有效载荷长度 (Payload Length):3字节,小端序,表示消息体长度,因此单个包有效载荷最大为 16MB (2^24-1 字节)。若数据超过此大小,会被拆分为多个包;若等于上限,会额外发送一个空包作为结束标记。 序列号 (Sequence ID):1字节,从0开始递增。重要:每次开始一个新的命令阶段,序列号会重置为0,用于保证交互顺序和错误检测。 |
| 消息体 (Payload) | 可变 | 承载实际的交互数据,如SQL语句、结果集、错误信息等。 |
🔄 协议交互流程
MySQL协议是有状态的 (stateful),一次完整的连接生命周期包含以下几个明确的阶段。
