首页 存档 技术 查看内容

MySQL协议.NET Core实现(一) 基础知识 MySQL协议分析 代码实现 总结

2018-3-30 13:00 |来自: 互联网 334 0

摘要: 一个有技术追求的研发团对,无论使用什么框架、什么工具、什么语言,团队里应该有人有能力把控所使用框架、工具、语言的每一个核心功能的实现细节。团队里的每个成员应该根据自身所长挑选其中一块做深入研究,并把研 ...

一个有技术追求的研发团对,无论使用什么框架、什么工具、什么语言,团队里应该有人有能力把控所使用框架、工具、语言的每一个核心功能的实现细节。团队里的每个成员应该根据自身所长挑选其中一块做深入研究,并把研究成果分享给团队,力争使整个所处团队实力得到提升,达到同行业内顶尖水平。为了实现这个目标,不允许在团队中出现黑盒子,对.NET生态而言,我们需要打开MSBuild,Rosyln,CoreCLR等黑盒子。作为团队的一员,我将花一些业余时间打开.NET MySQL驱动黑盒子,使用.NET Core实现MySQL Client/Server Protocol,并把打开这个黑盒子的过程通过本站点记录下来。

这是使用.NET Core实现MySQL协议连载文章的第一篇。

基础知识

这是我的基础知识复习笔记,您可以直接跳过此章节

网络中进程之间如何通信?

在网络时代,网络中进程间通信无处不在,在本地可以通过进程PID来唯一标识一个进程,但网络中进程如何标识?他们之间又是如何通信的?其实TCP/IP协议族已经帮我们解决了这个问题,网络层的IP地址可以唯一标识网络中的主机,而传输层的协议 端口可以唯一标识主机中的应用程序(进程),因此,可以利用三元组(IP地址,协议,端口)标识网络中的进程,网络中的进程通信就可以利用这个标志与其它进程进行交互。无论应用层采用什么协议,最终都要经过传输层/网络层的TCP/IP协议,而TCP/IP编程有一套标准编程接口Socket。

什么是Socket?

套接字(Socket)是通信的基石,是支持TCP/IP协议的网络通信的基本操作单元,但Socket跟TCP/IP并没有必然的联系,TCP/IP只是一个协议栈,就像操作系统的运行机制一样,必须要具体实现,同时还要提供对外的操作接口,TCP/IP也必须对外提供编程接口Berkeley sockets interface.,它是网络通信过程中端点的抽象表示,包含进行网络通信必须的五种信息:

  1. 连接使用的协议;

  2. 本地主机的IP地址;

  3. 本地进程的协议端口;

  4. 远地主机的IP地址;

  5. 远地进程的协议端口;

TCP三次握手建立连接

我们知道TCP建立连接要进行三次握手,大致流程如下:

  • 客户端向服务器发送一个SYN x

  • 服务器向客户端响应一个SYN y,并对SYN x进行确认ACK x 1

  • 客户端再向服务器发一个确认ACK y 1

TCP四次挥手断开连接

TCP断开连接要进行四次挥手,大致流程如下:

  • 应用进程首先调用close主动关闭连接,这时TCP发送一个FIN x

  • 另一端接收到FIN x之后,执行被动关闭,对这个FIN进行确认

  • 一段时间之后,应用进程调用close关闭它的socket,这导致它的TCP也发送一个FIN y

  • 接收到这个FIN的源发送端TCP对它进行确认

这样每个方向上都有一个FIN和ACK

MySQL协议分析

MySQL客户端与服务器可以通过四种通信协议进行交互:

  • TCP/IP协议(上面的知识储备就是为此准备的,所以,本系列文章假设TCP/IP协议)

  • Unix Socket协议

  • Share Memory协议

  • Named Pipes协议

交互过程

MySQL客户端与服务器的交互主要分为两个阶段

  • 握手认证阶段;

  • 命令执行阶段;

握手认证阶段

握手认证阶段为客户端与服务器通过TCP三次握手建立连接后进行,交互过程如下

  • 服务器 -

声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系 [邮箱地址] 删除

路过

雷人

握手

鲜花

鸡蛋

相关分类

返回顶部