程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> 深度解析mysql登錄原理,解析mysql登錄

深度解析mysql登錄原理,解析mysql登錄

編輯:MySQL綜合教程

深度解析mysql登錄原理,解析mysql登錄


      使用mysql數據庫的第一步必然是建立連接登錄,然後在上面執行SQL命令。無論是通過mysql的客戶端,還是通過C-API,JDBC標准接口連接數據庫,這個過程一定少不了。今天我們聊一聊mysql登陸具體過程,裡面會涉及client與server的交互,並通過tcpdump抓包給大家展現這一過程。

TCP握手協議

      遠程連接數據庫,mysql采用TCP協議通信,第一步是建立連接,即TCP的3次握手。mysql server端有一個監聽線程等待client請求,client發起請求後,首先發一個sync包到服務端,服務端發一個ack包作為對客戶端sync包的響應,同時發一個sync包到客戶端,最後客戶端再發一個ack包作為對服務端的響應。通過3次握手,TCP連接才算真正建立起來,這個時候mysql服務端會分配一個連接供客戶端使用。記住,TCP的3次握手都是由TCP的協議棧完成,應用程序並無感知。但是,到目前為止,整個mysql連接過程還只完成了第一步--建立TCP連接。

下面附上TCP建立連接和斷開連接的原理圖。

   

MYSQL握手協議

      TCP連接建立成功後,mysql客戶端與mysql服務端開始進行通訊,進行mysql認證過程。(1)服務端首先會發一個握手包到客戶端,(2)然後客戶端向服務端發送認證信息(用戶名,密碼等),(3)服務端收到認證包後,會檢查用戶名與密碼是否合法,並發送包告知客戶端認證信息。如果合法,則登陸成功,否則,登陸失敗。連接報錯。有時候,我們通過show processlist看到User處於unauthenticated user ,這說明此時連接過程正處於第1步和第2步之間,服務端等待客戶端發認證信息的過程中。

15922528       unauthenticated user   10.xx.2.74:53216 NULL   Connect NULL   Reading from net       NULL
15923418       unauthenticated user   connecting host NULL   Connect NULL   login   NULL 
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved