• mysql通信协议


    mysql在传输层使用的TCP协议。一个TCP payload可能有多个mysql packet。如下图所示。

    TCP head TCP payload
    (mysql packet1, mysql packet2,mysql packet 3...)

    MySQL packet通信报文结构

    Type Name Description
    int<3> payload_length payload的长度,按照the least significant byte first存储,3个字节的payload 长度和1个字节的序列号组合成报文头
    int<1> sequence_id Sequence ID序列号
    string payload 报文体,长度即为前面指定的payload长度
    • payload 长度使用3个字节表示,最大值16MByte,小端字节序( the least significant byte first)。
    • 序列号使用一个字节表示,每个新command开始时,seq重置为0。

    Example

    COM_QUIT 是client关闭连接时发送给server端的消息。
    payload的第一个字节是Command。

    COM_QUIT 报文格式如下:

    01 00 00 00 01

    • length: 前3个字节是长度字段,这里长度值为1.
    • sequence_id: 第4个字节是序列号,0x00
    • payload: 0x01, 第5个字节是COM_QUIT

    Command

    client向server发送的操作命令,例如查询,插入,更新等等。
    这里只列出几个常用的命令。

    COM_INIT_DB
    改变连接的数据库

    COM_QUERY
    查询操作

    COM_STMT_PREPARE
    creates a prepared statement from the passed query string.

    **COM_STMT_EXECUTE **
    asks the server to execute a prepared statement as identified by stmt-id.

    连接阶段

    client首先连接server,然后server开始握手过程。

    1. client connect
    2. server sending Initial Handshake Packet
    3. client replying with Handshake Response Packet

    流程图如下:

    c                                           s
    |----------------connect------------------->|
    |<---------initial Handshake Packet---------|
    |-----------Handshake Response Packet------>|
    
    

    两种类型的handshake reponse packet:

    • Protocol::HandshakeResponse41
      4.1以后版本,支持 CLIENT_PROTOCOL_41 capability

      CLIENT_PROTOCOL_41定义为0x00000200

    • Protocol::HandshakeResponse320
      老版本

    连接阶段完成:

    • exchange the capabilities of client and server
    • 如果需要,建立SSL 通信通道
    • client到server的认证

    参考

    https://dev.mysql.com/doc/internals/en/client-server-protocol.html

  • 相关阅读:
    js--DOM基本使用
    前端--js基础2
    前端--js基础1
    tcp/udp编程
    关于网络
    异常处理
    装饰器
    1.__new__ 魔术方法 单态(例)模式 __del__ 魔术方法(析构方法) __call__ 魔术方法
    面向对象程序设计及面向对象封装 目录
    script 标签里的 async 和 defer
  • 原文地址:https://www.cnblogs.com/lanyangsh/p/9782206.html
Copyright © 2020-2023  润新知