mysql報文格式 Mysql 報文格式

2021-10-17 15:24:46 字數 1791 閱讀 2226

mysql client和server端之間的的資料根據不同的協議規則的進行組織傳送。每包資料在傳送的時候都要新增上協議頭。

mysql原始碼採用5.7.10版本:

協議頭:

每個協議頭共4個位元組

包資料長度:

前三個位元組表示資料部分的長度(不包括協議頭),三位元組能表示的最大長度是16m-1(2^24 - 1),如果要傳送的資料部分大於這個長度,要進行拆包,每16m-1個長度為一包。接收端在接受資料的時候,如果檢測到包的長度是16m-1,說明後續還有資料部分,直到接收到<16m-1長度的資料報結束。這意味著最後一包的資料長度可能為0.

序號:1個位元組,從0開始遞增。當傳送乙個新的sql、資料庫重連,該值清0(函式sql/net_serv.cc : net_clear).

資料型別:

除了固定長度的整型或者字串之外,還有其他幾種型別的資料。(固定長度字段資料的訪問:include/mybyte_order.h : 存值 int*store   取值:int*korr    多位元組的處理按照小端優先的方式)

1. 可變長度的整數

對該類資料的訪問在函式:sql-common/pack.c: 存整數: net_store_length     讀整數:net_field_length

如果數值<251,直接用乙個位元組儲存這個值。

如果251<=數值<2^16, 採用3個位元組儲存,第乙個位元組是252, 另外2個位元組儲存整數內容

如果2^16<=數值<2^24,採用4位元組儲存,第乙個位元組是252,另外3個位元組儲存整數內容

如果2^24<=數值<2^64,採用9位元組儲存,第乙個位元組255,另外8位元組儲存整數內容

如果第乙個位元組為251,表示該整數欄位為null

如果第乙個位元組為255,表示該位元組是err包的第乙個位元組

2. 可編碼長度的字串

字串的長度採用可變長度的整數進行編碼。

資料長度不固定,長度值由資料前的1-9個位元組決定,其中長度值所佔的位元組數不定,位元組數由第1個位元組決定,如下表:

第乙個位元組值後續位元組數長度值說明

0-250

第乙個位元組值即為資料的真實長度

空資料,資料的真實長度為零

後續額外2個位元組標識了資料的真實長度

後續額外3個位元組標識了資料的真實長度

後續額外8個位元組標識了資料的真實長度

3. null結尾的字串

伺服器響應包:

伺服器響應包分為4類: ok包  err包    eof包    資料報

ok包:在5.7.5之前,ok包首位元組為0,;在5.7.5之後,ok包的首位元組可能為0xfe,表示eof。

該包包括成功執行後影響的行數,最新的自增id, 告警資訊(4.1版本之上),伺服器狀態資訊:status_flag(該字段要留意,後續後講到)

執行函式:sql/protocol_classic.cc :   net_send_ok

由於協議的內容容易變更,建議檢視官網的最新版格式:

err包:首位元組是255,報錯錯誤碼和錯誤的描述資訊。4.1版本之上包括錯誤狀態。

執行函式:sql/protocol_classic.cc :   net_send_error_packet

具體包格式:

eof包:首位元組254,包括伺服器狀態和告警數量(4.1版本之上)

執行函式:sql/protocol_classic.cc :   net_send_eof

具體包格式:

資料報:和具體的協議型別有關,後續講解

mysql報文格式 Mysql 報文格式

mysql client和server端之間的的資料根據不同的協議規則的進行組織傳送。每包資料在傳送的時候都要新增上協議頭。mysql原始碼採用5.7.10版本 協議頭 每個協議頭共4個位元組 包資料長度 前三個位元組表示資料部分的長度 不包括協議頭 三位元組能表示的最大長度是16m 1 2 24 ...

TCP報文格式 UDP報文格式 MAC幀格式

tcp和udp的區別 1 tcp是面向連線的,而udp是無連線的 2 tcp提供可靠服務,而udp不提供可靠服務,只是盡最大努力交付報文 3 tcp面向位元組流,tcp把資料看成一串無結構的位元組流,而udp是面向報文的 udp資料報 ip頭部 ip資料報 4 tcp有擁塞控制,udp沒有擁塞控制 ...

TCP報文格式

傳輸控制協議 tcp 向上與使用者應用程式程序介面,向下與網路層協議ip介面。使用者應用程式採用首先呼叫tcp 或udp 然後將應用程式資料遞交給tcp這一方式,在ip網路上傳送資料。tcp將這些資料打包分段並呼叫ip模組向目的主機傳送每個資料段。接收方的tcp將段中的資料放入接收緩衝器,然後將段重...