溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Mysql通訊協(xié)議的示例分析

發(fā)布時(shí)間:2021-07-29 13:54:24 來源:億速云 閱讀:142 作者:小新 欄目:MySQL數(shù)據(jù)庫

小編給大家分享一下Mysql通訊協(xié)議的示例分析,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

1.Mysql的連接方式

要了解Mysql的通訊協(xié)議,首先需要知道是以哪種連接方式去連接Mysql服務(wù)器的;Mysql的主要連接方式包括:Unix套接字,內(nèi)存共享,命名管道,TCP/IP套接字等。

1.1Unix套接字

在Linux和Unix環(huán)境下,可以使用Unix套接字進(jìn)行Mysql服務(wù)器的連接;Unix套接字其實(shí)不是一個(gè)網(wǎng)絡(luò)協(xié)議,只能在客戶端和Mysql服務(wù)器在同一臺(tái)電腦上才可以使用,使用方式也很簡單:

root@root ~]# mysql -uroot -proot
mysql> show variables like 'socket';
+---------------+---------------------------+
| Variable_name | Value      |
+---------------+---------------------------+
| socket  | /var/lib/mysql/mysql.sock |
+---------------+---------------------------+
1 row in set (0.00 sec)

以上命令查詢Unix套接字文件的位置;

1.2命名管道和內(nèi)存共享

在window系統(tǒng)中客戶端和Mysql服務(wù)器在同一臺(tái)電腦上,可以使用命名管道和共享內(nèi)存的方式,

命名管道開啟:–shared-memory=on/off;

共享內(nèi)存開啟:–enable-named-pipe=on/off;

1.3TCP/IP套接字

在任何系統(tǒng)下都可以使用的方式,也是使用最多的連接方式,本文要介紹的通訊協(xié)議也是基于此連接方式的,下面通過tcpdump對(duì)TCP/IP套接字有一個(gè)初步的了解:

服務(wù)器端:

[root@root ~]# tcpdump port 3306
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on venet0, link-type LINUX_SLL (Linux cooked), capture size 65535 bytes

服務(wù)器端監(jiān)聽3306端口(也就是Mysql的端口);

客戶端:

C:\Users\hui.zhao>mysql -h74.xxx.xxx.xxx -uroot -proot
mysql> exit
Bye

客戶端連接服務(wù)器,然后斷開連接,這時(shí)候觀察服務(wù)器的監(jiān)聽結(jié)果日志:

[root@root ~]# tcpdump port 3306
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on venet0, link-type LINUX_SLL (Linux cooked), capture size 65535 bytes
02:06:25.442472 IP 153.3.251.202.33876 > root.mysql: Flags [S], seq 27289263, win 8192, options [mss 1460,nop,wscale 8,nop,nop,sackOK], length 0
02:06:25.442763 IP root.mysql > 153.3.251.202.33876: Flags [S.], seq 2014324548, ack 27289264, win 14600, options [mss 1460,nop,nop,sackOK,nop,wscale 7], length 0
02:06:25.617449 IP 153.3.251.202.33876 > root.mysql: Flags [.], ack 1, win 256, length 0
02:06:29.812946 IP root.mysql > 153.3.251.202.33876: Flags [P.], seq 1:57, ack 1, win 115, length 56
02:06:29.992362 IP 153.3.251.202.33876 > root.mysql: Flags [P.], seq 1:63, ack 57, win 256, length 62
02:06:29.992411 IP root.mysql > 153.3.251.202.33876: Flags [.], ack 63, win 115, length 0
02:06:29.992474 IP root.mysql > 153.3.251.202.33876: Flags [P.], seq 57:68, ack 63, win 115, length 11
02:06:30.166992 IP 153.3.251.202.33876 > root.mysql: Flags [P.], seq 63:100, ack 68, win 256, length 37
02:06:30.167109 IP root.mysql > 153.3.251.202.33876: Flags [P.], seq 68:158, ack 100, win 115, length 90
02:06:30.536298 IP 153.3.251.202.33876 > root.mysql: Flags [.], ack 158, win 256, length 0
02:06:34.568611 IP 153.3.251.202.33876 > root.mysql: Flags [P.], seq 100:105, ack 158, win 256, length 5
02:06:34.568620 IP 153.3.251.202.33876 > root.mysql: Flags [F.], seq 105, ack 158, win 256, length 0
02:06:34.568751 IP root.mysql > 153.3.251.202.33876: Flags [F.], seq 158, ack 106, win 115, length 0
02:06:34.743815 IP 153.3.251.202.33876 > root.mysql: Flags [.], ack 159, win 256, length 0

