SQL server 的3种数据库连接协议

SQL Server 支持多种网络协议用于客户端与数据库引擎之间的通信,其中最常用和推荐的三种协议是:

TCP/IP(Transmission Control Protocol/Internet Protocol)‌

是最常用、推荐的协议,尤其适用于远程连接和跨网络通信。

使用固定的端口(默认是 1433),也可以配置为动态端口或多 IP 监听。

支持 IPv4 和 IPv6。

在防火墙环境中易于配置(只需开放对应端口)。

适用场景包括局域网、广域网、互联网连接以及应用程序服务器与数据库分离部署。

✅ 优点:稳定、高效、广泛支持。

⚠️ 注意:需确保 SQL Server 已启用 TCP/IP 协议(通过 SQL Server 配置管理器启用)。

Named Pipes(命名管道)‌

基于 Windows 的进程间通信(IPC)机制,使用文件系统路径风格的管道名(如 \\.\pipe\sql\query)。

通常用于本地或局域网内的快速通信,尤其在早期 Windows 环境中较常见。

依赖于 SMB(Server Message Block)协议,因此在网络延迟高或跨防火墙时性能较差。

默认在本地连接(如 localhost 或 .)时可能优先使用 Named Pipes。

✅ 优点:在低延迟局域网中性能良好。

❌ 缺点:跨网络或互联网支持差,安全性较低,现代应用中逐渐被 TCP/IP 取代。

Shared Memory(共享内存)‌

仅限本地连接:当客户端与 SQL Server 实例运行在同一台机器上时使用。

是最快、最高效的协议,因为不经过网络堆栈。

无法用于远程连接。

当连接字符串中使用 (local)、localhost、. 或 127.0.0.1 且未指定协议时,SQL Server 客户端驱动程序会优先尝试 Shared Memory。

✅ 优点:零网络开销,速度极快。

❌ 限制:只能用于本机连接。

这三种协议各有特点,适用于不同的使用场景。在实际部署中,可以根据需求选择合适的协议以优化性能和安全性。


参考:SQL Server 基础知识 3 - 总体架构

  • 什么是 SQL Server?

  • 总体架构

SQL Server 有三个主要组件:

• 协议层(Protocol Layer)

• 关系引擎(Relational Engine)

• 存储引擎(Storage Engine)

协议层(Protocol Layer)

共享内存(Shared Memory)- 客户端和 SQL Server 运行在同一台机器上时,可通过该协议通讯。

-- 使用 SSMS 连接到本地 SQL Server 时,SSMS 登录窗口中的服务器名称(Server Name)可以为:

• . - 这里的点号 . 表示 SQL Server为本地安装

• localhost - 顾名思义,指本地安装

• 127.0.0.1 - 同上

• \ - 服务名称加上实例名称

TCP/IP - 客户端和 SQL Server 不运行在同一台机器上时,或者可理解为处在网络环境时,可采取此种方式通讯。

-- 使用 SSMS 连接到远端时,SSMS 登录窗口中的服务器名称(Server Name)只能是:<Instance>

命名管道(Named Pipe)- 为局域网(LAN)开发的协议。默认是关闭的,需要通过 SQL 配置管理器(SQL Configuration Manager)开启。

架构图中的 TDS 是 Tabular Data Stream 的缩写。

• TDS 最初由 Sybase 开发,现在为微软所有。

• TDS 是包装的网络包。

• 三种协议均使用 TDS 包。

关系引擎(Relational Engine)

关系引擎(Relational Engine)又被称为查询处理器(Query Processor)。它包含能够决定执行什么样的查询以及如何做到最优查询。它负责从存储引擎(Storage Engine)请求数据并处理返回的数据。

• 命令解析器(CMD Parser)

-- 从协议层(Protocol Layer)传入的数据进入关系引擎。命名解析器首先接收到查询数据。它的主要职责是:

• 语法检查(Syntatitic) -> 语义检查(Semantic) -> 创建查询树(Query Tree)

-- 解释:

• 语法检查(Syntatitic) - SQL Server 预定义了很多关键字(SELECT, INSERT, UPDATE 等等)和语法。如果查询数据没有遵守这些规则,则会返回错误。

• 语义检查(Semantic) - 由规范器(Normalizer)执行。比如,检查表名、列名是否存在于架构(Schema)里。如果存在,则将其绑定(Bind)到查询。


修改SQL server 的端口号

相关推荐
wenha20 小时前
数据库隔离级别
数据库·mysql·sqlserver·隔离级别
~小先生~21 小时前
sqlserver 外键、级联使用
数据库·sqlserver
Mr_pyx1 天前
Java 注解(Annotation)详解:从基础到 APT 实战
java·数据库·sqlserver
弱水三千 只取一瓢饮4 天前
sqlserver 从数据库A的备份文件,还原到数据库B中
数据库·sqlserver
百锦再4 天前
时序数据库选型指南:大数据时代的“数据基建”与 IoTDB 的工业原生之路
大数据·数据库·mysql·oracle·sqlserver·时序数据库·iotdb
UpYoung!5 天前
【数据库工具】DBeaver——轻量化多功能数据库连接工具DBeaver Ultimate 24.0.0版详细下载安装指南
数据库·mysql·sqlserver·数据库开发·数据库管理·dbeaver·数据库工具
代码雕刻家6 天前
MySQL与SQL Server的基本指令
数据库·mysql·sqlserver
xuefuhe6 天前
SQL Server Registered Server
sqlserver
二月十六6 天前
SQL Server 2022 新特性:Ledger 账本表详解(防篡改审计利器)
数据库·sqlserver·防篡改
zxrhhm6 天前
SQL Server 数据库巡检报告脚本
数据库·sqlserver