【问题标题】:Relationship between SQL Server drivers and SQL Server Network InterfaceSQL Server 驱动程序和 SQL Server 网络接口之间的关系
【发布时间】:2017-01-02 23:47:50
【问题描述】:
学习 SQL Server 架构后,我对术语和客户端\服务器组件之间的关系感到困惑。我希望对几个相关问题的回答能帮助我更好地理解事情:
- 如here 所述,ADO.NET 服务器驱动程序是 TDS 协议的 C# 实现。正如here 所解释的,使用
SqlConnection 意味着使用ADO.NET。那么,服务器网络接口 (SNI) 在哪里发挥作用?继续SqlConnection的例子:调用new SqlConnection时是否建立了SNI?
-
This 是维基百科关于 OLE DB 与 ODBC 的关系:
OLE DB 提供程序类似于 ODBC 驱动程序、JDBC 驱动程序和
ADO.NET 数据提供者。
还有also:
OLE DB-ODBC 桥由一个 OLE DB 提供程序组成,该提供程序使用
ODBC 驱动程序的服务以连接到目标数据库。这
提供程序将 OLE DB 方法调用转换为 ODBC 函数调用。
我不确定为什么这些被认为是“类似的”,但无论如何:提供者和/或驱动程序在建立 SNI 和传输 TDS 数据包中的作用是什么?
- 我们再以SSMS为例:连接SQL Server时使用什么驱动程序/提供程序?建立连接时是否有 TDS 数据包在传输?
【问题讨论】:
标签:
sql-server
client-server
【解决方案1】:
这是我对 SNI 的理解:
- SNI 取代了 SQL server 2000 中的网络库和 Windows 中包含的 Microsoft 数据访问组件 (MDAC)。
- SNI 将 TDS 数据包封装在 TCP\IP 或命名管道等标准通信协议中。
- 在客户端,SNI 是使用 SQL Native CLient 实现的。但是,Microsoft 现在建议使用 ODBC 驱动程序等替代方案而不是 SQL Native Client,因为 2012 年以后的 SQL Server 版本将停止支持 SQL Native Client。
- OLEDB 驱动程序和 ADO 驱动程序是旧版驱动程序,将停止使用。
- 所以,从客户端来说,当与服务器建立连接时,SNI 协议层(SQL Server 架构中的协议层)将确保 TDS 数据包封装在网络数据包中。
- SQL Server 根据所使用的协议侦听 TSQL 端点上的 TDS 数据包。 SNI 协议层的服务器端实现是将网络数据包解封装回 TDS 数据包的地方。
- 此外,数据库引擎中的网络库将从 TDS 数据包中检索查询。
- 在客户端,SNI 由驱动程序实现,并由服务器上的 SNI 协议层提供便利。