[S]:SYN發(fā)起連接標(biāo)志,[P]:PUSH傳送數(shù)據(jù)標(biāo)志,[F]:FIN關(guān)閉連接標(biāo)志,[.]:表示確認(rèn)包;

可以大致看出流程:建立tcp連接,客戶端和Mysql服務(wù)器建立連接通訊,關(guān)閉tcp連接;

[S][S.][.]這幾個(gè)數(shù)據(jù)包表示tcp連接的三次握手;

[F.][F.][.]這幾個(gè)數(shù)據(jù)包表示tcp連接的四次揮手;

中間的多個(gè)[P.][.]其實(shí)就是客戶端和Mysql服務(wù)器建立連接發(fā)送的協(xié)議數(shù)據(jù)包。

2.協(xié)議分析

Mysql協(xié)議被用在Mysql Clients和Mysql Server通訊的時(shí)候,具體有以下幾個(gè)場景:客戶端和服務(wù)器進(jìn)行連接,Mysql代理以及主從備份;

MySQL客戶端與服務(wù)器的交互主要分為兩個(gè)階段:Connection Phase(連接階段或者叫認(rèn)證階段)和Command Phase(命令階段);

結(jié)合tcpdump的輸出,客戶端和服務(wù)器端通訊的整個(gè)流程大致如下:

1.建立tcp連接三次握手;
2.與Mysql服務(wù)器建立連接,即Connection Phase(連接階段或者叫認(rèn)證階段);
 s->c:發(fā)送握手初始化包(a Initial Handshake Packet)
 c->s:發(fā)送驗(yàn)證包(authentication response)
 s->c:服務(wù)器發(fā)送認(rèn)證結(jié)果包
3.認(rèn)證通過之后,服務(wù)器端接受客戶端的命令包,發(fā)送相應(yīng)的響應(yīng)包,即Command Phase(命令階段);
4.斷開連接請(qǐng)求exit命令;
5.四次揮手tcp斷開連接;

2.1基本類型

在整個(gè)協(xié)議中的基本類型:整數(shù)型和字符串型;

2.1.1整數(shù)型

分為兩種類型Fixed-Length Integer Types和Length-Encoded Integer Type;

Fixed-Length Integer Types:

一個(gè)固定長度的無符號(hào)整數(shù)將其值存儲(chǔ)在一系列字節(jié)中,具體固定字節(jié)數(shù)可以是:1,2,3,4,6,8;

Length-Encoded Integer Type:

存儲(chǔ)需要的字節(jié)數(shù)取決于數(shù)值的大小,具體可參照如下:

1個(gè)字節(jié):0<=X<251;

2個(gè)字節(jié):251<=X<2^16;

3個(gè)字節(jié):2^16<=X<2^24;

9個(gè)字節(jié):2^24<=X<2^64;

2.1.2字符串型

分為5種類型包括,F(xiàn)ixedLengthString,NullTerminatedString,VariableLengthString,LengthEncodedString和RestOfPacketString;

FixedLengthString:固定長度的字符串具有已知的硬編碼長度,一個(gè)例子是ERR_Packet的SQL狀態(tài),它總是5個(gè)字節(jié)長;
NullTerminatedString:以遇到Null(字節(jié)為00)結(jié)束的字符串;

VariableLengthString:可變字符串,字符串的長度由另一個(gè)字段決定或在運(yùn)行時(shí)計(jì)算,比如int+value,int為長度,value為指定長度的字節(jié)數(shù);

LengthEncodedString:以描述字符串長度的長度編碼的整數(shù)作為前綴的字符串,是VariableLengthString指定的int+value方式;

RestOfPacketString:如果一個(gè)字符串是數(shù)據(jù)包的最后一個(gè)組件,它的長度可以從整個(gè)數(shù)據(jù)包長度減去當(dāng)前位置來計(jì)算;

2.2基本數(shù)據(jù)包

如果MySQL客戶端或服務(wù)器想要發(fā)送數(shù)據(jù),則:

每個(gè)數(shù)據(jù)包大小不能超過2^24字節(jié)(16MB);

在每個(gè)數(shù)據(jù)塊前面加上一個(gè)數(shù)據(jù)包頭;

包格式如下:

