zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    正则表达式30分钟入门教程
    Literal控件用法
    用asp.net 2.0实现网站二级域名
    IIS7 asp.net URL重写配置
    用VS2008开发Ajax网站需要注意
    C#中的equals与==的比较,赋加compareto
    nvchar(50)与Substring(0,50)的理解
    利用Mircosoft URLRewriter.dll实现asp.net页面伪静态
    .NET命名规范中文版
    iframe动态改变src的测试
  • 原文地址:https://www.cnblogs.com/lanyangsh/p/9782206.html
Copyright © 2011-2022 走看看