使用 mysql 5.6.16官方版本分析

client 建立连接的认证过程如下图

  1. server 监听端口
  2. server 向client发送挑战码报文(报文详细内容在下文中有分析)
  3. server 根据client的回包,验证密码的有效性,给client发送ok包或error包

server 给 client 的挑战码报文下下文中有详细分析

mysql_real_connect 实际是 client.c 里面的 CLI_MYSQL_REAL_CONNECT 函数

server监听请求

挑战码是一段随机字符串,server 发送给client用于加密client输入的密码,client给server的回包中包含挑战码加密后的密码,从而避免了网络传输明文密码