int<3>:具體包內(nèi)容的長度;除去int<3>+int<1>=4字節(jié)長度;
int<1>:sequence_id隨每個(gè)數(shù)據(jù)包遞增,并可能環(huán)繞。 它從0開始,在命令階段開始一個(gè)新的命令時(shí)重置為0;
string<var>:具體數(shù)據(jù)內(nèi)容,也是int<3>指定的長度;

例如:

01 00 00對(duì)應(yīng)int表示具體數(shù)據(jù)內(nèi)容的長度為1個(gè)字節(jié);

00對(duì)應(yīng)int表示sequence_id;

01對(duì)應(yīng)string前面指定的數(shù)據(jù)內(nèi)容為1個(gè)字節(jié)。

2.3報(bào)文類型

可以分成三個(gè)大類:登錄認(rèn)證報(bào)文,客戶端請(qǐng)求報(bào)文以及服務(wù)器端返回報(bào),基于mysql5.1.73(mysql4.1以后的版本)

2.3.1登錄認(rèn)證報(bào)文

主要在交互的認(rèn)證階段,由上文中可以知道一共分為三個(gè)階段:Handshake Packet,authentication response以及結(jié)果包,這里主要分析前兩個(gè)包;

2.3.1.1 Handshake Packet

1字節(jié):協(xié)議版本號(hào)
NullTerminatedString:數(shù)據(jù)庫版本信息
4字節(jié):連接MySQL Server啟動(dòng)的線程ID
8字節(jié):挑戰(zhàn)隨機(jī)數(shù),用于數(shù)據(jù)庫認(rèn)證
1字節(jié):填充值(0x00)
2字節(jié):用于與客戶端協(xié)商通訊方式
1字節(jié):數(shù)據(jù)庫的編碼
2字節(jié):服務(wù)器狀態(tài)
13字節(jié):預(yù)留字節(jié)
12字節(jié):挑戰(zhàn)隨機(jī)數(shù),用于數(shù)據(jù)庫認(rèn)證
1字節(jié):填充值(0x00)

使用tcpdump進(jìn)行監(jiān)聽,輸出十六進(jìn)制日志如下:

