永康做网站,顺平网站建设,网页设计教程谁的好,网站建设与管理期末试卷简介
服务器启动后#xff0c;会使用 TCP 监听一个本地端口#xff0c;当客户端的连接请求到达时#xff0c;就会执行三段握手以及 MySQL 的权限验证#xff1b;验证成功后#xff0c;客户端开始发送请求#xff0c;服务器会以响应的报文格式返回数据#xff1b;当客户…简介
服务器启动后会使用 TCP 监听一个本地端口当客户端的连接请求到达时就会执行三段握手以及 MySQL 的权限验证验证成功后客户端开始发送请求服务器会以响应的报文格式返回数据当客户端发送完成后会发送一个特殊的报文告知服务器已结束会话。
MySQL 定义了几种包类型A) 客户端-服务器登录时的 auth 包、执行 SQL 时的 CMD 包B) 服务器-客户端登录时的握手包、数据包、数据流结束包、成功包(OK Packet)、错误信息包。
协议定义了基本的数据类型如 int、string 等数据的传送格式等。
MySQL 通讯协议 MySql客户端服务端通信的两个阶段
MySQL客户端与服务器的交互主要分为两个阶段握手认证阶段和命令执行阶段。
握手认证阶段
握手认证阶段为客户端与服务器建立连接后进行交互过程如下
服务器 - 客户端握手初始化消息客户端 - 服务器登陆认证消息服务器 - 客户端认证结果消息
命令执行阶段
客户端认证成功后会进入命令执行阶段交互过程如下
客户端 - 服务器执行命令消息服务器 - 客户端命令执行结果
怒肝两个月MySQL源码我总结出这篇2W字的MySQL协议详解超硬核干货-腾讯云开发者社区-腾讯云 MySql协议详解-HandShake握手篇
Step1:客户端向DB发起TCP握手。
Step2:三次握手成功。与通常流程不同的是由DB发送HandShake信息。这个Packet里面包含了MySql的能力、加密seed等信息。
Step3:客户端根据HandShake包里面的加密seed对MySql登录密码进行摘要后构造Auth认证包发送给DB。
Step4:DB接收到客户端发过来的Auth包后会对密码摘要进行比对从而确认是否能够登录。如果能则发送Okay包返回。
Step5:客户端与DB的连接至此完毕。
JDBC与MySQL通信协议格式介绍 - 知乎 1.Unix Sockets 如果在MySQL本机使用这种方式连接MySQL数据库默认使用Unix Sockets。
2.TCP/IP 连接的时候指定连接协议或者指定相应的IP及端口则连接方式就变成了TCP/IP方式。
[玩转MySQL之二]MySQL连接机制浅析及运维 - 知乎 TCP/IP 传输支持与本地或远程 MySQL 服务器的连接。
套接字文件命名管道共享内存传输仅支持与本地 MySQL 服务器的连接。 (命名管道传输的确允许远程连接但此功能未在 MySQL 中实现.) MySql 中文文档 - 4.2.5 连接传输协议 | Docs4dev Mysql的4种连接方式
Mysql的主要连接方式包括Unix套接字内存共享命名管道TCP/IP套接字等。
Unix套接字
在Linux和Unix环境下可以使用Unix套接字进行Mysql服务器的连接Unix套接字其实不是一个网络协议只能在客户端和Mysql服务器在同一台电脑上才可以使用
命名管道和内存共享
在window系统中客户端和Mysql服务器在同一台电脑上可以使用命名管道和共享内存的方式 命名管道开启–shared-memoryon/off 共享内存开启–enable-named-pipeon/off;
TCP/IP套接字
任何系统下都可以使用的方式也是使用的最多的方式我主要介绍的也是这种方式
其实熟悉操作系统的朋友应该能体会出来像前两种因为客户端和服务端在同一台主机上也就是一台主机的两个应用所以这也就是进程间通信的方式而在不同的主机上就不一样了就需要网络tcp/ip建立了。
彻底弄懂mysql一--mysql的通信协议_mysql 查询 是http请求吗-CSDN博客
mysql的通信协议 服务器响应包
服务器响应包分为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
由于协议的内容容易变更建议查看官网的最新版格式https://dev.mysql.com/doc/internals/en/packet-OK_Packet.html ERR包
首字节是255报错错误码和错误的描述信息。4.1版本之上包括错误状态。
执行函数sql/protocol_classic.cc : net_send_error_packet
具体包格式https://dev.mysql.com/doc/internals/en/packet-ERR_Packet.html EOF包
首字节254包括服务器状态和告警数量4.1版本之上
执行函数sql/protocol_classic.cc : net_send_eof
具体包格式https://dev.mysql.com/doc/internals/en/packet-EOF_Packet.html 数据包
和具体的协议类型有关后续讲解
Mysql JDBC的通信协议(报文的格式和基本类型) connection-phase
客户端和服务端建立连接
1.client 发起一个 TCP 连接。
2.server 响应一个 Initial Handshake Packet初始化握手包内容会包含一个默认的认证方式。
3.这一步是可选的双方建立 SSL 加密连接。
4.client 回应 Handshake Response Packet内容需要包括用户名和按照指定方式进行加密后的密码数据。
5.server 响应 OK_Packet 确认认证成功或者 ERR_Packet 表示认证失败并关闭连接。
Packet
一个 Packet 其实就是一个 TCP 包所有包都有一个最基本的结构
如上图所示所有包都可以看作由 header 和 body 两部分构成第一部分 header 总共有 4 个字节3 个字节用来标识 body 即 payload 的大小1 个字节记录 sequence ID第二部分 body 就是 payload 实际的负载数据。
由于 payload length 只有 3 个字节来记录所以一个 packet 的 payload 的大小不能超过 2^24 16 MB 准确来说是 payload 的大小不超过 2^24-1 Byte三个字节所能表示的最大整数 0xFFFFFF。当数据大小超过了 16 MB 时就需要把数据切分成多个 packet 传输。
解读 MySQL Client/Server Protocol: Connection Replication 【总结】MySQL技术内幕九通信协议详解 - 知乎