mysql报文协议第一篇

MySql 客户端和服务器端交互方式

如果Mysql 客户端或者服务器端想发送数据,那么:

  • 他们会将数据分割成大小最大为2^24个字节的包进行发送
  • 他们会预备每个包一个报文头

原文
If a MySQL client or server wants to send data, it:

  • Splits the data into packets of size 2^24 bytes
  • Prepends to each chunk a packet header

报文格式

用于服务器与客户端通信的报文的大小最大为16MByte-1byte,实际的报文长度可以计算等于byte[0]+(byte[1]<<8)+(byte[2]<<16),

Type name Description
int<3> 报文长度(payload_length) 一共三个字节,是报文内容的长度,最大长度为2^24-1,与序列号一起组成报文头
int<1> 序列号(sequence_id) 序列号与报文长度一起组成报文头
string<var> 报文内容(payLoad) 报文内容

如果要发送的报文内容大于16MB怎么办?

  • 如果报文内容大于2^24-1 字节,那么会加上额外的报文,直到报文的报文头小于2^24-1 字节;就是说,如果一个报文的payLoad装不下所有内容,那么会通过第二个继续发送,然后第三个、第四个,直到最后的报文的payLoad字节小于2^24-1 为止,如果最后一个报文刚好等于2^24-1个字节,那么还要再发送一个额外的空的报文。

  • If the payload is larger than or equal to 2^24-1 bytes the length is set to 2^24-1 (ff ff ff) and a additional packets are sent with the rest of the payload until the payload of a packet is less than 2^24-1 bytes.

序列号的作用

  • 序列号会随着每个包进行自增并且如果达到最大值会重置为0;序列号从0开始,然后又会在新的命令开始的时候重新设置为0
  • The sequence-id is incremented with each packet and may wrap around. It starts at 0 and is reset to 0 when a new command begins in the Command Phase.

参考

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 计算机网络第五版第一章,第五章,第六章的习题解答。编号是按照中文版图书来的,题目是复制的英文版图书。答案经过本人验...
    C就要毕业了阅读 34,484评论 3 9
  • 教程一:视频截图(Tutorial 01: Making Screencaps) 首先我们需要了解视频文件的一些基...
    90后的思维阅读 10,295评论 0 3
  • 《六项精进》打卡第49天 姓名:攸攸 公司:悦美家居旗下北美之家 《六项精进》: 226 期 苏州 感谢一组学员 ...
    攸攸_b854阅读 1,877评论 0 0
  • 秋雨依旧,并且伴有大风,气温骤降。马路上的汽车多了起来,主要是送学生,自己上班,避雨而用,穿着雨披骑电动车的人们也...
    星之梦lyx阅读 1,571评论 0 0
  • 对着小花画的,照片角度微微不一样
    Leonplant阅读 1,711评论 0 0

友情链接更多精彩内容