Mysql协议(一) 编解码
一、概念简介
1、大端序列与小端序列
理解mysql协议一个很重要的内容就是理解大小端,mysql通信协议使用小端序列进行传输。
小端法:低位字节排放在内存的低地址端即该值的起始地址,高位字节排放在内存的高地址端,通俗的讲,小端法,接收方先接收到整数的低位部分
大端法:高位字节排放在内存的低地址端即该值的起始地址,低位字节排放在内存的高地址端,通俗的讲,大端法,接收方先接收到整数的高位部分
2、mysql客户端和服务器通信过程
(1)客户端首先向服务器发起TCP连接,TCP经过三次握手协议后,建立可靠的传输通道
(2)成功建立TCP连接之后,首先由Mysql服务器发送一个握手包,包含协议版本号,服务器版本号,服务器授权认证信息,服务器权能标识等等信息
(3)客户端收到握手包后向服务端发送登录验证报文,主要包括用户名,数据库名,密码等信息
(4)服务器收到登录验证包后向客户端发送认证结果报文(OK Package或Error Package)
举例如下:

ByteBuffer buffer = ByteBuffer.allocate(100);
//mysql通信协议使用小端序列,因此将整数的低位字节放在内存的低地址端即该值的起始地址
buffer.put((byte)13);
buffer.put((byte)(13 >> 8));
buffer.put((byte)(13 >> 16));
buffer.put((byte)(13 >> 24));
buffer.flip();
//mysql通信协议接收方先收到整数的低位部分
byte b1 = buffer.get();
byte b2 = buffer.get();
byte b3 = buffer.get();
byte b4 = buffer.get();
//int使用大端序列
int result = (b4 & 0xFF) << 24 | (b3 & 0xFF) << 16 | (b2 & 0xFF) << 8 | (b1 & 0xFF);
二、mysql客户端原理与实现
1、封装ByteBuffer,暴露一些常用API,用于解析mysql数据包

浙公网安备 33010602011771号