[root@root ~]# tcpdump port 3306 -X
......
03:20:34.299521 IP root.mysql > 153.3.251.202.44658: Flags [P.], seq 1:57, ack 1, win 115, length 56
 0x0000: 4508 0060 09f1 4000 4006 c666 43da 9190 E..`..@.@..fC...
 0x0010: 9903 fbca 0cea ae72 bb4e 25ba 21e7 27e3 .......r.N%.!.'.
 0x0020: 5018 0073 b1e0 0000 3400 0000 0a35 2e31 P..s....4....5.1
 0x0030: 2e37 3300 4024 0000 5157 4222 252f 5f6f .73.@$..QWB"%/_o
 0x0040: 00ff f708 0200 0000 0000 0000 0000 0000 ................
 0x0050: 0000 0032 4a5d 7553 7e45 784f 627e 7400 ...2J]uS~ExOb~t.

包的總長度是56,減去int<3>+int<1>4字節(jié)=52字節(jié),對(duì)應(yīng)的十六進(jìn)制就是34;int<3>十六進(jìn)制為3400 00表示包內(nèi)容長度,int<1>十六進(jìn)制為00表示sequence_id;后續(xù)的內(nèi)容就是包體內(nèi)容共52字節(jié),0a對(duì)應(yīng)的十進(jìn)制是10,所有協(xié)議號(hào)版本是10;后續(xù)的數(shù)據(jù)庫版本信息遇到00結(jié)束,35 2e31 2e37 33對(duì)應(yīng)的5.1.73,正是當(dāng)前使用的數(shù)據(jù)庫版本;4024 0000對(duì)應(yīng)十進(jìn)制是6436;08表示數(shù)據(jù)庫的編碼;0200表示服務(wù)器狀態(tài);后續(xù)的13對(duì)00為預(yù)留字節(jié);最后的13個(gè)字節(jié)是挑戰(zhàn)隨機(jī)數(shù)和填充值。

2.3.1.2 Authentication Packet

4字節(jié):用于與客戶端協(xié)商通訊方式
4字節(jié):客戶端發(fā)送請(qǐng)求報(bào)文時(shí)所支持的最大消息長度值
1字節(jié):標(biāo)識(shí)通訊過程中使用的字符編碼
23字節(jié):保留字節(jié)
NullTerminatedString:用戶名
LengthEncodedString:加密后的密碼
NullTerminatedString:數(shù)據(jù)庫名稱(可選)

使用tcpdump進(jìn)行監(jiān)聽,輸出十六進(jìn)制日志如下:

03:20:34.587416 IP 153.3.251.202.44658 > root.mysql: Flags [P.], seq 1:63, ack 57, win 256, length 62
 0x0000: 4500 0066 29ee 4000 7006 766b 9903 fbca E..f).@.p.vk....
 0x0010: 43da 9190 ae72 0cea 21e7 27e3 bb4e 25f2 C....r..!.'..N%.
 0x0020: 5018 0100 d8d2 0000 3a00 0001 85a6 0f00 P.......:.......
 0x0030: 0000 0001 2100 0000 0000 0000 0000 0000 ....!...........
 0x0040: 0000 0000 0000 0000 0000 0000 726f 6f74 ............root
 0x0050: 0014 ff58 4bd2 7946 91a0 a233 f2c1 28af ...XK.yF...3..(.
 0x0060: d578 0762 c2e8       .x.b..

包的總長度是62,減去int<3>+int<1>4字節(jié)=58字節(jié),對(duì)應(yīng)的十六進(jìn)制就是3a;int<3>十六進(jìn)制為3a00 00表示包內(nèi)容長度;int<1>十六進(jìn)制為01表示sequence_id;726f 6f74 00是用戶名解碼后是root;后面是加密后的密碼類型是

LengthEncodedString,14對(duì)應(yīng)的十進(jìn)制是20,后面20個(gè)字節(jié)就是加密后的密碼;可選的數(shù)據(jù)庫名稱不存在。

2.4客戶端請(qǐng)求報(bào)文

int<1>:執(zhí)行的命令,比如切換數(shù)據(jù)庫
string<var>:命令相應(yīng)的參數(shù)

命令列表:

0x00 COM_SLEEP (內(nèi)部線程狀態(tài))
0x01 COM_QUIT 關(guān)閉連接
0x02 COM_INIT_DB 切換數(shù)據(jù)庫
0x03 COM_QUERY SQL查詢請(qǐng)求
0x04 COM_FIELD_LIST 獲取數(shù)據(jù)表字段信息
0x05 COM_CREATE_DB 創(chuàng)建數(shù)據(jù)庫
0x06 COM_DROP_DB 刪除數(shù)據(jù)庫
0x07 COM_REFRESH 清除緩存
0x08 COM_SHUTDOWN 停止服務(wù)器
0x09 COM_STATISTICS 獲取服務(wù)器統(tǒng)計(jì)信息
0x0A COM_PROCESS_INFO 獲取當(dāng)前連接的列表
0x0B COM_CONNECT (內(nèi)部線程狀態(tài))
0x0C COM_PROCESS_KILL 中斷某個(gè)連接
0x0D COM_DEBUG 保存服務(wù)器調(diào)試信息
0x0E COM_PING 測試連通性
0x0F COM_TIME (內(nèi)部線程狀態(tài))
0x10 COM_DELAYED_INSERT (內(nèi)部線程狀態(tài))
0x11 COM_CHANGE_USER 重新登陸(不斷連接)
0x12 COM_BINLOG_DUMP 獲取二進(jìn)制日志信息
0x13 COM_TABLE_DUMP 獲取數(shù)據(jù)表結(jié)構(gòu)信息
0x14 COM_CONNECT_OUT (內(nèi)部線程狀態(tài))
0x15 COM_REGISTER_SLAVE 從服務(wù)器向主服務(wù)器進(jìn)行注冊(cè)
0x16 COM_STMT_PREPARE 預(yù)處理SQL語句
0x17 COM_STMT_EXECUTE 執(zhí)行預(yù)處理語句
0x18 COM_STMT_SEND_LONG_DATA 發(fā)送BLOB類型的數(shù)據(jù)
0x19 COM_STMT_CLOSE 銷毀預(yù)處理語句
0x1A COM_STMT_RESET 清除預(yù)處理語句參數(shù)緩存
0x1B COM_SET_OPTION 設(shè)置語句選項(xiàng)
0x1C COM_STMT_FETCH 獲取預(yù)處理語句的執(zhí)行結(jié)果

比如:use test;使用tcpdump進(jìn)行監(jiān)聽,輸出十六進(jìn)制日志如下:

22:04:29.379165 IP 153.3.251.202.33826 > root.mysql: Flags [P.], seq 122:131, ack 222, win 64019, length 9
 0x0000: 4500 0031 3f19 4000 7006 6175 9903 fbca E..1?.@.p.au....
 0x0010: 43da 9190 8422 0cea 42e2 524b 7e18 25c1 C...."..B.RK~.%.
 0x0020: 5018 fa13 a07b 0000 0500 0000 0274 6573 P....{.......tes
 0x0030: 74

包的總長度是9,減去int<3>+int<1>4字節(jié)=5字節(jié),對(duì)應(yīng)的十六進(jìn)制就是05;int<3>十六進(jìn)制為0500 00表示包內(nèi)容長度;int<1>十六進(jìn)制為00表示sequence_id;02對(duì)應(yīng)COM_INIT_DB,后面是test的二進(jìn)制編碼;

2.5服務(wù)器響應(yīng)報(bào)文

對(duì)于客戶端發(fā)送給服務(wù)器的大多數(shù)命令,服務(wù)器返回其中一個(gè)響應(yīng)的數(shù)據(jù)包:OK_Packet,ERR_Packet和EOF_Packet,Result Set;

2.5.1OK_Packet

表示成功完成一個(gè)命令,具體格式如下:

int<1>:0x00或0xFEOK包頭
int<lenenc>:受影響行數(shù)
int<lenenc>:最后插入的索引ID
int<2>:服務(wù)器狀態(tài)
int<2>:告警計(jì)數(shù) 注:MySQL 4.1 及之后的版本才有
string<lenenc>:服務(wù)器消息(可選)

use test;服務(wù)器返回的包,使用tcpdump進(jìn)行監(jiān)聽,輸出十六進(jìn)制日志如下:

22:04:29.379308 IP root.mysql > 153.3.251.202.33826: Flags [P.], seq 222:233, ack 131, win 14600, length 11
 0x0000: 4508 0033 4a0a 4000 4006 867a 43da 9190 E..3J.@.@..zC...
 0x0010: 9903 fbca 0cea 8422 7e18 25c1 42e2 5254 ......."~.%.B.RT
 0x0020: 5018 3908 3b61 0000 0700 0001 0000 0002 P.9.;a..........
 0x0030: 0000 00

包的總長度是11,減去int<3>+int<1>4字節(jié)=7字節(jié),對(duì)應(yīng)的十六進(jìn)制就是07;int<3>十六進(jìn)制為0700 00表示包內(nèi)容長度;int<1>十六進(jìn)制為01表示sequence_id;00表示包頭;00表示受影響行數(shù);00表示最后插入的索引ID;0200表示服務(wù)器狀態(tài);

2.5.2ERR_Packet

表示發(fā)生了錯(cuò)誤,具體格式如下:

int<1>:0xFF ERR包頭
int<2>:錯(cuò)誤碼
string[1]:Sql狀態(tài)標(biāo)識(shí) 注:MySQL 4.1 及之后的版本才有
string[5]:Sql狀態(tài)  注:MySQL 4.1 及之后的版本才有
string<EOF>:錯(cuò)誤消息

2.5.3EOF_Packet

以標(biāo)記查詢執(zhí)行結(jié)果的結(jié)束:

int<1>:EOF值(0xFE)
int<2>:告警計(jì)數(shù) 注:MySQL 4.1 及之后的版本才有
int<2>:狀態(tài)標(biāo)志位 注:MySQL 4.1 及之后的版本才有

2.5.4Result Set

當(dāng)客戶端發(fā)送查詢請(qǐng)求后,在沒有錯(cuò)誤的情況下,服務(wù)器會(huì)返回結(jié)果集(Result Set)給客戶端,一共有5個(gè)部分:

Result Set Header  返回?cái)?shù)據(jù)的列數(shù)量
Field     返回?cái)?shù)據(jù)的列信息(多個(gè))
EOF      列結(jié)束
Row Data    行數(shù)據(jù)(多個(gè))
EOF      數(shù)據(jù)結(jié)束

2.5.4.1Result Set Header

Length-Encoded Integer Field結(jié)構(gòu)的數(shù)量
Length-Encoded Integer 額外信息

2.5.4.2Field

LengthEncodedString  目錄名稱
LengthEncodedString  數(shù)據(jù)庫名稱
LengthEncodedString  數(shù)據(jù)表名稱
LengthEncodedString  數(shù)據(jù)表原始名稱
LengthEncodedString  列(字段)名稱
LengthEncodedString  列(字段)原始名稱
int<1>     填充值
int<2>     字符編碼
int<4>     列(字段)長度
int<1>     列(字段)類型
int<2>     列(字段)標(biāo)志
int<1>     整型值精度
int<2>     填充值(0x00)
LengthEncodedString  默認(rèn)值

2.5.4.3EOF

參考2.5.3EOF_Packet

2.5.4.4Row Data

LengthEncodedString  字段值
......     多個(gè)字段值

實(shí)例分析,表信息如下:

CREATE TABLE `btest` (
 `id` bigint(20) NOT NULL AUTO_INCREMENT,
 `age` int(11) DEFAULT NULL,
 `name` varchar(255) DEFAULT NULL,
 PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1000 DEFAULT CHARSET=utf8

select * from btest;服務(wù)器返回的數(shù)據(jù)如下:

mysql> select * from btest;
+----+------+---------+
| id | age | name |
+----+------+---------+
| 1 | 10 | zhaohui |
| 2 | 11 | zhaohui |
+----+------+---------+

服務(wù)器返回的包,使用tcpdump進(jìn)行監(jiān)聽,輸出十六進(jìn)制日志如下:

01:54:21.522660 IP root.mysql > 153.3.251.202.58587: Flags [P.], seq 1:196, ack 24, win 115, length 195
 0x0000: 4508 00eb 8839 4000 4006 4793 43da 9190 E....9@.@.G.C...
 0x0010: 9903 fbca 0cea e4db 9dd8 0216 eda6 f730 ...............0
 0x0020: 5018 0073 ca34 0000 0100 0001 0328 0000 P..s.4.......(..
 0x0030: 0203 6465 6604 7465 7374 0562 7465 7374 ..def.test.btest
 0x0040: 0562 7465 7374 0269 6402 6964 0c3f 0014 .btest.id.id.?..
 0x0050: 0000 0008 0342 0000 002a 0000 0303 6465 .....B...*....de
 0x0060: 6604 7465 7374 0562 7465 7374 0562 7465 f.test.btest.bte
 0x0070: 7374 0361 6765 0361 6765 0c3f 000b 0000 st.age.age.?....
 0x0080: 0003 0000 0000 002c 0000 0403 6465 6604 .......,....def.
 0x0090: 7465 7374 0562 7465 7374 0562 7465 7374 test.btest.btest
 0x00a0: 046e 616d 6504 6e61 6d65 0c21 00fd 0200 .name.name.!....
 0x00b0: 00fd 0000 0000 0005 0000 05fe 0000 2200 ..............".
 0x00c0: 0d00 0006 0131 0231 3007 7a68 616f 6875 .....1.10.zhaohu
 0x00d0: 690d 0000 0701 3202 3131 077a 6861 6f68 i.....2.11.zhaoh
 0x00e0: 7569 0500 0008 fe00 0022 00    ui.......".

0328 0000 02對(duì)應(yīng)的是Result Set Header,03表示3個(gè)字段;03 6465 66對(duì)應(yīng)的是目錄名稱的默認(rèn)值def,03表示后面的字節(jié)數(shù)為3;04 7465 7374

對(duì)應(yīng)的是數(shù)據(jù)庫名稱test;0562 7465 7374對(duì)應(yīng)的是數(shù)據(jù)表名稱btest;0562 7465 7374對(duì)應(yīng)的是數(shù)據(jù)表原始名稱btest;0269 64對(duì)應(yīng)字段名稱id;02 6964對(duì)應(yīng)列(字段)原始名稱id;0c3f 00對(duì)應(yīng)的是填充值和字符編碼;14 0000 00對(duì)應(yīng)的十進(jìn)制是20表示列(字段)長度;08 0342 00分別表示列(字段)類型,標(biāo)識(shí),整型值精度;00002個(gè)字節(jié)為填充值;00為默認(rèn)值表示空的;

后續(xù)的age和name字段同上,不在重復(fù);

0131類型LengthEncodedString對(duì)應(yīng)的字符1就是id的值;0231 30類型LengthEncodedString對(duì)應(yīng)的字符10就是age的值;07 7a68 616f 6875 69類型LengthEncodedString對(duì)應(yīng)的字符zhaohui就是name的值;

以上是“Mysql通訊協(xié)議的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI