前言
OK/Error Packet是由Server端向Client发送的请求回应。所以这篇主要来解析一下这两个Packet,以及解释一下为什么Wireshark抓到的包与网上的格式有所差别。
要编写自己的数据库驱动,必须要清楚MySQL
协议中各种传输包的数据格式。这里推荐的是WireShark
工具,WireShark可以帮我们监听服务器上传输的数据包,上手比较快,而且界面功能都比较友好,最主要是开源的,所以可以免费放心的使用。
要注意的是,如果客户端和数据库服务是在同一台电脑的,会导致WireShark捕获不到数据。因为两个源地址和目的地址是一样的。互相访问时流量并没有经过网卡,WireShark在windows系统上默认使用的是WinPcap
来抓包的,用它监控网络的话只能看到经过网卡的流量,看不到访问Localhost
的流量。
下图就是WireShark的分析界面了,信息还是比较全面的。
在上一篇博客中,为了解释ThreadLocal的应用场景,所以提到了JDBC
中的connection
。用过的朋友们一定熟悉下面的代码。具体就是先获取一个connnection,然后在connection中进行CURD。或者是基于ORM
框架如hibernate
、Mybatis
,但其实他们的底层都是基于mysql-connector-java.jar
。
很多时候我们并不清楚程序是如何和数据库进行交互的,比如简单的查询命令,程序是如何从MySQL中获取的呢?这个就是我这篇博客的主题,我会简单解释一下MySQL的网络通信协议,以及所需的技术栈。
原本想在网上找一下有没有类似的轮子,发现多数是将jdbc重新分装一些,本质使用的还是Java中实现好的connector。所以在后续的博客中根据协议去实现自己的connector.jar