正常情况下,连接上某个数据库的3306端口之后,服务器主动发送一个greeting packet.
如图所示:
具体解释如下:
前3个字符为当前报文总长度,小端排序,3个字节
第4个字节为sequence.
因为前面3个字节算出来的长度为78,加上之前的4个字节,所以总长82字节。
正如TCP层所示:82字节。
===至于后面具体解析的内容,可以参考代码:
public GreetingPacket(byte[] bytes) throws IOException {
ByteArrayInputStream buffer = new ByteArrayInputStream(bytes);
this.protocolVersion = buffer.readInteger(1);
this.serverVersion = buffer.readZeroTerminatedString();
this.threadId = buffer.readLong(4);
String scramblePrefix = buffer.readZeroTerminatedString();
this.serverCapabilities = buffer.readInteger(2);
this.serverCollation = buffer.readInteger(1);
this.serverStatus = buffer.readInteger(2);
buffer.skip(13); // reserved
this.scramble = scramblePrefix + buffer.readZeroTerminatedString();
if (buffer.available() > 0) {
this.pluginProvidedData = buffer.readZeroTerminatedString();
}
}
这个很简单,就不解释了。