mysql客戶端登陸到mysql服務端需要乙個互動的過程,這裡先看服務端給客戶端傳送的初始握手包。如下,client通過socket連線到server指定的埠後,server將往client傳送初始握手包。服務端會根據不同的服務版本和不同的配置返回不同的初始化握手包。
client server
|------connect---- >|
| |
|<----handshake-----|
| |
| |
| |
型別
名字描述
int<3>
payload長度
按照the least significant byte first儲存,3個位元組的payload和1個位元組的序列號組合成報文頭
int<1>
序列號string
payload
報文體,長度即為前面指定的payload長度
handshakev10協議如下
1 [0
a] protocol version
string[nul] server version
4 connection id
string[8] auth-plugin-data-part-1
1 [00] filler
2 capability flags (lower
2bytes)
if more data in
the packet:
1character
set2 status flags
2 capability flags (upper
2bytes)
if capabilities & client_plugin_auth else
string[10] reserved (all [00])
if capabilities & client_secure_connection elseif version >= 5.5
.10or >= 5.6
.2 }
更多詳情 :
定義版
/**
* *@author seaboat
*@date 2016-09-25
*@version 1.0
*email:[email protected]
*blog:* proxy's version.
*/public
inte***ce
versions
隨機數工具
/**
* *@author seaboat
*@date 2016-09-25
*@version 1.0
*email:[email protected]
*blog:* a random util .
*/public
class
randomutil ;
private
static
final
long multiplier = 0x5deece66dl;
private
static
final
long addend = 0xbl;
private
static
final
long mask = (1l << 48) - 1;
private
static
final
long integermask = (1l << 33) - 1;
private
static
final
long seeduniquifier = 8682522807148012l;
private
static
long seed;
static
public
static
final
byte randombytes(int size)
return ab;
}private
static
byte
randombyte(byte b)
private
static
long
next() while (oldseed == nextseed);
seed = nextseed;
return nextseed;
}}
mysql包基類
/**
* *@author seaboat
*@date 2016-09-25
*@version 1.0
*email:[email protected]
*blog:* mysqlpacket is mysql's basic packet.
*/public
abstract
class
mysqlpacket
}
握手包類
/**
* *@author seaboat
*@date 2016-09-25
*@version 1.0
*email:[email protected]
*blog:* authpacket means mysql initial handshake packet .
*/public
class
handshakepacket
extends
mysqlpacket ;
public
byte protocolversion;
public
byte serverversion;
public
long threadid;
public
byte seed;
public
int servercapabilities;
public
byte servercharsetindex;
public
int serverstatus;
public
byte restofscramblebuff;
public
void
read(byte data)
@override
public
intcalcpacketsize()
public
void
write(bytebuffer buffer)
@override
protected string getpacketinfo()
}
服務端能力類
/**
* *@author seaboat
*@date 2016-09-25
*@version 1.0
*email:[email protected]
*blog:* server capabilities .
*/public
inte***ce
capabilities
測試類
/**
* *@author seaboat
*@date 2016-09-25
*@version 1.0
*email:[email protected]
*blog:* test handshake packet.
*/public
class
handshakepackettest
public
static string bytes2hexstring(byte b)
return
new string(buff);
}public
static string str2hexstr(string str)
return sb.tostring();
}protected
intgetservercapabilities()
}
*****===廣告時間*****===
鄙人的新書《tomcat核心設計剖析》已經在京東銷售了,有需要的朋友可以到 進行預定。感謝各位朋友。
為什麼寫《tomcat核心設計剖析》
安裝MySQL服務端
2.如圖所示 3.解壓檔案 4.開啟 mysql 5.7.24 winx64 在根目錄下一定要新建檔案data,新增配置檔案 my.ini 5.安裝並啟動服務 6.配置資料庫 一.windows安裝mysql服務端 2.如圖所示 3.解壓檔案 4.開啟 mysql 5.7.24 winx64 在根目...
tcp協議服務端實現併發
socket 在 tcp 協議下通訊 客戶端 import socket 建立客戶端tcp協議通訊 c socket.socket 與指定服務端握手 c.connect 127.0.0.1 8080 通訊迴圈 while true 向服務端傳送資訊 msg input if len msg 0 co...
71 基於UDP協議的服務端
server.py 1 可靠性 tcp協議是可靠協議 對方必須恢復乙個ack確認訊息,才會將自己的這端端資料從記憶體中刪除 udp協議不可靠 2 有無鏈結 tcp有鏈結,udp無連線 3 傳輸資料的效率 udp更高 4 粘包問題 udp協議稱之為資料報協議,每次傳送都是乙個完整的資料報,乙個傳送唯一...